Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Microchip C18 => Konuyu başlatan: cehennem - 25 Mart 2015, 12:04:31

Başlık: ENC28j60 entegresinin kesmeleri ile ligili yardıma ihtiyacım var.
Gönderen: cehennem - 25 Mart 2015, 12:04:31
İyi günler herkese. Ben 18f4620 ve  enc28j60 modülü ile tcp server özellikli bi devre yapmaya çalışıyorum veri gönderme ve alma işlemleri yapmakta kullanacam veriyi gönderdikten sonra karşı taraftan hemen veri geliyor bu veriyi yakalayamıyorum gecikmeli geldiği zaman sorun çıkmıyor. benim sanırım bunu enc28j60 entegresinin kesmelerini kullanarak yapmam mümkün enc28j60 entegresinin kesmeleri ile ilgili bilgisi olan varsa yardımcı olabilirseniz sevinirim. Programı barış hocanın örneğini düzenleyerek hazırladım ve veri alışında biraz problem yaşıyorum.yardımlarınız için şimdiden teşekkürler.
Başlık: Ynt: ENC28j60 entegresinin kesmeleri ile ligili yardıma ihtiyacım var.
Gönderen: cehennem - 03 Nisan 2015, 20:05:59
Arkadaşlar bilgisi olan kimse yokmu.
Başlık: Ynt: ENC28j60 entegresinin kesmeleri ile ligili yardıma ihtiyacım var.
Gönderen: iyildirim - 04 Nisan 2015, 04:08:02
ENC28 in kesme üretebilme yeteneği var. Ama bahsettiğiniz Microchip MAL kütüphanesinin orijinal halinde kesme kullanma özelliği yoktu diye hatırlıyorum. 
Ya bir timer ile oluşturulan systick fonksiyonunda bir bayrak ile karar veriliyor yada ana döngüde poll ederek TCP/IP taskları çalıştırılıyordu.

Kesme kullanmak için bir dış kesmeye ENC nin int. pinini girip, kesme içerisinde bir bayrak  tutarak çalışabilirsiniz. Aynı bayrağı systick içerisinde de kullanıp basitçe çözebilirsiniz.
Hiç kesme vs. ye girmeden ana dönüde daha sık poll etmek gibi şeyler de denenebilir.

MCU server oluyor diye anlıyorum yazdılarınızdan.
Karşı taraf sizin paketi aldığınızın onayı olmadan ikinci bir paket yolluyor gibi birşey (nasıl olacaksa), yada paralel tasklarda veri yolluyor gibi birşey yoksa ve eğer UDP kullanmıyor, TCP kullanıyorsanız veri kaybı olmasını gecikme vs ile açıklamak ve kesme kullanarak düzeleceğini düşünmek, bence doğru yaklaşım değil.

Buffer boyutlarını, paket boyutlarını analiz etmeli. Fragmented paketler vs. gibi kütüphanenin handle edemeyeceği durumlar olabilir.
Yada ana döngüde çok uzun süren tasklar vs. kullanıyor da olabilirsiniz.

Kesme konusundan daha öncelikli olarak Kütüphanenin en son sürümünü kullanın derim. Başka bir konuda 5.20 sürümünü kullandığınızı yazmıştınız. Şimdi baktımda 5.20 sürümü Kasım 2009 tarihliymiş. Ve bi sürü bug düzeltilmiş.
Gereksiz tüm protokol ve servisleri kapatın.
Performans için olabildiğince PIC in internal RAM ini kullanın. Bufferları gerektiği kadar boyutlandırın.  Kütüphanede gereksiz büyüklükte buffer tanımlamakta performans düşürüyor. Özellikle de ENC üzerindeki bufferları kullanıyorsanız.