ATmega88: Wie WatchDog deaktivieren?

OP Persönliche Seite #1138730
Hi, ich hab grad Huddel mit einem ATmega88 dem dauernd der Watchdog ins 
Bein beisst...

Zu Beginn von main() steht ein
1
    wdt_disable();

und der Code der da erzeugt wird sieht gut aus. Ich hab sogar R1 
ausdrucken lassen um sicher zu sein, daß wirklich die 0 drinne ist.

Nach dem Disable steht in WDTCSR eine 0x08, d.h. WDE=1 (Sheet 10.9.2 pp. 
54).

WDE lässt sich also nicht zurücksetzen.

Fuses sind die Werkseinstellungen, also

LFUSE = 0x62
HFUSE = 0xdf (d.h. HFUSE.4=WDTON=1 also "unprogrammed": Sheet 27.2, pp. 
297)

Damit müsste sich laut der Beschreibung auf Seite 55 der WDT doch 
deaktivieren/stoppen lassen?

WDTON=1, WDE=0, WDIE=0 --> Mode=Stopped, Action on Tomeout=None

Aber das Schreiben der 0 nach WDE in der timed sequence wird 
irgnoriert...

Hat jemand nen Tipp? Die Errata sagen nix dazu, oder wo steh ich da aufm 
Schlauch?

Danke,

Johann
Gast
Hallo

beim Mega644 gehts so. Vielleicht ist das beim Mega88 auch der Trick.

  MCUSR=0;
  wdt_disable();

Wenn einen die Reset-Quelle interessiert, dann das MCUSR in eine 
Variable schreiben.

Gruß,

Frank
Gast
Aus der Erklärung zum WDE bit im Datenblatt:
1
WDE is overridden by WDRF in MCUSR. This means that WDE is always set when
2
WDRF is set. To clear WDE, WDRF must be cleared first. This feature ensures
3
multiple resets during conditions causing failure, and a safe start-up after
4
the failure

Es ist also wichtig immer, (also auch wenn man den Watchdog gar nicht 
benötigt!), das WDRF Bit in MCUSR zu löschen. Das steht so auch irgendwo 
im Datenblatt.

Das Löschen des Bits kann man auch in eine .init Section packen. Das hat 
den Vorteil, das es früher aufgerufen wird als main(). Im 
avr-libc-usermanual gibt es dafür ein Beispiel.
OP Persönliche Seite
SF wrote:
> Aus der Erklärung zum WDE bit im Datenblatt:
>
1
> WDE is overridden by WDRF in MCUSR. This means that WDE is always set
2
> when
3
> WDRF is set. To clear WDE, WDRF must be cleared first. This feature
4
> ensures
5
> multiple resets during conditions causing failure, and a safe start-up
6
> after
7
> the failure
8
>

Jo, aber wer setzt denn das WDRF?
Wenn noch kein WDR auftrat, ist doch WDRF nach dem Reset gleich 0. ZB 
nach PowerOn-Reset (was ich auch versucht hatte).

Jedenfalls geht's jetzt, war wohl ein WDRF-Flag irgendwo hängen 
geblieben nach dem Proggen, dabei wird ja MCUSR nicht gelöscht.

Danke :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.