Durch einen Blick in das Datenblatt des Atmega328P lässt sich erkennen, dass der Arduino 3 Timer besitzt, welche noch weiter aufgegliedert sind.


Timer0

8-Bit (0-255) Timer

Allgemeine Funktionen:

- Aufwärtszählen mit internem oder externem Takt mit oder ohne Vorteiler

- 3 unabhängige Interrupt Quellen: Überlaufinterrupt (TOV0) + 2 unabhängige Vergleichswertinterrupte (OCF0A und OCF0B)

- Frequenzgenerator

- Externer Ereigniszähler

- Pulsweitenmodulation (PWM)

- Vergleichswertauswertung mit Zählerreset (CTC)


Die Control-Register des Timer0 sehen in der Übersicht wie folgt aus:

Abb.: Control Register Timer0; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

Zum Timer0 gehören noch weiter Register, wie z.B. das Vergleichsregister OCR0A / OCR0B.


Es folgen die Register TCCR0A und TCCR0B des Timer0 mit anschließender Erklärung der Bits:

TCCR0A:

Abb.: TCCR0A Register Timer0; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

TCCR0B:

Abb.: TCCR0B Register Timer0; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

WGM02, WGM01 sowie WGM00 definieren das grundsätzliche Timer-Verhalten ("Waveform Generation"). Dies wird anhand folgender Tabelle definiert:

Abb.: Bits zur Waveform Generation; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]


Setzt man Beispielsweise WGM02, WGM01 sowie WGM00 auf 0, so befindet man sich in Modus 0. Dieser Modus 0 ist ein normaler Timer, d.h. der Zähler startet bei 0 und Zählt bis 255. Durch den darauf folgenden Overflow wird der Zähler wieder auf 0 zurückgesetzt. Mit entsprechenden Einstellungen, kann hier z.B. auch ein PWM-Modus ausgewählt werden.


Soll der Timer bei Erreichen eines Vergleichswertes eine Ausgang verändern, so nutzt man den Compare Output Mode:

COM0An steuert den Compare Output Modus des Kanals A. Dabei besteht eine Abhängigkeit zum Waveform Generation Mode.

Ist zum Beispiel WGM02, WGM01 und WGM00 auf 0 gesetzt, befindet man sich in einem normalen Modus (kein PWM). Für diesen Modus gilt folgende Tabelle:

Abb.: Compare Output Mode ; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

setzt man COM0A1 auf 0 und COM0A0 auf 1, so toggelt der Ausgang 0C0A, sobald der Zähler den Vergleichswert erreicht. 0C0A (Pin PD6 des Controllers) liegt am digitalen Pin 6 des Arduinos (siehe Pin Map). Der Vergleichswert für Kanal A lässt sich über das Register OCR0A einstellen.

Andere Compare Output Modi (z.B. Compare Output Mode, fast PWM) können dem Datenblatt des Atmega328P entnommen werden.


Um den Vorteiler des Timers zu nutzen, werden die Bits CS02, CS01 und CS00 verwendet. Aus der Kombination dieser ergeben sich unterschiedliche Vorteiler:

Abb.: Bits zum Setzen des Vorteilers; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

Beispiel: CS02 auf 0, CS01 auf 1 und CS00 auf 0 aktiviert den Vorteiler 64.



Timer1

16-Bit (0-65535) Timer

Allgemeine Funktionen:

- alle Funktionen des Timer0

- 4 unabhängige Interrupt Quellen: Überlaufinterrupt (TOV1) + 2 unabhängige Vergleichswertinterrupte (OCF0A und OCF0B) + Input-Capture (ICF1)

- Zeitmessung externer Signale durch Input-Capture


Die Register des Timer1 sehen wie folgt aus:

Abb.: Register des Timer1; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

Weitere Informationen sind dem Datenblatt des Atmega328P zu entnehmen.


Timer2

8-Bit (0-255) Timer

Allgemeine Funktionen:

- wie Timer0 nur ohne den externen Ereigniszähler

- kann als Echtzeituhr verwendet werden


Die Register des Timer2 sehen wie folgt aus:

Abb.: Register Timer2; Quelle: Datenblatt Atmega 328P [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf]

Weitere Informationen sind dem Datenblatt des Atmega328P zu entnehmen.



Zuletzt geändert: Freitag, 18. Februar 2022, 09:59