Forum: Mikrocontroller und Digitale Elektronik Timer im Interrupt laufen lassen oder stoppen?


von Frank (Gast)


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.

von Karl H. (kbuchegg)


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.

von dunno.. (Gast)


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..

von Peter D. (peda)


Lesenswert?

Frank schrieb:
> zählt dieser in im Interrupt
> weiter.

Das ist ja gerade der Witz von HW-Timern, daß kein akkumulierter Fehler 
durch Latenzen und Programmlaufzeiten entsteht. Er muß daher 
weiterlaufen.

von Christian K. (the_kirsch)


Lesenswert?

Um welchen Kontroller geht es denn?


Normalerweise zahlt der Timer munter weiter, selbst wenn gerade eine 
Timer-ISR ausgeführt wird, da der Timer unabhängig von der CPU arbeitet.

von Frank (Gast)


Lesenswert?

Dann lasse ich meinen Timer auch weiterlaufen. Macht ja auch irgendwie 
sinn, damit eine Aktion immer im selben rüthmus ausgeführt wird.

von Ralf (Gast)


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

von Matthias L. (Gast)


Lesenswert?

Frank schrieb:
> rüthmus

Ist das die neue deutsche Rechtschreibung?

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.