Forum: Mikrocontroller und Digitale Elektronik Watchdog > 8 Sekunden


von Tony (Gast)


Lesenswert?

Guten Morgen!

Ist es beim Atmega8 möglich, die Zeit bis zum Auslösen des Watchdog auf 
einen Wert einzustellen, der über 8 Sekunden liegt?

von Katzeklo (Gast)


Lesenswert?

Sollte gehen. Die Zeit ist doch direkt abhängig von der Taktfrequenz, 
also runter damit und du hast deine Zeit.

von A.K. (Gast)


Lesenswert?

Stimmt, aber wie verändere ich die Taktfrequenz des internen 
Watchdog-R/C-Oszillators ohne den Chip auszufräsen?

von Peter D. (peda)


Lesenswert?

Einfach mit nem Countdown-Zähler in nem Timerinterrupt erweitern.


Peter

von Dirk H. (arm-dran)


Lesenswert?

Er meinte warscheinlich eine niedrigere Quarzfrequenz.

von Katzeklo (Gast)


Lesenswert?

@A.K.

Hmm...da hast du wohl recht :)

von Dirk H. (arm-dran)


Lesenswert?

Wenn man einen 100Hz Quarz nimmt, erreicht man glaub ich 8h 
WatchdogDelayTime.

von Katzeklo (Gast)


Lesenswert?

Ja, aber der Watchdogtimer wird von einem internen 1MHz-Oszillator 
versorgt.

von Falk (Gast)


Lesenswert?

@Dirk Hofmann

>Wenn man einen 100Hz Quarz nimmt, erreicht man glaub ich 8h
>WatchdogDelayTime.

Heute schon der 1. April? Dein 100 Hz Quarz ist wahrschienlich dann so 
gross wie ein Stück Butter.

MfG
Falk

von Dirk H. (arm-dran)


Lesenswert?

Falk wrote:
> @Dirk Hofmann
>
>>Wenn man einen 100Hz Quarz nimmt, erreicht man glaub ich 8h
>>WatchdogDelayTime.
>
> Heute schon der 1. April? Dein 100 Hz Quarz ist wahrschienlich dann so
> gross wie ein Stück Butter.
>
> MfG
> Falk

Und ein Stück Butter bekommt man für 70Cent. Also auch nicht viel teurer 
als ein Quarz ;-)
Außerdem gibt es externe Prescaler ;-)

von Karl H. (kbuchegg)


Lesenswert?

Darf ich auch mal was fragen?

Warum will man Watchdog Zeiten über 8 Sekunden haben?
Geht das nicht eigentlich am Sinn eines Watchdogs vorbei?

von Dirk H. (arm-dran)


Lesenswert?

@Karl-Heinz Buchegger

Dirk Hofmann wrote:
> Wenn man einen 100Hz Quarz nimmt, erreicht man glaub ich 8h
> WatchdogDelayTime.

Deswegen diese Bemerkung.
Was heisst eigentlich "über 8 sekunden" ?

von Jörg B. (manos)


Lesenswert?

Was soll denn dann nach > 8 Sekunden passieren? Der Programm-Reset oder 
was anderes?

Meine Interpretation eines Watchdog-Timers ist eigentlich, dass er ein 
Programm, welches aus irgendeinem Grund hängengeblieben ist, wieder in 
einen definierten Zustand (Neustart) zurückgesetzt wird.

von Tassilo B. (big_t)


Lesenswert?

Ob es sinnvoll ist, einen Watchdog mit über 8s 'Aktivierungszeit' zu 
betreiben, sei mal dahingestellt, Tatsache ist, daß der Watchdog am 
internen Taktgeber hängt, dessen Takt prinzipiell fest vorgegeben ist. 
Mit den verfügbaren Prescsalern sind da nicht mehr als rund 2s drin, 
steht so auch im Datenblatt. Hätte der WD im Mega8 einen eigenen INT (so 
wie Mega48/88/168), dann könnte man die Zeit auf 4s bekommen aber so 
wird's nicht mehr.

Daher die Antwort auf die originale Frage: Nein.

Tassilo

von Peter D. (peda)


Lesenswert?

Tassilo Böhr wrote:

> Daher die Antwort auf die originale Frage: Nein.

Klar geht das.

Du setzt den Watchdog z.B. auf 1s.

Dann einen Timerinterrupt alle 0,5s.

In der zu überwachenden Routine wird nun eine Variable auf 16 gesetzt.

Der Timerinterrupt zählt diese Variable runter und triggert den 
Watchdog.

Erreicht die Variable 0, bleibt der Timerinterrupt in einer 
Endlosschleife stehen und triggert auch nicht mehr den Watchdog, so daß 
dieser nach einer weiteren Sekunde den Reset macht.


Peter

von Tassilo B. (big_t)


Lesenswert?

>...
>Der Timerinterrupt zählt diese Variable runter und triggert den
>Watchdog.
>...

Da kann man sich ja gleich fast den ganzen Watchdog-Krams sparen. Die 
Variable im Timer-INT runterzählen und bei 0 den WD ohne Prescaler 
starten und nirgends zurücksetzen :-)
Es ist kein Problem, einen Reset nach 8s zu erzeugen, bloß auschließlich 
mit dem Watchdog wird das nix...

Tassilo

von Peter D. (peda)


Lesenswert?

Tassilo Böhr wrote:

> Da kann man sich ja gleich fast den ganzen Watchdog-Krams sparen.

Eben nicht !

Der Timerinterrupt triggert ja nur dann den Watchdog, solange der zu 
überwachende Prozeß die Variable spätestens alle 8s auf den Startwert 
zurücksetzt.

Im Ergebnis hat man also einen echten 8s Watchdog.

Mit ner 16Bit Variable kannst Du bei 0,5s Timerinterrupt einen 9h 
Watchdog realisieren.


Peter

von Tassilo B. (big_t)


Lesenswert?

Ich sehe vom Ergebnis her trotzdem keinen Unterschied:
Ob ich nun aller 500ms einen aktiven WD zurücksetze solange die 
entsprechende Variable != 0 ist oder erst bei Variable == 0 einen WD 
ohne Prescaler überhaupt erst einschalte und nie zurücksetze, führt 
alles zum gleichen Ergebnis, der Watchdog schlägt zu.

Tassilo

von Peter D. (peda)


Lesenswert?

Tassilo Böhr wrote:
> Ich sehe vom Ergebnis her trotzdem keinen Unterschied:
> Ob ich nun aller 500ms einen aktiven WD zurücksetze solange die
> entsprechende Variable != 0 ist oder erst bei Variable == 0 einen WD
> ohne Prescaler überhaupt erst einschalte und nie zurücksetze, führt
> alles zum gleichen Ergebnis, der Watchdog schlägt zu.

Der Unterschied ist ein ganz gewaltiger:

Wenn der Timerinterrupt abschmiert, schlägt bei mir auch der Watchdog 
zu, bei Dir schläft er aber ganz gemütlich weiter.

Ein schlafender Watchdog ist sein Futter nicht wert.


Peter

von Tassilo B. (big_t)


Lesenswert?

Das ist wahr. Vor allem, da ich nicht beurteilen kann, wie groß die 
Wahrscheinlichkeit ist, daß man sich einen Timer-INT zerballert... Da 
muß aber schon einiges schief gehen, oder?
Der Tony schweigt sich allerdings auch aus und sagt uns nicht was er 
eigentlich machen will. Vielleicht disqualifiziert sich der WD aus ganz 
anderen Gründen...

Tassilo

von Dirk H. (arm-dran)


Lesenswert?

Vielleicht führt er ja nur kurz ein Programm aus, was in einer 
Endloswarteschleife endet. Dies soll aller 8s neu gestartet werden ;-).

von Michael U. (Gast)


Lesenswert?

Hallo,

dann laß mal nicht die neuen AVR kommen, die sind so schnell, die 
schaffen die Endlosschleife in 4s... ;-))

Gruß aus Berlin
Michael

von Tony (Gast)


Lesenswert?

Morgen,

erst einmal vielen Dank für die informative Diskussion. Hab es leider 
erst jetzt geschafft alles zu lesen und mich dazu zu äußern.

Dabei wohl erst einaml zu Frage von Karl_Heinz.

>Warum will man Watchdog Zeiten über 8 Sekunden haben?
>Geht das nicht eigentlich am Sinn eines Watchdogs vorbei?

Im Prinzip schon, doch das ist anscheinend meine einzige Möglichkeit den 
Controller per Software nach einer bestimmten Zeit zu resetten.

Der Reset wird benötigt um ein Funksystem neu zu starten. Dabei habe ich 
mehrere Systeme(Slaves), die mit dieser Watchdog Variante ausgestattet 
werden sollen. Diese Systeme melden sich nach einem Neustart(leider nur 
nach einem Neustart) beim Master an. Das Problem ist nun, dass auch 
jeweils nur ein Slave-System angemeldet werden soll/darf/kann.

Feste Kennungen sind dabei aber auch nicht möglich, im Prinzip melden 
sich  alle Systeme mit der gleichen Kennung an. Nun soll verhindert 
werden, dass sich die Systeme gleichzeitig anmelden, da es sonst zum 
Crash kommt.

Die Variante von Peter hört sich sehr gut an, die werd ich mal 
ausprobieren.

Gruß



von Falk (Gast)


Lesenswert?

@Tony

>Feste Kennungen sind dabei aber auch nicht möglich, im Prinzip melden
>sich  alle Systeme mit der gleichen Kennung an. Nun soll verhindert
>werden, dass sich die Systeme gleichzeitig anmelden, da es sonst zum
>Crash kommt.

Und warum glaubst du, dass ein 8s Watchdog Timeout das verhindert?
Du brauchst bestenfalls einen Reset, aber der kann problemlos mach 10ms 
durchegführt werden. Die Logik zur Anmeldung nur eines Slaves muss ins 
Propgramm gepackt werden. Z.B. mit zufälligen Wartepausen, so ählich wie 
die Wiederholdung von Übertragungen bei Ethernet.

MFG
Falk

von Tony (Gast)


Lesenswert?

>Und warum glaubst du, dass ein 8s Watchdog Timeout das verhindert?

Im Prinzip verhindert der Watchdog ja nicht das gleichzeitige anmelden, 
sondern nur ermöglicht einen wiederholten Verbindungsaufbau alle 8 
Sekunden. 30 Sekunden wären in diesem Fall optimal.

Das funktioniert im Prinzip so: Die Systeme werden der Reihe nach 
eingeschaltet. Das erste System verbindet sich direkt, vereinbart ein 
zufällige Kennung und wird gesteuert. Die anderen Systeme können sich 
nun nicht mehr Verbinden. Sie sollen aber durch den Watchdog alles 30 
Sekunden versuchen sich zu verbinden. Nachdem ich das eine System 
abgemeldet habe, soll die Möglichkeit bestehen, sich mit den nächsten zu 
verbinden.

>Du brauchst bestenfalls einen Reset, aber der kann problemlos mach 10ms
>durchegführt werden.

Und wie das ohne Watchdog?

von Michael Wilhelm (Gast)


Lesenswert?

Eine Portleitung an den Reset Pin und gut ist.

MW

von Falk (Gast)


Lesenswert?

@Tony

>>Und warum glaubst du, dass ein 8s Watchdog Timeout das verhindert?

>Im Prinzip verhindert der Watchdog ja nicht das gleichzeitige anmelden,
>sondern nur ermöglicht einen wiederholten Verbindungsaufbau alle 8
>Sekunden. 30 Sekunden wären in diesem Fall optimal.

Na dann mach doch einfach ne Warteschleife für 30 Sekunden und lass dann 
den Watchdog innerhalb von einer x-beliebig kurzen Zeit den Reset 
ausführen.

>Das funktioniert im Prinzip so: Die Systeme werden der Reihe nach
>eingeschaltet. Das erste System verbindet sich direkt, vereinbart ein
>zufällige Kennung und wird gesteuert. Die anderen Systeme können sich
>nun nicht mehr Verbinden. Sie sollen aber durch den Watchdog alles 30
>Sekunden versuchen sich zu verbinden. Nachdem ich das eine System
>abgemeldet habe, soll die Möglichkeit bestehen, sich mit den nächsten zu
>verbinden.

Diese 30 Sekuden können problemlos in Software realisert werden. Der 
Watchdog macht dann nur noch den Reset, muss aber selber nicht auf 30 
Sekunden konfiguriert werden.

>>Du brauchst bestenfalls einen Reset, aber der kann problemlos mach 10ms
>>durchegführt werden.

>Und wie das ohne Watchdog?

Mit Watchdog, nur kann der auf eine beliebig kurze Zeit konfiguriert 
werden.

MfG
Falk

von Peter D. (peda)


Lesenswert?

Tony wrote:

> Das funktioniert im Prinzip so: Die Systeme werden der Reihe nach
> eingeschaltet. Das erste System verbindet sich direkt, vereinbart ein
> zufällige Kennung und wird gesteuert. Die anderen Systeme können sich
> nun nicht mehr Verbinden. Sie sollen aber durch den Watchdog alles 30
> Sekunden versuchen sich zu verbinden. Nachdem ich das eine System
> abgemeldet habe, soll die Möglichkeit bestehen, sich mit den nächsten zu
> verbinden.

Naja, sowas macht man aber nicht mit nem Watchdog.

Du brauchst nur ne Init-Routine, die per Timer oder Delayloop alle 8s ne 
Verbindung versucht.
Und danach kommt das Hauptprogramm.
1
main()
2
{
3
while( init() == FAILED ){
4
  delay( 8s );
5
}
6
for(;;){
7
  // mainloop
8
}
9
}


Peter

von Tony (Gast)


Lesenswert?

>Naja, sowas macht man aber nicht mit nem Watchdog.

>Du brauchst nur ne Init-Routine, die per Timer oder Delayloop alle 8s ne
>Verbindung versucht.

Geht nicht. Die Verbindung kann nur nach einem Neustart erfolgen. Sobald 
der Verbindungsaufbau einmal fehlgeschlagen ist, kann keine Verbindung 
mehr hergestellt werden. Also ein Reset muss sein.

Das mit der Zeitschleife ist aber ne gute Idee.

von Tony (Gast)


Lesenswert?

Macht es dem Controller eigentlich was aus, wenn er ständig resettet 
wird?

von Dirk H. (arm-dran)


Lesenswert?

Tony wrote:
> Macht es dem Controller eigentlich was aus, wenn er ständig resettet
> wird?

NEIN.

Du solltest das jetzt nicht mit Beispielen von mechanischer/elektrischer 
Abnutzung verwechseln.
Wenn Du Dein Auto aller 8 Sekunden neu startest, macht es ihm mit 
Sicherheit etwas aus.

Sontst könnte man sich auch die Frage stellen, ob in einem µC sich das
Accu Register schnell abnutzt, weil es mit am häufigsten benutzt wird.

von Björn W. (bwieck)


Lesenswert?

Dirk Hofmann wrote:

> Sontst könnte man sich auch die Frage stellen, ob in einem µC sich das
> Accu Register schnell abnutzt, weil es mit am häufigsten benutzt wird.

Die Frage ist garnicht soo blöd, Ich habe letztens in einem 29 Jahre 
alten Frequenzzähler 2 Stück 4051 Multiplexer tauschen müssen, weil die 
es nicht mehr geschafft haben die Leitung bei LOW auf unter 1,8 Volt zu 
bringen...

Wie gesagt, das hat 29 Jahre funktioniert und anscheinen ist da in den 
Chips irgentwas über die Zeit verändert worden.
Rein logisch gesehen Funktionieren die Dinger ja noch, halten sich bloss 
nicht mehr an die Pegeldefinitionen für CMOS.

Grüße
Björn

von Falk (Gast)


Lesenswert?

@Björn Wieck

>Wie gesagt, das hat 29 Jahre funktioniert und anscheinen ist da in den
>Chips irgentwas über die Zeit verändert worden.

In der Anfangszeit der Halbleiteri gab es viele Probleme. U.A. mit 
Gehäuseundichtigkeiten, dadurch wurde der IC durch Feuchtigkeit 
angegeiffen. Oder Dotierungsprobleme, woduch während des Beriebs die 
Halbleiterzonen sich gegenseitig verunreinigt haben. LEDs altern uas 
diesem Grund. Und, und, und. Das sind aber eher Alterungsprobleme, als 
Abnutzungsprobleme.

Aber ein Logikbaustein heutiger Produktion und Technologie sollte bei 
korrektem Betrieb fast ewig halten.

MFG
Falk

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Ich verstehe gerade nicht, warum die Funkmodule ohne Reset des AVRs 
keine neue verbindung aufbauen können? Wenn du den AVR resettest 
initialisierst du das Modul vermutlich neu ... könntest du nicht auch 
die Initialisierung neu aufrufen?!

Kann natürlich sein, dass du recht hast aber mir fällt gerade kein 
richtiger Grund ein.

von Peter D. (peda)


Lesenswert?

Björn Wieck wrote:

> Die Frage ist garnicht soo blöd, Ich habe letztens in einem 29 Jahre
> alten Frequenzzähler 2 Stück 4051 Multiplexer tauschen müssen, weil die
> es nicht mehr geschafft haben die Leitung bei LOW auf unter 1,8 Volt zu
> bringen...


Wenns ein CD4051 war, die sind bei 5V schon recht hochohmig. Das könnte 
für Standard-TTL schon so ganz knapp gewesen sein.

Und daß ein falsch dimensionierter IC irgendwann aussteigt, ist völlig 
normal.


Bei 5V nimmt man nen 74HCT4051.


Peter

von Falk (Gast)


Lesenswert?

@Peter Dannegger

>Bei 5V nimmt man nen 74HCT4051.

Gabs den schon vor 29 Jahren?

MFG
Falk

von Björn W. (bwieck)


Lesenswert?

Peter Dannegger wrote:

> Wenns ein CD4051 war, die sind bei 5V schon recht hochohmig. Das könnte
> für Standard-TTL schon so ganz knapp gewesen sein.
>
> Und daß ein falsch dimensionierter IC irgendwann aussteigt, ist völlig
> normal.
>
>
> Bei 5V nimmt man nen 74HCT4051.

Ich habe neue CD4051 genommen, mit denen gehts auch, die Pegel sind 
wieder in Ordnung.

Gruß
Björn

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.