Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega640/1280/1281/2560/2561

8-bitowy timer/licznik 2 z PWM i pracą asynchroniczną

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Cechy

W rozdziale pojawiają się terminy angielskie Output Compare oraz Compare Match Output. Nie tłumaczyłem ich, ponieważ w języku polskim brak jest dobrych odpowiedników.

Termin Output Compare odnosi się do zmiany stanu wybranej końcówki, jeśli wewnętrzny licznik odmierzy odpowiedni czas. Odbywa się to w ten sposób, iż stan licznika jest porównywany z rejestrem przechowującym znacznik czasu. Gdy licznik osiągnie wartość znacznika czasu, występuje zgodność porównania (ang. Compare Match) i w tym momencie mikrokontroler może wykonać różne operacje, np. zmienić stan logiczny określonej końcówki. Pozwala to generować różne przebiegi czasowe.

Timer/licznik 2 jest 8-bitowym, jednokanałowym modułem timera/licznika o ogólnym przeznaczeniu. Jego główne cechy są następujące:

Na początek:  podrozdziału   strony 

Przegląd

Na poniższym rysunku przedstawiony został uproszczony schemat blokowy 8-bitowego timera/licznika 2. Tłustym drukiem przedstawiono rejestry we/wy, do których ma dostęp mikroprocesor. Rejestry sterujące timerem/licznikiem 2 opisano w podrozdziale "Opis rejestrów".

Bit redukcji zasilania timera licznika 2 w rejestrze  PRR0 (ang. Power Reduction Timer/Counter2 bit, PRTIM2) należy wyzerować, aby został uaktywniony moduł timera/licznika 2.

Rejestry

Rejestr timera/licznika (TCNT2) oraz rejestry Output Compare (OCR2A i OCR2B) są rejestrami 8-bitowymi. Wszystkie sygnały żądań przerwań są widoczne w rejestrze znaczników przerwań timera (ang. Timer Interrupt Flag Register, TIFR2). Wszystkie przerwania są indywidualnie maskowane za pomocą rejestru maski przerwań timera (ang. Timer Interrupt Mask Register, TIMSK2). Rejestry TIFR2 i TIMSK2 nie są pokazane na obrazku powyżej.

Timer/licznik może być taktowany wewnętrznie poprzez preskaler lub asynchronicznie z końcówek TOSC1/2, co szczegółowo jest opisane w dalszej części tego rozdziału. Praca asynchroniczna jest sterowana przez rejestr stanu asynchronicznego (ang. Asynchronous Status Register, ASSR). Układ wyboru zegara określa, które źródło zegara będzie używane przez timer/licznik do zwiększania (lub zmniejszania) swojej wartości. Timer/licznik jest nieaktywny, jeśli nie zostało wybrane żadne źródło zegarowe. Wyjście z układu wyboru zegara jest określane jako zegar timera (ang. timer clock, clkT2).

Podwójnie buforowane rejestry Output Compare (OCR2A i OCR2B) są  przez cały czas porównywane z wartością timera/licznika. Wynik tych porównań może zostać użyty przez generator przebiegu, aby utworzyć przebieg PWM lub przebieg o zmiennej częstotliwości na końcówkach Output Compare (OC2A i OC2B). Szczegóły znajdziesz w podrozdziale "Moduł Output Compare”. Zdarzenie zgodności porównania ustawi również znacznik porównania (OCF2A lub OCF2B), który z kolei może zostać wykorzystany do generacji żądania przerwania Output Compare.

Definicje

Wiele rejestrów i odwołań do bitów w tym rozdziale jest zapisanych w postaci ogólnej. Mała litera “n” zastępuje numer timera/licznika, w tym wypadku 0. Jednakże w programie należy używać precyzyjnych nazw, np. TCNT2 przy dostępie do wartości timera/licznika 0 itd.

Poniższe definicje są intensywnie używane w dalszej części tego rozdziału:

Stała Opis
BOTTOM Licznik osiąga BOTTOM, gdy jego wartość staje się równa 0x00
MAX Licznik osiąga MAX, gdy jego wartość staje się równa 0xFF (dziesiętnie 255).
TOP Licznik osiąga TOP, gdy jego wartość staje się równa największej wartości w sekwencji zliczania. Wartość TOP może być przypisana jako wartość stała 0xFF (MAX) lub wartość umieszczona w rejestrze OCR2A. Przypisanie to jest zależne od trybu pracy licznika.
Na początek:  podrozdziału   strony 

Źródła zegarowe timera/licznika 2

Timer/licznik może być taktowany przez wewnętrzne synchroniczne lub zewnętrzne asynchroniczne źródło zegarowe. Źródło zegarowe clkT2 jest standardowo równe zegarowi mikrokontrolera, clkI/O. Gdy bit AS2 w rejestrze ASSR zostanie ustawiony w stan 1, źródło to będzie pobierane z oscylatora timera/licznika podłączonego do końcówek TOSC1 i TOSC2. Szczegóły pracy asynchronicznej znajdziesz w podrozdziale "Praca asynchroniczna timera/licznika 2". Szczegóły na temat źródeł zegarowych i preskalera znajdziesz w rozdziale "Preskaler timera/licznika 2".
Na początek:  podrozdziału   strony 

Moduł licznika

Główną częścią 8-bitowego timera/licznika jest programowalny moduł dwukierunkowego licznika. Poniższy rysunek pokazuje schemat blokowy licznika wraz z jego otoczeniem:

Opis sygnałów (sygnały wewnętrzne):

count        Zwiększenie lub zmniejszenie wartości TCNT2 o 1.
direction   Wybór pomiędzy zmniejszaniem a zwiększaniem wartości licznika.
clear   Zerowanie TCNT2 (ustawienie wszystkich bitów na 0).
clkTn   Zegar timera/licznika.
top   Sygnalizacja, iż licznik osiągnął wartość maksymalną.
bottom   Sygnalizacja, iż licznik osiągnął wartość minimalną (zero).

W zależności od użytego trybu działania licznik jest zerowany, zwiększany o 1 lub zmniejszany o 1 przy każdym takcie zegara timera (clkT2). Zegar clkT2 może być tworzony z zewnętrznego lub z wewnętrznego źródła, wybranego bitami wyboru zegara (ang. Clock Select bits, CS2[2:0]). Gdy nie jest wybrane żadne źródło zegarowe (CS2[2:0] = 0), to timer jest zatrzymany. Jednakże zawartość TCNT2 jest dostępna dla mikroprocesora bez względu na obecność lub brak clkT2. Zapis przez mikroprocesor posiada wyższy priorytet nad wszystkimi operacjami zliczania lub zerowania.

Sekwencja zliczania jest określana przez ustawienia bitów WGM2[1:0] umieszczonych w rejestrze sterującym  timera/licznika (ang. Timer/Counter Control Register, TCCR2A) oraz bitu WGM22 w rejestrze TCCR2B. Istnieją bliskie związki pomiędzy sposobem zachowania się licznika (zliczaniem) a sposobem generacji przebiegów na wyjściu Output Compare (OC2A lub OC2B). Więcej na temat zaawansowanych sekwencji zliczania znajdziesz w podrozdziale "Tryby pracy".

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV2) jest ustawiany zgodnie z trybem pracy wybranym przez bity WGM2[2:0]. Znacznik TOV2 może być używany do generacji przerwania dla mikroprocesora.

Na początek:  podrozdziału   strony 

Tryby pracy

Tryb pracy, tj. zachowanie się timera/licznika i końcówek Output Compare, jest zdefiniowany przez kombinację bitów trybu generacji przebiegu (WGM2[2:0]) oraz bitów trybu Compare Output (COM2[1:0]). Bity trybu Compare Output nie wpływają na sekwencję zliczania, natomiast bity trybu generacji przebiegu wpływają na nią. Bity  COM2[1:0] kontrolują, czy generowane wyjście PWM ma być zaprzeczone, czy nie (ang. inverted lub non-inverted PWM). Dla trybów różnych od trybów PWM bity COM2x[1:0] kontrolują, czy sygnał wyjściowy powinien być ustawiany na 1, zerowany lub zmieniany na przeciwny (0 → 1, 1 → 0) przy zgodności porównania (“Moduł Output Compare Match").

Dokładne informacje na temat przebiegów czasowych znajdziesz w podrozdziale "Przebiegi czasowe timera/licznika".

Tryb normalny

Najprostszym trybem pracy jest tryb normalny (ang. Normal Mode, WGM02[2:0] = 0). W tym trybie kierunek zliczania jest zawsze w górę (stan licznika się zwiększa przy każdym impulsie zegarowym) i nie jest wykonywane żadne zerowanie licznika. Licznik po prostu się przewija, gdy osiąga swoją maksymalną wartość 8-bitową (TOP = 0xFF), a później startuje ponownie od wartości BOTTOM (0x00). W trybie normalnym znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV2) zostanie ustawiony w tym samym cyklu zegarowym, gdy TCNT2 osiąga wartość zero. Znacznik TOV2 w tym przypadku zachowuje się jak 9-ty bit z tym wyjątkiem, że jest tylko ustawiany, nie zerowany. Jednakże w połączeniu z przerwaniem od przepełnienia timera (ang. timer overflow interrupt), które automatycznie zeruje znacznik TOV2, rozdzielczość timera może zostać zwiększona programowo. Nie ma specjalnych przypadków do rozważenia w trybie normalnym, nowa wartość dla licznika może zostać wpisana w dowolnym momencie.

Moduł Output Compare może być użyty do generowania przerwań w zadanych momentach czasu. Używanie Output Compare do generacji przebiegów w trybie normalnym nie jest zalecane, ponieważ zabiera to zbyt wiele czasu mikroprocesora.

Tryb zerowania timera przy zgodności porównania (CTC)

W trybie zerowania timera przy zgodności porównania (ang. Clear Timer on Compare Match Mode, CTC)  (WGM2[1:0] = 2), rejestr OCR2A jest używany do manipulowania rozdzielczością licznika. W trybie CTC licznik jest zerowany, gdy jego wartość (TCNT2) zrówna się  z OCR2A . Rejestr OCR2A definiuje wartość szczytową dla licznika, a stąd również jego rozdzielczość. Ten tryb zapewnia większą kontrolę nad częstotliwością wyjścia zgodności porównania  zgodności porównania. Upraszcza również operację zliczania zdarzeń zewnętrznych.

Wykres czasowy dla trybu CTC jest pokazany na poniższym rysunku. Wartość licznika (TCNT2) zwiększa się aż do pojawienia się zgodności porównania z OCR2A , a wtedy licznik (TCNT2) jest zerowany.

Przerwanie może zostać wygenerowane za każdym razem, gdy wartość licznika osiąga wartość TOP przy użyciu znacznika OCF2A. Jeśli to przerwanie jest uaktywnione, to procedura jego obsługi może zostać użyta do uaktualniania wartości TOP. Jednakże zmiana TOP na wartość bliską BOTTOM przy uruchomionym liczniku bez preskalera lub z małą wartością podziału preskalera musi być dokonywana ostrożnie, ponieważ tryb CTC nie posiada opcji podwójnego buforowania. Jeśli nowa wartość wpisana do OCR2A jest niższa od bieżącej wartości TCNT2, licznik przegapi zgodność porównania. W takim przypadku będzie on musiał zliczać do swojej wartości maksymalnej (0xFF) i rozpocząć od nowa zliczanie od 0x00, zanim będzie mogła wystąpić następna zgodność porównania.

Przy generowaniu przebiegu wyjściowego w trybie CTC wyjście OC0 może zostać ustawione na zmianę swojego poziomu logicznego przy każdej zgodności porównania przez ustawienie bitów trybu Compare Output na tryb zmiany (COM2A[1:0] = 1). Wartość OC2A nie będzie widoczna na końcówce portu aż do ustawienia kierunku danych na wyjście. Generowany przebieg będzie posiadał maksymalną częstotliwość FOC2A = fclk_I/O/2, gdy OCR2A  jest ustawione na zero (0x00). Częstotliwość przebiegu jest zdefiniowana wzorem:

Zmienna N reprezentuje współczynnik preskalera (1, 8, 64, 256 lub 1024).

Tak samo jak w trybie normalnym znacznik TOV2 jest ustawiany w tym samym cyklu zegara timera, gdy licznik zmienia stan z MAX na 0x00.


Szybki tryb PWM

Znacznik przepełnienia timera/licznika 2 (ang. Timer/Counter Overflow Flag, TOV2) jest ustawiany za każdym razem, gdy licznik osiąga wartość TOP. Jeśli jest uaktywnione przerwanie od tego zdarzenia, to procedura obsługi przerwania może zostać użyta do uaktualnienia wartości porównywanej ze stanem licznika.

W szybkim trybie PWM (ang. fast PWM mode) moduł porównania umożliwia generację przebiegów PWM na końcówce OC2x. Ustawienie bitów COM2x[1:0] na dwa wytworzy przebieg nieodwrócony PWM, a przebieg odwrócony (zanegowany) można wygenerować przez ustawienie bitów COM2x[1:0] na trzy. TOP jest zdefiniowane jako 0xFF (255), gdy  WGM2[2:0] = 3, a jako OCR2A, gdy WGM2[2:0] = 7. Faktyczna wartość wewnętrznego rejestru OC2x stanie się widoczna na końcówce portu tylko wtedy, gdy kierunek danych tej końcówki został ustawiony jako wyjście. Przebieg PWM jest generowany przez ustawianie (lub zerowanie) wewnętrznego rejestru OC2x przy zgodności porównania pomiędzy rejestrami OCR2x a TCNT2 oraz zerowaniem (lub ustawianiem) tego rejestru w takcie zegara timera, gdy licznik zostaje wyzerowany (zmienia swą wartość z TOP na BOTTOM). Częstotliwość wyjściowa może być policzona z poniższego wzoru:


Zmienna N reprezentuje dzielnik preskalera (1, 8, 64, 256 lub 1024).

Wartości ekstremalne rejestru OCR2A reprezentują specjalne przypadki przy generacji przebiegu wyjściowego w szybkim trybie PWM. Jeśli OCR2A jest ustawiony na wartość równą BOTTOM, to na wyjściu pojawią się wąskie szpilki przy każdym  MAX+1 cyklu zegara timera. Ustawienie OCR2A na wartość równą MAX spowoduje powstanie stałego przebiegu o wartości wysokiej lub niskiej (zależnie od polaryzacji wyjścia ustawianej bitami COM2A[1:0]).

Przebieg wyjściowy z wypełnieniem 50% w szybkim trybie PWM można osiągnąć przez ustawienie rejestru OC2x na zmianę poziomu logicznego przy każdej zgodności porównania (COM2x[1:0] = 1). Generowany przebieg będzie posiadał maksymalną częstotliwość FOC2 = fclk_I/O/2, gdy rejestr OCR2A zostanie ustawiony na zero. Ta cecha jest podobna do ustawienia zmiany poziomu OC2A w trybie CTC, z wyjątkiem tego, iż opcja podwójnego buforowania w module Output Compare jest uaktywniona w szybkim trybie PWM.


Tryb PWM poprawny fazowo

Tryb PWM poprawny fazowo (ang. phase correct PWM mode, WGM2[1:0] = 1 lub 5) udostępnia opcję generacji przebiegu PWM poprawnego fazowo. Oparty on jest na zliczaniu dwukierunkowym. Licznik w kółko zlicza od BOTTOM do TOP, a później od TOP do BOTTOM. TOP jest zdefiniowane jako 0xFF, gdy WDM2[2:0] = 1, lub jako OCR2A, gdy WGM2[2:0] = 5. W nieodwróconym trybie Compare Output końcówka Output Compare (OC2x) jest ustawiana w stan niski przy zgodności porównania pomiędzy TCNT2 i OCR2x przy zliczaniu w górę, a ustawiana w stan wysoki przy tej zgodności porównania przy zliczaniu w dół. W odwróconym trybie Output Compare operacje te są odwrócone. Zliczanie dwukierunkowe skutkuje mniejszą częstotliwością pracy niż przy zliczaniu jednokierunkowym. Jednakże z powodu symetrii trybów PWM z dwukierunkowym zliczaniem są one preferowane w aplikacjach sterujących silnikami.

Rozdzielczość PWM w trybie PWM poprawnym fazowo jest ustalona na osiem bitów. W trybie PWM poprawnym fazowo licznik jest zwiększany aż osiągnie wartość TOP. Gdy to się stanie, zmienia kierunek zliczania. Wartość TCNT2 będzie równa TOP przez jeden takt zegara timera. Wykres czasowy trybu PWM poprawnego fazowo przedstawia rysunek poniżej. Wartość TCNT2 jest na wykresie pokazana jako histogram, aby zilustrować zliczanie w obu kierunkach. Wykres zawiera przebiegi PWM odwrócone i nieodwrócone. Małe, poziome linie na zboczach TCNT2 reprezentują zgodności porównań pomiędzy OCR2x a TCNT2.

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV2) jest ustawiany za każdym razem, gdy licznik osiąga BOTTOM i może on zostać użyty do generowania przerwania w tym właśnie momencie.

W trybie PWM poprawnym fazowo moduł porównawczy pozwala generować przebiegi PWM na końcówce OC2x. Ustawienie bitów COM2x[1:0] na dwa wytworzy nieodwrócony przebieg PWM, a przebieg odwrócony powstanie przy ustawieniu COM2x[1:0] na trzy. TOP jest zdefiniowane jako 0xFF, gdy WDM2[2:0] = 3, lub jako OCR2A, gdy WGM2[2:0] = 7. Faktyczna wartość OC2x pojawi się na końcówce portu tylko wtedy, gdy końcówka ta zostanie ustawiona jako wyjście. Przebieg PWM jest generowany przez zerowanie (lub ustawianie) rejestru OC2x przy zgodności porównania pomiędzy OCR2x i TCNT2, gdy licznik zlicza w górę, a ustawianie (lub zerowanie) rejestru OC2x przy zgodności porównania pomiędzy OCR2x a TCNT2, gdy licznik zlicza w dół. Wyjściową częstotliwość PWM w trybie PWM poprawnym fazowo obliczamy wg poniższego wzoru:


Zmienna N reprezentuje dzielnik preskalera (1, 8, 64, 256 lub 1024).

Wartości ekstremalne dla rejestru OCR2A reprezentują specjalne przypadki przy generacji przebiegu PWM w trybie poprawnym fazowo. Jeśli OCR2A zostanie ustawiony na BOTTOM, to wyjście będzie stale w stanie niskim, a jeśli ustawi się go na MAX, to na wyjściu ciągle będzie stan wysoki  w trybie nieodwróconym PWM. W trybie odwróconym PWM wyjście będzie w przeciwnych stanach logicznych.

Na samym początku okresu 2 na wykresie powyżej OCnX przechodzi ze stanu wysokiego w niski, nawet jeśli nie występuje zgodność porównania. Miejsce tego przejścia ma zagwarantować symetryczność wokół BOTTOM. Istnieją dwa przypadki dające takie przejście bez zgodności porównania:

  • OCR2A zmienia swoją wartość z MAX, jak na wykresie. Gdy wartością OCR2A jest MAX, to wartość końcówki OCn jest taka sama, jak wynik zgodności porównania przy zliczaniu w dół. Aby zapewnić symetrię wokół BOTTOM, wartość OCn przy MAX musi odpowiadać wynikowi zgodności porównania przy zliczaniu w górę.
  • Timer rozpoczyna zliczanie od wartości wyższej od tej w OCR2A i z tego powodu przegapia zgodność porównania, a zatem również zmianę OCn, która zdarzyłaby się w trakcie zliczania w górę.
Na początek:  podrozdziału   strony 

Moduł Output Compare

8-bitowy komparator ciągle porównuje zawartość licznika TCNT2 z rejestrem Output Compare (OCR2A i OCR2B). Gdy TCNT2 zrówna się z zawartością rejestru OCR2A lub OCR2B, to komparator zasygnalizuje zgodność. Zgodność ustawi znacznik Output Compare (OCF2A lub OCF2B) przy następnym takcie zegara timera. Jeśli odpowiednie przerwanie zostało włączone, znacznik Output Compare wygeneruje przerwanie Output Compare. Znacznik Output Compare jest automatycznie zerowany, gdy zostanie wykonana procedura obsługi tego przerwania. Alternatywnie można go wyzerować programowo wpisując na jego pozycji logiczne 1. Generator przebiegu wykorzystuje sygnał zgodności w celu wygenerowania przebiegu wyjściowego zgodnie z trybem pracy ustawionym przez bity WGM2[2:0] i bity trybu Output Compare (COM2x[1:0]). Sygnały MAX i BOTTOM są używane przez generator przebiegu do obsługi specjalnych przypadków wartości krańcowych w niektórych trybach pracy (zobacz do podrozdziału "Tryby pracy").

Poniższy rysunek pokazuje schemat blokowy modułu Output Compare:

Rejestr OCR2x jest podwójnie buforowany, gdy są używane tryby PWN (ang. Pulse Width Modulation). W trybie normalnym oraz w trybie zerowania timera przy zgodności porównania, CTC (ang. Clear Timer on Compare) podwójne buforowanie jest wyłączone. Synchronizuje ono uaktuaktualnianie rejestru porównawczego OCR2x do wartości TOP lub BOTTOM sekwencji zliczania. Synchronizacja zapobiega powstawaniu impulsów PWM o nieprawidłowej długości lub niesymetrycznych, co tworzy bezbłędne przebiegi wyjściowe.

Dostęp do rejestru OCR2x może wydawać się złożony, lecz tak nie jest. Gdy włączone jest podwójne buforowanie, mikroprocesor posiada dostęp do rejestru buforowego OCR2x, a gdy podwójne buforowanie jest wyłączone, mikroprocesor ma bezpośredni dostęp do OCR2x.

Wymuszone Output Compare

W trybach nie generujących przebiegu PWM wyjście zgodności porównania z komparatora może zostać wymuszone przez zapis jedynki do bitu wymuszenia Output Compare (ang. Force Output Compare bit, FOC2x). Wymuszenie zgodności porównania nie ustawi znacznika OCF2x, ani nie przeładuje/wyzeruje timera, lecz końcówka OC2x zostanie uaktualniona tak, jakby wystąpiła rzeczywista zgodność porównania (ustawienie bitów COM2x[1:0] definiuje, czy końcówka  OC2x jest ustawiana, zerowana lub zmienia stan na przeciwny).

Blokowanie zgodności porównania przez zapis do TCNT2

Wszystkie zapisy przez mikroprocesor do rejestru TCNT2 będą blokowały każdą zgodność porównania, która pojawi się w następnym cyklu zegarowym timera, nawet, jeśli timer został zatrzymany. Cecha ta pozwala zainicjować rejestr OCR2x na tę samą wartość co TCNT2 bez wyzwolenia przerwania, gdy zostanie włączony zegar timera/licznika.

Używanie modułu Output Compare

Ponieważ zapis TCNT2 w dowolnym trybie pracy zablokuje wszystkie zgodności porównań na jeden cykl zegara timera, występuje ryzyko związane ze zmianą zawartości TCNT2, gdy jest używany moduł Output Compare niezależnie od tego, czy timer/licznik pracuje, czy nie. Jeśli wartość wpisana do TCNT2 jest równa wartości OCR2x, zgodność porównania zostanie przegapiona, co w wyniku da nieprawidłową generację przebiegu. Podobnie, nie wpisuj do TCNT2 wartości równej BOTTOM, gdy licznik zlicza w dół.

Ustawienie OC2x powinno być wykonane przed ustawieniem rejestru kierunku danych (ang. Data Direction Register) dla końcówki, która będzie wyjściem. Najprostszym sposobem ustawienia wartości OC2x jest użycie bitu strobowego wymuszonego Output Compare (FOC2x) w trybie normalnym. Rejestr OC2x utrzymuje swoją wartość nawet przy zmianie trybów generacji przebiegów.

Bądź świadomy, iż bity COM2x[1:0] nie są podwójnie buforowane wraz z wartością porównania. Zmiana bitów COM2x[1:0] odniesie natychmiastowy skutek.

Na początek:  podrozdziału   strony 

Moduł Output Compare Match

Bity trybu Compare Output (ang. Compare Output Mode bits, COM2x[1:0]) posiadają dwie funkcje. Po pierwsze, generator przebiegu wykorzystuje bity COM2x[1:0] do definiowania stanu końcówki wyjścia porównania (OC2x) przy kolejnej zgodności porównania. Po drugie, bity COM2x[1:0] kontrolują źródło wyjściowe dla końcówki OC2x. Obrazek poniżej pokazuje uproszczony schemat sieci logicznej, na którą oddziałuje ustawienie bitów COM2x1:0. Rejestry we/wy, bity we/wy i końcówki we/wy na tym obrazku opisane są tłustym drukiem. Pokazane są tylko te elementy ogólnych rejestrów sterowania portami we/wy (DDR i PORT), na które wpływają bity COM2x1:0. Przy odwołaniu do stanu OC2x, odwołanie to dotyczy wewnętrznego rejestru OC2x, nie końcówki zewnętrznej OC2x..

Moduł wyjścia zgodności porównania (ang. Compare Match Output Unit) w trybie nie związanym z PWM

Ogólna funkcja portu we/we zostaje przejęta przez wyjście porównania (OC2x) z generatora przebiegu, jeśli dowolny z bitów COM2x[1:0] jest ustawiony. Jednakże kierunek końcówki OC2x (wejście lub wyjście) jest wciąż kontrolowany przez rejestr kierunku danych (DDR) dla tej końcówki portu. Bit portu kierunku danych dla końcówki OC2x (DDR_OC2x) musi być ustawiony jako wyjście, zanim wartość OCx2 stanie się widoczna na końcówce. Funkcja przejmowania jest niezależna od trybu pracy generatora przebiegu.

Zasada działania sieci logicznej dla końcówki Compare Output pozwala na inicjalizację stanu OC2x przed uaktywnieniem wyjścia. Zwróć uwagę, że niektóre z ustawień bitów COM2x1:0 są zarezerwowane tylko dla pewnych trybów pracy. Zobacz do podrozdziału "Opis Rejestrów".

Tryb Compare Output a generacja przebiegów

Generator przebiegów używa bitów COM2x[1:0] w różny sposób w trybach Normalnym, CTC i PWM. Dla wszystkich trybów ustawienie COM2x[1:0] = 0 mówi generatorowi przebiegów, aby nie wykonywał żadnego działania na rejestrze OC2x przy następnej zgodności porównania. Opis funkcji tych bitów znajdziesz w opisie poszczególnych trybów.

Zmiana stanu bitów COM2x[1:0] odniesie efekt przy pierwszej zgodności porównania, która wystąpi po tej zmianie. W trybach nie-PWM działanie może być wymuszone natychmiast przez wykorzystanie bitów strobowych FOC2x.

Na początek:  podrozdziału   strony 

Przebiegi czasowe timera/licznika 2

Poniższe rysunki pokazują timer/licznik w trybie synchronicznym, a zegar timera (clkT2) jest z tego powodu pokazany jako sygnał zegarowy taktujący licznik. W trybie asynchronicznym clkI/O powinien być zastąpiony przez zegar oscylatora timera/licznika. Rysunki zawierają informację o momencie ustawiania znaczników przerwania. Rysunek poniżej zawiera przebiegi czasowe dla podstawowej pracy timera/licznika. Ciąg zliczania jest bliski wartości MAX we wszystkich trybach z wyjątkiem trybu PWM poprawnego fazowo.

Wykres czasowy Timera/Licznika bez preskalera
obrazek

Następny wykres pokazuje te same dane, lecz z uruchomionym preskalerem (fclk_I/O:8):

obrazek

Kolejny wykres pokazuje ustawianie znacznika OCF2A we wszystkich trybach  z wyjątkiem trybu CTC:

obrazek

Kolejny wykres pokazuje ustawianie znacznika OCF2A i zerowanie licznika TCNT2 w trybie CTC.

obrazek

Na początek:  podrozdziału   strony 

Praca asynchroniczna timera/licznika 2

Gdy timer/licznik 2 pracuje asynchronicznie, należy rozważyć kilka rzeczy.

  1. Wyłącz przerwania timera/licznika 2 przez wyzerowanie bitów OCIE2x i TOIE2.
  2. Wybierz źródło zegarowe przez odpowiednie ustawienie bitu AS2.
  3. Wpisz nowe wartości do rejestrów TCNT2, OCR2x i TCCR2x.
  4. Przy przełączaniu na pracę asynchroniczną: poczekaj na bity TCN2UB, OCR2xUB i TCR2xUB.
  5. Wyzeruj znaczniki przerwań timera/licznika 2.
  6. Włącz przerwania, jeśli są potrzebne.
  1. Zapisz wartość do TCNT2, OCR2x i TCCR2x.
  2. Zaczekaj aż odpowiedni znacznik wykonywania w toku w rejestrze ASSR powróci w stan zero.
  3. Wejdź w tryb oszczędzania energii lub w tryb zmniejszania zakłóceń dla przetwornika A/C.
  1. Zapisz dowolną wartość do jednego z rejestrów OCR2x lub TCCR2x.
  2. Poczekaj, aż odpowiedni znacznik operacji w toku przyjmie wartość zero.
  3. Odczytaj TCNT2.
Na początek:  podrozdziału   strony 

Preskaler timera/licznika 2

Źródło zegarowe dla timera/licznika 2 nosi nazwę clkT2S i jest standardowo połączone z głównym zegarem we/wy systemu, clkI/O. Przez ustawienie bitu AS2 w rejestrze ASSR timer/licznik 2 jest taktowany asynchronicznie z końcówki TOSC1. To umożliwia użycie timera/licznika 2 jako licznika zegarowego rzeczywistego (ang. Real Time Counter, RTC). Gdy bit AS2 jest ustawiony, końcówki TOSC1 i TOSC2 zostają odłączone od portu B. Wtedy można pomiędzy nie podłączyć kryształ kwarcu, który będzie służył jako niezależne źródło zegarowe dla timera/licznika 2. Oscylator został zoptymalizowany do użytku z kwarcem 32,768 kHz. Podłączanie zewnętrznego źródła zegarowego do końcówki TOSC1 nie jest zalecane.

Możliwe ustawienia preskalera dla timera/licznika 2 są następujące: clkT2S/8, clkT2S/32, clkT2S/64, clkT2S/128, clkT2S/256 i clkT2S/1024. Dodatkowo można wybrać clkT2S jak również 0 (stop). Ustawienie bitu PSRASY w rejestrze GTCCR resetuje preskaler. Pozwala to użytkownikowi pracować z przewidywalnym preskalerem.

Na początek:  podrozdziału   strony 

Opis rejestrów

TCCR2A – Timer/Counter Control Register A – Rejestr A sterowania timerem/licznikiem

Bit 7 6 5 4 3 2 1 0  
(0xB0) COM2A1 COM2A0 COM2B1 COM2B0 - - WGM21 WGM20 TCCR2A
Zapis/Odczyt Z/O Z/O Z/O Z/O O O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:6 – COM2A1:0: Compare Match Output A Mode – Tryb wyjścia A dla zgodności porównania

Bity te sterują zachowaniem końcówki Output Compare A (OC2A). Jeśli jeden lub oba bity COM2A1:0 są ustawione, to wyjście OC2A przejmuje normalną funkcję portu końcówki we/wy. Jednakże zauważ, iż bit rejestru kierunku danych (ang. Data Direction Register, DDR) odpowiadający końcówce OC2A musi być ustawiony w celu uaktywnienia jej jako wyjście.

Gdy wyjście OC2A jest połączone z końcówką, funkcje bitów COM2A1:0 zależą od ustawienia bitów WGM22:0.

Funkcje bitów COM2A1:0, gdy bity WGM22:0 są ustawione na tryb normalny lub CTC (nie PWM):

COM2A1 COM2A0 Opis
0 0 Normalna praca portu, OC2A odłączone.
0 1 Zmiana wartości OC2A na przeciwną przy zgodności porównania.
1 0 Zerowanie OC2A przy zgodności porównania.
1 1 Ustawienie OC2A przy zgodności porównania.

Funkcje bitów COM2A1:0, gdy bity WGM22:0 są ustawione na szybki tryb PWM:

COM2A1 COM2A0 Opis
0 0 Normalna praca portu, OC2A odłączone.
0 1 WGM22 = 0: Normalna praca portu, OC2A odłączone.
WGM22 = 1: Zmiana wartości OC2A na przeciwną przy zgodności porównania.
1 0 Zerowanie OC2A przy zgodności porównania, ustawienie OC2A przy TOP.
1 1 Ustawienie OC2A przy zgodności porównania, zerowanie OC2A przy TOP.
Uwaga: 1. Specjalny przypadek występuje, gdy rejestr OCR2A ma zawartość równą TOP, a bit COM2A1 jest ustawiony. W takim przypadku zgodność porównania jest ignorowana, lecz ustawianie lub zerowanie jest wykonywane przy wartości TOP. Zobacz do podrozdziału "Szybki tryb PWM".

Funkcje bitów COM3A1:0, gdy bity WGM22:0 są ustawione na tryb PWM poprawny fazowo:

COM2A1 COM2A0 Opis
0 0 Normalna praca portu, OC2A odłączone.
0 1 WGM22 = 0: Normalna praca portu, OC2A odłączone.
WGM22 = 1: Zmiana wartości OC2A na przeciwną przy zgodności porównania.
1 0 Zerowanie OC2A przy zgodności porównania przy zliczaniu w górę.
Ustawienie OC2A przy zgodności porównania przy zliczaniu w dół.
1 1 Ustawienie OC2A przy zgodności porównania przy zliczaniu w górę.
Zerowanie OC2A przy zgodności porównania przy zliczaniu w dół.
Uwaga: 1. Specjalny przypadek występuje, gdy rejestr OCR2A ma zawartość równą TOP, a bit COM2A1 jest ustawiony. W takim przypadku zgodność porównania jest ignorowana, lecz ustawianie lub zerowanie jest wykonywane przy wartości TOP. Zobacz do podrozdziału "Tryb PWM poprawny fazowo".

Bity 5:4 – COM2B1:0: Compare Match Output B Mode – Tryb wyjścia B dla zgodności porównania

Te bity sterują zachowaniem końcówki Output Compare B (OC2B).Jeśli jeden lub oba bity COM2B1:0 są ustawione, to wyjście OC2B przejmuje normalną funkcję portu końcówki we/wy. Jednakże zauważ, iż bit rejestru kierunku danych (ang. Data Direction Register, DDR) odpowiadający końcówce OC2B musi być ustawiony w celu uaktywnienia jej jako wyjście.

Gdy wyjście OC2B jest połączone z końcówką, funkcje bitów COM2B1:0 zależą od ustawienia bitów WGM22:0.

Funkcje bitów COM2B1:0, gdy bity WGM22:0 są ustawione na tryb normalny lub CTC (nie PWM):

COM2B1 COM2B0 Opis
0 0 Normalna praca portu, OC2B odłączone.
0 1 Zmiana wartości OC2B na przeciwną przy zgodności porównania.
1 0 Zerowanie OC2B przy zgodności porównania.
1 1 Ustawienie OC2B przy zgodności porównania.

Funkcje bitów COM2B1:0, gdy bity WGM22:0 są ustawione na szybki tryb PWM:

COM2B1 COM2B0 Opis
0 0 Normalna praca portu, OC2B odłączone.
0 1 Zarezerwowane
1 0 Zerowanie OC2B przy zgodności porównania, ustawienie OC2B przy TOP.
1 1 Ustawienie OC2B przy zgodności porównania, zerowanie OC2B przy TOP.
Uwaga: 1. Specjalny przypadek występuje, gdy rejestr OCR2B ma zawartość równą TOP, a bit COM2B1 jest ustawiony. W takim przypadku zgodność porównania jest ignorowana, lecz ustawianie lub zerowanie jest wykonywane przy wartości TOP. Zobacz do podrozdziału "Szybki tryb PWM".

Funkcje bitów COM2B1:0, gdy bity WGM22:0 są ustawione na tryb PWM poprawny fazowo:

COM2B1 COM2B0 Opis
0 0 Normalna praca portu, OC2B odłączone.
0 1 Zarezerwowane
1 0 Zerowanie OC2B przy zgodności porównania przy zliczaniu w górę.
Ustawienie OC2B przy zgodności porównania przy zliczaniu w dół.
1 1 Ustawienie OC2B przy zgodności porównania przy zliczaniu w górę.
Zerowanie OC2B przy zgodności porównania przy zliczaniu w dół.
Uwaga: 1. Specjalny przypadek występuje, gdy rejestr OCR2B ma zawartość równą TOP, a bit COM2B1 jest ustawiony. W takim przypadku zgodność porównania jest ignorowana, lecz ustawianie lub zerowanie jest wykonywane przy wartości TOP. Zobacz do podrozdziału "Tryb PWM poprawny fazowo".

Bity 3:2 – Zarezerwowane

Bity te są w ATmega640/1280/1281/2560/2561 zarezerwowane i przy odczycie dają zawsze wartość 0.

Bity 1:0 – WGM21:0: Waveform Generation Mode – Tryb generacji przebiegu

Bity te w połączeniu z bitem WGM22 znajdującym się w rejestrze TCCR2B sterują sposobem zliczania przez licznik, źródłem wartości maksymalnej (TOP) oraz typem generacji przebiegu, który ma zostać użyty. Moduł timera/licznika wspiera następujące tryby pracy: tryb normalny (licznik), tryb zerowania licznika przy zgodności porównania (ang. Clear Timer on Compare Match, CTC) oraz dwa tryby modulacji szerokości impulsu (ang. Pulse Width Modulation, PWM). Zobacz do podrozdziału "Tryby pracy".

Funkcje bitów trybu generacji przebiegu

Nr trybu WGM22 WGM21 WGM20 Tryb pracy modułu TOP Zmiana OCRx przy Ustawianie TOV przy(1)(2)
0 0 0 0 Normalny 0xFF Natychmiast MAX
1 0 0 1 PWM (poprawny fazowo) 0xFF TOP BOTTOM
2 0 1 0 CTC OCR2A Natychmiast MAX
3 0 1 1 szybki PWM 0xFF BOTTOM MAX
4 1 0 0 Zarezerwowane
5 1 0 1 PWM (poprawny fazowo) OCR2A TOP BOTTOM
6 1 1 0 Zarezerwowane
7 1 1 1 szybki PWM OCR2A BOTTOM TOP
Uwaga: 1. MAX = 0xFF
  2. BOTTOM = 0x00

TCCR2B – Timer/Counter Control Register B – Rejestr B sterowania timerem/licznikiem

Bit 7 6 5 4 3 2 1 0  
(0xB1) FOC2A FOC2B - - WGM22 CS22 CS21 CS20 TCCR2B
Zapis/Odczyt Z Z O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – FOC2A: Force Output Compare A – Wymuszone Output Compare A

Bit FOC2A jest aktywny tylko wtedy, gdy bity WGM określają tryb nie-PWM.

Jednakże dla kompatybilności z przyszłymi urządzeniami bit ten musi być zapisywany zerem przy zapisie do rejestru TCCR2B w czasie pracy w trybie PWM. Gdy do bitu FOC2A zostanie zapisana logiczna jedynka, zostaje natychmiast wymuszona zgodność porównania na module generacji przebiegu. Wyjście OC2A jest zmieniane zgodnie z ustawieniami bitów COM2A[1:0]. Zwróć uwagę, iż bit FOC2A jest zaimplementowany jako strob. Dlatego to wartość obecna w bitach COM2A[1:0] określa efekt wymuszonej zgodności porównania.

Strob FOC2A nie wygeneruje żadnego przerwania, ani nie wyzeruje timera w trybie CTC używającego rejestru OCR2A jako TOP.

Przy odczycie bit FOC2A daje zawsze wartość zero.

Bit 6 – FOC2B: Force Output Compare B – Wymuszone Output Compare B

Bit FOC2B jest aktywny tylko wtedy, gdy bity WGM2[2:0] określają tryb nie-PWM.

Jednakże dla kompatybilności z przyszłymi urządzeniami bit ten musi być zapisywany zerem przy zapisie do rejestru TCCR2B w czasie pracy w trybie PWM. Gdy do bitu FOC2B zostanie zapisana logiczna jedynka, zostaje natychmiast wymuszona zgodność porównania na module generacji przebiegu. Wyjście OC2B jest zmieniane zgodnie z ustawieniami bitów COM2B[1:0]. Zwróć uwagę, iż bit FOC2B jest zaimplementowany jako strob. Dlatego to wartość obecna w bitach COM2B[1:0] określa efekt wymuszonej zgodności porównania

Strob FOC2B nie wygeneruje żadnego przerwania, ani nie wyzeruje timera w trybie CTC używającego rejestru OCR2B jako TOP.

Przy odczycie bit FO20B daje zawsze wartość zero.

Bity 5:4 – Zarezerwowane

Bity te są w ATmega640/1280/1281/2560/2561 zarezerwowane i przy odczycie dają zawsze wartość 0.

Bit 3 – WGM22: Waveform Generation Mode – Tryb generacji przebiegu

Zobacz do opisu rejestru TCCR2A.

Bity 2:0 – CS22:0: Clock Select – Wybór zegara

Trzy bity wyboru zegara wybierają źródło zegarowe, z którego będzie korzystał timer/licznik.

CS22 CS21 CS20 Opis
0 0 0 Brak źródła zegarowego  (timer/licznik zatrzymany)
0 0 1 clkI/O/1 (bez preskalera)
0 1 0 clkI/O/8 (z preskalera)
0 1 1 clkI/O/32 (z preskalera)
1 0 0 clkI/O/64 (z preskalera)
1 0 1 clkI/O/128 (z preskalera)
1 1 0 clkI/O/256 (z preskalera)
1 1 1 clkI/O/1024 (z preskalera)

Jeśli zostanie wybrane zewnętrzne źródło zegarowe dla timera/licznika 0, zmiany poziomu logicznego na końcówce T0 będą taktowały licznika nawet wtedy, gdy końcówka zostanie skonfigurowana jako wyjście. Cecha ta pozwala na programowe sterowanie zliczaniem.


TCNT2 – Timer/Counter Register – Rejestr timera/licznika 2

Bit 7 6 5 4 3 2 1 0  
(0xB2) TCNT2[7:0] TCNT2
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr timera/licznika daje bezpośredni dostęp zarówno przy odczycie jak i przy zapisie do zawartości 8-bitowego licznika w module timera/licznika. Zapis do rejestru TCNT2 blokuje (usuwa) zgodność porównania przy następnym cyklu zegara timera. Modyfikowanie licznika (TCNT2) podczas jego pracy wprowadza ryzyko pominięcia zgodności porównania pomiędzy TCNT2 a rejestrami OCR2x.


OCR2A – Output Compare Register A –  Rejestr A dla Output Compare

Bit 7 6 5 4 3 2 1 0  
(0xB3) OCR2A[7:0] OCR2A
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr A dla Output Compare zawiera 8-bitową wartość, która jest ciągle porównywana z zawartością licznika (TCNT2). Zgodność może zostać wykorzystana do generacji przerwania Output Compare lub do generacji przebiegu wyjściowego na końcówce OC2A.


OCR2B – Output Compare Register B –  Rejestr B dla Output Compare

Bit 7 6 5 4 3 2 1 0  
(0xB4) OCR2B[7:0] OCR2B
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr B dla Output Compare zawiera 8-bitową wartość, która jest ciągle porównywana z zawartością licznika (TCNT2). Zgodność może zostać wykorzystana do generacji przerwania Output Compare lub do generacji przebiegu wyjściowego na końcówce OC2B.


TIMSK2 – Timer/Counter 2 Interrupt Mask Register – Rejestr maskowania przerwań od timera/licznika 2

Bit 7 6 5 4 3 2 1 0  
(0x70) OCIE2B OCIE2A TOIE2 TIMSK2
Zapis/Odczyt O O O O O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:3 – Zarezerwowane

Bity te są w ATmega640/1280/1281/2560/2561 zarezerwowane i przy odczycie dają zawsze wartość 0.

Bit 2 – OCIE2B: Timer/Counter Output Compare Match B Interrupt Enable – Włączanie przerwań przy zgodności porównania B w timerze/liczniku

Gdy bit OCIE2B zostanie ustawiony na jeden, a bit I w rejestrze stanu SREG jest również ustawiony, to jest uaktywniane przerwanie przy zgodności porównania B w timerze/liczniku 2. Przerwanie to jest wykonywane, jeśli w timerze/liczniku wystąpi zgodność porównania, tj. gdy zostanie ustawiony bit OCF2B bit w rejestrze znaczników przerwań od timera/licznika (ang. Timer/Counter Interrupt Flag Register, TIFR2).

Bit 1 – OCIE2A: Timer/Counter0 Output Compare Match A Interrupt Enable – Włączanie przerwań przy zgodności porównania A w timerze/liczniku

Gdy bit OCIE2A zostanie ustawiony na jeden, a bit I w rejestrze stanu SREG jest również ustawiony, to jest uaktywniane przerwanie przy zgodności porównania A w timerze/liczniku 2. Przerwanie to jest wykonywane, jeśli w timerze/liczniku wystąpi zgodność porównania, tj. gdy zostanie ustawiony bit OCF2A w rejestrze znaczników przerwań od timera/licznika (ang. Timer/Counter Interrupt Flag Register, TIFR2).

Bit 0 – TOIE2: Timer/Counter0 Overflow Interrupt Enable – Włączenie przerwań przy przepełnieniu timera/licznika 2

Gdy bit TOIE2 zostanie zapisany stanem jeden, a bit I w rejestrze stanu SREG jest ustawiony, to jest uaktywniane przerwanie przy przepełnieniu timera/licznika 0. Przerwanie to jest wykonywane, jeśli wystąpi przepełnienie w timerze/liczniku 2, tj. gdy zostanie ustawiony bit TOV2 w rejestrze znaczników przerwań od timera/licznika (ang. Timer/Counter Interrupt Flag Register, TIFR2).


TIFR2 – Timer/Counter 0 Interrupt Flag Register – Rejestr znaczników przerwań od timera/licznika 0

Bit 7 6 5 4 3 2 1 0  
0x17 (0x37) OCF2B OCF2A TOV2 TIFR2
Zapis/Odczyt O O O O O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:3 – Zarezerwowane

Bity te są w ATmega640/1280/1281/2560/2561 zarezerwowane i przy odczycie dają zawsze wartość 0.

Bit 2 – OCF2B: Output Compare Flag 2 B – Znacznik Output Compare 2 B

Bit OCF2B jest ustawiany, gdy wystąpi zgodność porównania pomiędzy timerem/licznikiem 2 a danymi w rejestrze Output Compare 2 B (ang. Output Compare Register2 B, OCR2B). Bit OCF0B jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora przerwania. Alternatywnie można go wyzerować przez zapis do znacznika logicznej jedynki. Gdy są ustawione bity: I w SREG, OCIE2B i OCF2B, zostaje wykonane przerwanie przy zgodności porównania.

Bit 1 – OCF2A: Output Compare Flag 2 A – Znacznik Output Compare 2 A

Bit OCF2A jest ustawiany, gdy wystąpi zgodność porównania pomiędzy timerem/licznikiem 0 a danymi w rejestrze Output Compare 2 A (ang. Output Compare Register2 A, OCR2A). Bit OCF0A jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora przerwania. Alternatywnie można go wyzerować przez zapis do znacznika logicznej jedynki. Gdy są ustawione bity: I w SREG, OCIE2AB i OCF2A, zostaje wykonane przerwanie przy zgodności porównania.

Bit 1 – TOV2: Timer/Counter0 Overflow Flag – Znacznik przerwania przy przepełnieniu timera/licznika

Bit TOV2 jest ustawiany, gdy wystąpi przepełnienie w timerze/liczniku 0. Bit TOV2  jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora przerwania. Alternatywnie można go wyzerować przez zapis do znacznika logicznej jedynki. Gdy są ustawione na jeden bity I w SREG, TOIE2A (ang. Timer/Counter2 Overflow Interrupt Enable – uaktywnienie przerwań od przepełnienia timera/licznika 2) oraz TOV2, zostaje wykonane przerwanie od przepełnienia timera/licznika 2. W trybie PWM znacznik ten jest ustawiany, gdy timer/licznik 2 zmienia kierunek zliczania przy wartości 0x00.

Ustawianie tego znacznika zależy od ustawienia bitów WGM2[2:0]:

Nr trybu WGM22 WGM21 WGM20 Tryb pracy modułu TOP Zmiana OCRx przy Ustawianie TOV przy(1)(2)
0 0 0 0 Normalny 0xFF Natychmiast MAX
1 0 0 1 PWM (poprawny fazowo) 0xFF TOP BOTTOM
2 0 1 0 CTC OCR2A Natychmiast MAX
3 0 1 1 szybki PWM OCR2A BOTTOM MAX
4 1 0 0 Zarezerwowane
5 1 0 1 PWM (poprawny fazowo) OCR2A TOP BOTTOM
6 1 1 0 Zarezerwowane
7 1 1 1 szybki PWM OCR2A BOTTOM TOP
Uwaga: 1. MAX = 0xFF
  2. BOTTOM = 0x00

ASSR – Asynchronous Status Register – Rejestr stanu asynchronicznego

Bit 7 6 5 4 3 2 1 0  
(0xB6) EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB ASSR
Zapis/Odczyt O Z/O Z/O O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – Zarezerwowany

Bit ten jest w ATmega640/1280/1281/2560/2561 zarezerwowany i przy odczycie daje zawsze wartość 0.

Bit 6 – EXCLK: Enable External Clock Input – Uaktywnienie wejścia zewnętrznego zegara

Gdy bit EXCLK jest zapisany jedynką i wybrany został zegar asynchroniczny, to uaktywniany jest bufor wejścia zegara zewnętrznego, a zegar zewnętrzny można doprowadzić do końcówki 1 oscylatora timera (ang. Timer Oscillator 1, TOSC1) zamiast kwarcu 32kHz. Zapis bitu EXCLK powinien być wykonany przed wyborem pracy asynchronicznej. Zauważ, iż oscylator kwarcowy będzie pracował tylko wtedy, gdy ten bit ma stan zero.

Bit 5 – AS2: Asynchronous Timer/Counter2 – Tryb pracy asynchronicznej

Gdy bit AS2 zostanie zapisany stanem zero, timer/licznik 2 jest taktowany z zegara we/wy clkI/O. Gdy do bitu AS2 zostanie wpisana jedynka, timer/licznik 2 jest taktowany z oscylatora kwarcowego podłączonego do końcówki 1 oscylatora timera (ang. Timer Oscillator 1 pin, TOSC1). Gdy zmienia się wartość bitu AS2, zawartości rejestrów TCNT2, OCR2A, OCR2B, TCCR2A i TCCR2B mogą być nieprawidłowe.

Bit 4 – TCN2UB: Timer/Counter2 Update Busy – Uaktualnienie rejestru TCNT2 w toku

Gdy timer/licznik 2 pracuje asynchronicznie i rejestr TCNT2 zostanie zapisany, bit ten przechodzi w stan jeden. Gdy rejestr TCNT2 został uaktualniony z rejestru tymczasowego, bit jest zerowany sprzętowo. Logiczne zero w tym bicie oznacza, iż rejestr TCNT2 można zapisać nową wartością.

Bit 3 – OCR2AUB: Output Compare Register2 Update Busy – Uaktualnienie rejestru OCR2A w toku

Gdy timer/licznik 2 pracuje asynchronicznie i rejestr OCR2A zostanie zapisany, bit ten przechodzi w stan jeden. Gdy rejestr OCR2A został uaktualniony z rejestru tymczasowego, bit jest zerowany sprzętowo. Logiczne zero w tym bicie oznacza, iż rejestr OCR2A można zapisać nową wartością.

Bit 2 – OCR2BUB: Output Compare Register2 Update Busy – Uaktualnienie rejestru OCR2B w toku

Gdy timer/licznik 2 pracuje asynchronicznie i rejestr OCR2B zostanie zapisany, bit ten przechodzi w stan jeden. Gdy rejestr OCR2B został uaktualniony z rejestru tymczasowego, bit jest zerowany sprzętowo. Logiczne zero w tym bicie oznacza, iż rejestr OCR2B można zapisać nową wartością.

Bit 1 – TCR2AUB: Timer/Counter Control Register2 Update Busy – Uaktualnienie rejestru TCCR2A w toku

Gdy timer/licznik 2 pracuje asynchronicznie i rejestr TCCR2A zostanie zapisany, bit ten przechodzi w stan jeden. Gdy rejestr TCCR2A został uaktualniony z rejestru tymczasowego, bit jest zerowany sprzętowo. Logiczne zero w tym bicie oznacza, iż rejestr TCCR2A można zapisać nową wartością.

Bit 0 – TCR2BUB: Timer/Counter Control Register2 Update Busy – Uaktualnienie rejestru TCCR2B w toku

Gdy timer/licznik 2 pracuje asynchronicznie i rejestr TCCR2B zostanie zapisany, bit ten przechodzi w stan jeden. Gdy rejestr TCCR2B został uaktualniony z rejestru tymczasowego, bit jest zerowany sprzętowo. Logiczne zero w tym bicie oznacza, iż rejestr TCCR2B można zapisać nową wartością.

Jeśli zostanie wykonany zapis do dowolnego z tych pięciu rejestrów timera/licznika 2, gdy jego znacznik zajętości jest ustawiony, to zapisana wartość może ulec uszkodzeniu i spowodować niezamierzone przerwanie.

Mechanizm odczytu TCNT2, OCR2A, OCR2B, TCCR2A i TCCR2B jest inny. Gdy odczytywany jest rejestr TCNT2, odczytana będzie aktualna wartość timera. Gdy odczytywany jest rejestr OCR2A, OCR2B, TCCR2A lub TCCR2B, odczytana będzie wartość z rejestru tymczasowego.


GTCCR – General Timer/Counter Control Register – Ogólny rejestr sterowania timerami/licznikami

Bit 7 6 5 4 3 2 1 0  
0x23 (0x43) TSM PSRASY PSRSYNC GTCCR
Zapis/Odczyt Z/O O O O O O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 1 – PSRASY: Prescaler Reset Timer/Counter2 – Reset preskalera dla timera/licznika 2

Gdy ten bit ma wartość jeden, to preskaler timera/licznika 2 zostanie zresetowany. Bit jest normalnie zerowany natychmiast sprzętowo. Jeśli bit zostanie zapisany, gdy timer/licznik 2 pracuje w trybie asynchronicznym, to bit pozostanie w stanie jeden aż do zresetowania preskalera. Bit nie będzie zerowany sprzętowo, jeśli zostanie ustawiony bit TSM.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.