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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega64

8-bitowy timer/licznik 2 z PWM

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

Przegląd

Timer/licznik 2 jest modułem 8-bitowego timera/licznika o ogólnym przeznaczeniu z modułem pojedynczego porównywania (ang. single compare unit). Posiada on następujące własności:

W rozdziale pojawia się termin angielski Output Compare, który 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. Ponieważ nie spotkałem dobrego polskiego tłumaczenia dla terminu Output Compare, postanowiłem go zachować w oryginalnej postaci.

Poniżej przedstawiono uproszczony schemat blokowy 8-bitowego timera/licznika. Rejestry dostępne dla mikroprocesora, łącznie z bitami we/wy i końcówkami we/wy, są zapisane tłustym drukiem.

Rejestry

Rejestr timera/licznika (TCNT2) i rejestr Output Compare (OCR2) są 8-bitowymi rejestrami. Wszystkie sygnały żądania przerwań są widoczne w rejestrze znaczników przerwań timera (ang. Timer Interrupt Flag Register, TIFR). wszystkie przerwania są indywidualnie maskowane poprzez rejestr masek przerwań timera (ang. Timer Interrupt Mask Register, TIMSK). Rejestrów TIFR i TIMSK nie pokazano na rysunku, ponieważ są one współdzielone przez inne moduły liczników.

Timer/licznik może być taktowany wewnętrznie, poprzez preskaler lub przez zewnętrzne źródło zegarowe z końcówki T0. Blok logiki wyboru zegara kontroluje źródła zegarowe oraz rodzaj zbocza sygnału, których używa timer/licznik do zwiększania (lub zmniejszania) o 1 swojej wartości. Gdy nie zostanie wybrane żadne źródło zegarowe, timer/licznik przechodzi w stan nieaktywny. Wyjście z układu wyboru zegara jest oznaczone jako zegar timera (clkT2).

Podwójnie buforowany rejestr Output Compare (ang. Output Compare Register, OCR2) jest przez cały czas porównywany z wartością timera/licznika. Wynik tego porównania może być użyty przez generator przebiegu fali do tworzenia przebiegów PWM lub wyprowadzania zmiennej częstotliwości na końcówce Output Compare (OC2). Szczegóły znajdziesz w podrozdziale "Moduł Output Compare". Zdarzenie zgodności porównania ustawi również znacznik porównania (ang. Compare Flag, OCF2), który można wykorzystać do generacji żądania przerwania Output Compare.

Definicje

Wiele rejestrów i odwołań do bitów w tym rozdziale są zapisane w postaci ogólnej. Mała litera "n" zastępuje numer timera/licznika, w tym przypadku jest to 0. Jednakże w programach należy używać precyzyjnej postaci rejestrów oraz ich bitów, tj. TCNT2 przy dostępie do wartości timera/licznika 0, itd.

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 OCR2. Przypisanie to jest zależne od trybu pracy licznika.

Na początek:  podrozdziału   strony 

Źródła zegarowe timera/licznika

Timer/licznik może być taktowany przez wewnętrzne lub zewnętrzne źródło zegarowe. Źródło to wybiera logika wyboru zegara, która jest kontrolowana przez bity wyboru zegara (CS2[2:0]) ulokowane w rejestrze sterującym timerem/licznikiem (ang. Timer/Counter Control Register, TCCR2). Szczegóły na temat źródeł zegarowych i preskalera znajdziesz w rozdziale "Preskaler timerów/liczników 1, 2 i 3".

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:

obrazek

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 TCNT2 osiągnął wartość maksymalną.
bottom   Sygnalizacja, iż licznik TCNT2 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 clkT0 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 WGM21 i WGM20 umieszczonych w rejestrze sterującym timera/licznika (ang. Timer/Counter Control Register, TCCR2). Istnieją bliskie związki pomiędzy sposobem zachowania się licznika (zliczaniem) a sposobem generacji przebiegów na wyjściu Output Compare, OC2. 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[1:0]. Znacznik TOV2 może być używany do generacji przerwania dla mikroprocesora.


Na początek:  podrozdziału   strony 

Moduł Output Compare

8-bitowy komparator ciągle porównuje zawartość licznika TCNT2 z rejestrem Output Compare (OCR2). Gdy TCNT2 zrówna się z zawartością rejestru OCR2, to komparator zasygnalizuje zgodność. Zgodność ustawi znacznik Output Compare (OCF2) przy następnym cyklu 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 stan logiczny 1. Generator przebiegu wykorzystuje sygnał zgodności w celu wygenerowania przebiegu wyjściowego zgodnie z trybem pracy ustawionym przez bity WGM2[1:0] i bity trybu Compare Output (COM2[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 OCR2 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 OCR2 w czasie osiągnięcia wartości top lub bottom sekwencji zliczania. Synchronizacja zapobiega powstawaniu impulsów PWM o nieprawidłowej długości lub niesymetrycznych, co gwarantuje bezbłędne przebiegi wyjściowe.

Dostęp do rejestru OCR2 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 OCR2, a gdy buforowanie jest wyłączone, mikroprocesor ma bezpośredni dostęp do OCR2.

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, 0). Wymuszenie zgodności porównania nie ustawi znacznika OCF2, ani nie wyzeruje/przeładuje timera, lecz końcówka OC2 zostanie uaktualniona tak, jakby wystąpiła rzeczywista zgodność porównania (ustawienie bitów COM2[1:0] definiuje, czy końcówka  OC2 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 zegara timera, nawet, jeśli timer został zatrzymany. Cecha ta pozwala zainicjować rejestr OCR2 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 OCR2, 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 OC2 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 OC2 jest użycie bitów strobowych wymuszonego Output Compare (FOC2) w trybie normalnym. Rejestr OC2 utrzymuje swoją wartość nawet przy zmianie trybów generacji przebiegów.

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


Na początek:  podrozdziału   strony 

Moduł Compare Match Output

Bity trybu wyjścia porównania (ang. Compare Output Mode bits, COM2[1:0]) posiadają dwie funkcje. Po pierwsze, generator przebiegu wykorzystuje bity COM2[1:0] do definiowania stanu końcówki wyjścia porównania (OC2) przy kolejnej zgodności porównania. Po drugie, bity COM2[1:0] kontrolują źródło wyjściowe dla końcówki OC2. Obrazek poniżej pokazuje uproszczony schemat sieci logicznej, na którą oddziałuje ustawienie bitów COM2[1: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 COM2[1:0]. Przy odwołaniu do stanu OC2 odwołanie to dotyczy wewnętrznego rejestru OC2, nie końcówki OC2. Jeśli wystąpi reset, to rejestr OC2 zostanie wyzerowany.

Moduł wyjścia zgodności porównania (ang. Compare Match Output Unit)

Ogólna funkcja portu we/we zostaje przejęta przez wyjście Output Compare (OC2) z generatora przebiegu, jeśli dowolny z bitów COM2[1:0] jest ustawiony. Jednakże kierunek końcówki OC2 (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 OC2 (DDR_OC2) musi być ustawiony jako wyjście, zanim wartość OC2 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 OC2 przed uaktywnieniem wyjścia. Zwróć uwagę, że niektóre z ustawień bitów COM2[1:0] są zarezerwowane tylko dla pewnych trybów pracy. Zobacz do podrozdziału "Opis Rejestrów".

Tryb Compare Output i generacja przebiegu

Generator przebiegu (ang. Waveform Generator) używa bitów COM2[1:0] w różny sposób w trybach normalnym, CTC i PWM. Dla wszystkich trybów ustawienie COM2[1:0] = 0 informuje generator przebiegu, iż nie ma być podjęte żadne działanie na rejestrze OC2 przy następnej zgodności porównania. Wykonywane działania znajdziesz w opisie rejestru TCCR2.

Zmiana stanu bitów COM2[1:0] odniesie skutek dopiero przy pierwszej zgodności porównania. która wystąpi po zapisie tych bitów. Dla trybów różnych od PWM działanie może zostać natychmiast wymuszone przez użycie bitów strobowych FOC (ang. Force Output Compare –  wymuszenie Output Compare). Więcej na ten temat znajdziesz w opisie rejestru TCCR2.


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[1:0] – ang. Waveform Generation mode) oraz bitów trybu Compare Output (COM2[1:0] – ang. Compare Output mode). 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ć zanegowane, czy nie (ang. inverted lub non-inverted PWM). Dla trybów różnych od trybów PWM bity COM2[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. Zobacz na tryby pracy opisane poniżej. Więcej informacji uzyskasz w podrozdziałach "Moduł Compare Match Output" i "Wykresy czasowe dla timera/licznika".

Tryb normalny

Najprostszym trybem pracy jest tryb normalny (ang. Normal Mode, WGM2[1: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 – ang. Clear Timer on Compare Match)

W trybie zerowania timera przy zgodności porównania (ang. Clear Timer on Compare, CTC)  (WGM2[1:0] = 2), rejestr OCR2 jest używany do manipulowania rozdzielczością licznika. W trybie CTC licznik jest zerowany, gdy jego wartość (TCNT2) zrówna się  z OCR2. Rejestr OCR2 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. 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 OCR2, 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 OCF2. 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 OCR2 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 OC2 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 (COM2[1:0] = 1). Wartość OC2 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ść fOC2 = fclk_I/O/2, gdy OCR2 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

Szybki tryb PWM (ang. fast Pulse Width Modulation mode) (WGM2[1:0] = 3) udostępnia opcję generowania przebiegu PWM o wysokiej częstotliwości. Szybkie PWM różni się od innych opcji PWM zliczaniem tylko w jednym kierunku. Licznik zlicza od BOTTOM do MAX, po czym znów rozpoczyna zliczanie od BOTTOM. W trybie nieodwróconym Compare Output (ang. non-inverting Compare Output mode) wyjście Output Compare (OC2) jest zerowane przy zgodności porównania pomiędzy TCNT2 a OCR2 i ustawiane przy BOTTOM. W trybie odwróconym Output Compare (ang. inverting Compare Output mode) wyjście jest ustawiane przy zgodności porównania i zerowane przy BOTTOM. Z powodu tego zliczania tylko w jednym kierunku, częstotliwość pracy szybkiego trybu PWM może być dwukrotnie wyższa niż w trybie PWM z poprawnością fazy, który wykorzystuje zliczanie dwukierunkowe. Ta wysoka częstotliwość sprawia, że szybki tryb PWM dobrze nadaje się do aplikacji sterujących mocą, stabilizacją oraz przetwarzaniem cyfrowo/analogowym. Wysoka częstotliwość umożliwia stosowanie mniejszych wymiarowo elementów zewnętrznych (cewek, kondensatorów), a przez to zmniejsza całkowity koszt systemu.

W szybkim trybie PWM licznik jest zwiększany co 1, aż jego zawartość osiągnie MAX. Licznik zostaje następnie wyzerowany przy następnym cyklu zegara timera. Na poniższym rysunku przedstawiono wykres czasowy dla szybkiego trybu PWM. Wartość TCNT2 jest na wykresie przedstawiona jako histogram dla zilustrowania jednokierunkowej operacji zliczania. Wykres zawiera wyjścia PWM nieodwrócone oraz odwrócone. Małe poziome odcinki na zboczach TCNT2 reprezentują zgodności porównań pomiędzy OCR2 a TCNT2.

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV2) jest ustawiany zawsze, gdy licznik osiąga wartość MAX. Jeśli przerwanie jest uaktywnione, to procedura jego obsługi może zostać użyta do uaktualniania wartości do porównań.

W szybkim trybie PWM układ porównawczy pozwala na generację przebiegów PWM na końcówce OC2. Ustawienie bitów COM2[1:0] na 2 utworzy nieodwrócony przebieg PWM, a odwrócony przebieg PWM może zostać wygenerowany przez ustawienie bitów COM0x1:0 na 3. Faktyczna wartość OC2 pojawi się na końcówce portu tylko wtedy, gdy końcówka ta zostanie ustawiona jako wyjście. Przebieg PWM jest generowany przez ustawianie (lub zerowanie) rejestru OC2 przy zgodności porównania pomiędzy OCR2 i TCNT2, a zerowanie (lub ustawianie) rejestru OC2 w cyklu zegara timera, w którym licznik jest zerowany (zmienia wartość z MAX na BOTTOM).

Częstotliwość przebiegu PWM na wyjściu może być obliczona z poniższego wzoru:

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

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


Tryb PWM poprawny fazowo

Tryb PWM poprawny fazowo (ang. phase correct PWM mode, WGM2[1:0] = 1) udostępnia opcję generacji przebiegu PWM o wysokiej rozdzielczości i poprawnego fazowo. Oparty on jest na zliczaniu dwukierunkowym. Licznik w kółko zlicza od BOTTOM do MAX, a później od MAX do BOTTOM. W nieodwróconym trybie Compare Output końcówka Output Compare (OC2) jest ustawiana w stan niski przy zgodności porównania pomiędzy TCNT2 i OCR2 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 operacja jest odwrotna. 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ść trybu PWM poprawnego fazowo jest ustalona na osiem bitów. W trybie tym licznik jest zwiększany aż osiągnie wartość MAX. Gdy to się stanie, zmienia kierunek zliczania. Wartość TCNT2 będzie równa MAX przez jeden cykl 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 wyjścia PWM nieodwrócone i odwrócone. Małe, poziome linie na zboczach TCNT2 reprezentują zgodności porównań pomiędzy OCR2 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 OC2. Ustawienie bitów COM2[1:0] na 2 wytworzy nieodwrócony przebieg PWM, a przebieg odwrócony powstanie przy ustawieniu COM2[1:0] na 3. Faktyczna wartość OC2 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 OC2 przy zgodności porównania pomiędzy OCR2 i TCNT2, gdy licznik zlicza w górę, a ustawianie (lub zerowanie) rejestru OC2 przy zgodności porównania pomiędzy OCR2 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 OCR2 reprezentują specjalne przypadki przy generacji przebiegu PWM w trybie poprawnym fazowo. Jeśli OCR2 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 OCn 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.


Na początek:  podrozdziału   strony 

Przebiegi czasowe timera/licznika

Timer/licznik jest urządzeniem zaprojektowanym jako synchroniczne i stąd zegar timera (clkT2) jest pokazany na kolejnych obrazkach jako sygnał zegarowy uaktywniający funkcje. Obrazki zawierają informacje o momencie ustawiania znaczników przerwania. Poniższy rysunek przedstawia wykres czasowy przy podstawowej pracy timera/licznika. Na wykresie pokazana jest sekwencja zliczania bliska 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 OCF2 z wyjątkiem trybów CTC:

Kolejny wykres pokazuje ustawianie znacznika OCF2 i zerowanie licznika TCNT2 w trybach CTC.


Na początek:  podrozdziału   strony 

Opis rejestrów timera/licznika

TCCR2 – Timer/Counter Control Register – Rejestr sterowania timerem/licznikiem

Bit 7 6 5 4 3 2 1 0  
0x25 (0x45) FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20 TCCR2
Zapis/Odczyt Z 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  

Bit 7 – FOC2: Force Output Compare – Wymuszone Output Compare

Bit FOC2 jest aktywny tylko wtedy, gdy bit WGM20 określa tryb nie-PWM. Jednakże dla kompatybilności z przyszłymi urządzeniami bit ten musi być zapisywany zerem przy zapisie do rejestru TCCR2 w czasie pracy w trybie PWM. Gdy do bitu FOC2 zapisana jest logiczna jedynka, zostaje natychmiast wymuszona zgodność porównania na module generacji przebiegu. Wyjście OC2 jest zmieniane zgodnie z ustawieniami bitów COM2[1:0]. Zwróć uwagę, iż bit FOC2 jest zaimplementowany jako strob. Dlatego to wartość obecna w bitach COM2[1:0] określa efekt wymuszonej zgodności porównania. Strob FOC2 nie wygeneruje żadnego przerwania, ani nie wyzeruje timera w trybie CTC używającego rejestr OCR2 jako TOP.

Przy odczycie bit FOC2 daje zawsze wartość zero.
 

• Bit 3, 6 – WGM2[1:0]: Waveform Generation Mode – Tryb generacji przebiegu fali

Te bity kontrolują sekwencję zliczania licznika, źródło wartości maksymalnej (TOP) licznika oraz rodzaj generacji przebiegu do użycia. Timer/licznik 0 obsługuje następujące tryby: normalny, zerowania przy zgodności porównania (CTC) i dwa rodzaje modulacji szerokości impulsu (ang. Pulse Width Modulation, PWM).

Opis bitów trybu generacji przebiegu fali(1)

Tryb WGM21
(CTC2)
WGM20
(PWM2)
Tryb pracy timera/licznika TOP Uaktualnianie
OCR2
Ustawianie
znacznika TOV2
0 0 0 Normalny 0xFF Natychmiast MAX
1 0 1 PWM poprawny fazowo 0xFF TOP BOTTOM
2 1 0 CTC OCR2 Natychmiast MAX
3 1 1 PWM szybki 0xFF BOTTOM MAX
Uwaga: 1. Nazwy definicji bitów CTC2 i PWM2 są już przestarzałe. Używaj definicji WGM2[1:0]. Jednakże działanie oraz położenie tych bitów są kompatybilne z poprzednimi wersjami timera.

Bity 5:4 – COM2[1:0]: Compare Match Output Mode – Tryb wyjścia dla zgodności porównania

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

Gdy wyjście OC2B jest połączone z końcówką, funkcje bitów COM2[1:0] zależą od ustawienia bitów WGM2[1:0].

Funkcje bitów COM2[1:0], gdy bity WGM2[1:0] są ustawione na tryb normalny lub CTC (nie PWM):

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

Funkcje bitów COM2[1:0], gdy bity WGM2[1:0] są ustawione na szybki tryb PWM(1):

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

Funkcje bitów COM2[1:0], gdy bity WGM2[1:0] są ustawione na tryb PWM poprawny fazowo(1):

COM01 COM00 Opis
0 0 Normalna praca portu, OC2 odłączone.
0 1 Zarezerwowane
1 0 Zerowanie OC2 przy zgodności porównania przy zliczaniu w górę.
Ustawienie OC2 przy zgodności porównania przy zliczaniu w dół.
1 1 Ustawienie OC2 przy zgodności porównania przy zliczaniu w górę.
Zerowanie OC2 przy zgodności porównania przy zliczaniu w dół.
Uwaga: 1. Specjalny przypadek występuje, gdy rejestr OCR2 ma zawartość równą TOP, a bit COM01 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 2:0 – CS2[2: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/64 (z preskalera)
1 0 0 clkI/O/256 (z preskalera)
1 0 1 clkI/O/1024 (z preskalera)
1 1 0 Zewnętrzne źródło zegarowe na końcówce T2. Aktywne zbocze opadające.
1 1 1 Zewnętrzne źródło zegarowe na końcówce T2. Aktywne zbocze narastające.

Jeśli zostanie wybrane zewnętrzne źródło zegarowe dla timera/licznika 0, zmiany poziomu logicznego na końcówce T2 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 0

Bit 7 6 5 4 3 2 1 0  
0x24 (0x44) 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 rejestrem OCR2.


OCR2 – Output Compare Register –  Rejestr Output Compare timera/licznika 0

Bit 7 6 5 4 3 2 1 0  
0x23 (0x43) OCR2[7:0] OCR2
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 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 OC2.


TIMSK – Timer/Counter Interrupt Mask Register – Rejestr maski przerwań od timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x37 (0x57) OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK
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  

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

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

Bit 6 – 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 jest ustawiony, to jest uaktywniane przerwanie przy przepełnieniu timera/licznika 2. 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, TIFR).


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

Bit 7 6 5 4 3 2 1 0  
0x36 (0x56) OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 TIFR
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  

Bit 7 – OCF2: Output Compare Flag 2 – Znacznik Output Compare 2

Bit OCF2 jest ustawiany, gdy wystąpi zgodność porównania pomiędzy timerem/licznikiem 2 a danymi w rejestrze Output Compare 2 (ang. Output Compare Register2, OCR2). Bit OCF2 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, OCIE2 i OCF2, zostaje wykonane przerwanie przy zgodności porównania.

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

Bit TOV2 jest ustawiany, gdy wystąpi przepełnienie w timerze/liczniku 2. 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 bity I w SREG oraz TOV2, zostaje wykonane przerwanie od przepełnienia timera/licznika 2. W trybie PWM poprawnym fazowo znacznik ten jest ustawiany, gdy timer/licznik 2 zmienia kierunek zliczania przy wartości 0x00.


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
©2024 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.