Timer der AVR® Mikrocontroller-Familie
Eine der wichtigsten Funktionen, die AVR Mikrocontroller zur Verfügung stellen sind
Timer. Häufig stellt ein Mikrocontroller mehrere Timer zur Verfügung, die auch noch unterschiedliche Sonderfunktionen besitzen.
Die Funktionsweise der Timer wird über Die Zähler des ATmega328pAm Beispiel des ATmega328p werden die grundlegenden Funktionen von Timern behandelt. Der ATmega328p besitzt 3 Timer mit unterschiedlichen Sonderfunktionen. Zwei der Timer (TC0 und TC2) haben eine Breite von 8 Bit, einer (TC1) hat eine Breite von 16 Bit. Die Timer/Counter Control RegisterDie Funktion der Timer wird für jedem Timer unabhängig von drei Sonderregistern gesteuert. Diese werden im Handbuch als Timer/Counter Control Register (TCCRnA, TCCRnB, TCCRnC) bezeichnet. Zähler im NormalmodusIm Normalmodus fungiert ein Zähler einfach nur als Zähler. D.h. unabhängig von der CPU zählt der Zähler kontinuierlich hoch bis zum Überlauf und fängt dann wieder bei Null an weiter zu zählen. Prescaler
Der Takt, mit dem der Zähler hoch zählt, wird aus dem Systemtakt gewonnen. Beim ATmega328p auf dem Arduino UNO Board liegt dieser bei
16MHz. Da dies für viele Anwendungen zu schnell ist, kann man mit einem Der Prescaler dividiert den Systemtakt durch einen festen Wert. Beim ATmega328p sind für TC0 und TC1 folgende Werte möglich: 8, 64, 256, 1024.
Die Einstellungen des Prescalers werden durch die drei Clock Select Bits Setup der Timer im Normalmodus
Das Setup der Timer für den Normalmodus ist denkbar einfach. Es muss nur das
PWMDie Pulsweiten-Modulation (PWM) wird häufig zur Leistungssteuerung von Verbrauchern eingesetzt. Die Timer des ATmega328p (und natürlich auch vieler anderer AVR-Mikrocontroller) bieten die Möglichkeit an bestimmten Pins ein PWM-Signal zu generieren, unabhängig vom Programmablauf auf der CPU. Darüberhinaus stehen unterschiedliche PWM-Modi zur Verfügung. Compare Match
Die Funktionsweise der PWM-Generierung beruht auf einem Vergleich des aktuellen Zählerstands mit
zwei unabhängigen Output Compare Registern (OCRnA und OCRnB). Bei einem
Compare Match (Gleichheit von Register und Zählerstand) kann der Zustand der PWM-Pins
( Die Funktionalität ergibt sich wiederum durch das Beschreiben der Register-Bits im Timer/Counter Control Register (TCCRnA, TCCRnB, TCCRnC) Außerdem müssen auch die Output Compare Register (OCRnA und OCRnB) mit den entsprechenden Werten beschrieben und ggf. im Programmablauf geändert werden. Fast PWM mit fester Periode TC0 (Mode 3)
Ein asymmetrisches PWM-Signal an den Pins
Die PWM-Frequenz ergibt sich dann aus der Stellung des Prescalers von TC0, d.h. aus den Clock Select Bits CS02:0. Das PWM Signal kann invertiert werden oder nicht. Dies ergibt sich aus den Compare Match Output Mode Bits COM0A1:0 und COM0B1:0 für das OCR0A und OCR0B.
Das Tastverhältnis der PWM ergibt sich aus den Output Compare
Registern OCR0A und OCR0B. Diese können während des Programmablaufs
verändert werden, was zu einer Veränderung des Tastverhältnisses des PWM-Signals an Für die Erzeugung eines PWM-Signals mit dem TC0 müssen also folgende Register-Bits beschrieben werden:
Timer InterruptsDie Timer des AVR stellen mehrere Möglichkeiten zur Verfügung, einen IRQ auszulösen. Für den ATmega328p werden diese in einem gesonderten Abschnitt beschrieben: Rechtecksignal mit variabler FrequenzDie Timer lassen sich auch zur Signalerzeugung nutzen. So lässt sich ein symmetrisches Rechtecksignal mit variabler Frequenz unabhängig von der CPU erzeugen. CTC-Mode
Für diesen Anwendungsfall eignet sich der Es muss dazu das Output Compare Register A OCRnA beschrieben werden. Die Output Compare Pins müssen in den Toggle Mode versetzt werden.
Das Signal liegt dann an den entsprechenden Output Compare Pins TC0 im CTC-ModeUm den Timer 0 in den CTC-Mode zu setzen, werden die Waveform Generation Mode Register-Bits (WGM02:0) wie folgt beschrieben:
Die Compare Match Output Mode Bits COM0A1:0 und COM0B1:0 für das OCR0A und OCR0B werden in den Toggle Modus versetzt:
Die Frequenz des Ausgangssignals ergibt sich aus dem Output Compare Register OCR0A und dem
Prescaler, der sich aus den
drei Clock Select Bits Die Ausgangsfrequenz ergibt sich aus folgender Formel:
Das Ausgangssignal liegt an den Pins |