mikrocontroller.net

Forum: Compiler & IDEs mega32: Watchdog/ Externer Reset


Autor: Ferdinand S. (noonien) Benutzerseite
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
void CHECK_reset(void)
{  
  UART1_puts_I("\n\r");             // a new line
  if (MCUCSR & (1<<BORF))           // Brown-Out Reset
  {
    UART0_putl_I("Brown-Out Reset");
  }
  else if (MCUCSR & (1<<PORF))      // Power-On Reset
  {
    UART0_putl_I("Power-On Reset");
  }
  else if (MCUCSR & (1<<JTRF))      // JTAG Reset
  {
    UART0_putl_I("JTAG Reset");
  }
  else if (MCUCSR & (1<<EXTRF))     // External Reset
  {
    UART0_putl_I("External Reset");
  }
  else if (MCUCSR & (1<<WDRF))      // Watchdog Reset
  {
  UART0_putl_I("Watchdog Reset");
  }
  else
  {
    UART0_putl_I("Manual Jump");
  }
  MCUCSR &= 0xE0;                  // Clear Reset-Status
}

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uiiii...

Vielen Dank für den Hinweis!

Gruss Peter

Autor: Ferdinand S. (noonien) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Da wäre ich nie drauf gekommen... hab ich wohl im Datemblatt überlesen
:-/

Ich hab es jetzt so und es funktioniert wie es sollte:

//Wenn Reset durch watchdog:

if (MCUCSR & (1 << WDRF))
{
  MessageBox("Watchdog:\nDas System hat sich neugestartet.", MB_OK);
  MCUCSR &= ~(1 << WDRF);
}

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.