Ynt: mikroc enc28j60 library

Başlatan Karamel, 31 Mayıs 2015, 12:51:00

Karamel

merhaba. yazin bu kutuphane ile calisamalar yapacagim. merak ettigim birsey var.

main function imizda led yanip sonsun ve ethernet ile ilgili paket veriler gonderilsin veya alinsin. tipki sunun gibi.

main
{
    while(1){
       Led = 1; Delay_ms(100);
       Ethernet_veri_gonderen_function();
       Led = 0; Delay_ms(100);
    }
}



simdi herseyin normal oldugunu dusunelim. sistem calisiyor. led sip sip yanip sonuyor. sistem calisirken enc28j60 entegresini sokersem ne olur? kutuphane yuzunden program bir yerde takilirmi? yoksa led yanip sonmeye devam mi eder?

mesaj birleştirme:: 31 Mayıs 2015, 12:58:44

cok heyecanli yazmisim. biraz daha aciklayici yazmaya calisayim.

library spi uzerinden calisiyor. entegre yerinde iken haberlesme duzgun bir sekilde saglanacak ama calisan. iste web sayfalari cikartabilen bir sistemin uzerinden bu entegreyi sokersem. library spi dan birseyler gonderip. karsiliginda cevap almak icin bekleyip. sonsuz dongulere girermi? yani takilir mi?

tekosis

hiç ethernetle çalışmadım ama o veri gönderen fonksiyonda mutlaka bir karşılıklı haberleşme protokolü vardır. diyelimki fonksiyonu yazan kişi karşı taraftan bir dönüt beklerse mutlaka takılacaktır. ama aynı kişi fonksiyonda mesela zaman aşımı algılama ile ilgili bir kod parçası da eklediyse bu durumda fonksiyon bir hata kodu ile de dönüş yapabilir.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

MrDarK

Kullanacağın kütüphane ile alakalı bu durum, adam while ile kitlediyse elbette kitlenir. Fakat benim gördüğüm çoğu projede timeout eklenmiştir ve talep sonucu başarılı başarısız şeklinde cevaplar döndürmektedir.
Picproje Eğitim Gönüllüleri ~ MrDarK

Karamel

hocam bende boyle dusunmustum. bu soruyu su yuzden sordum. diyelim ki enc entegresi ile ilgili bir devre yaptik. enc entegresi arizalandi. microcontroller enc entegresinden surekli cevap bekleyerek takilip kalacak mi? yoksa diger islerini yapabilecek mi? bu soru aklima takilmisti ::)

LukeSkywalker

Sana balık tutmayı öğreteyim;

Eğer mikroC kütüphanelerindeki fonksiyonların açıklamalarında "blocking" ibaresi geçmiyorsa bu fonksiyonlardan kaynaklanan herhangi bir kilitlenmeyle karşılaşmazsın. Gerisi senin koduna kalır.

Karamel

#5
Hocam suan ders calisiyorum am bilgisar basina ilk oturdugumda bunu inceleyecegim ::)

mesaj birleştirme:: 31 Mayıs 2015, 21:33:17

Bu arada 1000. Mesajimi bu konuya yazmisim  8)

Karamel

merhaba. wav file i calmayi basarinca. simdi biraz ethernet ile ilgilenmek istedim. daha onceden enc28j60 li board umu calistimayi basarmistim. simdi library ile basit bir deney yapip. ilk once internet browser ile request edilince. merhaba dunya diyen code larimi yapmak istiyorum.

daha sonra internet sayfasina buttonlar yerlestirip. bir sonraki sarki. volume vs gibi ayarlar ile ugrasmak istiyorum. en son wav playerim bitince. bu bilgilerimi kullanip. wav playerimi ethernet uzerinden control edilebilir hale getirmek istiyorum ::)

bunun icin surada ki library http://www.libstock.com/projects/view/107/network-ethernet-library i kullanmak istiyorum. library ile request . send vs isleri ile ugrasmadan once soyle bir sorunumuz var ki. wav file i calarken inanilmaz effort sarfediyoruz. surekli microsdcard tan okuma yapip. tim2 ile bu bilgileri 22 usn ara ile gonderme yapiyoruz. bu yuzden. request gelir gelmez. enc28j60 entegresine bilgileri gonderip. oradan ayrilmak gerekli?

bu yuzden interrupt kullanmak gerekli? ama bu library asagidaki gibi calisiyor. surekli Net_Ethernet_28j60_doPacket(); function in cagirilmasi gerekiyor  :-\ eger bu cagirilmazsa. request kaybediliyor.

  while(1) {
    // Process incoming Ethernet packets
    Net_Ethernet_28j60_doPacket();
    CloseFinishedSockets();
  }





Karamel

az once deneyleri yaptim. testleri Basic realm example indan yaptim. mikroc example file in icersinde.

yani olay bu example dada var. sadece bu example TCP ile calisiyor ve daha hizli.(sadece html code lari filan gonderiyor)

code larimiza hemen bakalim.
        while(1) {             // forever
                /*
                 * if necessary, test the return value to get error code
                 */
                SPI_Ethernet_doPacket();   // process incoming Ethernet packets and do services
                Heard_Led = ~Heard_Led;
        }


gordugumuz uzere neredeyse UDP ile ayni. logic analyzerim ile Heard pin ine bakinca. normalde 50 usn de change oldugunu gordum. yani normal zamanlarda. SPI_Ethernet_doPacket(); function i 50usn zaman harciyor. web browser dan request geldiginde 25msn lik bir gecikme yaratiyor. tahminimce bu gecikme internet sayfasinin icerigi ile orantilidir. yani icerik cok buyukse bu gecikme atiyorum 100msn de olabilir.

ikinci deneyimde su. while(1) in icersine delay yerlestirdim. 500 msn i yecinde iletisim olmuyor. 100-200-300.... seklinde deneylerimi yaptim. 600 de iletisim olmadi mesela.

son deneyimde. enc28j60 entegresinin INT bacagini normalde ve request oldugu anlarda inceledim. bu bacak hicbir sekilde degismiyor.

deneylerimin sonucundan sunu anladim. bir timer i. mesela 1msn ye kurulup. timer icersinde timer i disable edip. cikarken enable edip. timer icersinde SPI_Ethernet_doPacket(); function ini cagirabiliriz. normal sartlarda budaki islem 50usn surer. request varsa 25 msn filan surer.

1. bu interrupt meselesine aykiri olacak?
2. diyelimki aykiri degil. bizim Ses_Buffer imizi 22 usn de surekli update etmemiz gerekiyor. bu yapilirken diger yandan da yeni bufferimizi doldurmamiz gerekiyor. yani microcontroller tum gucu ile wav calmaya yoneliyor. request geldiginde 25msn buffer kendini yenileyemez demek.

suanki duruma gore ben bir yonden sarki calarken. diger yonden eger istek gelirse. bunu cevaplayamiyorum? cevaplarsam wav i calamiyorum. bu ne bicim is anlamadim ben :/

Karamel

yukaridaki sorularin cevaplarini alana kadar durmayip. deneylere devam ettim. request geldiginde browser a basit bir html code u gonderebildim ama bu code lar enc28j60 tarafidan yorumluyormu? yoksa size i falan mi var? nedir anlayamadim.

mesela <h1>Picproje1 </h1> gonderince browser da bu sey gozukuyor. <h1>Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1</h1> gonderince browser surekli baglanmaya calisiyor ve en sonunda baglanti basarisiz diyor.  :-\

Karamel

#9
ilginctir. table yapmak istedim. malum sariklari table da gosterecegim. tablonun icergini 4 ten fazla tutarsam. text align ini center yapamiyorum.

"<tr><td>"; yaparsam. simdilik 10 taneye kadar deney yaptim. hersey okay.

"<tr><td style=\"text-align: center;\">"; yaparsam. max 4 row dan sonra system cokuyor.

sorun bizden kaynaklaniyor. bunlari yapinca html code lar web browser a gitmiyorlar.  :-\ bunun nedenini bulmak gerekli.

mesaj birleştirme:: 21 Ağustos 2015, 10:40:15

bir onceki message imda <h1>Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1 Picproje1</h1> gibi uzunca birsey gondermeye calisinca demek ki biz sIkIsip kaliyoruz. web browser a hic birsey gondermemis oluyoruz. bu deneyden bunu anliyorum?  :-\

Gökhan BEKEN

Ben PIC ile uğraştığım zamanlar, mikro c'nin bu ethernet kütüphanesinde buna benzer bir sorun yaşamıştım. PIC'in ram'i doluyor diye düşünmüştüm, çok da hatırlamıyorum.
Ama senin uğraştığın mcu'nun ram'i daha büyük. Kodları tam koyar mısın merak ettim.
Özel mesaj okumuyorum, lütfen göndermeyin.

Karamel

Hocam disarida oldugumdan example i koyamadim ama. Mikroc nin kuruldugu direction da. Example file in icersinde ki ethernet example lari uzerinde deneyler yapabilirsiniz. Ben hepsi uzerinde ayni seyi denedim. Hepsinde sorun cikti. Bu normal birsey degil. Basic realm example ini deneyebilirsiniz hocam.

Karamel

hocam misafirler yuzunden gec yazdim kusura bakmayin. size bir iyi birde kotu haberim var.

hocam iyi haber misafirler gitti  :P artik tamamen deneylere odaklanabilirim.
kotu haberse az once mikroc for arm i v4.5 ten v4.5.2 ye update edince basic realm default haline donustu. example lari default haline getirdi yani. benim calismadigini kanitladigim html code larim gitti. dosyaco ya example lari yukledim.

http://dosya.co/yx0p7nnalskb/SPI_Ethernet.rar.html

hocam basic realm example i uzerinde deneyeler yapabilirsiniz. ben su siteden http://www.onlinehtmleditor.net/ html codelari yazip. programima paste yapiyordum. birkac html code u ile isi biraz karmasiklastirinca enc28j60 entegresinin code lari karsi tarafa ulastirmadigini gozlemleyebileceksiniz.

simdi spi ile ilgili bir problem kesfettim. onu cozmek icin. ethernet deneylerime 1-2 gun ara verecegim.

Karamel

#13
<html><head><title></title></head><body>\
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px;"><tbody>\
<tr><td style="text-align: center;"><strong>Picproje1</strong></td><td style="text-align: center;"><strong>Picproje2</strong></td><td style="text-align: center;"><strong>Picproje3</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a1</strong></td><td style="text-align: center;"><strong>b1</strong></td><td style="text-align: center;"><strong>c1</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a2</strong></td><td style="text-align: center;"><strong>b2</strong></td><td style="text-align: center;"><strong>c2</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a3</strong></td><td style="text-align: center;"><strong>b3</strong></td><td style="text-align: center;"><strong>c3</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a4</strong></td><td style="text-align: center;"><strong>b4</strong></td><td style="text-align: center;"><strong>c4</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a5</strong></td><td style="text-align: center;"><strong>b5</strong></td><td style="text-align: center;"><strong>c5</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a6</strong></td><td style="text-align: center;"><strong>b6</strong></td><td style="text-align: center;"><strong>c6</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a7</strong></td><td style="text-align: center;"><strong>b7</strong></td><td style="text-align: center;"><strong>c7</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a8</strong></td><td style="text-align: center;"><strong>b8</strong></td><td style="text-align: center;"><strong>c8</strong></td></tr>\
<tr><td style="text-align: center;"><strong>a9</strong></td><td style="text-align: center;"><strong>b9</strong></td><td style="text-align: center;"><strong>c9</strong></td></tr>\
</tbody></table><p>&nbsp;</p></body></html>


mesaj birleştirme:: 23 Ağustos 2015, 05:53:04

hocam ben deneyi yaptim mesela yukaridaki table html code lari gozukmuyor. bunlari silip. basit bir <h1>merhaba</h1> seklinde bir code yapinca gozukuyor.

bu code uzerinde oynamalar yapsak. mesela iste strong hallerini alsak. yada satir sayisini azaltsak. bazen gorunebilir oluyordu.

LukeSkywalker

" işaretlerinin önüne / koy.