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

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny15

Timery/liczniki

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

ATtiny15L udostępnia dwa 8-bitowe timery/liczniki ogólnego przeznaczenia. Timery liczniki posiadają osobne 10-bitowe preskalery.  Timer/licznik 0 jako zegar bazowy używa wewnętrznego zegara (CK). Timer/licznik 1 jako zegara bazowego może używać albo zegara wewnętrznego (CK), albo szybkiego zegara peryferyjnego (PCK).

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 okres czasu. Odbywa się to w ten sposób, iż stan licznika jest porównywany z rejestrem przechowującym znacznik czasu. Gdy licznik zliczy impulsy wejściowe do liczby określonej przez 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 tłumaczenia dla terminu Output Compare, postanowiłem go zachować w oryginalnej postaci.

Preskaler timera/licznika 0

Preskaler timera/licznika 0
obrazek

Cztery możliwe wybory zegara to: CK / 8, CK / 64, CK / 256 i CK / 1024, gdzie CK jest zegarem oscylatora. Jako źródło zegara można również wybrać CK, źródło zewnętrzne z końcówki T0 oraz "0", czyli stop.

Ustawienie bitu PSR0 w rejestrze SFIOR resetuje preskaler, co pozwala użytkownikowi na pracę z przewidywalnym preskalerem.

Na początek:  podrozdziału   strony 

Preskaler timera/licznika 1

Preskaler timera/licznika 1
obrazek

Dla timera/licznika 1 możliwe są następujące wybory zegara: PCK, PCK / 2, PCK / 4, PCK / 8, CK (= PCK / 16), CK / 2, CK / 4, CK / 8, CK / 16, CK / 32, CK / 64, CK / 128, CK / 256, CK / 512, CK / 1024 i stop. Ustawienie bitu PSR1 w rejestrze SFIOR resetuje preskaler, co pozwala użytkownikowi na pracę z przewidywalnym preskalerem.

Na początek:  podrozdziału   strony 

Rejestr we/wy funkcji specjalnych

SFIOR – The Special Function IO Register – Rejestr funkcji specjalnych

Bit 7 6 5 4 3 2 1 0  
0x2C - - - - - FOC1A PSR1 PSR0 SFIOR
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

Te bity są w ATtiny15L zarezerwowane i zawsze dają odczyt zero.

Bit 2 – FOC1A: Force Output Compare 1A – Wymuszone Output Compare 1A

Zapis logicznej jedynki do tego bitu wymusza zmianę wyjścia zgodności porównania na końcówce PB1 (OC1A) zgodnie z wartościami ustawionymi wcześniej w rejestrach COM1A1 i COM1A0. Bit wymuszonego Output Compare może być używany do zmiany stanu końcówki wyjścia bez oczekiwania na zgodność porównania w timerze. Automatyczne działanie zaprogramowane w COM1A1 i COM1A0 zostaje wykonane tak, jakby wystąpiła zgodność porównania, lecz nie jest generowane żadne przerwanie, a timer/licznik 1 nie będzie wyzerowany, nawet jeśli ustawiony jest bit CTC1. Bit FOC1A przy odczycie zawsze daje zero. Ustawianie bitu FOC1A w trybie PWM nie daje żadnych efektów.

Bit 1 – PSR1: Prescaler Reset Timer/Counter1 – Reset preskalera timera/licznika 1

Gdy ten bit zostanie ustawiony na 1, preskaler timera/licznika 1 zeruje się. Po wykonaniu tej operacji bit zostaje wyzerowany sprzętowo. Zapis zera do tego bitu nie daje żadnych efektów. Przy odczycie bit zawsze ma wartość zero.

Bit 0 – PSR0: Prescaler Reset Timer/Counter0 – Reset preskalera timera/licznika 0

Gdy ten bit zostanie ustawiony na 1, preskaler timera/licznika 0 zeruje się. Po wykonaniu tej operacji bit zostaje wyzerowany sprzętowo. Zapis zera do tego bitu nie daje żadnych efektów. Przy odczycie bit zawsze ma wartość zero.

Na początek:  podrozdziału   strony 

8-bitowy timer/licznik 0

8-bitowy timer/licznik 0 może wybrać na swoje źródło zegara sygnał CK, preskalowany sygnał CK lub końcówkę zewnętrzną. Dodatkowo może zostać zatrzymany, jak podano w opisie rejestru sterującego timerem/licznikiem 0 (ang. Timer/Counter0 Control Register, TCCR0). Znacznik stanu przepełnienia (ang. Overflow Status Flag) znajduje się w rejestrze znaczników przerwań z timerów/liczników (ang.Timer/Counter Interrupt Flag Register, TIFR). Sygnały sterujące znajdują się w rejestrze sterującym timerem/licznikiem 0, TCCR0. Ustawienia włączania/wyłączania przerwań dla timera/licznika 0 znajdują się w rejestrze masek przerwań timerów/liczników (ang. Timer/Counter Interrupt Mask Register, 4084.php#TIMSK). Gdy timer/licznik 0 taktowany jest zewnętrznymi impulsami zegarowymi, to sygnał zewnętrzny jest synchronizowany z częstotliwością oscylatora mikroprocesora. Aby zapewnić poprawne próbkowanie zewnętrznego zegara, minimalnym odstępem pomiędzy dwoma zboczami zegara zewnętrznego jest co najmniej jeden okres zegara mikroprocesora. Sygnał zegara zewnętrznego jest próbkowany przy narastającym zboczu wewnętrznego zegara mikroprocesora.

Schemat blokowy timera/licznika 0
obrazek


TCCR0 – The Timer/Counter0 Control Register – Rejestr sterujący timerem/licznikiem 0

Bity 7:3 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i zawsze dają odczyt zero.

Bity 2:0 – CS02, CS01, CS00: Clock Select0, Bits 2, 1 and 0 – Bity 2,1 i 0 wyboru zegara

Bity te definiują preskalowane źródło zegara dla timera 0 wg poniższej tabeli:

CS02 CS01 CS00 Opis
0 0 0 Stop, timer/licznik 0 jest zatrzymany
0 0 1 CK
0 1 0 CK/8
0 1 1 CK/64
1 0 0 CK/256
1 0 1 CK/1024
1 1 0 Końcówka zewnętrzna T0, zbocze opadające
1 1 1 Końcówka zewnętrzna T0, zbocze narastające

 

Warunek stopu udostępnia funkcję wyłączania timera/licznika 0. Tryby preskalowane CK pochodzą bezpośrednio z zegara oscylatora CK. Jeśli jako źródło zegara dla timera/licznika 0 zostaną wybrane tryby zewnętrznej końcówki T0, to przejścia sygnału na PB2 (T0) będą taktowały licznik nawet wtedy, gdy końcówka ta została skonfigurowana jako wyjście. Daje to możliwość programowego sterowania zliczaniem.


TCNT0 – Timer/Counter Register – Rejestr timera/licznika

Bit 7 6 5 4 3 2 1 0  
0x32 TCNT0[7:0] TCNT0
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  

Timer/licznik 0 jest zaimplementowany jako licznik zliczający w górę z dostępem odczytu i zapisu. Jeśli następuje zapis do timera/licznika 0 przy obecnym źródle zegarowym, to timer/licznik 0 kontynuuje zliczanie od cyklu zegara następującym po operacji zapisu.

Na początek:  podrozdziału   strony 

8-bitowy timer/licznik 1

Timer/licznik 1 można używać na wiele sposobów, np. jako dokładny 8-bitowy modulator PWM o dużej częstotliwości z zegarem do 25,6 MHz. W tym trybie timer/licznik 1 oraz rejestry Output Compare pełnią rolę samodzielnego modułu PWM.

Podobnie, możliwości wysokich podziałów częstotliwości zegarowej czynią ten moduł użytecznym dla funkcji o niskich prędkościach lub funkcji dokładnego odmierzania czasów dla rzadko występujących działań.

Poniższy rysunek pokazuje schemat blokowy timera/licznika 1:

obrazek

Dwa znaczniki stanu (nadmiaru i zgodności porównania) znajdują się w rejestrze znaczników przerwań z timerów/liczników (TIFR). Sygnały sterujące znajdują się w rejestrze sterowania timerem/licznikiem 1 (TCCR1). Ustawienia włączania/wyłączania przerwań znajdują się w rejestrze masek przerwań z timerów/liczników (TIMSK).

Timer/licznik 1 posiada dwa rejestry Output Compare, OCR1A i OCR1B, jako źródła danych do porównywania z zawartością timera/licznika 1. W trybie normalnym funkcja Output Compare współpracuje tylko z rejestrem OCR1A i uwzględnia ona opcjonalne zerowanie licznika przy zgodności porównania i działanie na końcówce Output Compare (PB1) (OC1A).

W trybie PWM rejestr OCR1A dostarcza danych, które są porównywane z zawartością timera/licznika. Przy zgodności porównania generowany jest sygnał wyjściowy PWM. W trybie tym timer/licznik zlicza w górę do wartości określonej w rejestrze OCR1B, po czym zeruje się i rozpoczyna zliczanie od nowa od wartości 0x00. Cecha ta pozwala ograniczyć maksymalną wartość licznika do określonej wartości, mniejszej od 0xFF. Jednakże, jeśli OCR1n ma wartość 0x00, wyjście pozostanie w stanie niezmienionym. Jeśli OCR1n ma wartość 0x01, to impulsy będą miały szerokość dwóch taktów, zwiększającą się liniowo, jeśli OCR1n jest większe niż 0x01. Wraz z wieloma opcjami ustawień preskalera, udostępniony jest elastyczny wybór częstotliwości PWM. Poniższa tablica pokazuje wybór zegara oraz wartości rejestru OCR1B do otrzymania częstotliwości PWM od 10 kHz do 150 kHz w krokach co 10 kHz.

Wybór zegara OCR1B Częstotliwość PWM
CK 159 10 kHz
PCK/8 159 20 kHz
PCK/4 213 30 kHz
PCK/4 159 40 kHz
PCK/2 255 50 kHz
PCK/2 213 60 kHz
PCK/2 181 70 kHz
PCK/2 159 80 kHz
PCK/2 141 90 kHz
PCK 255 100 kHz
PCK 231 110 kHz
PCK 213 120 kHz
PCK 195 130 kHz
PCK 181 140 kHz
PCK 169 150 kHz

W aplikacjach o zmiennym PWM zmniejszenie o połowę ustawień preskalera i podwojenie czasu cyklu pracy może zostać użyte do precyzyjnego dostrojenia PWM. Alternatywnie można użyć odwróconego trybu PWM.


TCCR1 – The Timer/Counter1 Control Register – Rejestr sterujący timerem/licznikiem 1

Bit 7 6 5 4 3 2 1 0  
0x30 CTC1 PWM1 COM1A1 COM1A0 CS13 CS12 CS11 CS10 TCCR1
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 – CTC1: Clear Timer/Counter on Compare Match – Zerowanie timera/licznika przy zgodności porównania

Gdy jest ustawiony bit sterujący CTC1, timer/licznik 1 jest resetowany na 0x00 w takcie zegara mikroprocesora po wystąpieniu zgodności porównania z wartością rejestru OCR1A. Jeśli bit ten jest wyzerowany, timer licznik 1 kontynuuje zliczanie i zgodność porównania nie wpływa na niego.

Bit 6 – PWM1: Pulse Width Modulator Enable – Włączenie modulatora szerokości impulsów

Gdy ten bit zostanie ustawiony na 1, włącza się tryb PWM dla timera/licznika 1. Opis tego trybu podajemy w opisie rejestru OCR1A.

Bity 5:4 – COM1A1, COM1A0: Compare Output Mode, Bits 1 and 0 – Bity 1 i 0 trybu Output Compare

Bity sterujące COM1A1 i COM1A0 określają każde działanie na końcówce wyjściowej, które następuje po zgodności porównania A w timerze/liczniku 1. Operacje na końcówce wyjściowej dotyczą końcówki PB1(OC1A). Ponieważ jest to funkcja alternatywna portu we/wy, odpowiedni bit sterujący kierunkiem przesyłu danych musi być ustawiony na 1, aby sterować końcówką wyjścia. Konfiguracja tych bitów przedstawiona jest w poniższej tabeli:

COM1A1 COM1A0 Efekt na końcówce OC1A
0 0 Niepodłączona
0 1 Niepodłączona
1 0 Zerowana przy zgodności porównania (nieodwrócone PWM).
Ustawiana, gdy TCNT1 = 0x00.
1 1 Ustawiana przy zgodności porównania (odwrócone PWM).
zerowana, gdy TCNT1 = 0x00.
Uwaga: 1   W trybie PWM bity te posiadają inną funkcję. Dokładny opis znajdziesz w podrozdziale "Timer/licznik 1 w trybie PWM". Przy zmianie bitów COM1A1/COM1A0 przerwanie Output Compare 1A musi być zablokowane przez wyzerowanie bitu OCIE1A włączającego je w rejestrze TIMSK. W przeciwnym razie może się pojawić przerwanie przy zmianie tych bitów.

Bity 3:0 – CS13, CS12, CS11, CS10: Clock Select Bits 3, 2, 1, and 0 – Bity 3...0 wyboru zegara

Bity te definiują źródło sygnałów zegarowych zliczanych przez timer/licznik 1.

CS13 CS12 CS11 CS10 Opis
0 0 0 0 Timer/licznik 1 zatrzymany
0 0 0 1 CK x 16 (=PCK)
0 0 1 0 CK x 8 (=PCK/2)
0 0 1 1 CK x 4 (=PCK/4)
0 1 0 0 CK x 2 (=PCK/8)
0 1 0 1 CK
0 1 1 0 CK/2
0 1 1 1 CK/4
1 0 0 0 CK/8
1 0 0 1 CK/16
1 0 1 0 CK/32
1 0 1 1 CK/64
1 1 0 0 CK/128
1 1 0 1 CK/256
1 1 1 0 CK/512
1 1 1 1 CK/1024

Warunek stopu udostępnia funkcję zatrzymywania timera. Preskalowane tryby CK są uzyskiwane bezpośrednio z zegara oscylatora CK.


TCNT1 – The Timer/Counter1 – Timer/licznik 1

Bit 7 6 5 4 3 2 1 0  
0x2F MSB             LSB TCNT1
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  

Ten 8-bitowy rejestr zawiera wartość timera/licznika 1.

Timer/licznik 1 został zaimplementowany jako licznik zliczający w górę z dostępem odczytu i zapisu. Z powodu synchronizacji mikroprocesora i timera/licznika 1 zapis danych do rejestru licznika jest opóźniany o jeden cykl zegara mikroprocesora.


OCR1A – Timer/Counter1 Output Compare RegisterA – Rejestr A Output Compare timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
0x2E MSB             LSB OCR1A
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 1A Output Compare Register jest 8-bitowym rejestrem z odczytem i zapisem.

Rejestr ten zawiera dane, które będą ciągle porównywane z zawartością timera/licznika 1. Działania wykonywane przy zgodności tych porównań są określone w rejestrze TCCR1. Zgodność porównania występuje tylko wtedy, gdy timer/licznik 1 zliczy do wartości w rejestrze OCR1A. Programowy zapis, który ustawia TCNT1 i OCR1A na te same wartości, nie generuje zgodności porównania.

Zgodność porównania ustawi na 1 znacznik przerwania przy porównaniu (ang. Compare Interrupt Flag) w następnym takcie zegara mikroprocesora po zdarzeniu porównania.


Timer/licznik 1 w trybie PWM

Gdy zostanie wybrany tryb PWM, to timer/licznik 1 wraz z rejestrem OCR1A tworzą 8-bitowy moduł PWM działający swobodnie i bezproblemowo z wyjściem na końcówce PB1(OC1A). Timer/licznik 1 pracuje jako licznik zliczający do przodu od 0x00 do wartości określonej w drugim rejestrze Output Compare – OCR1B, po czym rozpoczynający ponownie od 0x00. Gdy wartość licznika zgodzi się z zawartością rejestru OCR1A, końcówka PB1(OC1A) zostaje ustawiona lub wyzerowana zgodnie z ustawieniami bitów COM1A1/COM1A0 w rejestrze sterującym timerem/licznikiem 1 – TCCR1. Szczegóły podaje poniższa tabela:

COM1A1 COM1A0 Działanie na końcówce OC1A
0 0 Niepodłączona
0 1 Niepodłączona
1 0 Zerowana przy zgodności porównania z OCR1A (nieodwrócony tryb PWM). Ustawiana, gdy TCNT1=0x00.
1 1 Ustawiana przy zgodności porównania z OCR1A (odwrócony tryb PWM). Zerowana, gdy TCNT1=0x00.

Zwróć uwagę, iż w trybie PWM zapis do rejestru OCR1A powoduje umieszczenie danych najpierw w rejestrze tymczasowym. Wartość ta zostaje zatrzaśnięta w rejestrze OCR1A, gdy timer/licznik 1 osiąga wartość OCR1B. Zapobiega to generacji impulsów PWM o nieprawidłowej szerokości w przypadku niezsynchronizowanego zapisu do OCR1A.

Efekty niezsynchronizowanego zatrzaskiwania rejestru Output Compare
obrazek

W czasie pomiędzy operacją zapisu a operacją zatrzaśnięcia danych, odczyt z OCR1A zwróci zawartość rejestru tymczasowego.  Oznacza to, iż odczyt daje zawsze ostatnio zapisaną wartość do OCR1A.

Gdy OCR1A zawiera 0x00 lub wartość maksymalną równą zawartości rejestru OCR1B, wyjście PB1(OC1A) jest utrzymywane w stanie niskim lub wysokim zgodnie z ustawieniami bitów COM1A1/COM1A0.


OCR1B – Timer/Counter1 Output Compare RegisterB – Rejestr B Output Compare dla timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
0x2D MSB             LSB OCR1B
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 1 1 1 1 1 1 1 1  

Rejestr 1B Output Compare (OCR1B) jest 8-bitowym rejestrem z dostępem zapisu i odczytu. Używany jest on tylko w trybie PWM i ogranicza górną wartość, do której będzie zliczał timer/licznik 1. W trybie PWM po osiągnięciu wartości w OCR1B licznik rozpoczyna zliczanie od 0x00.

COM1A1 COM1A0 OCR1B Wyjście PWM
1 0 0x00 L
1 0 OCR1B H
1 1 0x00 H
1 1 OCR1B L

W trybie PWM znacznik przepełnienia timera (ang. Timer Overflow Flag, TOV1)   jest ustawiany tak samo jak w trybie normalnym. Przerwanie od przepełnienia timera 1 (ang. Timer Overflow Interrupt1) działa dokładnie tak jak w trybie normalnym timera/licznika, tj. zostaje ono wykonane, gdy znacznik TOV1 został ustawiony pod warunkiem, że jest włączona globalna obsługa przerwań (bit I w rejestrze stanu SREG) oraz włączona jest obsługa przerwania od przepełnienia timera/licznika. Odnosi się to również od znacznika OCF1A i związanego z nim przerwania.

Częstotliwość PWM będzie równa częstotliwości zegara timera podzielonej przez wartość OCR1B + 1.

Wybór zegara OCR1B Częstotliwość PWM
CK 159 10 kHz
PCK/8 159 20 kHz
PCK/4 213 30 kHz
PCK/4 159 40 kHz
PCK/2 255 50 kHz
PCK/2 213 60 kHz
PCK/2 181 70 kHz
PCK/2 159 80 kHz
PCK/2 141 90 kHz
PCK 255 100 kHz
PCK 231 110 kHz
PCK 213 120 kHz
PCK 195 130 kHz
PCK 181 140 kHz
PCK 169 150 kHz

Dokładny współczynnik wypełnienia sygnału wyjściowego w nieodwróconym trybie PWM wyraża się wzorem:

Gdzie:
TT1 jest okresem wybranego źródła zegarowego dla timera/licznika 1
TPCK jest okresem zegara PCK (39,1 ns)
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
©2022 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.