www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog resettet zu früh


Autor: matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
in meinem ATmega8-Controller möchte ich einen Watchdog einsetzen, der 
nach ein paar Sekunden Sleep den AVR aufweckt und resettet. Mein Problem 
ist, dass er das zwar tut, aber zu früh und ungeachtet der eingestellten 
Zeit. Ich habe dazu schon einen früheren Thread hier im Forum gefunden, 
der das Problem aber nicht löst.
Hier mal mein Code:

------- am Anfang -----

ldi temp, 0b00011111
out WDTCR, temp

ldi temp, 0b00010111
out WDTCR, temp

------- am Ende -------

ldi temp, 0b10100000
out MCUCR, temp

wdr

ldi temp, 0b00001111
out WDTCR, temp

sleep

-----------------------

Weiß einer Rat? Danke!

Matthias

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim ATmega8 musst Du vor dem Ändern der WD-Zeit das Ändern enablen, so 
wie vor dem Ausschalten des WD, also vorher WDCE und WDE auf 1 setzen.

; reset WDT
WDR
; Write logical one to WDCE and WDE
in r16, WDTCR
ori r16, (1<<WDCE)|(1<<WDE)
out WDTCR, r16
; Turn off WDT => stattdessen hier Zeit ändern
ldi r16, (0<<WDE)
out WDTCR, r16

Steht nicht im Datenblatt und ist auch bei anderen AVRs nicht nötig. Ich 
hab da auch schon mal dran rumgesucht...

Sven

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...steht nicht im Datenblatt??

Also in dem auf meinem Rechner steht's ab Seite 41...

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, stimmt, bei mir auf Seite 43.

>> WDCE - This bit must be set when the WDE bit is written to logic zero. 
Otherwise, the Watchdog will not be disabled. Once written to one, hardware will 
clear this bit after four clock cycles. Refer to the description of the WDE bit 
for a Watchdog disable procedure. *** In Safety Level 1 and 2, this bit must also 
be set when changing the prescaler bits. ***

War damals ein älteres Datenblatt...

Sven

Autor: matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Ändern der Zeit gilt nur, wenn dieses Watchdog Fuse Bit 
programmiert ist, müsste so auf Seite 43 stehen.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, denn:

>> In Safety Level 1 and 2, this bit must also be set when changing the prescaler 
bits.

Und Safety Level 1 ist der ganz normale, wenn das Fuse Bit nicht 
programmiert ist. Keine Ahnung warum, aber es gibt keinen Unterschied.

Warum probierst Du's nicht einfach aus?

Sven

Autor: matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ok, das wars. Danke für den Tipp, hab den Satz wohl überlesen.

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.