Ich habe das Problem, dass die while(1) schleife bei mir nicht funktioniert. Webserver läuft und ist problemlos zu erreichen. Anpingen geht auch. In der While Schleife steht eth_get_data(); und alles was danach kommt wird nie erreicht. Er kommt nie aus eth_get_data heraus. hier ist die eth_get_data Funktion (habe sie gekürzt, so dass nur der Code für den ENC28J60 drinne steht: void eth_get_data (void) { if(eth.timer) { tcp_timer_call(); arp_timer_call(); eth.timer = 0; } if(eth.data_present) { while(ETH_INT_ACTIVE) { unsigned int packet_length; packet_length = ETH_PACKET_RECEIVE(MTU_SIZE,eth_buffer); if(packet_length > 0) { eth_buffer[packet_length+1] = 0; check_packet(); } eth.data_present = 0; ETH_INT_ENABLE; } return; } Warum genau verlässt er diese Funktion nicht?
#define ENC_PIN PINB #define ENC_INT 1 #define ETH_INT_ACTIVE (!(ENC_PIN & (1<<ENC_INT)))
Es ist gut möglich das es was mit dem INT zu tun hat. Wenn ich das Kabel abziehe funktioniert der Webserver noch ganz normal weiter ka ob das Sinn hat . Hab leider zu wenig AHnung von sowas:(
Wieso benutzt du PB1? Der Original Code nimmt PB2 / INT2.
Das wars wohl :-( Mit Int 2 gehts ....... Danke!!
So neues Problem, Webserver läuft die meiste Zeit ohen Probleme. Manchmal aber scheint er abzuschmieren.... warum auch immer. Ping geht dann ganz normal aber die Website kann ich nicht mehr aufrufen im Browser steht dann immer sowas wie warten auf [IP-ADDRESSE] ... Manchmal lädt er die Webpage auch nur zur hälfte und braucht dafür ewigkeiten. Was kann das sein?
Schau dir mal die Pegel an der SPI an. MISO braucht einen Pullup, sonst liefert der mit 3,3V betriebene ENC28J60 nicht genug Pegel. Entweder einen 10k-Widerstand dranlöten oder den internen Pullup im ATmega benutzen. Dazu muss in der Funktion spi_init der Pin MISO auf high gesetzt werden (obwohl das ein Eingang ist).
Danke für deinen Beitrag, Die FUnktion sieht so aus: static inline void spi_init(void) { // configure pins MOSI, SCK as output SPI_DDR |= (1<<SPI_MOSI) | (1<<SPI_SCK); // pull SCK high SPI_PORT |= (1<<SPI_SCK); // configure pin MISO as input SPI_DDR &= ~(1<<SPI_MISO); SPI_DDR |= (1<<SPI_SS); //SPI: enable, master, positive clock phase, msb first, SPI speed fosc/2 SPCR = (1<<SPE) | (1<<MSTR); SPSR = (1<<SPI2X); usdelay(10000); } Was muss ich genau ändern um das umzuschalten?
1 | // configure pin MISO as input
|
2 | SPI_DDR &= ~(1<<SPI_MISO); |
3 | SPI_PORT |= (1<<SPI_MISO); |
4 | SPI_DDR |= (1<<SPI_SS); |
lg Mat
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.