Timer/Counter 0

Sonntag, den 17.01.2010

von Michael Krüger

Inhalt:

Zeitmessung mit dem AVR

Eine Möglichkeit der Zeitmessung mit dem AVR ist es verschachtelte Schleifen zu erstellen.

Vorteil:

  • Sie sind einfach zu erstellen

Nachteil:

  • Die Zeitabstimmung ist schwierig
  • Sie sind nicht gut "pflegbar" bei Erweiterungen

Timer / Counter

TC0 -> ist immer in IC's vorhanden.
TC1,TC2 -> ist teilweise in IC's vorhanden.


TC0

  • 8 Bit Timer/ Counter
  • Timerbetrieb: Zählt Systemtakte oder Bruchteile davon
  • Counterbetrieb: Zählt externe Flanken

TCNT0 - Timer/ Counter 0 (I/ 0- Register)

In dem TCNT0 Register wird gezählt.

Das Register kann gelesen und beschrieben werden.

Beispiel:

    ...
    ldi temp, 100
    ...

wait:
    in temp, TCNT0
    cpi temp, 200
    breq label
    rjmp wait

Auswertung I

- Regelmäßiges Abfragen von TCNT0

Problem:

Die Zeit, welche zwischen dem erreichten Wert und der Abfrage verstreicht, kann dazu führen, dass das Register TCNT0 weiter gezählt hat und das Ereignis verpasst wurde. In diesem Fall würde der angegebene Wert ( zB. 100 ) niemals beim Abfragen erreicht sein.

Lösung:

Durch anderes Programmieren ist es möglich dieses Überschreiten des angegeben Wertes ( im Beispiel 100 -> 101 ) trozdem zu erkennen.

Dies kann zum Beispiel mit dem Befehl " brsh " ( branch if same or higher ) erzielt werden.

Beispiel:

    ...
    ldi temp, 100
    out TCNT0, temp
    ...
wait:
    in temp, TCNT0
    cpi temp,200
    brsh label
    rjmp wait

Auswetung II

Wird folgen…

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License