Forum: Compiler & IDEs Watchdog: Wieso beim Programmstart ausschalten?


von Reto K. (Gast)


Lesenswert?

Hallo,

Auf meinem µC (Tiny261) möchte ich den Watchdog benutzen.
in der Library Referenz 
(http://www.nongnu.org/avr-libc/user-manual/group__avr__watchdog.html)
finde ich den Hinweis, dass bei jedem AVR, der Interrupts erzeugen kann, 
der Watchdog beim Programmstart ausgeschaltet werden muss. Wieso ist 
dies nötig?
Danke! Reto

von Peter D. (peda)


Lesenswert?

Bisher habe ich in Programmen, die den Watchdog nicht benutzen, ihn auch 
nie explizit ausgeschaltet.

Im Datenblatt steht für WDE allerdings ein X als initial Value.
Genaue Informationen, wann und ob überhaupt eine Resetquelle das WDE 
löscht, konnte ich nirgends bei Atmel finden.

Schreib dochmal an Atmel, die sollen das endlich mal sagen.


Was ich gemerkt habe, das WDE-Bit wird nicht bei einem Watchdogreset 
oder externen Reset gelöscht.


Peter

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


Lesenswert?

Peter Dannegger wrote:

> Schreib dochmal an Atmel, die sollen das endlich mal sagen.

Lies doch mal das Datenblatt genau, sie haben das gesagt.

Die Doku der avr-libc spiegelt das nur wider, was im Datenblatt schon
steht.

OK, ich gebe zu, dass ich es beim Umstieg von ATmega128 auf ATmega1281
seinerzeit auch auf die harte Tour lernen musste...  Wer liest sich
schon Datenblätter so genau durch?

von Peter D. (peda)


Lesenswert?

Jörg Wunsch wrote:
> Lies doch mal das Datenblatt genau, sie haben das gesagt.

Dann sag mir doch bitte, welches Datenblatt, welche Version, welche 
Seite, welche Zeile oder Abbildung.

Ich kann nichts finden außer diesem blöden "Initial Value = X".
Und das ist ja wohl unter aller Sau.

Daraus könnte man höchstens indirekt schlußfolgern, das Bit ist immer 
rein zufällig.

Ich vermute mal, das Verhalten ist bei ATtiny13 ... ATmega2561 
identisch.
Dann gehörts aber auch in jedes dieser Datenblätter eindeutig 
beschrieben und nicht durch die Blume.


Atmel:

"WDE is overridden by WDRF in MCUSR. This means that WDE is always set 
when
WDRF is set. To clear WDE, WDRF must be cleared first. This feature 
ensures multiple
resets during conditions causing failure, and a safe start-up after the 
failure."

Das sagt nur aus, daß es nach einem Watchdogreset gesetzt ist, aber mehr 
nicht.
Daß es auch nach einem externen Reset gesetzt bleibt, habe ich nur durch 
Probieren gemerkt (beim ATmega168).
Ich hab die Watchdog-Fuse ein- und ausgeschaltet, aber trotzdem blieb 
der Watchdog an. Erst nach Saft weg, war er aus.

Ist aber blöd, wenn man erst alles selber ausprobieren muß, weil es 
nicht im Datenblatt steht.
Brownout habe ich noch nicht probiert.
Probieren heißt außerdem nicht, daß das Verhalten immer so ist.


Peter

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


Lesenswert?

Peter Dannegger wrote:

> Dann sag mir doch bitte, welches Datenblatt, welche Version, welche
> Seite, welche Zeile oder Abbildung.

Das hängt natürlich vom konkreten Controller ab.

> Das sagt nur aus, daß es nach einem Watchdogreset gesetzt ist, aber mehr
> nicht.

Mehr ist auch nicht.

> Daß es auch nach einem externen Reset gesetzt bleibt, habe ich nur durch
> Probieren gemerkt (beim ATmega168).

Nur, wenn es zuvor durch einen Watchdog-Reset bereits gesetzt war.

> Ich hab die Watchdog-Fuse ein- und ausgeschaltet, aber trotzdem blieb
> der Watchdog an. Erst nach Saft weg, war er aus.

Richtig.  Ist, wenn man genau drüber nachdenkt, ein security feature.

> Ist aber blöd, wenn man erst alles selber ausprobieren muß, weil es
> nicht im Datenblatt steht.

Doch, wie du eben zitiert hast.  Es bleibt gesetzt, bis es explizit
(manuell!) gelöscht wird.

> Probieren heißt außerdem nicht, daß das Verhalten immer so ist.

Es ist immer so, das ist offensichtlich so gewollt.  Alle *RF-Bits
akkumulieren in MCUSR, bis man sie manuell löscht.

PORF ist logischerweise eine Ausnahme: wenn man die Betriebsspannung
soeben erst zugeschaltet hat, und nicht in dem Moment bereits eine
andere Reset-Quelle aktiv war, dann ist PORF das einzige Bit, was
gesetzt ist.

von Hagen R. (hagen)


Lesenswert?

>> Ich hab die Watchdog-Fuse ein- und ausgeschaltet, aber trotzdem blieb
>> der Watchdog an. Erst nach Saft weg, war er aus.

>Richtig.  Ist, wenn man genau drüber nachdenkt, ein security feature.

>> Ist aber blöd, wenn man erst alles selber ausprobieren muß, weil es
>> nicht im Datenblatt steht.

>Doch, wie du eben zitiert hast.  Es bleibt gesetzt, bis es explizit
>(manuell!) gelöscht wird.

Nein ist nicht richtig. Man kann es dann nicht manuell löschen.
Also:

- AVR unter Strom setzen
- WDTON Fuse setzen, nun kann man WDE nicht mehr löschen, ist auch so 
beabsichtigt
- WDTON Fuse löschen, nun kann man WDE erst dann manuell löschen/setzen 
wenn der AVR einmal ohne Saft war. Ein RESET, ISP, DebugWire-Reset alles 
hilft nicht. Nach dem Löschen der WDTON Fuse muß der AVR erstmal ohne 
Strom sein damit man das WDE auch wieder manuell löschen/setzen kann 
unabhängig vom aktuellen Wert der WDTON Fuse.

Das steht so in keinem der Datenblätter der neueren AVRs, ich habe sie 
fast alle danach durchsucht. HW war ATtiny461 und ATtiny45.

Ansich ist für mich ja eine Logik und Grund dahinter ersichtlich, aber 
es sollte auch explizit in den Datenblättern kommuniziert werden.

Ich dachte nämlich das ich meinen AVR teilweise totgeflasht habe und es 
dauerte 6 Stunden bis ich durch Zufall bemerkt habe das nach dem 
Abschalten der Stromzufuhr alles wieder so funktionierte wie angenommen.
Man sitzt vor'm AVR Studio, ändert die WDTON Fuse wie ein Blödman, 
verzweifelt, stutzt seinen Sourcecode bis nur noch der WatchDog-Code 
drinnen ist, probiert jede Art der unteschiedlichen Reihenfolgen um das 
fu.k WDE Bit endlich auf 0 zu bekommen, und das Mistvieh verhält sich 
denoch weiterhin so als wäre die WDTON Fuse gesetzt. Wer kommt schon auf 
die Idee die Stromzufuhr zu unterbrechen ?

Gruß Hagen

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.