Forum: Mikrocontroller und Digitale Elektronik SPI Antwortet beim ENC28J60 nicht. Hilfe


von Tobias M. (tobias_m253)


Lesenswert?

Guten Tag,
Ich bastele mir zurzeit ein klein Webserver um mir die ganzen Temperatur 
Werte und Luftfeuchtigkeit anzuzeigen.
Dieses läuft über Ethernet im LAN. Als Ethernet Controller verwendete 
ich denn ENC28J60 von Microchip.
Im Internet habe ich eine kleine Library gefunden die mir zeigt wie man 
ein Webserver damit im C aufbaut.

http://www.pocketmagic.net/atmega8-and-enc28j60-for-ethernet-support/

Ich habe mir die Zip Datei "ATmega8_ENC28J60_NOBUFFER_TEMP_WEBSERVER" 
heruntergeladen. Ein Neues Projekt im Atmel Studio 7 erstellt und die 
Header und Source Dateien dort rein gezogen.
In der "hw_enc28j60.h" Datei habe ich denn CS Pin auf Port B 0 gelegt. 
Es wird alles ausgeführt bis zum "enc28j60Init(mymac);" ab da bleibt der 
Mikrocontroller hängen.
Ich habe mal Debug Nachrichten beim USART eingefügt. Die Nachrichten 
nach Festlegung der Ports(SCK, MOSI Output, MISO Input, MOSI und SCK 
Low) kommen noch im Terminal an. Auch nach dem SPI Init kommt noch Debug 
Nachrichten an:

SPCR = (1<<SPE)|(1<<MSTR);
SPSR |= (1<<SPI2X);

Danach wird ein Soft Reset am ENC28J60 ausgeführt. Danach kommen keine 
Debug Nachrichten an.

Dieser Befehl wird ausgeführt:   enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, 
ENC28J60_SOFT_RESET); Ich habe dort in der Funktion WriteOp auch mal 
Debug Nachrichten eingefügt alles kommt an außer "Data Wait Complete".
Hier mal die Funktion:
1
void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data){
2
        CSACTIVE;
3
    sendToSerialA("CS is Activ\r\n");
4
        // issue write command
5
        SPDR = op | (address & ADDR_MASK);
6
    sendToSerialA("Command Sendetet\r\n");
7
        waitspi();
8
    sendToSerialA("Wait complete\r\n");
9
        // write data
10
        SPDR = data;
11
    sendToSerialA("Data Transfair Complete\r\n");
12
        waitspi();
13
    sendToSerialA("Data Wait Complete\r\n");
14
        CSPASSIVE;
15
}

Diese Nachrichtet kommt nach dem waitspi(#define waitspi() 
while(!(SPSR&(1<<SPIF))) ).

Kann mir jemand dabei helfen dieses Problem zu lösen?

Lg Tobias. M

von holger (Gast)


Lesenswert?

> habe ich denn CS Pin auf Port B 0 gelegt.

Nimm PB2 für CS oder setze den Pin wenigstens auf Ausgang.

von Tobias M. (tobias_m253)


Lesenswert?

holger schrieb:
> Nimm PB2 für CS oder setze den Pin wenigstens auf Ausgang.

Hi holger.

Ich habe denn SPI SS Pin nun als Ausgang definiert. Danke dafür!

Nun bekomme ich auch alle Antworten vom SPI. Komisch ist jedoch wenn ich 
auf die definierte IP Adresse:
192.168.2.24 im Internet verbinden will kommt dort nix. Ich verwende ein 
Gigabyte Switch um mein Rechner mit dem Internet und Drucker zu 
verbinden. Ich habe mein ENC28J60 damit angeklemmt. Dann leuchte dort 
bei mir die dritte LED am Switch(Das ist der ENC28J60), dann leuchtet 
auch die Grüne LED am Jack des ENC28J60 und ab und zu blinkt auch mal, 
die gelbe. Wenn ich nun eine Verbindung auf die Adresse herstelle dann 
geht die LED am Switch aus. Auch beide LED's am Jack und nach dem mein 
Browser sagt "Diese Website ist nicht erreichbar". Geht sie am Switch so 
wie am Controller selber wieder an.

Lg Tobias M.

von Sascha W. (sascha-w)


Lesenswert?

Tobias M. schrieb:
> holger schrieb:
>> Nimm PB2 für CS oder setze den Pin wenigstens auf Ausgang.
>
> Hi holger.
>
> Ich habe denn SPI SS Pin nun als Ausgang definiert. Danke dafür!
noch zur Erklärung, wenn der Pin ein Eingang ist dann schaltet L-Pegel 
deinen SPI von Master auf Slave und deshalb geht nichts mehr (Datenblatt 
lesen)

> Nun bekomme ich auch alle Antworten vom SPI. Komisch ist jedoch wenn ich
> auf die definierte IP Adresse:
> 192.168.2.24 im Internet verbinden will
???
> kommt dort nix.
Fang doch erst mal mit einem PING an

> Ich verwende ein
> Gigabyte Switch um mein Rechner mit dem Internet und Drucker zu
> verbinden. Ich habe mein ENC28J60 damit angeklemmt. Dann leuchte dort
> bei mir die dritte LED am Switch(Das ist der ENC28J60), dann leuchtet
> auch die Grüne LED am Jack des ENC28J60 und ab und zu blinkt auch mal,
> die gelbe. Wenn ich nun eine Verbindung auf die Adresse herstelle dann
> geht die LED am Switch aus. Auch beide LED's am Jack und nach dem mein
> Browser sagt "Diese Website ist nicht erreichbar". Geht sie am Switch so
> wie am Controller selber wieder an.
das sieht so aus als ob der Link verloren geht, verbinde doch mal den 
Rechner und deine Schaltung direkt (daran denken im PC ne feste IP 
einstellen).

Sascha

von Tobias M. (tobias_m253)


Angehängte Dateien:

Lesenswert?

Sascha W. schrieb:
> noch zur Erklärung, wenn der Pin ein Eingang ist dann schaltet L-Pegel
> deinen SPI von Master auf Slave und deshalb geht nichts mehr (Datenblatt
> lesen)

Hi Sascha. Danke für deine Antwort.
Ja, ich hatte sowas im Hinterkopf gehabt das man aus bestimmtes auf 
Output Schalten muss damit der SPI in Master Modus geht. Ist aber auch 
schon länger her das ich denn SPI Bus verwendet habe.

Sascha W. schrieb:
> das sieht so aus als ob der Link verloren geht, verbinde doch mal den
> Rechner und deine Schaltung direkt (daran denken im PC ne feste IP
> einstellen).

Wenn ich das richtig weiß ist der Link die grüne LED. Falls das richtig 
ist kann ich dazu nur sagen. Das die grüne LED am Jack und am Switch 
dauerhaft leuchtet, komme ich aber ans Kabel dann geht sie aus. Lege ich 
das wieder auf dem Boden ist sie wieder an.
Ich habe mal die main Klasse angehängt. Was ich auch nicht so ganz 
verstehe ich ist if(strncmp("/ ", (char*) & (buff[dat_p]), 4) != 0).

//EDIT: Beim Ping auf 192.168.178.137(festgelegte IP im enc28j60) kommt 
keine Antwort also Zeitüberschreitung. Jedoch blinkt die Gelbe LED 
jedesmal wenn in der Konsole "Zeitüberschreitung bei der Anfrage" kommt.

//EDIT2: Wenn man nun die 192.168.178.137 dann kommt: Antwort von 
192.168.178.130: Zielhost nicht erreichbar. Wenn man die Adresse mit 130 
am ende anstatt 137 im Broswer angibt kommt sofort. HTTP ERROR 404. 
Seite nicht gefunden

Lg Tobias. M

: Bearbeitet durch User
von Tobias M. (tobias_m253)


Lesenswert?

Hallo Leute ich bins nochmal

Kennt einer von vielleicht eine einfach Webserver Library auf dem 
ENC28J60. Möchte ein paar Messwerte darauf anzeigen. Und vielleicht es 
ermöglichen Einstellungen zu ändern(Refresh Rate von Sensoren)

Lg Tobias M.

von Joachim B. (jar)


Lesenswert?


von Tobias M. (tobias_m253)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
Mit der Library von Ulrich Radig, komme ich nicht wirklich so weiter.

Ich habe euch mal ein paar Bilder dabei gepackt.

Verkabelt habe ich denn ENC28J60 so:

ENC28J60          ATMega328P
  SCK      <-       PB5
  MISO     ->       PB4
  MOSI     <-       PB3
  SS       <-       PB2(Ist nun nicht mehr PB0)
  WOL      nicht angeschlossen
  INT      nicht angeschlossen
  RST      nicht angeschlossen
  CLK      nicht angeschlossen
  Vcc      5V(Es ist ein Spannungsregler für 3V3 auf dem Modul 
vorhanden)
  Q3       (wäre 3,3 Volt) nicht angeschlossen

In der Fritzbox habe ich denn Port 80 für TCP auf meinen Rechner 
freigeschaltet. Man sieht die gelbe LED des Jacks am ENC immer mal 
wieder blinken. Immer dann wenn auch die erste LED am Switch blinkt. 
Also wenn Signale vom Router in denn Switch kommen. Blinkt die LED am 
Rechern selbst und die am Jack des ENC.

Muss ich die IP Adresse 192.168.2.24 die ich ja versuche Anzupingen die 
auch im Code festgelegt ist erst festlegen oder freischalten am Rechner? 
Das er was darunter findet?

Beim Anpingen mit dem Befehl "ping 192.168.2.24 -t" in der cmd.exe kommt 
nur "Zeitüberschreitung der Anforderung"

Lg Tobias M.

von Jochen (Gast)


Lesenswert?

> Muss ich die IP Adresse 192.168.2.24 die ich ja versuche Anzupingen die
> auch im Code festgelegt ist erst festlegen oder freischalten am Rechner

Wie sehen die Einstellungen des Rechners aus (IP-Adresse, Netzmaske).

von Tobias M. (tobias_m253)


Lesenswert?

Jochen schrieb:
> Wie sehen die Einstellungen des Rechners aus (IP-Adresse, Netzmaske).

Meinst du damit die Einstellungen von meinen Ethernet 
Controller(Realtek) die ich unter ipconfig finde? Falls ja:

Ethernet-Adapter LAN Verbindung:
Verbindungsspezifisches DNS Suffix: fritz.box
Beschreibung                      : Realtek PCIe GBE Family Controller
DHCP aktiviert                    : Ja
Autokonfiguration aktiviert       : Ja
IPv4-Adresse                      : XXX.XXX.XXX.130(Bevorzugt)
Subnetzmaske                      : 255.2555.255.0
Standardgateway                   : 192.168.178.1
DHCP-Server                       : 192.168.178.1
DNS-Server                        : 192.168.178.1

Lg Tobias. M

von Jochen (Gast)


Lesenswert?

192.168.2.24 ->  192.168.178.24

von Tobias M. (tobias_m253)


Lesenswert?

Jochen schrieb:
> 192.168.2.24 ->  192.168.178.24

Hi Jochen! Danke für deine Hilfe.

Wenn ich nun in der cmd.exe denn Befehl "ping 192.168.178.24" eingebe 
kommt schon mal was anderes zurück und zwar:
"Antwort von 192.168.178.130(Ist meine Lokale PC-IP): Zielhost nicht 
erreichbar" 0% Packet Verlust.

Oder meinst du das ich die IP im Code von 2.24 auf 178.24 ändern soll?

Lg Tobias M.

von Tobias M. (tobias_m253)


Lesenswert?

Tobias M. schrieb:
> Oder meinst du das ich die IP im Code von 2.24 auf 178.24 ändern soll?

Ich habe nun die IP Adresse im Code auf 192.168.178.24 geändert. Nun ist 
der Server im Internet unter der Adresse erreichbar. Auch über denn Ping 
befehl bekomme ich eine Antwort mit Zeit<1ms.

Eine Frage hätte ich da aber noch. Ist es normal das wenn ich mich mit 
mein Handy in das gleiche Netzwerk verbinde nur halt mit WLAN anstatt 
mit LAN. und versuche diese Seite aufzurufen klappt dieses nicht also am 
Handy kommt "Website nicht verfügbar". Wenn ich die gleiche Adresse 
wieder am PC der mit dem ENC28J60 und dem Router über ein Switch 
verbunden ist bekomme ich unter der IP Adresse die Website angezeigt.

Normal? Oder muss da noch was geändert werden?

Lg Tobias M.

von Joachim B. (jar)


Lesenswert?

wie kommst du mit einem Handy ins LAN?

Mein Handy kann nur ins wlan intern oder per GPRS oder Edge von aussen 
kommen.

Irgendwie stimmt dein Routing Portforwarding noch nicht.

von Tobias M. (tobias_m253)


Angehängte Dateien:

Lesenswert?

Joachim B. schrieb:
> wie kommst du mit einem Handy ins LAN?
>
> Mein Handy kann nur ins wlan intern oder per GPRS oder Edge von aussen
> kommen.
>
> Irgendwie stimmt dein Routing Portforwarding noch nicht.

Meine ENC28J60 geht auf ein Gigabyte Switch der Switch ist mit dem 
Router verbunden mit mein eigentlichen Rechner und halt dem ENC28J60. 
Dann müsste doch eigentlich wenn ich mich mit mein Handy per WLAN 
einbinde auch im LAN drin sein. In der Fritzbox habe ich für mein PC 
denn TCP 80 freigeschaltet.

Habe ein Bild dabei gepackt.

Lg Tobias M.

von Sascha W. (sascha-w)


Lesenswert?

Tobias M. schrieb:
> Meine ENC28J60 geht auf ein Gigabyte Switch der Switch ist mit dem
> Router verbunden mit mein eigentlichen Rechner und halt dem ENC28J60.
Und der Router (ein FB) stellt das WLAN bereit?

> Dann müsste doch eigentlich wenn ich mich mit mein Handy per WLAN
> einbinde auch im LAN drin sein.
Ja, es sei denn der Router trennt das WLAN vom LAN das kann die FB z.B. 
fürs Gastnetz

> In der Fritzbox habe ich für mein PC
> denn TCP 80 freigeschaltet.
das ist für den Verkehr innerhalb des LAN irrelevant, die Freigabe ist 
nur für Zugriffe aus dem Internet.

Kannst du vom PC das Handy anpingen?

Sascha

von Tobias M. (tobias_m253)


Lesenswert?

Sascha W. schrieb:
> Und der Router (ein FB) stellt das WLAN bereit?

Ja es stellt das WLAN Bereit.

Sascha W. schrieb:
> Ja, es sei denn der Router trennt das WLAN vom LAN das kann die FB z.B.
> fürs Gastnetz

Gastnetz nicht aktiv

Sascha W. schrieb:
> das ist für den Verkehr innerhalb des LAN irrelevant, die Freigabe ist
> nur für Zugriffe aus dem Internet.
>
> Kannst du vom PC das Handy anpingen?

Ja kann ich mit hilfe von MyIP der App habe ich die IP Adresse von mein 
Handy bekommen 192.XXX.XXX.91 wenn ich diese anpinge bekomme ich eine 
Antwort mit ca. 70 ms

Lg Tobias M.

von Joachim B. (jar)


Lesenswert?

Tobias M. schrieb:
> Dann müsste doch eigentlich wenn ich mich mit mein Handy per WLAN
> einbinde auch im LAN drin sein.

ja aber du benutzt verschiedene MAC und verschiedene Routings

Meine Frage war ja wie kommst du mit dem Handy ins LAN und die richtige 
Antwort wäre gar nicht, denn du hast am Handy keinen LAN Adapter!

Mit dem Handy kommst du immer nur ins interne wlan oder von draussen per 
Router ins Netz das aber dann über DSL oder VDSL, deswegen die Weichen 
(Portfreigaben, forwarding) richtig stellen.

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

Tobias M. schrieb:
>> Kannst du vom PC das Handy anpingen?
> Ja kann ich mit hilfe von MyIP der App habe ich die IP Adresse von mein
> Handy bekommen 192.XXX.XXX.91 wenn ich diese anpinge bekomme ich eine
> Antwort mit ca. 70 ms
dann sollte sich eigentlich auch die Website vom μC auf dem Handy 
aufrufen lassen.

Im übrigen macht es keinen Sinn die IP aus dem lokalen LAN zu 
verschleiern, da kann keiner was damit anfangen.

Dann kannst du nur mal paar Debugausgaben über die serielle 
Schnittstelle in den Webserver einbauen.

Sascha

von Tobias M. (tobias_m253)


Lesenswert?

Sascha W. schrieb:
> dann sollte sich eigentlich auch die Website vom μC auf dem Handy
> aufrufen lassen.
>
> Im übrigen macht es keinen Sinn die IP aus dem lokalen LAN zu
> verschleiern, da kann keiner was damit anfangen.
>
> Dann kannst du nur mal paar Debugausgaben über die serielle
> Schnittstelle in den Webserver einbauen.
>
> Sascha

Naja, ich glaube der Chip hat ne Macke weg. Wenn ich das Programm auf 
denn uC lade dann kann ich ihn mal anpingen. Dann bekomme mal ne 
Antwort. Dann bekomme ich mal keine Antwort also Zeitüberschreitung. 
Oder auch mal Antwort von 192.168.178.130 Zielhost nicht erreichbar.
Ist langsam Mysteriös.

Wenn ich dann denn uC ein paar mal Resete(2,3 mal) dann kann ich ihn 
wieder anpingen geht es wieder, also ganz komisch.

Im Server habe ich Debug Nachrichten eingebaut. Wenn sich im Web einer 
verbindet dann kommt "DAT_P: 54" in der Konsole oder wenn der Server 
angepingt wird bzw der ENC. Dann kommt "Pings: X" X halt für wie oft.

Lg Tobias M.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.