www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupt und Timer


Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.