mikrocontroller.net

Forum: Compiler & IDEs ATmega88: Wie WatchDog deaktivieren?


Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich hab grad Huddel mit einem ATmega88 dem dauernd der Watchdog ins 
Bein beisst...

Zu Beginn von main() steht ein
    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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: SF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus der Erklärung zum WDE bit im Datenblatt:
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

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.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SF wrote:
> Aus der Erklärung zum WDE bit im Datenblatt:
>
> 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
> 

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.