Forum: Mikrocontroller und Digitale Elektronik ATmega8 watchdog greift nicht


von Olaf P. (opawilli)


Lesenswert?

Hallo zusammen,

ich muss zu meiner Schande gestehen, dass ich bezüglich µController noch 
wenig Erfahrung habe. Da ich aber zur Zeit ein Projekt bearbeite, bei 
dem ich Probleme mit dem ATmega8 habe, wende ich mich an Euch Experten 
mit folgender Frage:

Die Tests die ich gerade durchführe sind sogenannte Burst Tests. Leider 
lässt sich der ATmega durch diese derartig stören, dass nicht einmal 
mehr die Watchdog mehr greift. Dazu sei gesagt, das ein Burst den 
Controller sowohl "stoppen" kann, er also nichts mehr macht, als auch 
ihn wieder zum "leben" zu erwecken, so dass alles wieder einwandfrei 
funktioniert!

Hat jemand Rat was man hierbei machen kann oder was für einen Controller 
man einsetzen sollte?

Danke und Gruß
Olaf

von The D. (devil_86)


Lesenswert?

Sind diese Burst-Tests nur Software??

von Peter D. (peda)


Lesenswert?

Du verwechselst wohl Watchdog mit David Copperfield?

Nein, ein Watchdog kann nicht zaubern!

Du mußt schon alle ESD-Maßnahemn treffen, z.B. Abblocken der VCC, aller 
Ein- und Ausgänge, Beschalten alle unbenutzten Portpins, Einschalten 
Brownoutreset.

Und vor allem den Watchdog nur an einer Stelle triggern, wo das Programm 
nur bei einwandfreier Funktion vorbeikommt.

Ein Timerinterrupt ist dagegen ideal, um einen Watchdog völlig nutzlos 
zu machen, da er noch lange gehen kann, wenn das Mainprogramm schon 
längst abgestürzt ist.


Peter

von Jörg B. (manos)


Lesenswert?

Olaf P. wrote:
> Die Tests die ich gerade durchführe sind sogenannte Burst Tests.
Was kann man sich darunter vorstellen?

von Olaf P. (opawilli)


Lesenswert?

@ The Devil:

das sind HardwareTests und keine Softwaretests.


@ Peter:

sorry, ich vergass zu erwähnen, dass sämtliche, auch von Dir 
aufgeführten EMV-Massnahmen getroffen wurden.

Ich verstehe jedoch nicht die Sache mit dem Timerinterrupt? Da der 
Watchdog zyklisch am Ende des Mainprogramms zurückgesetzt wird, kann 
doch ein Timerinterrupt oder ein nicht ablaufendes Programm den 
Watschdog nicht lahmlegen?
Ganz im Gegenteil, hier müsste doch der Watchdog gerade zuschlagen (weil 
er nicht zurückgesetzt wird, dieser läuft nach meinem Wissensstand als 
eigenständige Hardwareeinheit in dem verwendeten µController) oder 
nicht?


Gruß
Olaf

von Andreas K. (a-k)


Lesenswert?

Ist der Watchdog per Fuse eingeschaltet oder erst im Programm?

von Karl H. (kbuchegg)


Lesenswert?

Olaf P. wrote:
> Ich verstehe jedoch nicht die Sache mit dem Timerinterrupt?

Das Hauptproblem dürfte sein, dass du zuwenig Informationen
rausrückst um irgendetwas Sinnvolles sagen zu können. Daher
sind alle auf Raten angewiesen und kramen die häufigsten
Ursachen hervor.

Ein beliebter Fehler ist es, den Watchdog in einem Timer
interrupt zurückzusetzen, was natürlich den Sinn eines
Watchdog komplett ad absurdum führt.

Bis jetzt ist dein Frage in die Kategorie:
"Mein Auto geht nicht, obwohl ich die Sonnenblende runtergeklappt
habe" einzuordnen.

von Olaf P. (opawilli)


Lesenswert?

Hallo,

also was meine Unwissenheit angeht, dazu habe ich bereits am Anfang 
etwas geschrieben und tut mir leid, das ich da Newbee bin. Alles was 
sich daraus an Informationsübertragung ergibt, ist entsprechend 
schlecht. Auch hierfür ein Sorry, ist keine Absicht.

Alles was ich über den Watchdog weis, ist das dieser unabhängig vom 
Prozessortakt arbeitet und auch eine eigene Hardware darstellt, obgleich 
er im Controller implementiert ist. Es ist wohl ein Counter, der wenn er 
nicht zurückgesetzt wird einen Reset durchführt. Im Mainprogramm wird 
dieser Reset (und er wird auch nur da durchgeführt, nicht etwa über 
Fuses bereits voreingestellt) am Ende des Programms aufgerufen. Entferne 
ich den Resetbefehl, führt der Watchdog den Reset ordnungsgemäß durch.

Im Normalbetrieb (ohne Burst Test, diese dienen dafür, wie sich Geräte 
bei Netzstörungen verhalten) funktioniert alles einwandfrei.

Bei einem Burst kann (muss nicht) der Prozessor irgendwo hängen 
bleiben(wird also gestört) und kann demnach auch den watchdog nicht 
zurücksetzen. Dieser aber schlägt in dem Fall ebensowenig zu und 
resetted den Controller nicht.
Ein weiterer Burst kann (ist aber auch nicht zwingend) den Controller 
wieder zum Normalbetrieb zurückholen!

Vielleicht gibt es hierzu ja erkenntnisse, die sich Berücksichtigen 
liessen, aber dafür kenne ich mich absolut nicht aus!

Grüße
Olaf

von Peter D. (peda)


Lesenswert?

Olaf P. wrote:

> Bei einem Burst kann (muss nicht) der Prozessor irgendwo hängen
> bleiben(wird also gestört) und kann demnach auch den watchdog nicht
> zurücksetzen. Dieser aber schlägt in dem Fall ebensowenig zu und
> resetted den Controller nicht.

Du mußt erstmal prüfen, ob diese Vermutung stimmt.

Es kann ja durchaus sein, daß das Programm nichts sinnvolles tut, aber 
trotzdem den Watchdogresetbefehl durchläuft.

Toggle mal nen IO-Pin (LED) dabei, dann kannst Du sehen, ob sie pulst.
Setze auch mal die Watchdogfuse, damit er nicht versehentlich disabled 
wird.
Versuche mal nach jedem Reset auszugeben, was die Resetquelle war.

Wenn er hängt, prüfe, ob er durch einen externen Reset (nicht power on 
reset) wieder weiter läuft.



Peter

von Andreas K. (a-k)


Lesenswert?

Olaf P. wrote:

> nicht zurückgesetzt wird einen Reset durchführt. Im Mainprogramm wird
> dieser Reset (und er wird auch nur da durchgeführt, nicht etwa über
> Fuses bereits voreingestellt) am Ende des Programms aufgerufen. Entferne
> ich den Resetbefehl, führt der Watchdog den Reset ordnungsgemäß durch.

Ich kann dieser Beschreibung nicht recht folgen. Kann es sein, dass wir 
über Sinn und Unsinn eines Watchdogs unterschiedlicher Ansicht sind? Ein 
Watchdog ist dazu da, im Regelfall nicht aktiv zu werden. Er wird im 
Hautpprogramm immer mal wieder daran erinnert, dass alles noch lebt und 
führt folglich nicht zum Reset. Nur wenn das Programm dieser 
Errinnerungen lange genug unterlässt, gibt's einen Reset.

In derart kritischer Umgebung ist auch anzuraten, den Watchdog bereits 
per Fuse zu freizuschalten. Denn sonst entsteht ein Fenster zwischen per 
Watchdog ausgelöstem Reset und erneuter Freischaltung im Programm, in 
dem Hänger einfach bloss zum Aufhängen führen.

von Andreas K. (a-k)


Lesenswert?

PS: Kann auch sein, das ich sprachlich etwas verwirrt bin. 
Watchdog-Reset kann zweiterlei bedeuten. Einerseits den Reset vom 
Watchdog-Timer, andererseits den vom Watchdog ausgelösten Reset. Was 
ungefähr das Gegenteil davon ist.

von Roland Z. (r-zimmermann)


Lesenswert?

Hallo,

je nach Taktung kann so nen mega8 schon mal bei einer ordentlichen 
Störung hängenbleiben (selbst schon mal unfreiwillig ausprobierten 
müssen). Der Fehler geht meistens Vom Taktgenerator aus, d.h. der 
Oszillator hört auf. Um die Sache um einiges Stabiler zu machen würde 
ich die CKOPT-Fuse programmieren (heißt in einigen Proggersoftware auch 
"Full Amplitude") damit schwingt der Oszillator mit vollem Hub und ist 
somit um einiges Stabiler. Der Nachteil ist daß der AVR dann ein paar mA 
mehr Strom haben will.

Roland

von Olaf P. (opawilli)


Lesenswert?

Roland Z. wrote:
> Hallo,
>
> ...
> Um die Sache um einiges Stabiler zu machen würde
> ich die CKOPT-Fuse programmieren (heißt in einigen Proggersoftware auch
> "Full Amplitude") damit schwingt der Oszillator mit vollem Hub und ist
> somit um einiges Stabiler.
> ...
>
> Roland

Du bist mein Held. Die CKopt Fuse gesetzt und der Atmega lässt sich 
nicht mehr stören, bzw. alles funktioniert wie angedacht.

Danke und Gruß
Olaf

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.