Frage zu Interrupt und Timer

Gast #58923
Ich bräuchte vom Prinzip sowas wie den Watchdog Timer nur das der halt
möglichst einen Interrupt auslöst in dem ich vor'm Reset noch was ins
eeprom schreiben kann. Außerdem sollte die "Watchdog Zeit" recht groß
sein, also ich denk da an was im Bereich 5-10 Sekunden.

Is das möglich und wenn ja wie?

Gruß
tacklemoe
Gast #58924
Tja, dann musst du den Watchdog-Ausgang eben an einen Int-Eingang des MC
anschliessen. Hat nur den Nachteil, das nichts ankommt, wenn die Ints
aus irgendeinem Grund gesperrt sind.
Schreib mal genauer, was du warum machen willst.
Gast #58925
Hi,

im Prinzip sollte das schon gehen. Zunächst nimmst Du einen
(16Bit-)Timer und stellst ihn so ein, daß er z.B. jede Sekunde 1x
aufgerufen wird. Bei jedem ausgelösten Timer-Interrupt zählst Du eine
Variable hoch. Die kann ja irgenwo im SRAM stehen (per lds bzw. sts
ansprechen) oder halt ein Register z.B. r25.

Nach dem Hochzählen überprüfst Du, ob die Variable z.B. den Wert 6 hat.
Wenn nein: keine Aktion. Wenn ja: EEPROM schreiben und danach Reset.

Der Witz dabei: Deine Anwendung stellt die Timer-Variable immer wieder
auf 0. Watchdog Marke Eigenbau.

Viel Spaß!

Sebastian
Gast #58926
Sorry, genauer hätte ich's wirklich schreiben können ;)
Also habe folgendes:
8 Taster steuern 8 bistabile Relais, zur Kontrolle sieht man auf ne'm
LCD Display was passiert und ne DS18S20 Temperatur wird auch noch
angezeigt.
Das ganze auf ne'm ATMega16.

Wie is'n das mit den Timern wenn der Controller sich
irgendwann/irgendwo aufhängt, laufen die wie der Watchdog weiter oder
sind die dann auch blockiert?

Ich wär ja mit dem Watchdog schon einigermaßen zufrieden, hat halt
einfach den Nachteil das man da maximal auf ca. 2 sek Zeit kommt bevor
man ihn resetten muss. Wenn dann ein DAU eine oder mehrere Tasten doof
so lange blockiert gibt's nen Reset.

Gruß
tacklemoe
Gast #58927
Hi,

der Timer kann sich nicht "aufhängen". Er ist quasi ein
eigenständiges Bauteil im MC. Nur wenn der Taktgeber (z.B. externes
Quarz) versagt, läuft auch der Timer nicht mehr weiter.

Sebastian
Gast #58928
Kann ich dann daraus schlussfolgern das selbst dann wenn der Controller
irgendwo hängt ein Timer-Interrupt ausgelöst wird und dann wieder
entsprechender Code ausgeführt werden kann?

tacklemoe
Gast #58929
Richtig! Der Timer-Interrupt wird auf jeden Fall ausgeführt.

Was mir aber gerate noch einfällt: Normalerweise wird der Interrupt ja
mit reti beendet. Springt man vom Interrupt aus an eine beliege Stelle,
gibt's wahrscheinlich Probleme, da die Rücksprungadresse ja noch auf
dem Stack liegt. Am Besten also zu 0x00 (=Anfang) im Programm springen
--> da wird ja sowieso der Stack von Dir initializiert (SPL, SPH). Das
würde ein "Wachhund" ja auch so machen.

Sebastian
Gast #58930
Hi

kannst du nicht. Ein wildgewordenes Programm könnte ja den Timer
stoppen oder dessen INT-Maskierung ändern oder oder oder. Nur der WD
garantiert einen sauberen Reset wenn er überläuft. Natürlich kann ein
wildgewordenes Programm evtl. den WD anhalten. Das ist aber sehr
unwahrscheinlich.

BTW:
Wenn ein einfacher Tastendruck dafür sorgen kann das dein Programm den
WD nicht mehr triggern kann solltest du dein Softwarekonzept
überdenken.

Matthias

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.