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

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega8

8-bitowy timer/licznik 0

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 0 jest 8-bitowym, jednokanałowym modułem timera/licznika o ogólnym zastosowaniu. Jego główne cechy są następujące:

Poniższy rysunek pokazuje uproszczony schemat blokowy 8-bitowego timera/licznika. Rejestry we/wy dostępne dla mikroprocesora, łącznie z bitami we/wy i końcówkami we/wy są wypisane tłustym drukiem. Rejestry licznika i położenia bitów są wymienione w podrozdziale "Opis rejestrów".

Rejestry

Rejestr timera/licznika (TCNT0) jest rejestrem 8-bitowym. Wszystkie sygnały żądań przerwań są widoczne w rejestrze znaczników przerwań timera (ang. Timer Interrupt Flag Register, TIFR). Wszystkie przerwania są indywidualnie maskowane za pomocą rejestru maski przerwań timera (ang. Timer Interrupt Mask Register, TIMSK). Rejestry TIFR i TIMSK nie są pokazane na obrazku powyżej, ponieważ są one współdzielone z innymi modułami liczników.

Timer/licznik może być taktowany wewnętrznie poprzez preskaler lub przez zewnętrzne źródło zegarowe na końcówce T0. Układ wyboru zegara określa, które źródło zegara oraz które zbocze impulsów zegarowych będzie używane przez timer/licznik do zwiększania jego 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, clkT0).

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. TCNT0 przy dostępie do wartości timera/licznika 0 itd.

Poniższe definicje są intensywnie używane w dalszej części tej instrukcji:

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).
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. Jest ono wybierane przez układ wyboru zegara (ang. Clock Select Logic), który jest sterowany przez bity wyboru zegara (ang. Clock Select bits, CS02:0) znajdujące się w rejestrze sterowania timera/licznika (ang. Timer/Counter Control Register, TCCR0).
Na początek:  podrozdziału   strony 

Moduł licznika

Głównym elementem 8-bitowego timera/licznika jest programowalny moduł licznika, którego schemat blokowy wraz z jego otoczeniem pokazuje poniższy rysunek:

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

Licznik jest zwiększany przy każdym takcie zegara timera (clkT0). Zegar clkT0 może być generowany z zewnętrznego lub z wewnętrznego źródła zegarowego, wybieranego bitami wyboru zegara (CS02:0). Gdy nie jest wybrane żadne źródło zegarowe (CS02:0 = 0), timer jest zatrzymany. Jednakże wartość TCNT0 jest dostępna dla mikroprocesora bez względu na obecność lub brak clkT0. Zapis przez CPU posiada wyższy priorytet niż wszystkie operacje zliczania i zerowania licznika.

Na początek:  podrozdziału   strony 

Działanie

Zliczanie odbywa się zawsze w górę (licznik zwiększa swoją zawartość) i nie jest wykonywane żadne zerowanie. Licznik po prostu przepełnia się, gdy mija swoją maksymalną wartość 8-bitową (MAX = 0xFF) i następnie rozpoczyna zliczanie od wartości dolnej (0x00). W normalnym trybie pracy zostanie ustawiony znacznik przepełnienia timera/licznika 0 (ang. Timer/Counter Overflow Flag, TOV0) w tym samym takcie zegarowym, w którym licznik osiąga wartość 0. W tym przypadku znacznik TOV0 zachowuje się jak dziewiąty bit, z tym wyjątkiem, iż jest on jedynie ustawiany, a nie zerowany. Jednakże w połączeniu z przerwaniem od przepełnienia timera, które automatycznie zeruje znacznik TOV0, rozdzielczość timera może zostać zwiększona programowo. Nowa wartość licznika może zostać wprowadzona w dowolnej chwili.
Na początek:  podrozdziału   strony 

Wykresy czasowe timera/licznika

Timer/licznik został zaprojektowany jako moduł asynchroniczny i dlatego zegar timera (clkT0) jest pokazany na poniższych wykresach jako sygnał uaktywniający taktowanie. Wykresy zawierają informację o momencie ustawiania znaczników przerwań. Rysunek poniżej zawiera wykresy czasowe dla podstawowego trybu pracy timera/licznika. Na wykresie przedstawiono sekwencję zliczania w pobliżu wartości MAX.

Wykres czasowy timera/licznika, bez preskalera

Kolejny rysunek pokazuje te same dane czasowe, lecz z włączonym preskalerem.

Wykres czasowy timera/licznika, z preskalerem (fclk_I/O/8)

Na początek:  podrozdziału   strony 

Opis rejestrów

TCCR0 – Timer/Counter Control Register – Rejestr sterujący timera/licznika 0

Bit 7 6 5 4 3 2 1 0  
0x33 (0x53) 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 2:0 – CS02:0: Clock Select – Wybór zegara dla timera/licznika 0

Te trzy bity wyboru zegara wybierają źródło zegarowe, które będzie używane przez timer/licznik 0.

CS02 CS01 CS00 Opis
0 0 0 Brak źródła zegarowego (timer/licznik 0 jest zatrzymany).
0 0 1 clkI/O/1 (bez preskalowania).
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 zegara na końcówce T0. Zliczanie przy zboczu opadającym.
1 1 1 Zewnętrzne źródło zegara na końcówce T0. Zliczanie przy zboczu narastającym.

TCNT0 – Timer/Counter Register – Rejestr timera/licznika 0

Bit 7 6 5 4 3 2 1 0  
0x32 (0x52) 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  

Rejestr timera/licznika daje bezpośredni dostęp odczytu i zapisu do 8-bitowego modułu licznika timera/licznika 0.


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

Bit 7 6 5 4 3 2 1 0  
0x39 (0x59) OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 TOIE0 TIMSK
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 0 – TOIE0: Timer/Counter0 Overflow Interrupt Enable – Włączenie obsługi przerwań od przepełnienia timera/licznika 0

Gdy bit TOIE0 jest zapisany logiczną jedynką, a bit I w rejestrze stanu SREG jest ustawiony na jeden, są uaktywniane przerwania od przepełnienia w timerze/liczniku 0. Odpowiednie przerwanie jest wykonywane, jeśli wystąpi przepełnienie w timerze/liczniku 0, tj. gdy jest ustawiany bit TOV0 w rejestrze znaczników przerwań timerów/liczników – TIFR.


TIFR – Timer/Counter Interrupt Flag Register – Rejestr znaczników przerwań timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x38 (0x58) OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 TOV0 TIMSK
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

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

Bit TOV0 jest ustawiany na jeden, gdy w timerze/liczniku 0 wystąpi przepełnienie. TOV0 jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie TOV0 jest zerowany przez zapis logicznej jedynki do tego znacznika. Gdy są ustawione na jeden bit I w rejestrze SREG, bit TOIE0 (włączenie obsługi przerwań od przepełnienia timera/licznika 0) i bit TOV0, to zostanie wykonane przerwanie od przepełnienia timera/licznika 0.

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