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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren