www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Reset Button mit Watchdog


Autor: Stefan Noll (nollsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja ich hab wohl etwas zu voreilig eine Schaltung entworfen, bei der 
der Mikrocontroller direkt an eine Batterie gelötet ist und es keinen 
Reset button gibt ...

Zum Glück war der Button an einem Interrupt Pin dran, so dass ich ein 
relativ robustes Reset-Schnipsel mit dem Watchdog schreiben konnte:


#include <avr/interrupt.h>
#include <avr/wdt.h>

#define RESET_BUTTON _BV(PD1)
#define RESET_BUTTON_PORT PORTD
#define RESET_BUTTON_PIN PIND
#define RESET_BUTTON_STATE !(RESET_BUTTON_PIN & RESET_BUTTON) 

#define RESET_BUTTON_INT _BV(INT1)
#define RESET_BUTTON_INT_vect INT1_vect
#define RESET_BUTTON_ISC _BV(ISC10)  /* Any edge of INTn generates an interrupt */

void InitReset()
{
  /* set internal pull up */
  RESET_BUTTON_PORT |= RESET_BUTTON;

  EIMSK |= TASTER_INT;
  EICRA |= TASTER_ISC;  

  MCUSR = 0; /* reset MCU status register */ 
  wdt_disable();

  sei(); /* enable interrupt */
}

ISR(RESET_BUTTON_INT_vect)
{
  if(RESET_BUTTON_STATE) 
  { 
    wdt_enable(WDTO_8S); wdt_reset(); 
  }
  else
  {
    wdt_disable();
  }
}

void InternalWatchdog_Reset()
{
  if(RESET_BUTTON_STATE)
    return;
  wdt_reset();
}

(soweit die idee, hoffe es compiliert da ich es nochmals aus einer c 
datei abgeschrieben habe)

der button funktioniert so lange als reset button, wie die interrupts 
aktiviert sind.

falls der watchdog verwendet werden möchte, muss beim zurücksetzen des 
watchdoges einfach überprüft werden dass der taster nicht gedrückt.

Autor: hans Flip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...bahnbrechend,dieser Knopf ?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hans Flip schrieb:
> ...bahnbrechend,dieser Knopf ?

Genau, man programmiert normalerweise so, dass der Reset-Knopf nicht 
benötigt wird. Der Watchdog ist nur ein Notanker, falls sich doch mal 
irgend etwas verklemmt.

Autor: Stefan Noll (nollsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das grundprogramm ist auch so aufgebaut, dass es "eigentlich" nicht 
hängen kann.
nur kommen dann eben so spezialfälle, dass der prozessor in einer usb 
oder spi operation hängen bleibt. dann kommen so lustige fehler auf, wie 
an dem einen usb port funktioniert das gerät problemlos, steckt man das 
gerät an nen anderen usb port, dann bleibt die datenübertragung nach 
120kbyte stehen weil ein puffer gesperrt bleibt ...

wenn die batterie festgelötet ist, dann hat man im notfall nur die 
möglichkeit die batterie leerlaufen zu lassen - und das kann wie in 
meinem fall mal gut 100h dauern ...

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie schaltet man es aus, wenn kein Schalter dran ist?

Autor: la (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zur Batterie: Der Watchdog braucht afaik genügend strom, dass es in den 
Stromsparmodi einen deutlichen Unterschied in der Laufzeit macht...
Also evtl. nicht so optimal...

Autor: Stefan Noll (nollsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann gut sein dass der Watchdog viel strom braucht,

nur kann man ihn mit dieser lösung ja deaktiviert lassen, nur solange 
man den Taster drückt läuft der watchdog ja. Und diesen Stromverbrauch 
von 2-8S kann man getrost verschmerzen

Autor: Balduin T. (balduin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anständige Mikros sollten es nicht zulassen, den Watchdog im normalen 
Betrieb zu deaktivieren. Es sollte nur Watchdog reset zulässig sein.
Wenn ein Programm beim Amoklauf zufällig auf den Deaktivierungscode 
treffen kann ist ein Watchdog sinnlos.

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Balduin T. schrieb:
> Anständige Mikros sollten es nicht zulassen, den Watchdog im normalen
> Betrieb zu deaktivieren. Es sollte nur Watchdog reset zulässig sein.
> Wenn ein Programm beim Amoklauf zufällig auf den Deaktivierungscode
> treffen kann ist ein Watchdog sinnlos.

Neuere AVRs wie z.B. der Mega 168 beinhalten schon eine Fuse, die 
bewirkt, das der Watchdog immer läuft.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas K. schrieb:
> Neuere AVRs wie z.B. der Mega 168 beinhalten schon eine Fuse, die
> bewirkt, das der Watchdog immer läuft.

Die Fuse haben fast alle AVRs. Neuere AVRs hingegen erlauben auch einen 
Watchdog-Interrupt. Wird dieser nicht behandelt, wird anschliessend ein 
Reset ausgelöst. Je nach Einstellung.

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Knut Ballhause schrieb:
> Die Fuse haben fast alle AVRs.

Die alten mega8 haben sowas aber nicht...

//oder zumindest ist mir die nicht aufgefallen.. Na was solls.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas K. schrieb:
> Die alten mega8 haben sowas aber nicht...

Doch.

Andreas K. schrieb:
> //oder zumindest ist mir die nicht aufgefallen..

Genau.

Autor: Stefan Noll (nollsen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun ja ob programme einen watchdog enthalten sollen oder nicht, das ist 
ja hier auch überhaupt nicht das thema,

auch wenn der watchdog nicht verwendet wird, er kann als interne 
resetquelle verwendet werden.

hier wird nur der watchdog verwendet, einen relativ sicheren reset 
button zu programmieren. der button selbst kann ja dann trotzdem noch 
für weiter anwendungen verwendet werden.

Autor: Andreas K. (derandi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bleibt aber doch noch der Nachgeschmack eines Workaround.
Ich frag mich immer noch warum die Batterie festgelötet ist...

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.