Watchdog > 8 Sekunden

Gast #528931
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
#528936
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 ;-)
#528986
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.
#529093
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
#529119
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
#529134
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
#529221
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
#529299
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
#529304
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
#529330
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
Gast #529623
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ß


Gast #529641
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
Gast #529709
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?
Gast #529718
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
#529721
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
Gast #529737
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.
#529747
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.
#529887
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
Gast #529912
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
#529952
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
#529977
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren