Hallo ! Habe folgendes Problem: Der Microcontroller soll einen Watchdogreset auslösen, sobald Port C Pin 6 auf low liegt. Das klappt soweit auch, doch leider nur das eine mal. Nach dem Reset kommt es mir vor, als ob der uC irgendwie im Wald steht. An Pin 1 von Port B erkenne ich, ob der Reset stattgefunden hat oder nicht. Alles variablen, die ich benutze werden initialisiert. Fuses habe ich angehängt. Habe leider keine Idee mehr, jemand von euch ? Achso: Springen zu Adresse 0x0000 klappt ebenso wenig und führt auch zum Absturz! Funktionen: void initWatchdog() { cli(); wdt_reset(); WDTCSR |= (1<<WDCE) | (1<<WDE); WDTCSR = (1<<WDE) | (1<<WDP1); sei(); } void disableWatchdog() { cli(); wdt_reset(); MCUSR &= ~(1<<WDRF); WDTCSR |= (1<<WDCE) | (1<<WDE); WDTCSR = 0x00; } ------------------------------------------------------------------------ --- Endlosschleife: ... disableWatchdog(); sbi(PORTB, 1); while(1) { if(bit_is_clear(PINC, 6) !=0) { cbi(PORTB, 1); initWatchdog(); while(bit_is_clear(PINC, 6) !=0) { wdt_reset(); } while(1); } }
Falls jemdand einen funktionierenden Code mit Watchdog für den AtMega168 hat, wäre mir damit wahrscheinlich auch schon geholfen !
Das kenn ich, der WDT schlägt erneut zu. Er muß so früh wie möglich deaktiviert werden. Schau mal in der avr-libc Doku unter <avr/wdt.h> nach.
Ok...werde ich morgen mal nachschauen, kann ich mir aber kaum vorstellen, da ich ihn ja als allererstes im Programm deaktiviere. Aber ein Ansatzpunkt ist es natürlich. Es würde allerdings nicht erklären, warum Sprung zu 0x0000 auch nicht funktioniert !
Nutze jetzt auch die original Funktionen der wdt.h , leider auch ohne Besserung !
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.