Forum: Mikrocontroller und Digitale Elektronik AVR Watchdog Fragen


von kxr (Gast)


Lesenswert?

Hallo,

bei z.B. mega48 und mega328p (im Unterschied zu mega8) muß man zwingend 
am Anfang des Prog oder Bootloader neben wdt_disable() das WDRF 
zurücksetzen sonst gibt es endlose schnelle Resets. Hier z.B.  an LED 
sichtbar ca. 15Hz resets, auch wenn der WDT z.B. auf höhere Periode 2.0s 
eingestellt wurde!?

Fragen:

* warum ist die endlos Reset-Periode sogar schneller als konfiguriert? 
welcher zusätzliche besondere Timer (da ja zumindest etwas startup code 
ausführen lassen muss) ist da am werkeln?

* mit Bootloader: nach dem WDRF rücksetzen kann man das Bit nicht mehr 
per SW auf 1 setzen. (bleibt einfach 0.) Wie bringe ich das Bit am 
sinnvollsten ins C Programm (GCC)? so daß das Programm (ein einziges 
HEX-File) mit und ohne Bootloader arbeiten kann. Denn das Program 
informiert abnorme Resets auf User-Applikations-Ebene.

(* warum wurde der Zwang des WDRF-Reset überhaupt eingeführt? 
wdt_disable() in AVR GCC tut ja nun auch nicht vollständig, was der Name 
suggeriert... und kann es nicht, sonst Info-Verlust )

PS: im Datenblatt (m48..328p, Seite 54) ist übrigens ein Fehler in dem 
Assembler watchdog disable code:  "andi r16, (0xff & (0<<WDRF))" -> 
"andi r16, (0xff ^ (1<<WDRF))"

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

kxr schrieb:

> * warum ist die endlos Reset-Periode sogar schneller als konfiguriert?

Weil das IO-Register mit dem Prescaler für den Watchdog auf den
Initialwert (entspricht ca. 15 ms) zurückgesetzt wird.  Schließlich
hat der Prozessor ja gerade einen Reset durchlaufen.

> * mit Bootloader: nach dem WDRF rücksetzen kann man das Bit nicht mehr
> per SW auf 1 setzen. (bleibt einfach 0.) Wie bringe ich das Bit am
> sinnvollsten ins C Programm (GCC)? so daß das Programm (ein einziges
> HEX-File) mit und ohne Bootloader arbeiten kann.

Indem du es auf irgendeine bekannte Speicherstelle legst.  Du könntest
auch ein Register wie GPIO0 ... GPIO2 dafür benutzen, es dort zu
speichern, dann kollidiert das nicht mit der Speicherbelegung durch
den C-Compiler.

> (* warum wurde der Zwang des WDRF-Reset überhaupt eingeführt?

Offenbar, damit sichergestellt ist, dass sich die Applikation auch
wirklich um den Watchdog "gekümmert" hat.

> PS: im Datenblatt (m48..328p, Seite 54) ist übrigens ein Fehler in dem
> Assembler watchdog disable code:  "andi r16, (0xff & (0<<WDRF))" ->
> "andi r16, (0xff ^ (1<<WDRF))"

→ support -at- atmel.com anschreiben

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
Noch kein Account? Hier anmelden.