Nachdem ich nun meine Anwendung auf dem AVR fertig entwickelt habe und alles prima läuft, wollte ich zusätzlich aus Sichertsgründen den Watchdog aktivieren, aber sieh da wenn er aktiv ist macht er alle 2 Sekunden ein Reset. Was ist da los ? Oder hab ich den falsch initialisiert? Ist der Watchdog nicht aktiv gibts auch keinen Reset und die Software läuft aber trotzdem. Hier mal ein Code Schnipsel: // Set Wadog prescaler to 2.2sec. WDTCR |= (1<<WDP2) | (1<<WDP1) | (1<<WDP0); // Enable Wadog WDTCR |= (1<<WDE) | (1<<WDTOE);
Hi, du musst den Watchdog spätestens alle 2,2sec resetieren. Das ist der Sinn und zweck vom Watchdog. Wird dieser nämlich nicht resetiert, ist das ein Zeichen für den AVR dass das Programm irgendwo hängen geblieben ist, und es wird der AVR in den sicheren Anfangszustand (nach Reset) gebracht lg, Michael
ah ok Danke. Dann war das ein Verständnisproblem von mir. Also sollte ich bei einem Software startup den Wado aktivieren und in einem Timerinterrupt deaktivieren und wieder aktivieren ?
Hi, jein. In Assembler gibts den Befehl WDR, welcher dir den WD resettiert. Du musst schauen, dass in deinem Programmablauf der WD sicher vor Ablauf von den 2,2 sec resettiert wird. Wennst du einen Timer sowieso im Programm verwendest, kannst du hier den WDR-Befehl sinnvollerweise einfügen. Lg, Michael
Watchdog reset sollte in die Hauptschleife, nicht in einen Interrupt. Wenn die Hauptschleife hängt, wird der Interrupt trotzdem ausgeführt und der Watchdog springt nicht an. Du brauchst den Watchdog nicht selbst bitweise setzen, dazu gibt es: wdt_enable() und wdt_reset(), siehe avr-libc Doku.
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.