Timer im Interrupt laufen lassen oder stoppen?

Gast #4170774
Lesenswert?
• ▲
▼
Hallo,
ich habe einen Timer programmiert und er funktioniert auch so wie er 
soll. Das was ich nicht gesetzt habe, ist, dass der Timer während des 
Interrupts aufhört zu zählen. Ich weiss, welches Bit ich setzen muss. Da 
ich das bit nicht explizit gesetzt habe, zählt dieser in im Interrupt 
weiter.
Ich wollte aber mal nachfragen, was man üblicherweise macht bzw. wann 
der timer weiterzählen soll und wann nicht.
#4170781
Lesenswert?
• ▲
▼
Welche Aufgabe hat denn dein Timer?

In den meisten Fällen übernimmt der ja die Aufgabe einer Art 'Uhr'. Die 
soll aber weiterlaufen, denn du willst ja die Uhrzeit nicht verlieren, 
nur weil irgendetwas zu einer bestimmten Zeit passiert. Oder bleibt dein 
Wecker morgens stehen, wenn er läutet?


Der Normalfall ist eigentlich, dass man einen Timer durchlaufen lässt. 
Immer. Timer stoppen und neu starten ist eher die Ausnahme.
Gast #4170787
Lesenswert?
• ▲
▼
Karl Heinz schrieb:
> Der Normalfall ist eigentlich, dass man einen Timer durchlaufen lässt.
> Immer. Timer stoppen und neu starten ist eher die Ausnahme.

Hauptsache die ISR zum Timer ist deutlich schneller als der 
Timerintervall. Sonst brauchst du eine reentrante ISR oder du verpasst 
Ticks..
Gast #4170844
Lesenswert?
• ▲
▼
Wie bereits richtig gesagt wurde, soll der Timer ja weiter laufen, 
ansonsten hättest du als echte Frequenz die Zeit zwischen den Interrupts 
plus die Zeit während der der Interrupt gestoppt ist (ausser du 
berechnest die Stopdauer und rechnest das auf den Reloadwert um, aber 
das macht keinen Sinn).

Da du nicht schreibst welchen Controller du verwendest:
Es gibt frühe Controllerarchitekturen, bei denen der Timer manuell 
nachgeladen werden muss, z.B. Timer 0/1 im 16-Bit-Modus beim 8032.
Hier tritt dann der Effekt auf, dass zwischen auftreten des Interrupts 
und Einsprung sowie Sichern der Register auch noch ein paar Takte 
verloren gehen.
In dem Fall würde man den Timer stoppen, den Reloadwert aufaddieren und 
die Takte die für die Addition benötigt werden abziehen.
Das verlängert zwar die ISR etwas, aber es sorgt dafür dass es ein 
vollwertiger Timer auch im 16-Bit-Modus wird (im 8-Bit-Modus gibt 
HW-AutoReload).

Ralf

Antwort schreiben

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.

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.