Serwis Edukacyjny
Nauczycieli

w I-LO w Tarnowie
obrazek

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

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

©2026 mgr Jerzy Wałaszek

obrazek

Mikrokontrolery

ATtiny11/12

Timer/licznik 0 i licznik zegarowy


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

Timer/Licznik 0

ATtiny11/12 udostępnia jeden 8-bitowy timer/licznik ogólnego zastosowania – timer/licznik 0. Timer/licznik 0 posiada sekcję wyboru częstotliwości zliczania z 10-bitowego timera. Timer/licznik 0 może być używany albo jako timer (do odmierzania czasu) o podstawie czasu wewnętrznego zegara, albo jako licznik podłączony do zewnętrznej końcówki, która wyzwala zliczanie.


do podrozdziału  do strony 

Preskaler timera/licznika 0


Preskaler timera/licznika 0
obrazek

Powyższy rysunek przedstawia schemat blokowy preskalera dla timera/licznika 0. 10 bitowy timer/licznik preskalera udostępnia cztery podziały częstotliwości: CK/8, CK/64, CK/256CK/1024, gdzie CK oznacza zegar oscylatora. Jako źródło zegara można również wybrać CK, źródło zewnętrzne z końcówki T0 i zatrzymanie (brak impulsów zegarowych).

Rysunek poniżej pokazuje schemat blokowy timera/licznika 0. 8-bitowy timer/licznik 0 może wybierać jako źródło zegara CK, preskalowany CK lub zewnętrzną końcówkę T0. Dodatkowo może zostać zatrzymany, jak podano w opisie rejestru sterowania timera/licznika 0 (ang. Timer/Counter0 Control Register – TCCR0). Znacznik przepełnienia TOV0 (przekroczenia wartości maksymalnej 0xFF) znajduje się w rejestrze znacznika przerwań od timera/licznika (ang. Timer/Counter Interrupt Flag Register – TIFR). Sygnały sterujące znajdują się w rejestrze sterowania timerem/licznikiem 0 (ang. Timer/Counter0 Control Register – TCCR0). Ustawienia przerwań dla timera/licznika 0 znajdują się w rejestrze maskowania przerwań od timera/licznika 0 (ang. Timer/Counter Interrupt Mask Register – TIMSK).

Schemat blokowy timera/licznika 0
obrazek

Gdy timer/licznik 0 jest taktowany zewnętrznie, to sygnał zewnętrzny jest synchronizowany z częstotliwością oscylatora mikroprocesora. Aby zapewnić poprawne próbkowanie zewnętrznego zegara, minimalny czas pomiędzy dwoma zboczami przejściowymi zegara zewnętrznego musi być równy co najmniej jednemu okresowi wewnętrznego zegara mikroprocesora. Sygnał zewnętrznego zegara jest próbkowany przy narastającym zboczu wewnętrznego zegara mikroprocesora.

Przy niskich wartościach podziału w preskalerze timer/licznik 0 daje możliwość zastosowania tam, gdzie potrzebna jest zarówno wysoka rozdzielczość jak i wysoka dokładność. Podobnie przy wyższych współczynnikach podziału preskalera timer/licznik 0 staje się przydatny przy funkcjach o niższej prędkości lub funkcjach z dokładnym odmierzaniem czasu dla rzadko występujących zdarzeń.


do podrozdziału  do strony 

Opis rejestrów timera/licznika 0

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

Bit 7 6 5 4 3 2 1 0  
0x39 - - - - - - TOIE0 - TIMSK
Zapis/Odczyt O O O O O O Z/O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:2,0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.

Bit 1 – TOIE0: Timer/Counter0 Overflow Interrupt Enable –  Uaktywnienie przerwań przy przepełnieniu timera/licznika 0

Gdy bit TOIE0 zostanie ustawiony i bit I w rejestrze stanu (SREG) jest ustawiony, to zostanie uaktywnione przerwanie od przepełnienia timera/licznika 0. Odpowiedni wektor przerwania (pod adresem 0x003) jest wykonywany, gdy wystąpi przepełnienie w timerze/liczniku 0, tj. gdy zostanie ustawiony znacznik przepełnienia w rejestrze znacznika przerwania od timera/licznika 0 – TIFR.

TIFR – Timer/Counter Interrupt Flag Register – Rejestr znacznika przerwań od  timera/licznika

Bit 7 6 5 4 3 2 1 0  
0x38 - - - - - - TOV0 - TIFR
Zapis/Odczyt O O O O O O Z/O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:2,0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.

Bit 1 – TOV0: Timer/Counter0 Overflow Flag – Znacznik przepełnienia timera/licznika 0

Bit TOV0 jest ustawiany, gdy wystąpi przepełnienie w timerze/liczniku 0. TOV0 jest zerowany sprzętowo przy wykonywaniu odpowiedniego wektora obsługi przerwania. Alternatywnie TOV0 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu. Gdy są ustawione bity: I w  SREG, TOIE0 (Timer/Counter0 Overf low Interrupt Enable – uaktywnienie przerwań przy przepełnieniu timera/licznika 0)TIMSK, i TOV0, to zostaje wykonane przerwanie przy przepełnieniu timera/licznika 0.

TCCR0 – Timer/Counter0 Control Register – Rejestr sterowania timerem/licznikiem 0

Bit 7 6 5 4 3 2 1 0  
0x33 - - - - - CS02 CS01 CS00 TCCR0
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:2 – Zarezerwowane

Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.

Bity 2:0 - CS02:0 : Clock Select0 - Wybór źródła zegarowego dla timera/licznika 0

Bity te wybierają źródło sygnału zegarowego dla timera/licznika 0 zgodnie z poniższą tabelą:

CS02 CS01 CS00 Opis
0 0 0 Stop, timer/licznik jest zatrzymany, brak sygnału zegarowego
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 (nóżka nr 7), opadające zbocze
1 1 1 Końcówka zewnętrzna T0 (nóżka nr 7), narastające zbocze

Warunek Stop (CS02:0 = 000) udostępnia funkcję włączania/wyłączania timera. Tryby podziału zegara CK w dół są skalowane bezpośrednio z sygnału CK zegara oscylatora. Jeśli jako sygnał zegarowy dla timera/licznika 0 wybrany zostanie tryb zewnętrznej końcówki, to zmiany poziomu sygnału na linii PB2 (T0) będą sterowały zliczaniem w liczniku nawet wtedy, jeśli końcówka ta została skonfigurowana jako wyjście. Ta cecha udostępnia użytkownikowi kontrolę programową nad zliczaniem..

TCNT0 – Timer Counter 0 – Rejestr timera/licznika 0

Bit 7 6 5 4 3 2 1 0  
0x32 MSB             LSB 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 do przodu (0,1,2...,255,0,1,2...) z dostępem odczytu i zapisu. Jeśli do licznika zostanie zapisana nowa zawartość, a źródło sygnału zegarowego jest obecne, to timer/licznik będzie kontynuował zliczanie od cyklu zegara następującym za operacją zapisu.


do podrozdziału  do strony 

Licznik zegarowy

Licznik zegarowy (ang. Watchdog Timer) jest taktowany oddzielnym, wbudowanym w układ oscylatorem. Sterując preskalerem licznika zegarowego, można ustawiać okres czasu, po upływie którego licznik zegarowy przepełnia się i generuje reset mikrokontrolera. Instrukcja resetowania licznika zegarowego (ang, Watchdog Reset, WDR) – powoduje wyzerowanie licznika zegarowego i rozpoczęcie zliczania od nowa. W celu określenia okresu resetowania można wybrać osiem różnych długości cykli zegarowych. Jeśli upłynie okres resetowania bez następnego wyzerowania licznika zegarowego, ATtiny11/12 resetuje się i rozpoczyna wykonywanie programu od wektora resetu.

Aby zapobiec niezamierzonemu wyłączeniu licznika zegarowego, należy użyć specjalnej procedury wyłączającej. Zobacz do opisu rejestru sterowania licznikiem zegarowym (ang. Watchdog Timer Control Register, WDTCR).

Schemat blokowy licznika zegarowego
obrazek

 


do podrozdziału  do strony 

Opis rejestrów licznika zegarowego

WDTCR – Watchdog Timer Control Register – Rejestr sterujący licznika zegarowego

Bit 7 6 5 4 3 2 1 0  
0x21 - - - WDTOE WDE WDP2 WDP1 WDP0 WDTCR
Zapis/Odczyt O O O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:5 – Zarezerwowane

Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.

Bit 4 – WDTOE: Watchdog Turn-off Enable – Uaktywnienie wyłączania licznika zegarowego

Ten bit musi być ustawiony na 1, gdy jest zerowany bit WDE. W przeciwnym razie licznik zegarowy nie zostanie wyłączony. Po ustawieniu na 1, bit jest zerowany sprzętowo po upływie 4 cykli zegara. Zobacz poniżej na opis bitu WDE i procedury wyłączania licznika zegarowego.

Bit 3 – WDE: Watchdog Enable – Uaktywnienie licznika zegarowego

Gdy bit WDE jest ustawiony na 1, licznik zegarowy jest aktywny i pracuje, a gdy bit WDE jest wyzerowany, licznik zegarowy jest wyłączony. Bit WDE można wyzerować tylko wtedy, gdy bit WDTOE jest ustawiony na 1. Aby wyłączyć licznik zegarowy, wykonaj poniższą sekwencję operacji:

  1. W tej samej operacji zapisz logiczne jedynki do obu bitów WDTOE i WDE jednocześnie. Logiczną jedynkę należy zapisać do WDE nawet wtedy, gdy bit ten jest ustawiony na 1, aby rozpocząć operację wyłączania.
  2. W ciągu następnych 4 cykli zegara zapisz logiczne 0 do WDE. Spowoduje to wyłączenie licznika zegarowego

Bity 2:0 – WDP2, WDP1, WDP0: Watchdog Timer Prescaler – Preskaler licznika zegarowego

Bity WDP2, WDP1 i WDP0 określają współczynnik podziału częstotliwości oscylatora licznika zegarowego w preskalerze, gdy licznik zegarowy został uaktywniony. Szczegóły podane są w poniższej tabeli:

WDP2 WDP1 WDP0 Liczba cykli
oscylatora
Typowy czas zliczania
przy VCC = 2 V
Typowy czas zliczania
przy VCC = 3 V
Typowy czas zliczania
przy VCC = 5 V
0 0 0 16K 0,15 s 47 ms 15 ms
0 0 1 32K 0,30 s 94 ms 30 ms
0 1 0 64K 0,60 s 0,19 s 60 ms
0 1 1 128K 1,2 s 0,38 s 0,12 s
1 0 0 256K 2,4 s 0,75 s 0,24 s
1 0 1 512K 4,8 s 1,5 s 0,49 s
1 1 0 1024K 9,6 s 3,0 s 0,97 s
1 1 1 2048K 19,2 s 6,0 s 1,9 s
Uwaga:  Częstotliwość oscylatora licznika zegarowego zależy od napięcia zasilania, co pokazano w rozdziale "Typowe Parametry".
Instrukcja WDR powinna zawsze być wykonana przed uaktywnieniem licznika zegarowego. Zapewni to, iż okres resetu będzie w zgodzie z ustawieniami preskalera licznika zegarowego. Jeśli licznik zegarowy zostanie uaktywniony bez zerowania, może rozpocząć zliczanie od wartości różnej od zera.
Aby zapobiec niezamierzonemu zresetowaniu mikrokontrolera, licznik zegarowy powinien być wyłączany lub zerowany przed zmianą ustawień jego preskalera.

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 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.