www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog MSP430 mit TIMERB zurücksetzen


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte einen 1s Watchdog verwenden. Dazu initialisiere ich ihn so

WDTCTL = WDTPW + WDTIS0 + WDTSSEL + WDTCNTCL;
//Watchdog Interval = 1 s, Clock = ACLK

ACLK hat bei mit ein 32kHz Quarz, ergibt also 1s.

wenn ich ihn nun in der TimerB ISR alle 0,5s zurücksetzen will, kommt 
immer gleich nach dem zurücksetzen ein Reset... warum?

WDTCTL = WDTPW + WDTCNTCL;

Ich versteh das nicht... Gibt es Probleme mit dem LPM3 den ich 
dazwischen verwende? Da ist der ACLK ja noch an...

Gruß

Manuel

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab raus:

wie ich es hier im Forum gelesen habe geht nicht:

WDTCTL = WDTPW + WDTCNTCL;

Das führt zu einem Reset,

wenn ich allerdings

WDTCTL = WDT_ARST_1000;

verwende klappt es... warum auch immer

Gruß

Manuel

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>...ich möchte einen 1s Watchdog verwenden. Dazu...
>...wenn ich ihn nun in der TimerB ISR alle 0,5s zurücksetzen will...

Es macht keinen Sinn einen WD in einer Timer-ISR zurückzusetzen.
Die ISR wird von Hardware ausgelöst und kann ohne weiteres auch
noch durchlaufen werden, wenn das Hauptprogramm (die Main-Loop)
sich festgefressen hat.

Im Allgemeinen sollte der WD in der Main-Loop zurückgesetzt werden.
Ob du so eine Main-Loop hast hängt allerdings von deiner SW-Strategie 
ab.

Autor: genervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WDTIS0 setzt das Bit 0 auf 1, d.h. du hast dann einen Teiler von 8192.
Du wolltest aber WDTIS_0 machen. Das setzt Bit 1 und 0 auf 0.

Genau das was dein neues define auch macht:
#define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weiß, der Beitrag ist alt, aber hier fehlte einfach die Lösung des 
Problems (was mich den Nachmittag gekostet hat):

Das Triggern mit WDTCTL = WDTPW + WDTCNTCL; funktioniert nicht richtig, 
weil wir zuerst den ACLK gewählt haben (mit WDTSSEL beim Watchdogstart).
Wenn jetzt mit
WDTCTL = WDTPW + WDTCNTCL;
getriggert wird, so wird beim ersten Trigger plötzlich der SMCLK gewählt 
(weil WDTSSEL fehlt). Da SMCLK meist viel höher als ACLK ist, löst der 
Watchdog beim 2. mal seeeehr viel früher aus. Das liegt daran, dass das 
Triggern und Konfigurieren über das selbe Register WDTCTL geschieht.
WDTCTL |= WDTPW + WDTCNTCL; funktioniert auch nicht, weil das Lesen des 
WDTCTL-Registers 69..h liefert.
Am einfachsten nimmt man wirklich WDTCTL = WDT_ARST_1000 zum retriggern.

Autor: Guliver L. (smithjnr)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Was heißt hier "alter Beitrag"? Da gibt es aber ollere Kamellen im 
Forum. Für gute Tipps ist es nie zu spät. Danke Ralf, mir hat es sehr 
geholfen.
Zum besseren Verständnis habe ich ein kleine Projekt für den MSP430G2553 
in "TI CCSv5" unter "TI Grace" erstellt und hier angehängt.
Funktion:
1. Test: Der WD läuft mit ca. 700ms (12kHz/8192). Ein Timer läuft mit 
1000 ms und setzt den WD zurück (kick the dog). Da die Timerzeit nicht 
ausreicht, um den WD rechtzeitig zurückzusetzen, wird ein WD-Interrupt 
erzeugt und main neu gestartet. Angezeigt wird das durch periodisches 
Aufblitzen der LED1 (P1.0), die am Anfang von main programmiert ist.
2. Test: Die Zeit des Timers wird auf 100 ms verkürzt. Nun unterbleibt 
das periodische Blitzen der LED, weil der WD immer rechtzeitig 
zurückgesetzt wird. Main wird also nur noch einmal gestartet.

Autor: Matthias P. (Firma: privat) (sogge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo danke Ralf hat mir auch geholfen!

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.