mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtMega128 Prozessüberwachung


Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
ich habe erst vor kurzem angefangen mich mit der Welt der AtMega 
Controller hobbymäsig zu beschäftigen. Dabei ist ein Programm 
entstanden, welches den seriellen Datenstrom einer GPS Maus ausließt, 
verarbeitet und auch auf MMC speichert. Soweit sogut.
Jetzt möchte ich, dass der Controller sich selbst überwacht. Er soll 
nicht ewig in seiner Empfangsroutine hängen bleiben, wenn das GPS nichts 
sendet, sondern sagen wir mal einen Zeitansatz bekommen. Ist diese Zeit 
vorbei, soll er selbst erkennen, woran er gescheitert ist und eine 
Fehlermeldung hinterlegen.
Beim anschauen der Interrupts im Datenblatt, ist mir der Watchdogtimer 
ins Auge gefallen. Der sorgt aber ja nur dafür, dass sich der Controller 
reseted. Also, wonach soll ich als Nächstes gucken? Gibt es da eine 
andere Methode die mir noch nicht eingefallen ist, oder gar 
Codebeispiele in GCC?
Danke & Gruß
Jörg

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Watchdog bringt dir hier nicht viel, da du dann ja nicht erkennen 
kannst, woran es lag (ok du kannst sehen, dass es ein watchdog reset 
war, mehr aber auch nicht, zumindest nicht ohne sinnlosen aufwand)

Ich würde einfach einen der Hardware timer (mit passendem vorteiler) 
hernehmen, im überlaufinterrupt eine Variable hochzählen. Dann legst du 
noch ne variable an, die dann als timeout fungiert, wenn der wert der 
timer variable größer ist als der timeout, dann aufgeben und 
entsprechende fehlermeldung ausgeben.
Natürlich musst du bei jedem neustart der empfangsroutine z.b. die 
Zählervariable zurücksetzen.

Autor: Jens P. (jmoney)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..oder wenn du viel Zeit hast (bzw. der Controller nix zeitkritisches zu 
tun hat), kannst du auch jede Routine zuerst mal eine Flashzelle 
beschreiben lassen. Dann den Watchdog einschalten und fertig. Flash 
schreiben dauert halt ein paar Takte. Sind bei AVR aber IIRC gar nicht 
mal so viele.
Flash und nicht SRAM, weil das SRAM nach nem Watchdog-Reset gelöscht 
wäre.
Flash und nicht EEPROM, weil das Flash mindestens um den Faktor 10 
länger hält und du hast ja wahrscheinlich vor, deine Routinen öfter 
auszuführen. Das Problem der Haltbarkeit kann man in den Griff kriegen, 
wenn man nicht immer die selbe Flash-Zelle beschreibt, sondern nach 
jedem Schreiben inkrementiert. Da ein Pointer auf die jeweils aktielle 
Zelle wieder eine einzelne Zelle belasten würde, musst du auch noch 
einen Zähler dazu packen. Dann kann man beim Starten rekonstruieren, 
welche Routine zuletzt wohin geschrieben hat, dass sie gestartet wurde.

Der Preis für den Komfort des Watchdogs, der sich um alles kümmert, ist 
also ein ziemliches Gefrickel. Haukes Vorschlag ist da schöner, wenn gut 
implementiert..

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal!
Ich denke, ich werde mal versuchen Haukes Vorschlag zu implementieren. 
Wenn ich den Watchdog mit dem Flash schreiben benutzen würde um fest zu 
stellen, woran der Controller gescheitert ist, würde ich zwar wissen, 
was nicht geklappt hat aber auch die letzten Positionsdaten verlieren.
Falls noch jemand andere Vorschläge oder gar Codebeispiele hat, immer 
her damit.
Gruß
Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.