Timer beim Atmel AVR

URL: ../..dic/hardwarenahe_programmierung/avr_timer.html

Timer beim Atmel AVR

Diese Seite beschreibt die Timer des ATMega16severity symbol

Prinzipiell lässt sich diese Information auch auf andere Mikrocontroller der AVR Serie übertragen, es empfiehlt sich aber die Informationen mit dem entsprechenden Datenblatt zu vergleichen!

Informationen im Datenblattseverity symbol

Die Informationen dieser Seite entstammen dem originalen Datenblatt (Rev. 2466T–AVR–07/10) des ATMega16 von Atmel.

  • Seite 71-86: Timer0 (8 Bit)
    • Seite 71: Übersicht und Blockschaltbild
    • Seite 76-80: Betriebsmodi
    • Seite 83-86: Registerbeschreibung
  • Seite 89-116: Timer1 (16 Bit)
    • Seite 89: Übersicht und Blockschaltbild
    • Seite 101-107: Betriebsmodi
    • Seite 110-116: Registerbeschreibung
  • Seite 117-134: Timer2 (8 Bit)
    • Seite 117: Übersicht und Blockschaltbild
    • Seite 122-125: Betriebsmodi
    • Seite 128-130: Registerbeschreibung
Anwendungenseverity symbol

Je nach Anwendung liefert die folgende Übersicht eine Hilfestellung beim Einstellen der Register:

Allgemeines link symbol

Ein Timer ist ein spezieller Zähler, der Ereignisse zählt. Diese Ereignisse können sich auch vom Prozessortakt ableiten und von daher kommt die Bezeichnung Timer. Prinzipiell ist ein Timer für folgende Aufgaben geeignet:

  • Zeiten zwischen zwei Ereignissen messen
  • Nach einer bestimmten Zeit ein Ereignis auslösen
  • Periodische Ereignisse auslösen
  • Ereignisse zählen
  • Erzeugung von PWM Signalen

Diese Funktionalitäten werden in der Praxis sehr oft benötigt. Die universellen Einsatzmöglichkeiten haben allerdings den Nachteil, dass der Timer teilweise recht komplex in der Anwendung sein kann.

Der ATMega16 enthält drei Timer. Timer 0 und 2 sind 8 Bit Timer, Time 1 ist ein 16 Bit Timer.

Timer 0 (8 Bit Timer) link symbol

Blockschaltbild des Timer 0
Blockschaltbild des Timer 0 (Quelle: Datenblatt ATMega16, Lizenz © Atmel Corporation)

Das Blockschaltbild des Timer 0 zeigt den prinzipiellen Aufbau des Timers welcher im folgenden beschrieben wird.

Interrupts link symbol

Der Timer 0 nutzt zwei Interruptquellen:

  • TIMER0_OVF_vect (im Blockschaltbild TOV0) - Löst aus, sobald es zu einem Überlauf des Timer Registers TCNT0 kommt
  • TIMER0_COMP_vect (im Blockschaltbild OC0) - Löst aus, sobald das Timer Register TCNT0 gleich OCR0 ist

TCNT0 - Timer Counter Register link symbol

Dieses Register ist der Kern des Timers. Beim Timer 0 ist dieses Register 8 Bit groß, d.h. es kann von 0 bis 255 zählen.

TCNT0 kann direkt gelesen und geschrieben werden. Die Steuerung (Control Logic) hat die Möglichkeit, dieses Register auf 0 zu setzen oder das Register um eins zu erhöhen oder zu erniedrigen.

Die Steuerung ist abhängig von der Konfiguration über TCCR0 und dem Status der Vergleiche mit 0, mit 0xFF und dem Vergleich mit OCR0.

OCR0 - Vergleichsregister link symbol

Das Register OCR0 ist ein 8 Bit Register das für den Vergleich mit TCNT0 genutzt wird. Der Vergleich kann für drei Funktionen benutzt werden:

  • Die Generierung eines PWM Signals mittels Waveform Generetion am Pin OC0
  • Das Auslösen des Interrupts TIMER0_COMP_vect bei Äquvivalenz mit TCNT0
  • Die Auswertung mittels der Steuerung des Timer 0

TCCR0 - Timer Counter Control Register link symbol

Bit 7 6 5 4 3 2 1 0
Name FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
Read/Write W R/W R/W R/W R/W R/W R/W R/W
Init 0 0 0 0 0 0 0 0

FOC link symbol

Spezielles Bit zur Ausführung eines Compare Match in nicht PWM Modi. Für weitere Informationen dazu ist im Datenblatt nachzulesen.

WGM01 und WGM00 - Betriebsmodi link symbol

Diese beiden Bits beschreiben die Betriebsmodi des Timers:

Modus WGM01 WGM00 Bezeichnung
0 0 0 Normaler Modus
1 0 1 PWM, Phasenkorrekt
2 1 0 CTC
3 1 1 Fast PWM

Die verschiedenen Modi sind unter Betriebsmodi ausführlich beschrieben.

COM01 und COM00 - Funktion des OC0 Pins link symbol

Beschreibt die Funktionsweise des Pins OC0. Sind beide Bits auf 0 wird der Pin als normaler Portpin verwendet (Port B Bit 3). Bei anderen Kombinationen ist der Compare Match Output Mode aktiv und die normale Portfunktion wird überschrieben. Weitere Informationen finden sich unter PWM Erzeugung.

CS02, CS01 und CS00 - Clock Select link symbol

CS02 CS01 CS00 Bezeichnung
0 0 0 Kein Takt (Timer ist quasi abgeschaltet)
0 0 1 Prozessortakt
0 1 0 Prozessortakt / 8
0 1 1 Prozessortakt / 64
1 0 0 Prozessortakt / 256
1 0 1 Prozessortakt / 1024
1 1 0 Fallende Flanke an Pin T0
1 1 1 Steigende Flanke an Pin T1

TIMSK - Timer Interrupt Mask Register link symbol

Über das Timer Interrupt Mask Register werden die Interruptfreigaben für alle drei Timer gesetzt. Für den Timer0 gibt es wie bereits beschrieben die beiden Interrupts TOIE0 (Timer Overflow) und OCIE0 (Output Compare Match). Um den jeweiligen Interrupt zu aktivieren muss eine logische 1 an die entsprechende Stelle geschrieben werden.

Bit 7 6 5 4 3 2 1 0
Name OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0
Read/Write R/W R/W R/W R/W R/W R/W R/W R/W
Init 0 0 0 0 0 0 0 0

Betriebsmodi link symbol

Normaler Modus link symbol

Bei diesem Modus zählt der Timer bis zum Maximum seines Zählbereiches (255 bzw. 65535). Der Timer kann so konfiguriert werden, dass beim Erreichen dieses Maximums der TIMERn_OVF_vect ausgelöst wird.

Die Frequenz, mit der ein Overflow bei Verwendung des Prozessortakts als Taktquelle auftritt ergibt sich mit:

$$f_{TOVF}=\frac{f_{CLK}}{Prescaler\cdot N_{max}}$$

Als Prescaler stehen dabei 1, 8, 64, 256 und 1024 zur Verfügung. \(N_{max}\) ist dabei 256 für 8 Bit Timer und 65536 für 16 Bit Timer.

Der Interrupt TIMERn_COMPx_vect kann aktiviert werden und wird ausgelöst, sobald das Timerregister TCNTn den Vergleichswert OCRn erreicht.

CTC - Clear Timer on Compare link symbol

Hier zählt der Timer nach oben bis zum Erreichen des OCRn Registers. Das Register TCNTn wird beim Erreichen zurückgesetzt. Der Timer kann so konfiguriert werden, dass beim Erreichen des OCRn Wertes der TIMERn_COMPx_vect ausgelöst wird.

Die Frequenz, mit der ein Compare Match bei Verwendung des Prozessortakts als Taktquelle auftritt ergibt sich mit:

$$f_{COMP}=\frac{f_{CLK}}{Prescaler\cdot (OCRn + 1)}$$

Fast PWM link symbol

Beim Fast PWM zählt der Timer bis zum Maximum seines Zählberreichs. Das Register OCRn dient als Vergleich und abhängig davon, ob TCNTn kleiner oder größer OCRn ist, kann der OCn Pin auf logisch 0 oder 1 gesetzt werden. Mehr dazu im Kapitel PWM Erzeugung.

PWM, Phasenkorrekt link symbol

Siehe auch hier im Kapitel PWM Erzeugung.

Pins link symbol

Pins mit Timerfunktionalität
Pins mit Timerfunktionalität (Quelle: Datenblatt ATMega16, Lizenz © Atmel Corporation)