Forum: Mikrocontroller und Digitale Elektronik Reset Button mit Watchdog


von Stefan N. (nollsen)


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:

1
#include <avr/interrupt.h>
2
#include <avr/wdt.h>
3
4
#define RESET_BUTTON _BV(PD1)
5
#define RESET_BUTTON_PORT PORTD
6
#define RESET_BUTTON_PIN PIND
7
#define RESET_BUTTON_STATE !(RESET_BUTTON_PIN & RESET_BUTTON) 
8
9
#define RESET_BUTTON_INT _BV(INT1)
10
#define RESET_BUTTON_INT_vect INT1_vect
11
#define RESET_BUTTON_ISC _BV(ISC10)  /* Any edge of INTn generates an interrupt */
12
13
void InitReset()
14
{
15
  /* set internal pull up */
16
  RESET_BUTTON_PORT |= RESET_BUTTON;
17
18
  EIMSK |= TASTER_INT;
19
  EICRA |= TASTER_ISC;  
20
21
  MCUSR = 0; /* reset MCU status register */ 
22
  wdt_disable();
23
24
  sei(); /* enable interrupt */
25
}
26
27
ISR(RESET_BUTTON_INT_vect)
28
{
29
  if(RESET_BUTTON_STATE) 
30
  { 
31
    wdt_enable(WDTO_8S); wdt_reset(); 
32
  }
33
  else
34
  {
35
    wdt_disable();
36
  }
37
}
38
39
void InternalWatchdog_Reset()
40
{
41
  if(RESET_BUTTON_STATE)
42
    return;
43
  wdt_reset();
44
}

(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.

von hans Flip (Gast)


Lesenswert?

...bahnbrechend,dieser Knopf ?

von Christian H. (netzwanze) Benutzerseite


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.

von Stefan N. (nollsen)


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 ...

von Andreas K. (derandi)


Lesenswert?

Und wie schaltet man es aus, wenn kein Schalter dran ist?

von la (Gast)


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...

von Stefan N. (nollsen)


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

von Balduin T. (balduin)


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.

von Andreas K. (derandi)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Andreas K. (derandi)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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

Doch.

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

Genau.

von Stefan N. (nollsen)


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.

von Andreas K. (derandi)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.