www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer gezielt starten bei ATmega


Autor: Andre Bek (anorukke)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Andre Bek (anorukke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das könnte aber ja ungünstig sein, wenn ich noch nen "überlauf" mit
berechnen müsste, oder nicht ?!

könnte es denn auch so funktionieren :

-timer stoppen (also no clock source)
-TCNT1H und TCNT1L auf "0"
-timer starten (clocksource wählen)
- interrupt aktivieren ?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>muss ich TCNT1H und TCNT1L auf "0" setzen und dann die
>clocksource auswählen (um den timer zu starten)?

In diesem Fall: ja.

Autor: Andre Bek (anorukke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schonmal für die antworten, dein vorschlag hat auf jeden fall
viele vorteile, vllt. muss ich das später sogar so machen :)

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

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

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.