Applikation på AVR ENC28J60 slutar svara
Postat: 19 april 2020, 12:42:15
Har i dagarna pillat med en http://tuxgraphics.org/electronics/2013 ... k-2x.shtml .
Har anpassat till annan display med mera. Ett problem som fanns med från början är att webservern slutar svara efter ett tag. Har tidigare provat ett helt annat ENC28J60-baserat projekt med helt annan kod och modul, med samma fenomen, kommunikationen dör. Det får mig att tro att det är något generellt man måste stryka medhårs för att det ska funka. I felsökningssyfte satte jag en soft reset av ENC på en femminuters timer, men då får jag inget svar på DHCP-requesten, trots att det är exakt samma kod jag kör vid kallstart. Vid hård reset hoppar det hela igång igen. Vet inte riktigt var jag ska börja leta. Förslag?
Har anpassat till annan display med mera. Ett problem som fanns med från början är att webservern slutar svara efter ett tag. Har tidigare provat ett helt annat ENC28J60-baserat projekt med helt annan kod och modul, med samma fenomen, kommunikationen dör. Det får mig att tro att det är något generellt man måste stryka medhårs för att det ska funka. I felsökningssyfte satte jag en soft reset av ENC på en femminuters timer, men då får jag inget svar på DHCP-requesten, trots att det är exakt samma kod jag kör vid kallstart. Vid hård reset hoppar det hela igång igen. Vet inte riktigt var jag ska börja leta. Förslag?
Kod: Markera allt
void eth_init(void){
uint16_t plen=0;
int8_t i;
enc28j60Init(mymac);
enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
_delay_loop_1(0); // 60us
enc28j60PhyWrite(PHLCON,0x476);
if(ethrefresh == 2){
FB_clear();
FB_writestringram(2,0,"Waiting for");
FB_writestringram(2,8,"ETH link up");
LCD_update(1);
}
_delay_ms(1000);
while (enc28j60linkup()==0){
// wait a bit then try again:
plen=0xFFF;
while(plen){
_delay_loop_1(0); // 60us
plen--;
}
}
// we need the timer for the dhcp-resend tick:
if(ethrefresh == 2){
FB_clear();
FB_writestringram(0,0,"Waiting for");
FB_writestringram(0,8,"DHCP answer");
LCD_update(1);
}
timer_init();
sei(); // interrupt on, clock starts ticking now
// DHCP handling. Get the initial IP
i=0;
init_mac(mymac);
while(i==0){
plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
buf[BUFFER_SIZE]='\0';
i=packetloop_dhcp_initial_ip_assignment(buf,plen,mymac[5]);
}
// we have an IP:
dhcp_get_my_ip(myip,netmask,gwip);
client_ifconfig(myip,netmask); // we do not need to call init_udp_or_www_server if the client is already configured and we can use the server functions now.
mk_net_str(gStrbuf,myip,4,'.',10);
if(ethrefresh == 2){
FB_clear();
FB_writestringram(0,0,"My IP:");
FB_writestringram(0,8,gStrbuf);
LCD_update(0);
delay_sec=2; //we use this to change the display only in 5 sec from now
}
// web server listen port:
www_server_port(MYWWWPORT);
ethrefresh = 0;
}