mega32: Watchdog/ Externer Reset

OP Persönliche Seite #365091
Lesenswert?
• ▲
▼
Hallo!
Ich arbeite gerade an meiner Facharbeit ET.. und ich wollte jetzt
einfach mal einen Watchdog-Reset einbauen da meine Programmierung
langsam kompliziert wird ;)
Nun: der Watchdog funktioniert, der Reset wird nach 2s ausgelöst

Aber: Nun will ich nach dem Reset feststellen ob ein Watchdog Reset
ausgelöst wurde. Meine "MessageBox" erscheint aber auch beim externem
Reset (auch nach dem ISP-Proggen) .. Hab ich hier ein Brett vorm Kopf?

Danke schonmal!

int main()
{
  [...] //Grafikinit

  //Wenn Reset durch watchdog:
    if (MCUCSR & (1 << WDRF))
    {MessageBox("Watchdog:\nDas System hat sich neugestartet.",
MB_OK);}

  //Watchdog start
  wdt_enable(WDTO_2S);

  ... //und weiter
Gast #365092
Lesenswert?
• ▲
▼
Möglicherweise liegt es daran, dass das die entsprechenden Statusbits im
MCUCSR nach der Auswertung "von Hand" zurückgesetz werden müssen.

Anbei meine Reset-Check Routine, die ich für den AtMega128 verwende,
die funktioniert soweit zuverlässig!

MfG  Peter
1
void CHECK_reset(void)
2
{  
3
  UART1_puts_I("\n\r");             // a new line
4
  if (MCUCSR & (1<<BORF))           // Brown-Out Reset
5
  {
6
    UART0_putl_I("Brown-Out Reset");
7
  }
8
  else if (MCUCSR & (1<<PORF))      // Power-On Reset
9
  {
10
    UART0_putl_I("Power-On Reset");
11
  }
12
  else if (MCUCSR & (1<<JTRF))      // JTAG Reset
13
  {
14
    UART0_putl_I("JTAG Reset");
15
  }
16
  else if (MCUCSR & (1<<EXTRF))     // External Reset
17
  {
18
    UART0_putl_I("External Reset");
19
  }
20
  else if (MCUCSR & (1<<WDRF))      // Watchdog Reset
21
  {
22
  UART0_putl_I("Watchdog Reset");
23
  }
24
  else
25
  {
26
    UART0_putl_I("Manual Jump");
27
  }
28
  MCUCSR &= 0xE0;                  // Clear Reset-Status
29
}
Moderator Persönliche Seite #365093
Lesenswert?
• ▲
▼
p.s.: Bei den neueren AVRs (alle, die einen Watchdog haben, der
nun auch einen Interrupt auslösen kann) bitte das MCU[C]SR *ganz
schnell* nach Programmstart auslesen und ausnullen und danach
sofort den Watchdog deaktivieren (in dieser Reihenfolge).  Keine
UART-Ausgaben (wie in Peters Beispiel) mit da drin, sonst knallt
der Watchdog-Reset sofort wieder rein.  Ist ein Feature... ist
ordentlich dokumentiert, man rechnet nur erstmal nicht damit.
Der Watchdog bleibt dort nach einem Watchdog-Reset aktiviert,
und was noch verwirrender ist, ein gesetztes WDRF-Bit in MCU[C]SR
verhindert das Abschalten des Watchdogs.

Antwort schreiben

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.

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.