18. 8-bit Zähler/Zeitgeber 2

18.1   Features

18.2   Übersicht

Ein einfaches Blockschaltbild des 8-bit Zähler/Zeitgeber ist nachfolgend dargestellt. Die Nummern der Pins sind von der Gehäuseform des Bausteins abhängig (siehe Anschlussbelegung). Die I/O-Register, die dazugehörigen I/O-Bits und die I/O-Pins, auf die die CPU direkt zugreifen kann, sind fett dargestellt.

Blockschaltbild des Timer 2

18.2.1   Register

Das Zähler/Zeitgeber Register (TCNT2) und die Output Compare Register OCR2A und OCR2B sind 8-bit Register. Die Signale der Interruptanforderungen sind im Timer Interrupt Flag Register (TIFR) sichtbar. Alle Interrupts können individuell im Timer Interrupt Mask Register (TIMSK) maskiert werden. Die beiden letztgenannten Register sind im Blockschaltbild nicht abgebildet, da sie auch die Bits für andere Timer-Einheiten enthalten.

Der Zähler/Zeitgeber kann intern, über einen Vorteiler oder durch eine asynchrone externe Taktquelle an den TOSC1/2 Pins getaktet werden. Die asynchronen Operationen werden durch das Asynchronous Status Register kontrolliert. Die Taktauswahl-Logik gibt vor, durch welchen Takt der Timer seinen Wert inkrementiert oder dekrementiert. Der Zähler/Zeitgeber ist inaktiv, wenn keine Taktquelle ausgewählt wurde. Der Ausgang der Taktauswahl-Logik wird als Timer-Takt clkT2 bezeichnet.

Das zweifach gebufferte Output Compare Register (OCR2) wird ständig mit dem Wert des Timers verglichen. Das Ergebnis dieses Vergleiches kann vom Wellenformerzeuger genutzt werden, um eine PWM oder eine variable Frequenz am Ausgang des Output Compare Pins (OC2) zu erzeugen. Das Ereignis der Vergleichsübereinstimmung setzt außerdem das Compare Match Flag (OCF2), das genutzt werden kann, um einen Output Compare Interrupt auszulösen.

18.2.2   Definitionen

Viele Register und Bits in diesem Dokument werden allgemein beschrieben. Der Index „n“ steht für die Nummer des Zähler/Zeitgeber, in diesem Fall also für eine 2. In einem Programm müssen aber immer die präzisen Bezeichnungen angegeben werden, also z.B. TCNT2 um auf den Wert des Zähler/Zeitgeber2 zuzugreifen.
Definitionen
BOTTOM Der Zähler erreicht BOTTOM, wenn er 0x00 wird.
MAX Der Zähler erreicht sein MAXimum, wenn er 0xFF (255 dezimal) wird
TOP Der Zähler erreicht TOP, wenn die Zählung einen oberen Grenzwert erreicht. Als oberer Wert kann 0xFF oder der Wert im OCR2A-Register festgelegt werden. Diese Festlegung ist vom Betriebsmodus abhängig.

18.3   Taktquellen

Der Zähler/Zeitgeber kann durch eine interne synchrone oder durch eine externe asynchrone Quelle getaktet werden. Die Taktquelle clkT2 ist auf den MCU Takt clkI/O voreingestellt. Wenn das AS2 Bit im ASSR Register mit einer 1 beschrieben wird, wird die Taktquelle verwendet, die vom Oszillator stammt, der an TOSC1 / TOSC2 angeschlossen ist.

18.4   Zählereinheit

Der Hauptteil des Zähler/Zeitgeber2 ist die programmierbare 8-bit bidirektionale Zählereinheit. Das Blockschaltbild zeigt die Zählereinheit mit ihrer Umgebung.
Zählereinheit Timer 2
Beschreibung der internen Signale:
count Inkrementiert oder dekrementiert TCNT2 um 1
direction Auswahl zwischen Inkrement und Dekrement
clear Löscht TCNT2 (alle Bits Null)
clkT2 Zähler/Zeitgeber Takt
TOP Signalisiert, dass TCNT2 den Maximalwert erreicht hat
BOTTOM Signalisiert, dass TCNT2 den Minimalwert (Null) erreicht hat

Abhängig vom gewählten Arbeitsmodus wird der Zähler mit Takt des Timer Clock clkT2 gelöscht, inkrementiert oder dekrementiert. Der Takt clkT2 kann durch eine externe oder interne Quelle erzeugt werden, die Einstellung erfolgt mit den Clock Select Bits CS22 bis CS20. Wenn keine Taktquelle ausgewählt ist (CS22 bis CS20 =000), dann wird der Zähler gestoppt. Auf den Wert von TCNT2 kann aber jederzeit zugegriffen werden, unabhängig davon, ob der Takt clkT2 vorhanden ist oder nicht. Das Beschreiben des Zählers durch die CPU hat Vorrang vor allen Lösch- und Zähl-Operationen des Zählers.

Eine Zählsequenz wird durch die Einstellungen des Waveform Generation Mode Bits (WGM21 bis WGM20) in dem TCCR2 Register bestimmt. Es besteht ein fester Zusammenhang zwischen der Arbeitsweise des Zählers und der erzeugten Wellenform am Output Compare Ausgang OC2.

Das Timer Counter Overflow Flag (TOV2) wird den Einstellungen der WGM2x Bits entsprechend gesetzt. Es kann genutzt werden, um einen Interrupt auszulösen.

18.5   Output Compare

Die 8-bit-Vergleicher vergleichen kontinuierlich den Wert des TCNT2-Registers mit den Output Compare Registern OCR2A und OCR2B. Wenn die Werte von TCNT2 und OCR2x gleich sind, signalisiert der Vergleicher die Übereinstimmung. Durch die Übereinstimmung wird das Output Compare Flag (OCF2x) mit dem nächsten Timer-Takt gesetzt. Wenn freigegeben (OCIE2x = 1), erzeugt das Output Compare Flag einen Interrupt. Das Flag wird automatisch gelöscht, wenn die Interruptroutine ausgeführt wird. Es kann aber auch per Software gelöscht werden, indem eine 1 in das Bit geschrieben wird. Der Waveform Generator verwendet das Übereinstimmungssginal, um ein Ausgangssignal entsprechend der Einstellungen der Waveform Generation Mode Bits (WGM21 bis WGM20) und der Compate Output Mode Bits (COM21 und COM20) zu erzeugen. Das TOP- und BOTTOM-Signal wird vom Waveform-Generator verwendet um die besonderen Fälle von extremen Werten in einigen Betriebsmodi zu handhaben.

Output Compare Timer2

Die Register OCR2A und OCR2B sind zweifach gepuffert, wenn einer der PWM-Modi verwendet wird. Im normalen Clear Timer on Compare (CTC) Modus ist die zweifache Pufferung ausgeschaltet. Die zweifache Pufferung dient zur Synchronisation der laufenden Zählung mit sich verändernden TOP- und BOTTOM-Werten in den OCR2x-Registern. Die Synchronisation verhindert das Auftreten von unsymmetrischen PWM-Pulsen und macht den Ausgang glitchfrei.

Der Zugriff auf die OCR2x-Register sieht kompliziert aus, ist es aber nicht. Wenn die Pufferung freigegeben ist, dann greift die CPU auf das ORC2x-Pufferregister zu, wenn die Pufferung ausgeschaltet ist, dann greift die CPU direkt auf das OCR2-Register zu.

18.5.1   Output Compare erzwingen

In Nicht-PWM-Modi kann der Übereinstimmungsausgang des Vergleiches auch erzwungen werden, indem man eine 1 in das Force Output Compare (FOC2) Bit schreibt. Bei der erzwungenen Vergleichsübereinstimmung wird weder ein OCF2x-Flag gesetzt noch der Timer gelöscht oder neu geladen. Allerdings wird der OC2x-Pin aktualisiert so als sei eine echte Vergleichsübereinstimmung aufgetreten. Ob das OC2x-Pin gelöscht, gesetzt oder gewechselt wird, wird durch die Einstellungen der Bits COM2x1 und COM2x0 festgelegt.

18.5.2   Blockade von Output Compare beim Schreiben auf TCNT2

Alle Schreibversuche der CPU in das TCNT2-Register blockieren eine Vergleichsübereinstimmung die im nächsten Taktzyklus auftritt, auch wenn der Timer gestoppt ist. Dadurch ist des möglich, die OCR2-Register mit den gleichen Werten wie das TCNT2-Register zu beschreiben, ohne dass dadurch ein Interrupt ausgelöst wird.

18.5.3   Nutzung der Output-Compare-Einheit

Since writing TCNT2 in any mode of operation will block all compare matches for one timer clock cycle, there are risks involved when changing TCNT2 when using the Output Compare channel, independently of whether the Timer/Counter is running or not. If the value written to TCNT2 equals the OCR2x value, the compare match will be missed, resulting in incorrect waveform generation. Similarly, do not write the TCNT2 value equal to BOTTOM when the counter is downcounting. The setup of the OC2x should be performed before setting the Data Direction Register for the port pin to output. The easiest way of setting the OC2x value is to use the Force Output Compare (FOC2x) strobe bit in Normal mode. The OC2x Register keeps its value even when changing between Waveform Generation modes. Be aware that the COM2x1:0 bits are not double buffered together with the compare value. Changing the COM2x1:0 bits will take effect immediately.

18.6. Compare Match

Die Compare Output Mode Bits COM21 und COM20 haben zwei Funktionen. Zum einen verwendet der Waveform Generator die beiden Bits, um den Zustand des OC2 Registers bei der nächsten Vergleichsübereinstimmung festzulegen. Und zweitens kontrollieren die Bits die Ausgangsquelle des OC2 Pins. Das nachfolgende Bild zeigt das einfache Blockschaltbild der Logik, die durch die COM21 und COM20 Bits beeinflusst wird. Die I/O Register, die I/O Bits und die I/O Pins sind fett dargestellt, wobei von den Portkontrollregistern DDR und PORT nur der durch die Bits beeinflusste Teil dargestellt ist. Wenn auf den Zustand des OC2 verwiesen wird, so ist damit das interne Register OC2 gemeint und nicht der OC2 Pin.
Blockschaltbild Compare Match Output
Die allgemeine I/O Portfunktion wird durch den Output Compare (OC2) überschrieben, wenn eines der beiden Bits COM21 oder COM20 gesetzt ist. Allerdings wird Richtung des OC2 Pins (Eingang oder Ausgang) nach wie vor durch das Data Direction Register (DDR) bestimmt. Das Richtungsbit für die OC2 Pins (DDR_OC2) muss als Ausgang gesetzt werden, bevor der Wert von OC2 am Ausgang sichtbar wird. Die überschreibende Funktion ist unabhängig von dem ausgewählten Waveform Generator Modus.

Das Design der Output Compare Pin Logik erlaubt das Initialisieren des OC2 Zustandes bevor der Ausgang freigegeben wird. Einige COM21 / COM20 Kombinationen sind für spätere Funktionen reserviert (siehe Beschreibung der Register).

18.6.1   Compare Output und Kurvenform-Erzeugung

Der Waveform Generator verwendet die COM21 und COM20 Bits in den Modi normal, CTC und PWM unterschiedlich. In allen Fällen wird bei einer Vergleichsübereinstimmung keine Aktion ausgelöst, wenn beide Bits auf 0 gesetzt sind. Weitere Details in den späteren Tabellen.

18.7   Betriebsmodi

Der Operationsmodus, das heißt das Verhalten des Zähler/Zeitgebers und des Output Compare Pins, wird durch die Kombination der Waveform Generation Mode Bits (WGM21 bis WGM20) und den Compare Output Mode Bits (COM21 bis COM20) bestimmt. Die Compare Output Mode Bits beeinflussen die Zählsequenz nicht, die Waveform Generation Mode Bits allerdings schon. Die COM21 und COM20 Bits legen fest, ob der PWM Ausgang invertiert sein soll oder nicht. In nicht PWM Modi legen die COM21 und COM20 Bits fest, ob der Ausgang gelöscht, gesetzt oder gewechselt werden soll, wenn eine Vergleichsübereinstimmung auftritt.

18.7.1   Normalmodus

Der einfachste Betriebsmodus ist der normale Modus (WGM21 und WGM20 = 00). In diesem Modus zählt der Zähler immer vorwärts (inkrementieren) und wird nicht gelöscht. Wenn der Zähler seinen maximalen Wert erreicht (FFh) läuft er über und beginnt erneut bei seinem BOTTOM Wert 00h. Im normalen Modus wird das Timer Overflow Flag (TOV2) in dem Augenblick gesetzt, in dem das TCNT2 Register wieder 00 h wird. Das TOV2 Flag kann in diesem Fall wie ein 9 Bit betrachtet werden, dass aber nur gesetzt und nicht automatisch gelöscht wird. In Kombination mit dem Timer Overflow Interrupt, der das TOV2 Flag automatisch löscht, kann also die Auflösung des Timers durch die Software erheblich erweitert werden. Im normalen Modus sind keine Besonderheiten zu beachten, der Wert des TCNT2 Registers kann jederzeit überschrieben werden.

Die Output Compare Einheit kann verwendet werden, um Interrupts beim jeweiligen Zählerstand zu erzeugen. Das Erzeugen von Ausgangsfrequenzen im normal Modus wird nicht empfohlen, da dafür zu viel Prozessorkapazität verbraucht wird.

18.7.2   Verkürzter Zählzyklus

Im Clear Timer on Compare Modus (CTC) (WGM21 und WGM20 = 2) wird das Register OCR2 dazu verwendet, die Auflösung des Timers zu manipulieren. Im CTC Modus wird der Zähler gelöscht, wenn der Wert des Zählers (TNCT2) mit dem des OCR2 Registers übereinstimmt. Das Register OCR2 bestimmen also den Maximalwert des Zählers und somit seine Auflösung. Dieser Modus erlaubt eine größere Kontrolle der Compare Match Ausgangsfrequenz. Er vereinfacht auch das Zählen externer Ereignisse.

Das Zeitdiagramm des CTC Modus ist nachfolgend abgebildet. Der Wert des Zählers (TCNT2) wächst so lange bis eine Vergleichsgleichheit mit dem OCR2 auftritt, dann wird der Zähler (TCNT2) gelöscht.

Durch das OCF2 Flag kann ein Interrupt generiert werden, zu jedem Zeitpunkt, wenn der Wert des Zählers den TOP Wert erreicht, der durch das OCR2 Register vorgegeben ist. Wenn der Interrupt freigegeben ist, kann die Interruptroutine dazu verwendet werden, um den TOP Wert zu verändern. Das Einstellen des TOP Wertes in die Nähe des BOTTOM Wertes muss mit Vorsicht geschehen, wenn der Zähler ohne oder mit einem geringen Vorteiler betrieben wird, da der CTC Modus keine Zweifachbuffer Eigenschaft hat. Wenn ein neuer Wert in das OCR2 Register geschrieben wird, der kleiner als der aktuelle Wert des TCNT2 ist, so wird zunächst keine Vergleichsübereinstimmung erkannt. Der Zähler wird dann zunächst bis zu seinem maximalen Wert (FFh) laufen und von 00h erneut starten, erst dann kann eine Vergleichsübereinstimmung erkannt werden.

Beim Generieren einer Ausgangsfrequenz im CTC Modus kann der OC2 Ausgang so eingestellt werden, dass er seinen Zustand bei jeder Vergleichsübereinstimmung wechselt, indem die COM21 und COM20 Bits auf 1 gesetzt werden. Der OC2 Wert wird nicht am Port Pin erscheinen, wenn die Datenrichtung nicht auf Ausgang (DDR_OC2 = 1) eingestellt ist. Die erzeugte Ausgangswelle kann eine maximale Frequenz von fOC2 = fclk_I/O/2 haben, wenn OCR2 auf 00 gesetzt wird. Allgemein wird die Ausgangsfrequenz mit folgender Gleichung bestimmt:

fOCn = fclk_IO
2 * N * (1 + OCR2A)

Die Variable N steht für den Faktor des Vorteilers (1, 8, 32, 64, 128, 256 oder 1024).

Im normalen Modus wird das TOV2 Flag in dem selben Taktzyklus gesetzt, in dem der Zähler von seinem MAX Wert auf 0x00 wechselt.

18.7.3   Schnelle Pulsweitenmodulation (PWM)

Der Fast PWM Modus (WGM21 bis WGM20 = 3) bietet eine hochfrequente Ausgangswelle. Der Fast PWM Modus unterscheidet sich von den anderen PWM Modi durch seine einfache Impulsflanke. Der Zähler zählt vom BOTTOM Wert bis zum TOP Wert und beginnt danach wieder mit dem BOTTOM Wert. Im nicht invertierenden Compare Output Mode wird der Output Compare (OC2) gelöscht, wenn eine Vergleichsübereinstimmung zwischen dem TCNT2 und OCR2 auftritt und wird gesetzt, wenn der BOTTOM Wert erreicht ist. Im invertierenden Output Compare Modus ist es genau umgekehrt. Durch die einfache Impulsflanke kann die Frequenz im Fast PWM Modus doppelt so hoch sein wie in den anderen PWM Modi, die mit einer doppelten Impulsflanke arbeiten. Die hohe Frequenz des PWM Signals ist günstig bei der Verwendung als Spannungsregulierung, Gleichrichtung und ähnlichen Digital-Analogwandler Anwendungen. Hohe Frequenzen erlauben kleine externe Komponenten (Spulen, Kondensatoren) wodurch die Systemkosten reduziert werden können.

Im Fast PWM Modus wird der Zähler so lange inkrementiert, bis der Zähler den MAX Wert erreicht. Der Zähler wird dann mit dem folgenden Zyklus des Timertaktes gelöscht. Das Zeitdiagramm des Fast PWM Modus ist im nachfolgenden Bild zu sehen. Der Wert des TCNT2 ist als Histogramm um die einfache Impulsflanke darzustellen. Auch der invertierende und der nicht invertierende Ausgang sind dargestellt. Die kleinen horizontalen Linien an der TCNT2 Flanke kennzeichnen die Vergleichsübereinstimmung zwischen OCR2 und TCNT2.

Das Timer/Counter Overflow Flag (TOV2) wird jedes Mal gesetzt, wenn der Zähler seinen MAX Wert erreicht. Wenn der Interrupt freigegeben ist, kann die Interruptroutine dazu verwendet werden, um den Vergleichswerte zu aktualisieren.

Im Fast PWM Modus erlauben die Vergleichseinheiten das Erzeugen von PWM Signalen an dem OC2 Pins. Durch Setzen der COM21 und COM20 Bits auf 2 wird ein nicht invertiertes PWM-Signal erzeugt. Ein invertiertes PWM-Signal kann erzeugt werden, indem COM21 und COM20 auf 3 gesetzt werden. Um das PWM Signal am Port Pin sichtbar zu machen muss dieser als Ausgang konfiguriert werden (DDR_OC2 = 1). Das PWM Signal wird erzeugt indem das OC2 Register gesetzt (gelöscht) wird, wenn eine Vergleichsübereinstimmung zwischen OCR2 und TCNT2 besteht und das OC2 Register in dem Taktzyklus gelöscht (gesetzt) wird, in dem der Zähler durch den Wechsel von MAX zu BOTTOM gelöscht wird.

Die Frequenz des Ausgangssignals kann mit folgender Formel berechnet werden:

fOCnPWM = fclk_IO
N * 256

Die Variable N steht für den Faktor des Vorteilers (1, 8, 32, 64,128, 256 oder 1024).

Extreme Werte des OCR2 Register stellen spezielle Fälle bei der Erzeugung des PWM Signals im Fast PWM Modus dar. Wenn das OCR2 Register auf den gleichen Wert wie BOTTOM (also 00h) eingestellt wird, wird eine schmale Spitze am Ausgang erzeugt, die mit jedem MAX+1 Takt auftritt. Das Setzen des OCR2 Registers auf den MAX Wert wird zu einem konstanten High- oder Low-Pegel am Ausgang führen (abhängig ob invertierender oder nicht invertierender Ausgang eingestellt).

Eine Frequenz mit einem Tastverhältnis von 50% kann im Fast PWM Modus dadurch erreicht werden, indem man OC2 so einstellt, dass es seinen Pegel bei jeder Vergleichsübereinstimmung wechselt (COM21 und COM20 Bits auf 1). Die erzeugte Ausgangswelle kann eine maximale Frequenz von fOC2 = fclk_I/O/2 haben, wenn OCR2 auf 00 gesetzt wird. Diese Eigenschaft ist gleich dem OC2 Toggel im CTC Modus, mit der Ausnahme, dass die zweifach gebufferte Output Compare Einheit im Fast PWM Modus zur Verfügung steht.

18.7.4   Phasenrichtige PWM

Der Phase Correct PWM Modus (WGM21 bis WGM20 = 1) bietet eine phasenkorrekte Ausgangswelle mit hoher Auflösung. Der Phase correct PWM Modus basiert auf einer zweifachen Impulsflanke. Der Zähler zählt vom BOTTOM Wert bis zum MAX Wert und wieder zurück vom MAX zum BOTTOM Wert. Im nicht invertierenden Compare Output Mode wird der Output Compare (OC2) gelöscht, wenn beim Hochzählen eine Vergleichsübereinstimmung zwischen dem TCNT2 und OCR2 auftritt und wird gesetzt wenn beim Runterzählen eine Vergleichsübereinstimmung auftritt. Im invertierenden Output Compare Modus ist es genau umgekehrt. Durch die zweifache Impulsflanke ist die Frequenz im phase correct PWM Modus niedriger als in den PWM Modi, die mit einer einfachen Impulsflanke arbeiten. Wegen der symmetrischen Eigenschaften der PWM Modi mit zweifacher Impulsflanke eigenen sich diese besonders für die Steuerung von Motoren.

Die PWM Auflösung im Phase Correct PWM Modus liegt fest bei 8 Bit. Im Phase Correct PWM Modus wird der Zähler so lange inkrementiert, bis der Zähler den festen Wert MAX erreicht. Wenn der Zähler den MAX Wert erreicht hat, ändert er daraufhin seine Zählrichtung. Der Wert von TCNT2 wird für einen Takt lang gleich dem MAX Wert sein. Das Zeitdiagramm des Phase Correct PWM Modus ist im nachfolgenden Bild zu sehen. Der Wert des TCNT2 ist als Histogramm abgebildet, um die zweifache Impulsflanke darzustellen. Auch der invertierende und der nicht invertierende Ausgang sind dargestellt. Die kleinen horizontalen Linien an der TCNT2 Flanke kennzeichnen die Vergleichsübereinstimmung zwischen OCR2 und TCNT2.

as Timer/Counter Overflow Flag (TOV2) wird jedes Mal gesetzt, wenn der Zähler seinen BOTTOM Wert erreicht. Das Interrupt Flag kann genutzt werden, um einen Interrupt bei jedem Erreichen des BOTTOM Wertes durch den Zähler auszulösen.

Im Phase correct PWM Modus erlauben die Vergleichseinheiten das Erzeugen von PWM Signalen an den OC2 Pins. Durch Setzen der COM21 und COM20 Bits auf 2 wird ein nicht invertiertes PWM-Signal erzeugt. Ein invertiertes PWM-Signal kann erzeugt werden, indem COM21 und COM20 auf 3 gesetzt werden. Um das PWM Signal am Port Pin sichtbar zu machen muss dieser als Ausgang konfiguriert werden (DDR_OC2 = 1). Das PWM Signal wird erzeugt indem das OC2 Register gelöscht (gesetzt) wird, wenn beim Hochzählen eine Vergleichsübereinstimmung zwischen OCR2 und TCNT2 besteht und das OC2 Register wird gesetzt (gelöscht) wird, wenn beim Runterzählen eine Vergleichsübereinstimmung zwischen OCR2 und TCNT2 besteht.

Die Frequenz des Ausgangssignals kann mit folgender Formel berechnet werden:

fOCnPWM = fclk_IO
N * 510

Die Variable N steht für den Faktor des Vorteilers (1, 8, 32, 64, 128, 256 oder 1024).

Extreme Werte des OCR2 Register stellen spezielle Fälle bei der Erzeugung des PWM Signals im Phase correct PWM Modus dar. Wenn ein OCR2 Register auf den gleichen Wert wie BOTTOM eingestellt wird, bleibt der Ausgang permanant auf Low-Pegel Das Setzen des OCR2 Registers auf den MAX Wert wird zu einem konstanten High-Pegel am Ausgang führen (beim invertierenden Modus ist es dann genau anders herum).

Am Beginn der Periode 2 in obigen Abbild hat OC2 einen Wechsel von High nach Low, obwohl kein Compare Match auftritt. Der Grund für diesen Wechsel ist die erforderliche Symmetrie um den BOTTOM Punkt. Es kann zwei Fälle geben, in denen ein Wechsel ohne Compare Match auftritt:

18.8   Zeitdiagramme

Die folgenden Abbildungen zeigen den Zähler/Zeitgeber im synchronen Modus, daher ist das Taktsignal clkT2 in den Abbildungen als ein den Takt freigebendes Signal dargestellt. Im asynchronen Modus muss clkI/O durch den Takt des Oszillators ersetzt werden. Die Abbildungen zeigen auch, wann die Interrupt Flags gesetzt werden.

Die nachfolgende Abbildung zeigt die grundsätzliche Arbeitsweise des Zähler/Zeitgeber. Sie zeigt die Zählsequenz bis zum MAX Wert, der in allen Modi außer dem Phase correct PWM Modus stattfindet.

Zeitdiagramm Zähler/Zeitgeber 2
Die nachfolgende Abbildung zeigt den gleichen Vorgang, jedoch mit Vorteiler
Zeitdiagramm mit Vorteiler Zähler/Zeitgeber 2
Die nachfolgende Abbildung zeigt das Setzen des OCF2 Flags in allen Modi außer dem CTC Modus. (mit Vorteiler)
Zeitdiagramm mit Vorteiler Setzen des OCF2 Flags
Die nachfolgende Abbildung zeigt das Setzen des OCF2 Flags und das Löschen des TCNT2 im CTC Modus.
Zeitdiagram CTC Modus

18.9   Asynchroner Betrieb

Der 8-bit Zähler/Zeitgeber2 kann asynchron betrieben werden.

18.10   Vorteiler

Vorteiler für Zähler/Zeitgeber2

Die Taktquelle für Zähler/Zeitgeber2 wird mit clkT2S bezeichnet. Der Takt clkT2S ist standardmäßig mit dem I/O Takt clkI/O verbunden. Durch Setzen des AS2 Bits im ASSR Register wird der Zähler/Zeitgeber2 asynchron durch den Takt am TOSC1 Pin getaktet. Dadurch kann Zähler/Zeitgeber2 als Echtzeitzähler verwendet werden. Wenn das AS2 Bit gesetzt ist, sind die Pins TOSC1 und TOSC2 vom Port B getrennt. Ein Quarz kann dann zwischen diesen beiden Pins angeschlossen werden und als unabhängige Taktquelle für Zähler/Zeitgeber2 dienen. Der Oszillator ist für Quarze mit einer Frequenz von 32,768 kHz optimiert. Das Anlegen eines externen Signals an TOSC1 wird nicht empfohlen.

Für Zähler/Zeitgeber2 sind folgende Auswahlmöglichkeiten für den Vorteiler vorhanden: clkT2S/8, clkT2S/32, clkT2S/64, clkT2S/128, clkT2S/256, clkT2S/1024. Zusätzlich kann clkT2S als 0 (Stopp) ausgewählt werden. Das Setzen des PSR2 Bits im SFIOR Regsiter resetet den Vorteiler. Dadurch kann mit einem vorhersehbaren Vorteiler gearbeitet werden.

18.11   Register-Beschreibung

Der 8-bit Zähler/Zeitgeber2 verwendet mehrere Register, die nachfolgend beschrieben werden.

18.11.1   TCCR2A — Kontrollregister A

Bit76543210
(0xB0)COM2A1COM2A0COM2B1COM2B0--WGM21WGM20TCCR2A
ZugriffR/WR/WR/WR/WRRR/WR/W
Startwert00000000
Bit 7 und 6 – COM2A1 und COM2A0: Compare Match Output Mode
Die beiden Bits kontrollieren das Verhalten des Output Compare Pins OC2A. Wenn eines der beiden Bits gesetzt ist, überlagert das OC2A-Signal die normale I/O Funktion des Pins. Im Data Direction Register DDRB muss das Bit 3 für OC2A gesetzt sein, damit das Pin als Ausgang konfiguriert ist.

Wenn OC2A als Ausgangsfunktion verwendet werden, ist die Funktion der COM-Bits von den Einstellungen der WGM-Bits abhängig. Nachfolgende Tabelle zeigt die Funktionen der COM2Ax Bits, wenn die WGM-Bits auf den normalen oder den CTC-Modus eingestellt sind.

Normaler oder CTC Modus
COM2A1 .. COM2A0Funktion
00Normale Portfunktion, OC2A abgeschaltet
01Wechsel an OC2A bei Compare Match
10Löschen von OC2A bei Compare Match (Low-Pegel)
11Setzen von OC2A bei Compare Match (High-Pegel)
Fast PWM Modus (1)
COM2A1 .. COM20Funktion
00Normale Portfunktion, OC2A abgeschaltet
01WGM22 = 0: Normal Port Operation, OC0A Disconnected.
WGM22 = 1: Toggle OC2A on Compare Match.
10Löschen von OC2A bei Compare Match, Setzen von OC2A bei TOP
11Setzen von OC2A bei Compare Match, Löschen von OC2A bei TOP
Note:
  1. A special case occurs when OCR2A equals TOP and COM2A1 is set. In this case, the Compare Match is ignored, but the set or clear is done at BOTTOM. See ”Fast PWM Mode” on page 147 for more details.
Phase correct PWM Modus
COM2A1 .. COM2A0Funktion
00Normale Portfunktion, OC2A abgeschaltet
01WGM22 = 0: Normal Port Operation, OC2A Disconnected.
WGM22 = 1: Toggle OC2A on Compare Match.
10Löschen von OC2A bei Compare Match beim Hochzählen, Setzen von OC2A bei Compare Match beim Runterzählen
11Setzen von OC2A bei Compare Match beim Hochzählen, Löschen von OC2A bei Compare Match beim Runterzählen
Bit 5 und 4 – COM2B1 und COM2B0: Compare Match Output Mode
Die beiden Bits kontrollieren das Verhalten des Output Compare Pins OC2B. Wenn eines der beiden Bits gesetzt ist, überlagert das OC2B-Signal die normale I/O Funktion des Pins. Im Data Direction Register DDRD muss das Bit 3 für OC2B gesetzt sein, damit das Pin als Ausgang konfiguriert ist.

Wenn OC2B als Ausgangsfunktion verwendet werden, ist die Funktion der COM-Bits von den Einstellungen der WGM-Bits abhängig. Die vorhergehenden Tabellen gelten entsprechend für COM2Bx.

Bit 1 und 0 – WGM21 und WGM20: Waveform Generation Mode
Die WGM-Bits kontrollieren die Zählsequenz des Zählers, die Quelle für den Maximalwert (MAX) des Zählers und die Art der generierten Ausgangswelle. Die vom Timer/Counter2 unterstützend Arbeitsmodi sind: Normaler Modus (Zähler), Clear Timer on Compare (CTC) Modus und zwei verschiedene PWM Modi. Das Bit WGM22 liegt im zweiten Kontrollregister TCCR2B.
Waveform Generation Mode Bit Description
WGM22 .. WGM20BetriebsartTOPAktualisierung von OCRxnSetzen von TOV
000 (0x00)normal0xFFsofort0xFF
001 (0x01)Phasenrichtige PWM0xFF0xFF0x00
010 (0x02)CTCOCR2Asofort0xFF
011 (0x03)Schnelle PWM0xFF0x000xFF
100 (0x04)reserviert
101 (0x05)Phasenrichtige PWMOCR2A0xFF0x00
110 (0x06)reserviert
111 (0x07)Schnelle PWMOCR2A0x000xFF

18.11.2   TCCR2B — Kontrollregister B

Bit76543210
(0xB1)FOC2AFOC2B--WGM22CS22CS21CS20TCCR2B
ZugriffWWRRR/WR/WR/WR/W
Startwert00000000
Bit 7 – FOC2A: Force Output Compare A
Das FOC2A-Bit ist nur aktiv, wenn die WGM-Bits einen Nicht-PWM Modus auswählen. Um die Kompatibilität mit zukünftigen Bausteinen sicherzustellen, muss dieses Bit auf 0 gesetzt werden, wenn das TCCR2 in einem PWM Modus beschrieben wird. Wenn eine 1 in das FOC2A Bit geschrieben wird, wird unmittelbar ein Compare Match erzwungen. Der OC2A-Ausgang ändern sich dann den Einstellungen der COM-Bits entsprechend. Zu beachten ist, dass das FOC2 Bit im Sinne von Freigabebits implementiert ist, so dass das Verhalten beim erzwungenen Compare Match durch die COM-Bits bestimmt wird.

Ein erzwungener Compare Match generiert keine Interrupts und löscht den Timer nicht. Das FOC2A-Bit wird immer als 0 gelesen.

Bit 6 – FOC2B: Force Output Compare B
Das FOC2B-Bit ist nur aktiv, wenn die WGM-Bits einen Nicht-PWM Modus auswählen. Um die Kompatibilität mit zukünftigen Bausteinen sicherzustellen, muss dieses Bit auf 0 gesetzt werden, wenn das TCCR2 in einem PWM Modus beschrieben wird. Wenn eine 1 in das FOC2B Bit geschrieben wird, wird unmittelbar ein Compare Match erzwungen. Der OC2B-Ausgang ändern sich dann den Einstellungen der COM-Bits entsprechend. Zu beachten ist, dass das FOC2B-Bit im Sinne von Freigabebits implementiert ist, so dass das Verhalten beim erzwungenen Compare Match durch die COM-Bits bestimmt wird.

Ein erzwungener Compare Match generiert keine Interrupts und löscht den Timer nicht. Das FOC2B-Bit wird immer als 0 gelesen.

Bit 3 – WGM22: Drittes Bit für Signalerzeugung
Siehe Kontrollregister TCCR2A
Bit 2 bis 0 – CS22, CS21, CS20: Clock Select Bits 2, 1, 0
Diese Bits bestimmen die Vorteilerquelle für Timer/Counter2
Taktauswahl-Bits
CS22 .. CS20Beschreibung
000Zägler ist angehalten
001clkT2S (ohne Vorteiler)
010clkT2S/8
011clkT2S/32
100clkT2S/64
101clkT2S/128
110clkT2S/256
111clkT2S/1024

18.11.3   TCNT2 — Zählregister

Bit76543210
(0xB2)TCNT2[7:0]TCNT2
ZugriffR/WR/WR/WR/WR/WR/WR/WR/W
Startwert00000000

Das Timer/Counter Register gibt einen direkten Zugriff auf den 8-bit Zähler bei Lese- und Schreiboparationen. Ein Verändern des Zählers (TCNT2) während der Zähler läuft, führt zu dem Risiko, dass ein Compare Match zwischen dem TCNT2 und den OCR2 Registern ausgelassen wird. Beim Schreiben in das TCNT2 Register werden die Compare Match im Folgetakt bei allen Vergleichseinheiten blockiert.

18.11.4   OCR2A — Vergleichsregister A

Bit76543210
(0xB3)OCR2A[7:0]OCR2A
ZugriffR/WR/WR/WR/WR/WR/WR/WR/W
Startwert00000000

Das Output Compare Register enthält einen 8-bit Wert, der permanent mit dem Wert des Zählers (TCNT2) verglichen wird. Eine Übereinstimmung kann dazu genutzt werden, einen Interrupt auszulösen und/oder ein Ausgangssignal am Pin OC2A zu erzeugen.

18.11.5   OCR2B — Vergleichsregister B

Bit76543210
(0xB4)OCR2B[7:0]OCR2B
ZugriffR/WR/WR/WR/WR/WR/WR/WR/W
Startwert00000000

Das Output Compare Register enthält einen 8-bit Wert, der permanent mit dem Wert des Zählers (TCNT2) verglichen wird. Eine Übereinstimmung kann dazu genutzt werden, einen Interrupt auszulösen und/oder ein Ausgangssignal am Pin OC2B zu erzeugen.

18.11.6   TIMSK2 — Interrupt-Maske

Bit76543210
(0x70)-----OCIE2BOCIE2ATOIE2TIMSK2
ZugriffRRRRRR/WR/WR/W
Startwert00000000
Bit 2 – OCIE2B: Timer/Counter2 Output Compare Match B Interrupt Enable
Wenn das OCIE2B-Bit gesetzt ist und das I-Bit in Status-Register (SREG) ebenfalls gesetzt ist, ist der Timer/Counter2 Output Compare Match Interrupt freigegeben. Die Interrupt-Routine TIMERB_COMPA_vect wird ausgeführt, wenn das OCF2B-Bit im TIFR2-Register von der Hardware gesetzt wird.
Bit 1 – OCIE2A: Timer/Counter2 Output Compare Match A Interrupt Enable
Wenn das OCIE2A-Bit gesetzt ist und das I-Bit in Status-Register (SREG) ebenfalls gesetzt ist, ist der Timer/Counter2 Output Compare Match Interrupt freigegeben. Die Interrupt-Routine TIMER2_COMPA_vect wird ausgeführt, wenn das OCF2A-Bit im TIFR2-Register von der Hardware gesetzt wird.
Bit 0 – TOIE2: Timer/Counter2 Overflow Interrupt Enable
Wenn das TOIE2-Bit gesetzt ist und das I-Bit in Status-Register (SREG) ebenfalls gesetzt ist, ist der Timer/Counter2 Overflow Interrupt freigegeben. Die Interrupt-Routine TIMER2_OVF_vect wird ausgeführt, wenn in Folge eines Überlaufs im Timer/Counter2 das TOV2-Bit im TIFR-Register gesetzt wird.

18.11.7   TIFR2 — Interrupt-Flags

Bit76543210
(0x37)-----OCF2BOCF2ATOV2TIFR2
ZugriffRRRRRR/WR/WR/W
Startwert00000000
Bit 2 – OCF2B: Timer/Counter2 Output Compare B Flag
Das OCF2B-Bit wird gesetzt, nachdem der Zähler TCNT2 den Wert des Output Compare Register OCR2B erreicht hat. Ein erzwungener Output Compare (FOC2B) setzt das OCF2B-Flag hingegen nicht. Das Bit wird automatisch gelöscht, wenn die Interrupt-Routine TIMER2_COMPB_vect ausgeführt wird. Alternativ kann das Flag gelöscht werden, in dem man eine „1“ in das Flag schreibt.
Bit 1 – OCF2A: Timer/Counter2 Output Compare A Flag
Das OCF2A-Bit wird gesetzt, nachdem der Zähler TCNT2 den Wert des Output Compare Register OCR2A erreicht hat. Ein erzwungener Output Compare (FOC2A) setzt das OCF2A-Flag hingegen nicht. Das Bit wird automatisch gelöscht, wenn die Interrupt-Routine TIMER2_COMPA_vect ausgeführt wird. Alternativ kann das Flag gelöscht werden, in dem man eine „1“ in das Flag schreibt.
Bit 0 – TOV2: Timer/Counter2 Overflow Flag
Dieses Flag wird gesetzt, wenn ein Überlauf in Timer/Counter2 auftritt. Das Bit wird automatisch gelöscht, wenn die Interrupt-Routine TIMER2_OVF_vect ausgeführt wird. Alternativ kann das Flag gelöscht werden, in dem man eine „1“ in das Flag schreibt.

Im PWM Modus wird das Bit gesetzt, wenn Timer/Counter2 seine Zählrichtung bei 0x00 umdreht.

18.11.8   ASSR — Asynchrones Statusregister

Bit76543210
(0xB6)-EXCLKAS2TCN2UBOCR2AUBOCR2BUBTCR2AUBTCR2BUBASSR
ZugriffRR/WR/WRRRRR
Startwert00000000
• Bit 6 – EXCLK: Enable External Clock Input
When EXCLK is written to one, and asynchronous clock is selected, the external clock input buffer is enabled and an external clock can be input on Timer Oscillator 1 (TOSC1) pin instead of a 32kHz crystal. Writing to EXCLK should be done before asynchronous operation is selected. Note that the crystal Oscillator will only run when this bit is zero.
• Bit 5 – AS2: Asynchronous Timer/Counter2
When AS2 is written to zero, Timer/Counter2 is clocked from the I/O clock, clk I/O . When AS2 is written to one, Timer/Counter2 is clocked from a crystal Oscillator connected to the Timer Oscillator 1 (TOSC1) pin. When the value of AS2 is changed, the contents of TCNT2, OCR2A, OCR2B, TCCR2A and TCCR2B might be corrupted.
• Bit 4 – TCN2UB: Timer/Counter2 Update Busy
When Timer/Counter2 operates asynchronously and TCNT2 is written, this bit becomes set. When TCNT2 has been updated from the temporary storage register, this bit is cleared by hardware. A logical zero in this bit indicates that TCNT2 is ready to be updated with a new value.
Bit 3 – AS2: Asynchronous Timer/Counter2
Wenn das AS2 Bit auf 0 gesetzt ist, wird der Timer/Counter2 durch den I/O Takt clkI/O getaktet. Wenn AS2 auf 1 gesetzt ist, wird Timer/Counter2 von dem Quarzoszillator am TOSC1 Pin getaktet. Wenn der Zustand von AS2 verändert wird, können die Werte der TCNT2, OCR2 und TCCR2 Register zerstört werden.
Bit 2 – TCN2UB: Timer/Counter2 Update Busy
Wenn der Timer/Counter2 asynchron betrieben wird und das TCNT2 beschrieben wird, geht dieses Bit auf 1. Wenn das TCNT2 den Wert aus dem temporären Register übernommen hat, wird das Bit durch die Hardware wieder gelöscht. Eine 0 in diesem Bit zeigt also, dass das TCNT2 bereit ist, auf einen neuen Wert gesetzt zu werden.
Bit 1 – OCR2UB: Output Compare Register2 Update Busy
Wenn der Timer/Counter2 asynchron betrieben wird und das OCR2 beschrieben wird, geht dieses Bit auf 1. Wenn das OCR2 den Wert aus dem temporären Register übernommen hat, wird das Bit durch die Hardware wieder gelöscht. Eine 0 in diesem Bit zeigt also, dass das OCR2 bereit ist, auf einen neuen Wert gesetzt zu werden.
Bit 0 – TCR2UB: Timer/Counter Control Register2 Update Busy
Wenn der Timer/Counter2 asynchron betrieben wird und das TCCR2 beschrieben wird, geht dieses Bit auf 1. Wenn das TCCR2 den Wert aus dem temporären Register übernommen hat, wird das Bit durch die Hardware wieder gelöscht. Eine 0 in diesem Bit zeigt also, dass das TCCR2 bereit ist, auf einen neuen Wert gesetzt zu werden.

Solange ein Schreibvorgang läuft und das Busy-Flag des Timers gesetzt ist, wird ein weiterer Schreibversuch den neuen Wert zerstören und einen ungewollten Interrupt auslösen.

Die Mechanismen zum Lesen der TCNT2, ORC2 und TCCR2 Register sind anders. Wenn das TCNT2 Register gelesen wird, wird immer der Zähler gelesen, wenn die anderen beiden Register gelesen werden wird immer der Wert aus dem temporären Register gelesen.

18.11.9   GTCCR — Allgemeines Zähler/Zeitgeber-Kontrollregister

Bit76543210
(0x43)TSM-----PSRASYPSRSYNCGTCCR
ZugriffR/WRRRRRR/WR/W
Startwert00000000
Bit 1 — PSR2: Prescaler Reset Zähler/Zeitgeber2
Wenn dieses Bit mit einer 1 beschrieben wird, wird der Vorteiler für Zähler/Zeitgeber2 resetet. Das Bit wird durch die Hardware automatisch wieder gelöscht, wenn der Reset ausgeführt wurde. Das Schreiben einer 0 in dieses Bit hat keine Auswirkungen. Das Bit wird immer als 0 gelesen, wenn Zähler/Zeitgeber2 durch den internen Takt getaktet wird. Wenn das Bit beschrieben wird, wenn Zähler/Zeitgeber2 im asynchronen Modus arbeitet, wird das Bit so lange 1 bleiben bis der Vorteiler resetet ist.