Was konkret möchtest Du mit dem Timer realisieren?
Ich frage deshalb, weil es viele Möglichkeiten gibt, mit einem Timer zu
arbeiten.
Eine oft anzutreffende Anwendung ist das Erzeugen eines regelmäßigen
Taktes zur Synchronisation verschiedener Aufgaben wie Tastenentprellung,
Drehgeberauswertung, Zeitzählung, Impulserzeugung, usw...
Dazu ist
- der Vorteiler einzustellen,
- Betriebsart und ggf. Zählumfang einzustellen,
- der zu benutzende Interrupt freizugeben,
- das I-Flag im SREG zu setzen, um Interrupts global freizugeben,
- der Interrupt-Vektor auf die Adresse der ISR einzutragen,
- die ISR zu schreiben.
Je nach Betriebsart ist in der ISR. ggf noch der nächste
Timer-Interrupt-Termin zu setzen. Braucht man von einem Timer nur einen
Interrupt, so bietet sich der CTC-Modus an, das erspart das Setzen des
nächsten Termins in der ISR. Braucht man mehrere Interrupts, bietet sich
das Nutzen beider Compare-Einheiten an, wobei in der ISR der
Compare-Wert um das Intervall erhöht wird. Oftmals sieht man noch die
Nutzung des Überlauf-Interrupts mit Vorladen des Timers in der ISR. Dies
ist bei neueren AVRs aufgrund der Compare-Einheiten auch bei den
8-Bit-Timern nicht mehr zeitgemäß. Der 16-Bit-Timer ist auch noch mit
ICP ausgestattet, das ist ein spezieller externer Interrupt, der beim
Pegelwechsel (in Hardware) den aktuellen Zählerstand des Timrs in die
ICP-Register kopiert, wodurch auch bei verzögertem ISR-Aufruf (bedingt
z.B. durch andere Interrupts) recht genaue Messungen von Impulsen
(Periodendauer, Impulsdauer) möglich sind.
Neben dem Auslösen von Interrupts können die Timer mittels der
Compare-Einheiten auch direkt an einem (leider fest verdrahtetem) Pin
wackeln, was zur Erzeugung von festen oder variablen Frequenzen genutzt
werden kann (Toggle-Mode) oder zum Erzeugen von PWM mit festem oder
variablen Tastgrad.
Im Normalfall (als Timer ) zählt der Timer Controllertakte (direkt
oder über Vorteiler), es lassen sich aber auch externe Impulse über die
Zähleingänge (T0, T1) zählen.
Längere Verzögerungen erreicht man durch Software-Timer. Dies sind
Variablen, die (nebenbei, also neben der normalen Aufgabe eines Timers)
durch einen Timer-Interrupt (direkt oder über Jobflag) hoch oder runter
gezählt werden und beim Erreichen des vorgesehenen Wertes ein Ereignis
auslösen.
Ein Timer kann oftmals mehrere zyklische Jobs verwalten, indem man im
Timer die Aufgaben anhand der Zählerstände von Nachteilern
(Zählvariablen) verteilt.
Du siehst also, das Thema Timer ist recht komplex und vielseitig. Um den
richtigen Timer und die richtige Betriebsart zu finden, muss die zu
erledigende Aufgabe schon recht genau formuliert werden.
~