ENC28J60 ile HTTP Server projesi

ENC28J60 ile HTTP Server projesi

Enc28j60 bir ethernet-spi çevirici entegresidir. Microchip‘in ürünüdür.

MSSP(Master Synchronous Serial Port) donanım arabirimi, harici çevresel arabirim üniteleriyle veya başka bir mikodenetleyici ile seri haberleşmeyi sağlayan donanım ünitesidir. Burada bahsedilen harici çevresel arabirimler; ser, eepromlar, kaydırmalı kaydediciler (shift register), display sürücüleri, A/D (analog/digital) dönüştürücü gibi birimler olabilir. MSSP donanım biriminin seri veriiletişimi için iki farklı çalışma modu bulunmaktadır.
1- SPI(Serial Pripheral Interface)
2- I²C(Inter-Integrated Circuit)

(TanımMikroC & pic18f4550 kitabından alıntıdır)

SPI’ın nerden geldiğini öğrendiğimize göre enc28j60 tan bahsedebiliriz. Enc28j60 diye uzun uzun söylemek yerine enc desek daha kolay olmaz mı? Evet dediniz…
Enc entegremiz bir ethernet kablosu ile modeme veya switch’e bağlanıp ya da çapraz ethernet kablosuyla pc mize bağlanarak  yerel ağımızda bir ip ile yerleşebilir. Yani ip numarası ve mac adresi ile bir bilgisayar gibi davranabilir. Ağımızla tcp/ip veya UDP protokolü ile veri alışverişi yapabilir, web sayfası yapabilir. Verdiğimiz ip’ye ping attığımızda cevap verebilir. Ancak enc entegremiz tek başına yapamaz bunları. Enc yi kullanabilmek için birde pic ve yazılımımız olması lazım. Ethernet ile ağa bağladığımız enc, ağdan aldığı verileri spi modu ile pic’e aktarır. Yani pic ile anlaşabilmesi için spi metodunu kullanır. Pic aldığı bu verileri aldıktan sonra protokole göre yorumlayarak yapması gerekeni yapar. Bunun tam tersinide yapabilir, pic veri göndermek için spi metoduyla enc ye veri gönderir enc de bu veriyi ağa iletir.

Şimdi enc nin teknik özelliklerinden bahsedelim. Bir donanımı anlamanın en iyi yolu datasheet sayfasını incelemektir. Buyrun: http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf
pin yapısı şöyle:

• 25MHz kristal ile çalışır
• 3.14V ile 3.45V gerilim aralığı çalışır
• TTL seviyesinde girişleri vardır
• Maksimum 10 mbit hızına sahiptir. (Günümüzde modemler çok daha yüksek hızlarla(örn 100mbps) çalışıyor diye bunu kullanamayız diye düşünmeyin, o hızlar modemin maksimum hızıdır yani daha düşük hızları desteklemez diye birşey söz konusu değil)
•28-pinlidir SPDIP, SSOP, SOIC, QFN kılıflarında değişik modelleri vardır.
pic ile spi iletişimde kullandığı pinler:
CS: Seri iletişimde sadece 1 cihaz kullanılmayabilir. Birden fazla cihaz varsa yani master-slave ilişkisi varsa slave cihazlardan arasından hangisiyle iletişim kurulacağını bu cihazların cs pinlerine verdiğimiz veri belirler. Kısacası cihazın cs pinine dokunarak onunla iletişim kuracağımızı, diğer cihazların işimize burunlarını sokmamasını belirtiriz.
SI(SDI): Serial Data In (Seri data girişi)
SO(SDO): Serial Data Out (Seri data çıkışı)
SCK: Serial Clock (Seri Saat/darbe)
Not: Bu pinler arasından, cs,si ve sck nın 5volt giriş toleransları vardır. So pini zaten çıkış olduğundan ona birşey girilmez.
Pinler hakkında ayrıntılı bilgi için aşağıdaki image’a bakınız:

Devre şeması için bakınız:

Bu resime dikkat ederseniz, mikrodenetleyici 5 volt ile çalışacaksa enc nin int,wol ve so pinleri pic’e bir seviye dönüştürücü entegre ile bağlanmalıdır. Ancak mikrodenetleyicide enc ile aynı gerilimle yani 3.3 volt ile çalıştırırsanız ki tavsiyem budur. Bu seviye dönüştürücüsüne gerek kalmaz. Hem kalabalık hem maliyet, ne gerek var. Ancak kullanmak isterseniz, 74hc08, 74hc125 veya 74hc245 entegrelerini kullanabilirsiniz. Mikrodenetleyici olarak gerek kaynak bulma açısından kolaylığı gerek alışkanlıklar sebebiyle pic tercih ediyorum. Siz istediğiniz mcu’yu kullanabilirsiniz tabi elinizde döküman varsa veya yazılım konusunda kendinize güveniyorsanız… PIC18f4620 yi kullanmamın sebebi hafızasıdır. 64kb hafızası vadır bu chip’in. Siz daha fazla hafızalı bir mcu isterseniz 96k lık 18f4685 ile çalışabilirsiniz. Pic kısmında fazla birşeye ihtiyacımız yok. Frekans konusundada bir zorunluluk yok. Ben 8mhz ile çalıştırıyorum. CS, Reset, sdi,sdo,sck, wol ve int pinleri için birer pin kullanmamız gereyor, onun dışındaki pinlere ister led koyun ister buton koyun serbestsiniz.

18f4620 ve enc28j60 pin bağlantısı şöyle olmalıdır:pic(sdo-24 nolu pin)———enc(sdi)
pic(sdi-23 nolu pin)———enc(sdo)
pic(sck-18 nolu pin)———enc(sck)
pic(int0-33 nolu pin)———enc(int)
pic(int1-34 nolu pin)———enc(wol)
pic(c0-15 nolu pin)———enc(reset)
pic(c1-16 nolu pin)———enc(cs)
enc28j60’ın pinlerinden sadece clkout pini boşta

Burada bir not düşme ihtiyacı hissettim. Proteus isis de enc28j60 ın kütüphanesi mevcuttur. Projenize eklediğinizde pin numaralarına dikkat edin qfn kılıfına göre getirir. Çipe sağ tıklayıp edit dediğinizde spdip seçeneğini veya diğer kılıflardan birini seçebilirsiniz.

Devrenizi yapmaya başladınız yavaş yavaş. Şemaya bakarak baskı devresi çizebilirsiniz. Hazır bir modülde alabilirsiniz.
https://www.elektrovadi.com/ENC28J60-ETHERNET-MODULU,PR-1274.html
https://www.elektrovadi.com/Serial-Ethernet-Proto-Board,PR-1173.html
https://www.elektrovadi.com/Mikro-Ethernet-BOARD,PR-703.html

Hazır alırsanız karşılaştığınız bir sorunda devrenizde suç aramazsınız. Yani sorunun nerde olduğundan emin olursunuz. Zaten hemen hemen aynı maliyete gelecektir. Ancak zamanınız varsa ve bilginize ve sabrınıza güveniyorsanız kesinlikle kendinizin yapmanızı öneririm. Kendiniz yapacaksanız trafolu bir rj45 konnektör(ethernet soketi) almanız gerekir ve aldığınız ürünün mutlaka datasheet’ini bulun. Çünkü her ürünün pin yapısı farklı oluyor. Birinin yerine başka bir soket takarsan çalışmaz.

ben burdaki konnektörü aldım: http://www.dorukanstore.com/Trafolu-RJ45-HY911108H,PR-13494.html

Dikkat ederseniz ürünün sayfasında datasheet sayfasına bir link vermiş. Verdiği linkteki dosyayı inceleyerek çizdim kendi devremde.

Ferrite bead yerine direkt köprü atabilirsiniz. Yani boş bırakmayın köprü koyarak vcc ye bağlayacaksınız. Ferrite bead parazit önlemek amaçlı kullanılıyor şart değil…

49 ohm’luk dirençlerin toleransı önemli. Ben bluemavi.com dan aldığım(yıllardır en çok alışveriş yaptığım herkese tavsiye edebileceğim bir site)   49 Ω Metal Film Direnç 10 Adetlik Paket ürününü kullandım.
Kristale 22pf seramik kondansator bağladım.

Ayrıntılarıda söyledik. Sizde boş durmadınız devrenizi hazırladınız. Ethernet kablonuzu taktınız, ledlerden birinin sürekli yandığını, diğerinin de yanıp söndüğünü gördüyseniz devremiz büyük olasılıkla çalışacaktır. Devremizde dikkat etmemiz noktalardan biri kablolarımızı kısa tutmamız gerektiği. Diğeri pic devremizdeki bağlantıları doğru pinlere yaptığımızdan ve temas problemi olmadığından emin olmamız. Kabloyu devremize ve ağa bağladıktan sonra test etmek için ping atacağız. Devremize yazılımda hangi ip numarasını verdiysek o numara ile ping atacağız. Bunun için komut satırını açmamız gerekir. başlat tuşu + r yapınız. çalıştır kısmına cmd yazınız. komut satırı açılınca
örnek olarak “ping 192.168.1.50” yazabilirsiniz. Bunu yazarsanız 4 kere dener.
Eğer “ping 192.168.1.50 -t” yazarsanız sürekli ping atar.
eğer ip numarasını bilmediğiniz bir cihazın var olup olmadığını öğrenmek istiyorsanız daha doğrusu ağınıza hangi cihazlar bağlı bunları görmek istiyorsanız
komut satırına “arp -a” komutunu yazınız. Bu komut ile cihazınızın ip numarasını ve mac adresini görebilirsiniz. Eğer göremiyorsanız devrenizde sorun var demektir.
Ayrıca enc nin birazcık ısındığını görebilirsiniz, bu normaldir endişelenmeyiniz.

Yazılım konusundan bahsetmeden olmaz. Projenin en büyük kısmı yazılımdan ibarettir. Şahsen tcp/ip protokolünü öğrenmekle vakit kaybedemem. Benim işimi görecek hazır bir projeyi editlemek her zaman işime gelir. Araçları amaçlaştırmak istemem. Bu yüzden MikroC nin spi ethernet kütüphanesini kullandım. Hatta dahada hazırcılık yaptım hazır örnek projelerini editledim. Sizde kullanmak isterseniz: http://www.mikroe.com/add-on-boards/communication/serial-ethernet/
Bu sayfaya girerek Serial Ethernet Examples [2.58MB] adlı dosyayı indirebilirsiniz.
Sadece MikroC kullanmak gibi bir zorunluluğunuz yok. Hangi dili kullanırsanız kullanın Barış Samancı üstadın http://www.barissamanci.net/Makale/3/microchip-stack-v520-yaptiginiz-donanimlari-dunyaya-acin/ bağlantısındaki makalesini mutlaka okuyun derim. MPLAB c18 için yazılan stack’ı editlemiş ve herşeyini anlatmış. Ağ bilgisi olmayanlara çok güzel bilgiler vermiş şahsen çok faydalandım tavsiye ederim.

Eğer devrenizi başarılı bir şekilde çalıştırdıysanız aşağıdaki görüntüleri almanız gerekir.
ping ve arp komutları:

web tarayıcınızdaki görüntü:

Son olarak bana projemdeki sorunlardan dolayı yardımlarını esirgemeyen picproje.org üyelerine teşekkür ederim. Onların bana yardım etmesi bana bu dökümanı yazmama vesile oldu kendimi bu projeye yeni başlayacaklara borçlu hissettim. Bir mum diğerini tutuşturmakla kendi alevinden birşey kaybetmez(hz. Mevlana)

Sorun yaşanlar yorum yaparsa elimden geldiğince yardımcı olurum.

95 thoughts on “ENC28J60 ile HTTP Server projesi

  1. Meftun merhaba, dirençler için tolerans önemli demişsin bu konu da bir sıkıntı yaşayıptamı bu notu düştün acaba merak ettim. Ben %5 toleranslı 51 dirençleri kullandığım da, 2 direnci 10R ye düşürmek zorun da kalmıştım çünkü ancak böyle çalışmıştı. Sen de buna benzer bir sorun mu yaşadın ? Ayrıca 49r %1 toleranslı direnç kullandığını farzediyorum, bu dirençleri nerden aldın blue mavi ye baktım ama o değer de bir direnç görünmüyor.

  2. Gökhan hocam merhaba; devreyi enc28j60 kısmını breadboarda kurdum 28j60 ısınıyor fakat modemde ışık yanmıyor. devredeki LEDA LEDB de yanmıyor. mcu bağlamadan da Ledler yanar mı bide isis ares çizimi yada pcb yollayabilirmisin? teşekkürler

  3. Merhaba, mcu bağlamadan da ledlerin yanması lazım. Yani sorununuz ethernet devresinde. Ledleri yakmayı başarana kadar mcu bağlamanıza gerek yok. ENC28J60 biraz ısınır 40-50 derece felan olabilir tahminim. Kendiniz yaptınız galiba, bence sorun rj45 konnektörünüzün bağlantılarında çünkü piyasadaki her konnektörün pinleri farklı. Datasheet sayfası var mı konnektörün, nerden aldınız? ISIS şeması çizmedim kendim, Barış beyin hazırladığı kitapta şu resim var. http://s8.postimg.org/ulfu5vrid/brsmnc_ethernet.jpg
    PCB dosyası vermeyi uygun bulmuyorum, hem hazırcılığa teşvik ediyor, hem pcb çizimim güzel değil, hemde konnektörlerin pinleri farklı olduğu için uyuşmaz. Siz konnektörü bread boarda nasıl bağladınız? Zor olsa gerek.

  4. http://www.direnc.net/RJ45-Disi-Metal-Ledli-Bobinli,PR-3742.html

    http://www.dorukanstore.com/Trafolu-RJ45-HY911108H,PR-13494.html

    ikisinide denedim (breadboarda) yaklaşık 4-5Cm kabloyla rj45 den lehimleyip monte ettim. ama ledleri yakamadım. aynı zamanda delikli plaketede kurumu aynısı 49ohm’luk direnç kullandım. Anlamadım Mcu kısmını programlaya bildim onda sıkıntı yok ama enc28j60 kısmı bir türlü olmadı acaba kablo yerine doğrudan mı? bağlamam gerekecek PCB derken RJ45 ‘e soket yapmak için ares kılıf olabilirdi. Anlamdım nerede hata yaptım. Tecrübelerinizi paylaşırsanız sevinirim(3 Adet enc28j60’da denedim.)

  5. Bende bu ürünü kullanıyorum: http://www.dorukanstore.com/Trafolu-RJ45-HY911108H,PR-13494.html
    Dikkat ettiysen orda bu ütünün muadilinin datasheet linkini vermiş: http://www.tycoelectronics.com/catalog/pn/en/5-6605308-1
    Bu sayfaya üye olduktan sonra datasheeti indirebilirsiniz.
    Bu ürünü benim bağladığım gibi bağladıysanız çalışır.
    rj45konnektör(1.pini)< ====>enc28j60(17.pini)
    rj45konnektör(2.pini)< ====>enc28j60(16 ve 17 nolu pinlerindeki dirençler) ve ferrite bead
    rj45konnektör(3.pini)< ====>enc28j60(16.pini)
    rj45konnektör(4.pini)< ====>enc28j60(13.pini)
    rj45konnektör(5.pini)< ====>enc28j60(12 ve 13. pinlerindeki dirençler)
    rj45konnektör(6.pini)< ====>enc28j60(12.pini)
    rj45konnektör(7.pini)< ====>enc28j60(boş)
    rj45konnektör(8.pini)< ====>enc28j60(GND)

    Burdan da resim halini görebilirsiniz: http://s22.postimg.org/8hzuhf0gh/enc.png

    Bunları dediğim gibi yapmazsanız çalışmaz. Dirençlerin %5 tolerans ise yine sorun olabilir. %1 toleranslı metal film direnç kullandım ben. Bu arada aresteki ethernet kılıfının numaraları kesinlikle yanlış o numaralara aldanmayın. Datasheetteki numaralar önemli bizim için.

  6. yukarıdaki devrede (ve e Barış beyin) enc28j60’ın 1 nolu pini kondansatörle şaseye verilmiş ama yolladığın baskı devrede 1 nolu bacak +3.3’e Bağlı doğru mudur?

  7. 10uf elektrolit kondansatörün + uçu, 1 nolu bacağa değecek; kondansatörün – uçu, GND ye gidecek şekilde bağlayın. Çizerken yanlış çizmişim, devreyi yaparken farkedip düzeltmiştim.
    Devre hala çalışmazsa direnç değelerini düşürürsün. Forumdan birisi öyle yapmıştı.

  8. Evet bende bu sorunu bastığım pb de yaşadım nedense, tpout hattındaki 2 direnç değerini 10R yapınca ledler yanmaya başlamıştı. Anladığım kadarı ile bu tpin ve tpout hatlarının yol uzunlukları bu direnç değerlerini etkiliyor.

  9. hocam barıs bey’in pdf kitabını okudum. cok güzel anlatmıs ama benim kafama takılan sorular var onlara cevap verir misin ??

    kitapta gerekli degişiklikleri yapmayı göstermiş barıs bey. ama benim anlamadıgım sey su . bunu derledigimiz de ortaya cıkan hex kodu pic’e ve olusturulan xxxxx.bin kodu da eeprom’un icine mi atılcak. buna kafam takıldı . cevap verirsen sevinirim . şimdidden teşekkurler 🙂

  10. Merhaba adaşım…
    Eeproma web sayfalarını yükleyeceğiz. Bunu yapmak için microchip bir “MPFS2” adında bir program yapmış. Ben son sürüm stack kullanıyorum ve bu program bende bu adreste : C:\microchip_solutions_v2013-06-15\Microchip\TCPIP Stack\Utilities
    Başlat menüsünden de görebilirsin. Barış bey kitabında bunu anlatmış ordan daha detaylı görebilirsin.
    Dediğin gibi .bin dosyasını bu program vasıtasıyla eeproma atıyoruz. PIC aracılığıyla attığımızdan devre çalışmıyorsa dosyayı atamazsınız.
    Öncelikle en son sürüm stack kullanmanızı tavsiye ederim.

  11. teşekkur ederim cevap icin 🙂 oraya kadar olan kısmı anladım şimdi sorcagım sey şu . enc28j60 devresini calıstırdım varsayıyorum. ledlerde sizin anlattıgınız gibi yanıp söndü. sonra kontrol kartı yaptım. bin dosyasını nasıl eeproma gömcez. ve biz bu kullandıgımız pic’e yani konreol kartdaki pic’e hic mi hex dosyası atmıcaz .

  12. şimdi yazdıgını bi kez daha okudum adaş 🙂 şunu anladım , devrenin tamamı kurulmadan eeproma *.bin dosyasını atamıyoruz ama sen biraz daha acıklarsan sevinirim 🙂

  13. Evet aynen dediğin gibi, önce sağlam çalışan bir devremiz olması lazım, bu devre üzerinde de eeprom olması lazım. Bu eeprom 25LC256, 25LC512 veya 25LC1024 olabilir. Bunları bulmak biraz sıkıntı, zamanında 1 tane 25LC512 almıştım şimdi bulamıyorum. Özdisanda 25LC256 var sadece.
    Neyse Barış Samancı’nın kitabında 32. ve 45. sayfasına bakarsan ayrıntıları görebilirsin.
    Kısaca bin dosyasını eeproma gömme işlemini biz değil pic yapıyor, pic’e bu işlemi yaptırtmak için ise MPFS2 programı ile tcp/ip üzerinden .bin dosyasını gönderiyoruz.

  14. Merhaba,
    Paylaştığınız bu güzel bilgiler için teşekkür ederim.Yukardaki devreyi kurmadan önce,Proteus’daki ethernet örneğini çalıştırmak istedim.Bunun için “WinpCap” programını yükledim ve sonunda devre üzerinde çalıştı ancak web sayfası üzerinden bağlanmak istediğimde sayfaya bağlanamıyor.Bu konu hakkında bilginiz varmı ? yada önerebileceğiniz simulasyon programı varmı ?
    Teşekkürler,iyi çalışmalar

  15. Sorunumu çözdüm,Proteus içerisindeki enc28j60 ethernet entegresine bilgisayarımın ipv4 adresini girdim ve bu adresinde modemde portunu açtım çalıştı.

  16. hocam merhaba bir şey sorabılırmıyuım bız ıstedığımız bır 18llik seri kullandığımızda bır fark olmaz dime mesala pic18f452. bır de bendeki ethernet modulunde 6 adet çıkış var bunlar gnd- D0- +5v- D1- clk- cs sadece bunlar var ben bunları sadece bağlasam bır problem olur mu yanı mıso mosı wol yada sck gibi bir çıkışlar yok bağlamasam ne olur

  17. ya hocam anladığım kadarı ıle mıso mosı bende olan D0 ve D1 tekamul edıyor clk ise SCK ya tekamul edıyor da ancak wol gibi çıkış yok onlara gerek var mı acaba

  18. hocam devrenizi kurorumda bu cs ucunu 36 numaraya bağlamıssınız normalde 16 numara olması lazım değilmi yada ben mı yanılıyorum bir de mcp9700 ne işe yarıyor acaba sadece bunu öğrenmek ıcın sordum

  19. @meliksah
    Merhaba, istediğiniz pic’i kullanabilirsiniz, hangi pini nereye bağlayacağınızı program içinde belirtmeniz yeterli. Ancak bahsettiğiniz modülün D0(D sıfır) ve D1(D bir) dediğiniz pinler bence DI(Data IN) ve DO(Data OUT) pinleridir. Yani mıso mosı dediğiniz pinler bunlardır. SCK yerine CLK pinini bağlayın ikisi aynı şeydir. WOL pini zorunlu değildir bağlamasanız da olur.
    Kolay gelsin.

    meliksah :

    hocam devrenizi kurorumda bu cs ucunu 36 numaraya bağlamıssınız normalde 16 numara olması lazım değilmi yada ben mı yanılıyorum

    Programda hangi pini seçtiyseniz o pine bağlamanız gerekir, programda c1’i seçtiğim için, pic18f4620(c1-16 nolu pin)———enc(cs) bağlantısı yaptım. Yani tamamen size bağlıdır.

    meliksah :

    bir de mcp9700 ne işe yarıyor acaba

    Devremizle bir alakası yok, bu linkten anlayacağımız üzere bir termistörmüş:
    http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022289

  20. hocam bz pic mizi 3,3volt ıle besledeğimizde pic de herhangı bır duzgun çalışmasında bır sıkıntı olmaz dıme hocam yanı yavaşlama yada herhangı bır sey

  21. PIC hertürlü çalışır. Ancak, devrende 5 volt ile haberleşmesi gereken birşeyler varsa seviyeleri eşitlemek gerekir. Bunun için 74hc08 gibi bir seviye eşitleyici gerekir. ENC28j60 için sorun olmaz kısaca.

  22. anladım hocam eyv hocam bendeki modul 6 tane çıkış old. için yanı bende ınt ve wol yok onun sadece mıso yapmam yeterlı olacak anladığım kadarı ıle diğerleri zaten direk bağlayacağım

  23. 18f4550 ve enc28j60 pin bağlantısı şöyle olmalıdır:
    pic(sdo-26 nolu pin)———enc(sdi)
    pic(sdi-33 nolu pin)———enc(sdo)
    pic(sck-34 nolu pin)———enc(sck)

    pic(c0-15 nolu pin)———enc(reset)
    pic(c1-16 nolu pin)———enc(cs)

    Ancak bu mcu yerine 96kByte program memory’si olan 18f4685’i öneririm,
    onu bulamazsanız 64kByte program memory’si olan 18f4620’yi öneririm.

  24. hocam size mail de attım.
    kodlarıda gönderdim.
    kodlarda bir terslik varmı bakabilirmisiniz
    direk pc yede bağladım cihazı
    swich e de bağladım
    yinede ping atamadım.
    İlgilendiğiniz için teşekkür ederim.
    Kodlarada bakarsanız çok iyi olur
    Kolay gelsin

  25. Gökhan hocam
    http server hafızayı dolduruyor diye bende
    mikroc nin ping example kodunu derleyip yükledim.
    29 kb lık bir hex dosyası oluştu.
    3 kb yetermi iletişim için zira yine aynı şeyi yaşadım. Bir türlü ping atamadım.

    birde şunu farkettim
    normal pclerde yeşil ışık sabit yanar sarı yanıp söner
    benim cihazda (Ethernet modülde) tam tersi sarı arada bir yanıyor yeşil sürekli yanıp sönüyor.
    neden olabilir
    bağlantımın resimlerinide göndereyim.
    elimde 3.3 volt çıkışlı güç kaynağı olmadığı için 2 tane 1n4148 üzerinden verdim modüle elektriği
    http://postimg.org/image/4chk3qcdj/
    http://postimg.org/image/4rkooq8jj/
    http://postimg.org/image/wtmmjupij/
    mavi kablo si
    yeşil kablo so
    kahve rengi sck
    siyah cs
    reseti önce bağlamıştım sonradan söktüm

  26. Öncelikle regülatör devren olması lazım, diyotla regülatör olmaz.
    Kodlarında ip adresi ve dns bilgilerini girdin mi? Eğer bunu yapmadıysan olmaz. Cihaza 192.168.1.xxx gibi bir ip vermelisin. Modemin varsayılan ağ geçidini öğrenip onu da girmen gerekir, genelde 192.168.1.1 oluyor.
    Cihazını modeme bağlıyorsan o kablonun sağlamlığından kesin emin olman lazım. Ayrıca kablonun çapraz(cross) olmaması lazım, eğer çapraz kablo kullanıyorsan modeme değil direkt bilgisayarına bağlaman lazım ve bilgisayarına da kablo için ip adresi vermen gerekiyor.
    18f4550 biraz değişik bir mcu, int0 ve int1 pinleri, spi pinlerine denk geldiği için kullanamıyoruz(mikroc de öyle bir ayar görmedim), dolayısıyla enc’nin wol ve int pinleri boşta kalıyor. Sorunun sebebi bu bile olabilir.
    Kısaca sorunu çözmen biraz sana kalıyor, herşey olabilir cihaz elimde olmadığı için kesin birşey diyemiyorum. Gelişmeleri yazarsan yardımcı olurum.

  27. cihaza ip veriyorum
    192.168.2.60
    255.255.255.0
    192.168.2.1
    dns vermedim
    ve rügaltor devremem olmadığı için geçiçi olarak diyot kullandım
    en iyisi 18f4685 almam gerek
    enc28j60 a bağlantı şekli olarak 18f4620 ile 18f4685 aynı gibi en azından bize lazım olan pinler aynı
    teşekkür ederim hocam en kısa zamanda 18f4685 alıp sonucu burda paylaşırım

  28. merhaba gökhan bey;

    yapmış olduğunuz uygulamayı ve atıfta bulunduğunuz Barış SAMANCI’nın uygulmasını inceledim. Anladığım kadarıyla bu uygulamalarda internet sitesi Eprom’a kayıt ediliyor. umarım doğru anlamışımdır. Benim yapmak istediğim ise bir internet sitesi üzerinden sistemin kontrolü. yani hali hazırda var olan bir internet sitesine girdiğim zaman sisteme ulaşmak. server olarak internet sitesinin kayıtlı olduğu server’ı kullanmak istiyorum. sormak istediğim
    1- böyle bir şey yapmak mı daha mantıklıdır yoksa sizin yaptığınız gibi pic’li devreyi server olarak kullanmak mı?
    2- internet sitesinin server’ını kullanmak istersem nasıl bir yol izlemeliyim. siteden bilgileri nasıl alabilirim ?

  29. EEPROMA kaydetmek zorunlu değil, bir kaç sayfalık dosyalar rahatlıkla yüklenebiliyor. PIC’in kapasitesi yetmez ise eeprom gerekiyor, eeprom yerine flash memory de kullanabilirsiniz.
    Eğer veri kaydetecekseniz bunu PIC ile değilde hostunuzdaki veritabanına kaydetmeniz hem daha güvenli olur hemde çok daha geniş bir hafızanız olur.
    EEPROMA hiç güvenmiyorum bazen kendi kendine silindiği oluyor.
    2. Yöntemi yapmanızı tavsiye ederim, sonuçta modeminizi yönlendireceksiniz her iki halükarda da…
    İnternet sitenizden, GET yöntemi ile verileri gönderirsiniz, göndermek için şöyle bir link vermeniz lazım: Ledleri yakmak için tıklayınız
    pic tarafında zaten get verileri almak için demo uygulamadan yararlanabilirsiniz. IP numarası, tahmin edeceğiniz üzere dışarıya çıkış verdiğiniz modeminizin ip numarası olacak.

  30. Barış pic18f4620 entegresini temin ettim.
    Anlatığınız gibi bağlantıları yaptım.
    cihazı ilk çalıştırdığım an ping atıyorum.
    ping 192.168.2.199
    diyorum
    ilk ping gidiyor
    ardından ping atamıyorum.
    sebebi ne olabilir sizce

  31. Merhaba,

    Konuyu ilgi ile takip ediyorum. Çok faydalandım. Böyle bir devreyi projemde kullanmak istiyorum. Paylaşımlar için teşekkürler.

  32. Merhaba,

    Bir sorum olacak, PIC16F4620 yada PIC16F4685 ve ENC28J60 ile internet üzerinden android bir uygulamaya veri göndermek mümkün mü ?

  33. belki konu dışı olacak ama 18f4685 ile c18 kullanarak projeyi çalıştırmak istedim..18f4620’ye göre başarılı bir şekilde çalışıyor ama birkaç modülü aktif etme ihtiyacımdan dolayı pic’i değiştirmem gerekti ve “18f4685” ‘ i bulamadığımdan “18LF4685” aldım aynı devrede çalışmıyor sebebini bir türlü çözemedim … ENC’ye ait CS pinini çıkarıp taktıgımda devredeki kontrol ledi yanıp sönüyo ama hala stack çalışmıyor..

  34. hmm.. aynı devre üzerinde (4620 ile çalışan) herhangi bir değişikliğe gittiniz mi yoksa bendeki ” LF ” olduğu için çalışmıyo olabilir..

  35. çalıştı çok şükür..
    Sorun adaptördeymiş sanırım başka bi adaptör taktım çalıştı..
    Yardımlarınız için teşekkür ederim..

  36. merhaba yazılarınızı okudum düşündügüm proje hakkında bılgı topluyordum aslında android telefonların usb portundan mac adresi olan bir karta baglanabılırmıyız adroid yazılımla sadece mac adresine baglnılabılıyor şu an için bana mail ulaşırsanız sevinirim

  37. Türkiye’de bu konuyla ilgili çok az araştırma ve geliştirme yapılıyor.
    Gökhan bey, sizi gerçekten kutlarım.
    Çok büyük bir açığı kapatmışsınız.

  38. Gökhan Hocam Hazır enc devresi aldım dediğiniz gibi bağladım.
    ilk enerji verdiğimde ping atabiliyorum
    192.168.2.220 -t ile sürekli deniyorum.
    aradan 10-15 saniye geçtikten sonra kendiliğinden ping zaman aşımına uğradı diyor.
    sebep ne olabilir.
    Kolay Gelsin.

  39. Gökhan hocam, enc28j60 pic18f4620 ile beraber çalıştırmak istiyorum tek takıldığım yer pic e atılacak program nasıl olmalı ayrıca enc28j60 a bi yazılım atılıyormu. örnek kodlarda pic e enc için bir kod hazırlanmış orda ip ve mac adreslerini içeriyor ayrıca bunları değiştirebiliyoruz sanırım işte tek kaldığım kısım pic c compiler de yazmaya kalksam bunu nasıl bi kodlama yapmam lazım acaba bunun hakkında ufakta olsa bi yardımcı olurmusunuz.

  40. MAC adresini ve IP değiştirebilirsiniz. IP adresini networkunuz ile uyumlu bir adres ile değiştirmelisiniz. ENC28j60 chip’ine program atılmaz, sadece yukarıdaki verdiğim linklerdeki projeleri derleyip, hex dosyasını PIC’e yükleyeceksiniz.
    pic c compiler dediğiniz CCS C ise, onun kendi kütüphaneleri var, onları kullanmalısınız. Microchip TCP/IP stackın eski bir sürümünü kendilerine uyarlamışlar. Bence uğraşmanıza değmez. Devre olarak hepsi aynı zaten(şema olarak).

  41. Hocam yukarıda verdiğiniz bilgiler çok güzel. Ben yaklaşık üç haftadır bu işi araştırıyorum ve size bikaç sorum olacak cevaplarsanız şimdiden teşekkür ederim.
    İlk olarak elimde 16F877 vardı, micro c help dosyasında yer alan devreyi ve programı kurarak işe başladım.887 yerine elimdeki 877 yi kullanmak istedim devreyi kurdum ancak bir türlü ne örnek yazılımı nede içeriğini değiştirip haberleştiremedim. ENC28J60 entekgerisi düzgün çalıştırdığıma inanıyorum çünkü ethernet kablosunu taktığımda A ledi ağa bağlandığı için yanıp diğer ledde haberleşmeler sırasında yanıp sönüyor.
    Sorum size micro c de bacakları yazılımda tanımlarken CS ve reset pinlerini hangi bacağa bağladığımızı belirtiyoruz.Acaba diğer pinler gömülü metotlar içerisindemi sabit olarak belirlenmiş (microc kütüphanesi içerisinde). PIC i değiştirmeyi planlıyorum.Yukarıdaki önerilerinizden yararlanıcam bu konuda.
    Ben 877 ile birlikte 74hct245 seviye eşleyici kullandım sonra çıkardım direk bağnantı yaptım ne yaptımsa olmadı, acaba micro c nin bu help dosyasındaki devrede eksik bişey mi var yada ben 887 pic ini kullanmadığım için mi sorun yaşadım.Üç haftadır bir arpa boyu yol alamadım, yorumlarınızı bekliyorum hocam. SAYGILAR…

  42. Hocam iyi akşamlar ben yazdım ama gitmemiş sanırım, bikaç sorum olacak size eğer cevaplarsanız. MicroC hazır kütüphanesini kullanarak devreyi kurdum ama programlarda da dikkat ettim sadece CS ve RESET pinlerinin picte bağlı olduğu pinleri belirtiyoruz.Diğer pinler gömülü metotlar tarafından mı belirleniyo yoksa kafamıza göre bağlayabiliyomuyuz_?

  43. Diğer pinler zaten MCU’nun SPI pinleri yani yerleri belli. Biraz da programa bağlı olarak değişir, adam normal spi pinleri yerine başka pinleri de kullanabilir ancak burdaki paylaştığım projede spi pinleri kullanılıyor. Kafamıza göre bağlarsak çalışmaz, hatta kısa devrelere sebebiyet verebilir.

  44. şimdi buraya kadar herşey tamam, bir index page yükledik, adc, led yaktik, fakat daha geniş kapsamli sayfalari gömmemiz gerekli, 4-5 html page, her biri yaklaşik 50 değişken okuyup realtime dönüş yapsin, buna nasil bir çözüm bulabiliriz, enc28j60, wiznet w5100 ile birçok uygulama yaptim, fakat bu chiplerin TX/RX buffer size 8-10 kb geçmiyor tek başina led yak/söndürden öteye gitmez, external SRAM kullanimi konusunda biraz çalişsak 512 K bir alan olsa da sayfalarimizi hatta resimli html sayfalarini buraya gömsek? fikri olan varmi?

  45. Microchip TCP/IP stack (c18 derleyicisinde çalışıyor)ile 10-15 sayfalı uygulamalar yaptım. Hafıza olarak 25lc256, 25lc512, 25lc1024 kullanabilirsiniz, hatta flash memory ile daha fazla alan kullanabilirsiniz. Tavsiye ederim.

  46. Gökhan hocam elinize sağlık güzel bir paylaşım yapmışsınız. Ben sizin çalışmanızdan yola çıkarak devreyi çalıştırdım. Mikroe nin örnek kodlarından Mikrobasic ve mikroc kodlarının ikisini de denedim gayet güzel çalışıyorlar.

    Mikrobasic kodlarında (getRequest[5] = a ile ve portd pinine bağlı bir buton ile IP no değişimini sağladım. Hatta port numarası da bu yöntem ile belirlenebiliyor. Şu kod parçaları ile:

    if (getRequest[5] = “a”) then ‘ 127.0.0.1:3000 olur…
    EEPROM_Write(0x00,0x7F)
    delay_ms (2)
    EEPROM_Write(0x01,0x00)
    DELAY_MS (2)
    EEPROM_Write(0x02,0x00)
    DELAY_MS (2)
    EEPROM_Write(0x03,0x01)
    DELAY_MS (2)
    end if

    if portd.7 = 1 then ‘ IP 169.254.1.2 olur…
    EEPROM_Write(0x00,0xA9)
    delay_ms (5)
    EEPROM_Write(0x01,0xFE)
    DELAY_MS (5)
    EEPROM_Write(0x02,0x01)
    DELAY_MS (5)
    EEPROM_Write(0x03,0x02)
    DELAY_MS (5)
    end if

    myIpAddr[0] = EEPROM_Read(0x00)
    myIpAddr[1] = EEPROM_Read(0x01)
    myIpAddr[2] = EEPROM_Read(0x02)
    myIpAddr[3] = EEPROM_Read(0x03)

    görüldüğü gibi fazla uğraşmadan adres/a ile bir port numarası belirlenebiliyor. Ancak mikroc ile bir türlü IP numarasını eepromdan alamadım. Ip noyu eeproma kaydediyorum ancak bir türlü aşağıdaki kod parçasına bu 4 adet IP bilgisini atayamadım.

    unsigned char myIpAddr[4] = {169, 254, 1, 2 } ; // my IP address

    Mikrobasic te gayet kolay oldu ama Mikroc de denemediğim şey kalmadı bir türlü eeprom a kaydetiğim verileri myIpaddr ye atamıyorum. Aslında benim için mikrobasic ile sorun çözüldü ama ben mikroc ile devam etmek istiyorum. Mikroc yi de yeterince biliyorum ama bu IP yi eepromdam almayı bir türlü beceremedim. Yardımcı olursanız sevinirim iyi günler.

  47. Gökhan merhaba ; picproje sitesinden yunus ben. Öncelikle yazdığın döküman için teşekkür ederim gayet güzel hazırlanmış bir çalışma olmuş. Kafamdaki soruların bir kısmına yazdığın ve önerdiğin makele cevap oldu teşekkür ederim.

    Çalışmalarının devam etmesi dileği ile.

    MrDarK

  48. hocam emeğinize sağlık çok güzel bir döküman çok teşekkür ederim. size şunu sormak isterim elimde 18f4550 var sadece kodları çalıştırabileceğim mi diye kontrol etmek için devreyi kuracağım ama kodlar içinde hangi mcu yu kullandığınızı belirttiğiniz satırı bulamıyorum. bu kodlar 18f4620 için galiba. mikro c bilmediğim için de olabilir nerede değişiklik yapacağımı bulamadım, yardımcı olabilir misiniz ? ayrıca webserver için Serial Ethernet Examples\Serial Ethernet Examples for PIC\mikroC PRO for PIC\HTTPServer_Example kodunu kullanacağız değil mi ?

  49. Kullandığımız mcu’yu kodlarda belirtmiyoruz, projeyi oluştururken seçiyoruz. Bu projede 18f4620 seçili.
    Şu an mikroc kurulu değil bilgisayarımda ama yanlış hatırlamıyorsam, menülerden “edit project” kısmına girip, “device” kısmından mevcut başka bir pic seçebiliyorsun.

  50. hocam çok basit sorular soruyorum ama ne denediysem olmadı sizin vediğiniz kodları yeni proje açıp kopyala yapıştır yapıp derlemeye çalışıyorum ama resimdeki hataları alıyorum. Kodu bir derleyebilsem mikroc nin kodlarını biraz araştırıp üstünde oynama yapacağım.

    http://i.hizliresim.com/Z1LY03.jpg

  51. ANSEL ve ANSELH register’ları seçtiğin pic’de yokmuş, C1ON_bit register’ı da yokmuş , aslında bu projede 18f4620 seçili derken yanlış söylemişim. Ben 18f4620 ile çalışmıştım o hata veren satırları düzeltmişim demekki. Şu an hatırlamıyorum.
    Aldığın hatalar aslında basit hatalar, onlar olmadan da derlenir. ANSEL register’ları pinlerin digital’mi anolog mu çalışacağını ayarlıyor. ADC okuması yapacağın pinleri ANSEL ile gereken bitleri seti ediyorsun, onun dışındaki bitler sıfır oluyor. Tek görevi bu.

    • kodda nasıl bir değişiklik yapmam gerekiyor hocam vaktiniz varsa yardımcı olabilir misiniz ? mikro c bilmediğim ve daha önce hiç 4620 kullanmadığım için bir değişiklik de yapamıyorum. daha doğrusu registerler ayarlarını da bilmiyorum.

    • mesela hocam mcu nun ip sini de ve modem ipsine göre göre vermem gerekiyor derleyemeyince onu da veremiyorum

  52. Gökhan bey

    ENC28J60 modulum (Hanrun) var 18f4620 kullanacağım PIC 5V ile modulude 3.3v ayrı ayrı beslemem mi gerekli 74HCxx kullanırsam modulun beslemesini yine 3.3 v kullanmam gerek bu konuyu ayrıntılı şekilde açıklarsanız çok memnun olacağım

  53. http://ww1.microchip.com/downloads/en/devicedoc/39626b.pdf
    bu datasheeti açın.
    226. sayfada “ADCON1: A/D CONTROL REGISTER 1” başlığını bulun
    ADCON1 register’ının PCFG3 ila PCFG0 arası bitlerine 1111 verirseniz bütün pinler dijital olur, tablo olarak göstermişler zaten.
    ADC ile işiniz olmadığı için diğer bitler önemli değil.
    Bu yüzden bu registere 0x0F yazmanız yeterli.

    Hata veren ANSEL,ANSELH, C1ON_bit ve C2ON_bit satırlarını silin.
    Sadece ADCON1=0x0F; kodunu yazın sildiklerinizin yerine.

    • çok teşekkürler hocam, derledi sadece demo limit problemi oldu sağlam bi crack bulup yarın devreyi deneyeceğim.

  54. Hocam çalışmalarınızda başarılar dilerim. Devre ve program olarak barış samancı hocamın projesini kullandım. Proje 18f4685 e göre derlenmiş ben bunu device tools seçeneğinden 18f4620 yaparak derlediğimde hata alıyorum. Her iki işlemcinin pin numaraları aynı olmasına rağmen neden bu hatayı veriyor acaba ?
    ikinci olarak ben http tasarımı kullanmayacağım bunun için eeprom kullanmadım bu bir sıkıntı oluştururmu ?

    • Derlemede hata vermesinin sebebi, hafıza sorunudur. 18f4620’nin hafızası 64kbyte, 18f4685’in hafızası 96kbyte, ben bu yüzden 18f87k22 kullandım çünkü hafızası 128kbyte. 18f4685 ile derleyip işlemcinin ne kadarı kullanılmış bakın, eğer 64kbyte’dan fazla ise dediğim gibi hafıza yüzünden derleyememişsiniz demektir. Ayrıca IDE ayarlarından işlemciyi değiştirmeniz yeterli değildir, config ayarlarından sigorta ayarlarını felan değiştirmeniz gerekiyor. Belkide bu yüzden derleyemiyor.
      Eeprom şart değil ama config programı ile ayarlarını ona göre yapmanız lazım. Http kullanıp, html sayfalarını işlemciye gömmeniz de mümkün, tabi hafızanın izin verdiği müddetçe.

      • Hocam dökümanda belirtildiği üzere tcpıpconfig.h dosyasında şu tanımlamaların yapılması gerekiyormuş .ancak ben devreyi kurdum fakat eeprom kullanmadım işlemci olarak da elimde 4620 olduğu için dediğim gibi 4685 için derlediğim hocamın programını yükledim işlemciye. bu sanırım zaten bir hata olmuş ? eeprom kullanmadığım için de sanırım ping atamıyorum cihaza.
        bunu çözmek için aşağıdaki gibi nasıl bir tanımlama yapmalıyım.

        //#define STACK_USE_MPFS
        //#define STACK_USE_MPFS2
        //#define MPFS_USE_EEPROM
        //#define MPFS_USE_SPI_FLASH
        //#define MPFS_USE_EEPROM
        //#define MPFS_USE_SPI_FLASH

        #define MPFS_RESERVE_BLOCK (137ul)
        #define MAX_MPFS_HANDLES (7ul)

  55. tcpıpconfig.h dosyasına ne yazmamız gerektiğini hatırlamıyorum, microchipin bir arayüz programı tcp ip config için, başlat/programlar/microchip/tcpipstack/utilies di sanırım, bu şekilde o programı bulun, daha anlaşılır bir şekilde ayar yapabilirsiniz.
    Daha önceki bahsettiğim gibi işlemcinin sigorta ayarlarını da başka bir config dosyası var onu bulup yapın. Microchip’in tcp ip için bir user guide dökümanı var orda anlatmışlardır. Bende şu an ne stack var ne ethernet modülü var, deneyemediğim için tam olarak çözümü bilemiyorum. Aradan 1 yıla yakın zaman geçti çoğu şeyi unuttum.

  56. Gökhan Bey Merhaba;
    Çalışmalarınızdan esinlenerek birşeyler yapmaya çalışıyorum. Piyasada hali hazırda satılan ENC modüllerinden aldım ve çapraz kablo ile dizüstü bilgisayara bağladım,cihaza 3.3v voltaj verdim. Bir ışık sürekli diğeri arada bir yanıp sönüyor.CMD ekranında arp -a komutu ile bağlı cihazları listele dediğimde taktığım donanıma bir ip atanmış olarak görünüyor. Henüz pic tarafına geçmedim. Doğru yoldamıyım öğrenmek isterim.
    Sagılarıma

  57. Pic bağlamadığınız halde nasıl IP almış anlamadım doğrusu. Şu an elimde modül olmadığı için deneyemiyorum. Pic bağlamadığınız sürece bir işe yaramaz zaten.
    Kolay gelsin.

  58. Pc ye bağlı hiçbir ağ kablosu yokken arp -a dedğimde gelen cevap normal olarak “Arp girdisi bulunamadı” şeklinde. Cihazın ethernet kablosunu taktığımda pic ile hiçbir bağlantısı olmadığı halde aynı işlemde: “Arabirim :169.254.80.34” cevabı geliyor. Cevabınız için teşekkür ederim. Biraz daha çalışayım bakalım nedenmiş.

  59. iyi akşamlar benim ethernet üzerinden pic aracılığıyla belli bir protokolle Pic’in portlardan aldığım veriyi göndermem lazım. Bilgisayar tarafında hazırlanmış bir yazılımın verileri okuması için gönderilmesi gereken protokol bilgisi var elimde sadece internette yaptığım araştırmalarda Enc28j60 entegresi ile yapılabildiğini öğrendim.Elinizde böyle örnek bi proje varsa paylaşabilirseniz veya nasıl yapabileceğim konusunda yardımcı olursanız minnettar olurum.

  60. Merhabalar,
    18f4620 datasheetini incelediğimde 4-5v arası voltaj ile çalışır diyor. 18lf4620 olanı 3.3v ile çalışabileceği yazıyor. Siz 18F4620yi 3.3V ile mi çalıştırıyorsunuz?

  61. Merhaba, şemaya dikkat ederseniz, 5v ile çalışan mcu ile 3.3v ile çalışan enc28j60’ın arasına “5v<>3.3v level shift logic” elemanı var.
    Bunun için hazır entegreler de var ama her pin için 2 adet direnç ile yapmak da mümkün.

  62. Selam,
    Sizinle nasıl iletişime geçebiliriz Telefon Numaranızı vermeniz mümkünmüdür?
    Mail Atarsanız da olur telefon numaranızı (erolevrim8@yahoo.com)
    Teşşekürler,
    Erol Evrim

  63. istanbulda oldugunuz anlasiliyor. tanisabilir miyiz acaba?
    asagidaki bilgilerde mail adresim var. bir yanit verir misiniz?
    karsilikli fayda elde edebilecegimizi dusunuyorum.

Bir Cevap Yazın