Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupt und Timer


von tacklemoe (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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.

von Sebastian Wille (Gast)


Lesenswert?

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

von tacklemoe (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von tacklemoe (Gast)


Lesenswert?

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

von Sebastian Wille (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

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.