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
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.
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.