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