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