Watchdog springt nicht ein

OP #334601
Lesenswert?
• ▲
▼
Guten Tag allerseits

Komme gerade von einem Kunden, dem ich zum zweiten Mal das Geraet
austausche. Das erstere habe ich an einen anderen Kunden verkauft, wo
es seit 2 Wochen einwandfrei laeuft.
Alles in allem sind rund 40 Geraete im Umlauf. Und noch kein einziger
Aussetzer: ausser in diesem Fall.

Es handelt es sich um eine Schaltung mit einem Atmega8. Der Watchdog
Aufruf erfolgt einzig im Main-Loop. BODEN und BODLEVEL sind beide
aktiviert.
Die gemeldeten Fehler:
1. Wenn der Nachtwaechter morgens den Hauptschalter einschaltet, haengt
mein Geraet. Ein Aus- und erneutes Einschalten bringt ihn wieder zu
sich.
2. Wenn mein Geraet eine Sirene aktiviert (via Relais, die wiederum ein
zweites Relais anzieht) dann haengt er sich (manchmal) auf. Ein Aus- und
erneutes Einschalten bringt ihn wieder zu sich.
3. Zufaelliges Haengen des Geraets, ohne irgendeinen Grund.

Ich gehe davon aus, dass irgendwelche Netzstörungen die Ursache dieses
Verhalten ist. Aber warum in alles Welt springt der Watchdog nicht ein?
Gast #334603
Lesenswert?
• ▲
▼
Mehr Möglichkeiten zur Diagnose hast Du nicht?
Zuerst mal würde ich aus eigener Erfahrung heraus auf ein EMV-Problem
tippen. Dazu gehören natürlich auch Störungen der Versorgungsspannung.
Ein entsprechendes Layout kann da schon viel herausreißen.
Nächstes Problem: Es könnte auch ein Softwarefehler sein. Wenn
irgendwelche Bits im RAM gekippt werden, könnte es sein, dass Parameter
nicht mehr vorgesehene Werte haben und dadurch das Programm nicht mehr
so reagiert, wie vorgesehen. Da ist es durchaus möglich, dass der
Main-Loop noch munter den Watchdog-Timer zurücksetzt aber Subroutinen
oder Interrrupts nicht mehr sauber ausgelöst werden. Heißt also: Im
Main-Loop regelmäßig die Timer und Interrupt-Flags überprüfen.
Letzteres wäre nur an den Symptomen herumgebastelt, besser ist es
natürlich, die Ursache zu eliminieren.
OP #334607
Lesenswert?
• ▲
▼
@thkais

Ich habe jetzt WDR() vom MainLoop() in die Task_1sec() verlegt. Diese
Funktion kann nur dann aufgerufen werden, wenn Timer0 seinen Dienst
einwandfrei erledigt.

Wenn ich nun die Spannungsversung mit Spikes verseuche, dann haengt das
Geraet mit der alten Version. Das Geraet mit der neueren Version resetet
sich.

Nochmals herzlichen Dank.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.