ENC28J60 an C-Contro Pro (Atmega128)

OP #2001166
Lesenswert?
• ▲
▼
Hallo,
ich habe mir ein komplettes Modul vom ENC28J60 gekauft.
Das Modul hängt an einer C-Control Pro 128 (Atmega 128).
Der SPI-Bus ist ohne Levelshifter verbunden und der ENC hat auch seine 
3,3V.

Nun habe ich von der Web-Seite 
"http://members.home.nl/bzijlstra/software/examples/enc28j60.htm"; Das 
Testprojekt "Step 24: ARP, PING and Viktor...."
umgeschrieben. Der Code scheint auch zu funktionieren, den ab und zu
bekomme ich auf einen Ping an den Controller auch eine Antwort.
Leider bekomme ich nicht auf jeden Ping halt eine Antwort.

Da habe ich einwenig im Debugmodus mal geschaut was für Bytes gelesen 
werden. Und siehe da, es kommt ein haufen Schrott an.
Ich habe auch mal das RJ45-Kabel abgezogen. Zu meinem erstaunen, denn 
ich dachtem wenn keine Daten Empfangen werden ist auch der Puffer irgend 
wan mal leer. Im Gegenteil, ich bekomme da auch ständig irgend etwas.

Mein Controller hat ein 14,7456 MHz Quarz. Und ich habe auch schon 
verschiedene SPI-Taktraten getestet. Betreiben wollte ich die SPI mit
(14,7456/4) 3,6864 Mhz.

Kann mir da einer vieleicht weiterhelfen ?
Mfg.
OP #2002776
Lesenswert?
• ▲
▼
Hallo nochmal,
ich habe mir jetzt ein ARP Packet gebastelt das ich in einer Schleife
ständig an meinen PC sende.

SPI-Takt = 3,6 Mhz

 Value = 0
 Value = set_Bit_in_Byte(Value,Econ1_txrst,1)

 Enc28j60bitfield_set(Econ1 , Value)
 Enc28j60bitfield_clear(Econ1 , Value)
 Enc28j60writebuffer_Test() 'call sende ARP
 Enc28j60packetsend(60)

Und siehe da, es kommen alle 60Byte an. Mein PC antwortet sogar auf die 
Anfrage.

Nur mit dem Empfangen habe ich Probleme. Dort habe ich sehr viel 
Schrott.

Was kann das sein ??

Gruss
Gast #2004244
Lesenswert?
• ▲
▼
Ich habe noch mal einwenig gestestet.
Mein Problem ist jetzt das Abholen der Daten aus dem Buffer.

Der  NextBufferPointer liegt sporadisch immer daneben.?
Schon die 6 Byte mit dem Pointer sind Schrott.

Das fängt schon mit dem ersten Lesevorgang an. die Daten sind aber alle 
da, nur halt nicht an der berechneten Position.

Ich habe als Anhang mal einwenig Programmcode angehängt.

Sub Enc28j60init()
Sub Enc28j60packetreceive()

Gruss
Angehängte Dateien:
Gast #2004349
Lesenswert?
• ▲
▼
Hallo nochmal,

seitdem ich folgende Zeile eingefügt habe funktioniert es halbwegs.

 If NextPacketPointer + 1500 >= Rxstop_init Then
       NextPacketPointer = Rxstart_init
 End If

Aber warum sieht der enc28j60 nicht, dass er über sein Rxstop ist und 
automatisch wieder beim Start anfängt.

Oder habe ich ein Fehler beim Init. gemacht das ich ein Register 
vergessen habe?


Gruss

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.