Hallo Leute, ich benutze in meiner Anwendung einen ATMega8515 und programmiere mit CodeVision. Nun will ich mich mit dem Watchdog (erstmals) beschäftigen bzw. diesen in meine Zielapplikation einbinden. Hierzu habe ich noch eine grundsätzliche Frage. Im Datenblatt habe ich nachgelesen wie man ihn aktiviert und deaktiviert. Nun steht auf Seite 49: "If the reset period expires without another Watchdog Reset, the ATmega8515 resets and executes from the Reset Vector." Und auf der nächsten Seite ist auch eine Abbildung mit einem Pfeil "Watchdog reset" Meine Frage ist nun wie ich den WD beutze? Muss ich ein (Zähl)Register zurücksetzen, so dass der WD keinen Reset auslöst oder muss ich den WD jedes mal deaktivieren und danach wieder aktivieren, so dass er von vorne anfängt zu rennen. Die zwei Indizien von Seite 49 und 50 (s.o.) lassen mich auf ersteres schließen, jedoch finde ich kein Zählregister für den WD. Oder ich liege mit meinen Vermutungen total daneben. Gruß Bob
Mahlzeit Bob, Ich vermute mal, dass der Main Takt oder auch Interner Oszillator über einen Prescaler(Vorteiler) zum Watchdog zugeführt wird. Über den WDTCR- Register lässt sich die Zeit einstellen. Hab mal mit Bit 3(Seite 49)den Watchdog aktiviert. Der µController wurde immer wieder Resetet. Ich schätz mal dass man den Watchdog vom Programm aus in bestimmten Zeitabständen zurücksetzen muss, sonst denkt er(Watchdog) Herrchen AVR sei eingeschlafen und zieht an der Leine. Jedoch würde ich mich freuen, dass uns jemand Aufklärt der in diesen Bereich Ahnung hat.
Der Watchdog muß innerhalb der Time-Out-Zeit zurückgesetzt werden, in ASM macht das einfach die WDR-Anweisung (WatchDogReset). Dieses WDR bzw. deren C-Entsprechung fügt man z.B. in einer Timer-ISR ein oder irgendwo dort, wo der Prozessor normalerweise immer vorbeikommen sollte, z.B. in der Main-Loop. Also wenn man z.B. einen 10ms-Timer-IRQ für Tastaturpolling o.ä. nutzt, dann fügt man ein WDR dort ein sucht man sich eine Watchdog-Timeout-Zeit, die deutlich größer als 10ms ist, und wenn dieser IRQ ausbleiben sollte, z.B. weil der Prozessor abgestürzt ist, dann wird automatisch der Watchdog-Reset ausgelöst, und das Programm beginnt von vorn. Nach dem Reset kann man übrigens die Reset-Ursache in einem Statusregister (beim Mega8 heißt es MCUCSR) anhand von Flags ablesen und bei Bedarf im Programm unterschiedlich darauf reagieren, z.B. mit einer Fehlermeldung. Beim Mega8 gibt es Flags für: Power-On, Brown-Out, External Reset, Watchdog Reset. Bei manchen AVRs (z.B. tiny2313) kann man den Watchdog-Timer auch im Interrupt-Modus betreiben, d.h. ein Overflow löst dann keinen Reset aus, sondern springt einen eigenen Int-Vektor an, wie bei einem normalen Timer-Overflow. MfG Olaf
und da ist er wieder - der typische Watchdog-Fehler ->Dieses WDR bzw. deren C-Entsprechung fügt man z.B. in einer Timer-ISR ein ... Natürlich ist es sehr bequem einen Timer zu benutzen, allerdings wird dadurch der Watchdog wertlos. Denn der Timer läuft auch noch, wenn sich ein ander Thread des Systems lange aufgehängt hat und dadurch das System steht. -> Der Watchdog-Reset gehört in die idle task, d.h. wird zurückgesetzt, wenn das System (kurzzeitig) frei ist. Wichtig ist, dass die Watchdog Reset Zeit länger ist als die längste 100% Aktivität im System. Das passiert aber nur in Ausnahmefällen, erst dann muss man tricksen...
Und noch ein Fehler: Der Watchdog hat seinen eigenen RC Oszillator, und wird nicht vom Systemtakt erzeugt!
@SuperUser ->Das passiert aber nur in Ausnahmefällen, erst dann muss man tricksen... Dann erzähl mal wie das tricksen aussieht ;-)
Dann mußt Du eben zusätzliche WDR einbauen. Also zum Beispiel: 1. Ein zyklisches WDR in der MainLoop. 2. Wird eine zeitaufwändige Aktivität ausgelöst, zum Beispiel Auslesen eine Messwertspeichers über RS232 in einem Durchgang, dann würde der Watchdog das Auslesen irgendwann unterbrechen. Also kommt in die Ausleseschleife auch ein WDR, um zu sagen "Ich bin noch da, nur gerade anderweitig beschäftigt." Sven
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.