Hallo,
ich habe ein Programm im Atmega88, dass sich immer wieder mal aufhängt.
Jetzt habe ich den Watchdog aktiviert und stellte folgendes fest.
Hier ein kurzer Codeausschnitt
1 | int main(void)
|
2 | {
|
3 | //wdt_disable();
|
4 | wdt_enable(WDTO_500MS);
|
5 |
|
6 | PRR = 1<<PRTWI | 1<<PRSPI | 1<<PRADC;
|
7 |
|
8 | DDRD=0xEF; //0b11101111
|
9 | PORTD=0x18; //0b00011000
|
10 |
|
11 | DDRB=0xFF;
|
12 | PORTB=0x00;
|
13 |
|
14 | DDRC=0xFF;
|
15 | PORTC=0x00;
|
16 |
|
17 | if(bit_is_set(MCUSR,WDRF)) // Bedingung, ob Watchdog ausgelöst wurde
|
18 | PORTD &= ~_BV(PD3); //LED
|
19 |
|
20 | //softuart_init();
|
21 |
|
22 | read_EEPROM();
|
23 |
|
24 | TIMER2_init();
|
25 |
|
26 | init_2138_10();
|
27 |
|
28 | EIB_init();
|
29 |
|
30 | sei();
|
31 |
|
32 | for(;;)
|
33 | {
|
34 | wdt_reset();
|
35 | EIB_check();
|
36 | }
|
37 | }
|
Einen Tag später nachdem ich den Controller eingebaut habe, leuchtete
die LED. D.H. es wurde der Watchdog ausgeführt.
So nun stehe ich da und finde den Fehler in meinem Programm nicht. Gibt
es noch weiter Befehle, Hilfen, die mich auf der Suche nach dem
Programmfehler unterstützen können?
Die Funktion EIB_check() dauert laut AVR-Studio Simulation ca. 1,5ms
Gruß Alex