Timer gezielt starten bei ATmega

OP #404549
Lesenswert?
• ▲
▼
Hi,

ich hab da mal ne frage und würde mich freuen, wenn mir jemand helfen
könnte:)

folgendes: (proz. atmega48)

ich möchte gerne  zu einem bestimmten zeitpunkt in einer
interruptroutine einen timer starten, d.h. ich habe ein int-event und
möchte exakt nach einer gewissen zeit t eine andere aktion ausführen
(zu dem zeitpunkt ist das programm garantiert nicht mehr in dieser int
routine).
mein problem ist, dass ich nicht genau weiss mit welchem register ich
z.b. den 16bit timer auf "0" setze um später einen compare-int
auslösen zu können.

heisst z.b. ein  TIMSK1  = _BV(OCIE1A)  -> counter starten von "0",
oder muss ich TCNT1H und TCNT1L auf "0" setzen und dann die
clocksource auswählen (um den timer zu starten)?
#404550
Lesenswert?
• ▲
▼
Es reicht zu, wenn Du den laufenden Timerstand einliest, Deine
"Verzögerung" dazu addierst und damit das Compare-Register fütterst
und dann (nach Löschen des Compare-Interrupt-Flags) den
Compare-Interrupt freischaltest.

Im Compare-Interrupt machst Du dann den beabsichtigten Job und
deaktivierst den Compare-Interrupt.

Diese Vorgehensweise hat den Vorteil, dass der Timer frei durchlaufen
kann, Du also quasi gleichzeitig noch den ICP-Interrupt (z.B.
Impulsbreitenmessung), den anderen Compare-Interrupt und den
Überlauf-Interrupt benutzen, ohne dass die sich gegenseitig stören.

...
#404554
Lesenswert?
• ▲
▼
> das könnte aber ja ungünstig sein, wenn ich noch nen "überlauf" mit
> berechnen müsste, oder nicht ?!

Da der Timer mit begrenztem Zählumfang (16 Bit) arbeitet, kompensieren
sich die Überläufe und Überträge der Rechnerei. Wenn Du also durch das
Addieren einen kleineren Wert (+ Übertrag) erhältst, dann erreicht der
Timer diesen kleineren Wert erst in seiner nächsten Runde (also nach
seinem Überlauf). Denn in der aktuellen Runde hat er diesen Wert ja
schon "verpasst".

Das ist der gleiche Effekt, als wenn Du dezimal zählst und rechnest,
Dir aber nur die letzten zwei Ziffern anzeigen lässt und auch nur mit
denen weiter rechnest.

...
Gast #404555
Lesenswert?
• ▲
▼
>Das ist der gleiche Effekt, als wenn Du dezimal zählst und rechnest,
>Dir aber nur die letzten zwei Ziffern anzeigen lässt und auch nur mit
>denen weiter rechnest.

Schön erklärt! ;)

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.