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

ATmega48A/PA/88A/PA/168A/PA/328/P

Zegar systemowy i opcje zegarowe

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

Systemy zegarowe i ich rozdział

Poniższy rysunek przedstawia główne systemy zegarowe i ich rozdział w mikrokontrolerze ATmega48A/PA/88A/PA/168A/PA/328/P. Nie wszystkie zegary muszą pracować jednocześnie w danym czasie. Aby zmniejszyć zużycie energii, zegary nieużywanych modułów można zatrzymać przez użycie różnych trybów uśpienia. Zobacz do rozdziału "Zarządzanie zasilaniem i tryby uśpienia".

CPU Clock – clkCPU – Zegar Mikroprocesora

Zegar mikroprocesora jest kierowany do elementów systemu związanych z działaniem rdzenia AVR. Przykładami takich modułów są: zestaw rejestrów ogólnego przeznaczenia, rejestr stanu i pamięć danych przechowująca wskaźnik stosu. Zatrzymanie zegara mikroprocesora uniemożliwia rdzeniowi wykonywanie operacji ogólnych oraz obliczeń.

I/O Clock – clkI/O – Zegar We/Wy

Zegar we/wy używany jest przez większość modułów we/wy, jak timery/liczniki, SPI i USART. Jest on również używany przez moduł przerwań zewnętrznych, lecz zwróć uwagę, iż niektóre przerwania zewnętrzne są wykrywane przez obwody asynchroniczne, co pozwala wykrywać te przerwania nawet przy zatrzymanym zegarze we/wy. Również zauważ, iż rozpoznawanie adresu w module TWI jest wykonywane asynchronicznie, gdy zegar clkI/O został zatrzymany, co umożliwia odbiór adresów TWI we wszystkich trybach uśpienia.

Flash Clock – clkFLASH – Zegar FLASH

Zegar FLASH steruje działaniem interfejsu pamięci FLASH. Zegar FLASH jest zwykle aktywny równocześnie z zegarem mikroprocesora.

Asynchronous Timer Clock – clkASY – Zegar asynchronicznego timera

Zegar asynchronicznego timera pozwala asynchronicznemu timerowi/licznikowi odbierać taktowanie bezpośrednio z zewnętrznego zegara kwarcowego 32kHz. Dedykowana domena zegarowa umożliwia używanie tego timera/licznika w charakterze licznika zegarowego rzeczywistego, nawet gdy mikrokontroler znajduje się w trybie uśpienia.

ADC Clock – clkADC – Zegar Przetwornika A/C

Przetwornik Analogowo/Cyfrowy wyposażony został w dedykowany zegar. Pozwala to zatrzymać zegar mikroprocesora i zegar we/wy w celu zmniejszenia szumów generowanych przez obwody cyfrowe. Daje to dokładniejsze wyniki przetwarzania analogowo/cyfrowego.

Na początek:  podrozdziału   strony 

Źródła zegarowe

Układ posiada następujące opcje zegarowe wybierane bitami bezpiecznikowymi we FLASH, co pokazuje tabelka poniżej. Zegar z wybranego źródła jest wprowadzany do generatora zegara AVR, a następnie kierowany do odpowiednich modułów.
Opcja zegarowa układu CKSEL3...0
Oscylator kwarcowy niskiej mocy 1111 - 1000
Oscylator kwarcowy pełnej mocy 0111 - 0110
Oscylator kwarcowy niskiej częstotliwości 0101 - 0100
Wewnętrzny oscylator RC 128 kHz 0011
Kalibrowany wewnętrzny oscylator RC 0010
Zegar zewnętrzny 0000
Zarezerwowane 0001
Uwaga: 1. Dla wszystkich bitów bezpiecznikowych "1" oznacza bit niezaprogramowany, a "0" oznacza bit zaprogramowany

Standardowe źródło zegarowe

Układ mikrokontrolera jest sprzedawany z wewnętrznym oscylatorem RC ustawionym na częstotliwość 8,0 MHz z zaprogramowanym bitem bezpiecznikowym CKDIV8, co daje w wyniku zegar systemowy 1 MHz. Czas uruchamiania jest ustawiony na maksymalny. (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). To standardowe ustawienie zapewnia, iż każdy użytkownik będzie mógł wybrać pożądane ustawienie źródła zegarowego przy pomocy dostępnego interfejsu programowania.

Sekwencja uruchamiania zegara

Każde źródło zegarowe potrzebuje dostatecznego napięcia zasilającego VCC, aby rozpocząć oscylacje, oraz minimalnej liczby okresów oscylacji, zanim będzie można je uznać za stabilne.

Aby zapewnić wystarczające VCC, mikrokontroler wytwarza wewnętrzny reset z czasowym opóźnieniem (tTOUT) po ustąpieniu wszystkich pozostałych źródeł resetu. Rozdział ”Sterowanie systemem i reset” opisuje warunki startowe przy wewnętrznym resecie. Opóźnienie (tTOUT) jest odmierzane w czasie przy pomocy oscylatora licznika zegarowego (ang. Watchdog Oscillator), a liczba taktów opóźnienia jest ustawiana przez bity bezpiecznikowe SUTx i CKSELx. Wybieralne opóźnienia pokazuje poniższa tabelka. Częstotliwość oscylatora licznika zegarowego zależy od napięcia, co przedstawiono w rozdziałach o charakterystykach typowych.

Typowe opóźnienie (VCC = 5V) Typowe opóźnienie (VCC = 3V) Liczba taktów
0ms 0ms 0
4.1ms 4.3ms 512
65ms 69ms 8K (8.192)

Głównym celem tego opóźnienia jest utrzymanie układu AVR w stanie resetu, aż będzie zasilany minimalnym napięciem VCC.  W trakcie opóźnienia nie jest monitorowane rzeczywiste napięcie zasilające i będzie potrzebne wybranie opóźnienia dłuższego od czasu wzrostu VCC do użytecznego poziomu. Jeśli nie jest to możliwe, należy użyć wewnętrznego lub zewnętrznego obwodu detekcji spadku napięcia zasilania (ang. Brown-Out Detection circuit, BOD). Obwód BOD zapewni wystarczający poziom VCC przed wyjściem z resetu, a wtedy opóźnienie czasowe można wyłączyć. Nie zaleca się wyłączania opóźnienia bez zastosowania obwodu BOD.

Oscylator musi wykonać minimalną liczbę oscylacji, zanim zegar będzie można uważać za stabilny. Wewnętrzny licznik szeregowy monitoruje zegar wyjściowy oscylatora i utrzymuje wewnętrzny reset aktywny przez zadaną liczbę taktów zegarowych. Po ich upływie reset jest opuszczany i układ mikrokontrolera rozpoczyna wykonywanie swojego programu. Zalecany czas startu oscylatora zależy od typu zegara i zawiera się w zakresie od 6 taktów dla zegara zewnętrznego do 32768 taktów dla kwarcu niskiej częstotliwości. Sekwencja startowa dla zegara zawiera zarówno opóźnienie czasowe jak i czas uruchamiania, gdy układ rozpoczyna pracę z resetu. Gdy układ startuje z trybu oszczędzania energii (ang. Power-save mode) lub z trybu wyłączenia zasilania (ang. Power-down mode), zakłada się, iż VCC ma wystarczający poziom i tylko czas uruchamiania jest uwzględniony.

Na początek:  podrozdziału   strony 

Oscylator kwarcowy o niskiej mocy

Końcówki XTAL1 i XTAL2 są odpowiednio wejściem i wyjściem odwracającego wzmacniacza, który można skonfigurować jako wewnątrzukładowy oscylator, jak na poniższym rysunku.

Można użyć albo kryształu kwarcu, albo rezonatora ceramicznego.

Ten oscylator jest oscylatorem niskiej mocy ze zmniejszoną amplitudą napięcia na wyjściu XTAL2. Pobiera on najniższy prąd, lecz nie jest w stanie wysterować innych wejść zegarowych i może być bardziej podatny na zakłócenia w zaszumianym środowisku. W takich przypadkach przeczytaj następny podrozdział. Kondensatory C1 i C2 powinny posiadać równe pojemności zarówno dla kwarców jak i dla rezonatorów. Optymalna pojemność kondensatorów zależy od użytego kwarcu lub rezonatora, ilości pasożytniczych pojemności oraz zakłóceń elektromagnetycznych środowiska. Kilka wstępnych wskazówek wyboru kondensatorów dla kryształów kwarcu podaje poniższa tabelka. Dla rezonatorów ceramicznych należy stosować wartości podawane przez producenta.

Oscylator niskiej mocy może pracować w trzech różnych trybach, z których każdy zoptymalizowano dla określonego zakresu częstotliwości. Tryb pracy wybierany jest bitami bezpiecznikowymi CKSEL3...1, jak pokazano w tabelce:

Zakres częstotliwości
[MHz]
Zalecany zakres pojemności C1 i C2
[pF]
CKSEL3...1(1)
0,4 ... 0,9 100(2)
0.9 ... 3,0 12 ... 22 101
3,0 ... 8,0 12 ... 22 110
8,0 ... 16,0 12 ... 22 111
Uwagi: 1. Jest to zalecane ustawienie CKSEL dla różnych zakresów częstotliwości.
  2. Tej opcji nie powinno się używać z kwarcami, jedynie z rezonatorami ceramicznymi.
  3. Jeśli częstotliwość kwarcu przekracza możliwości mikrokontrolera (zależne od VCC), to można zaprogramować bit bezpiecznikowy CKDIV8 w celu podziału wewnętrznej częstotliwości przez 8. Należy zapewnić, iż częstotliwość wynikowa po podziale spełnia wymagania częstotliwościowe układu.

Bit bezpiecznikowy CKSEL0 wraz z bitami bezpiecznikowymi SUT1...0 wybiera czasy uruchamiania, jak pokazuje poniższa tabelka:

Źródło oscylatora / Warunki zasilania Czas uruchamiania po trybie wyłączenia i oszczędzania energii Dodatkowe opóźnienie od resetu (VCC = 5V) CKSEL0 SUT1...0
Rezonator ceramiczny, szybko narastające zasilanie  258 CK 14CK + 4,1ms(1) 0 00
Rezonator ceramiczny, wolno narastające zasilanie 258 CK 14CK + 65ms(1) 0 01
Rezonator ceramiczny, włączone BOD 1K CK 14CK(2) 0 10
Rezonator ceramiczny, szybko narastające zasilanie 1K CK 14CK + 4,1ms(2) 0 11
Rezonator ceramiczny, wolno narastające zasilanie 1K CK 14CK + 65ms(2) 1 00
Kryształ kwarcu, włączone BOD 16K CK 14CK 1 01
Kryształ kwarcu, szybko narastające zasilanie 16K CK 14CK + 4,1ms 1 10
Kryształ kwarcu, wolno narastające zasilanie 16K CK 14CK + 65ms 1 11
Uwagi: 1. Te opcje powinny być używane jedynie wtedy, gdy mikrokontroler nie pracuje w pobliżu swojej częstotliwości maksymalnej oraz tylko, gdy stabilność częstotliwości przy uruchamianiu nie jest istotna dla aplikacji. Opcje te nie nadają się dla kryształów kwarcu.
  2. Te opcje przeznaczono do użytku z rezonatorami ceramicznymi i zapewnią one stabilność częstotliwości przy uruchamianiu. Można je również używać z kwarcami, gdy mikrokontroler nie pracuje w pobliżu swojej częstotliwości maksymalnej oraz, gdy stabilność częstotliwości przy starcie nie jest istotna dla aplikacji.
Na początek:  podrozdziału   strony 

Oscylator kwarcowy o pełnej mocy

Końcówki XTAL1 i XTAL2 są odpowiednio wejściem i wyjściem odwracającego wzmacniacza, który można skonfigurować jako wewnątrzukładowy oscylator, jak na poniższym rysunku.

Można użyć albo kryształu kwarcu, albo rezonatora ceramicznego.

Ten oscylator kwarcowy jest oscylatorem o pełnej mocy dającym pełnozakresowy sygnał na wyjściu XTAL2. Przydaje się on przy wysterowywaniu innych wejść zegarowych oraz w zakłóconym środowisku. Pobór prądu jeż wyższy niż przy "Oscylatorze kwarcowym o niskiej mocy". Zauważ iż oscylator ten może pracować jedynie w zakresie napięć zasilających od 2,7V do 5,5V.

Kondensatory C1 i C2 powinny posiadać równe pojemności zarówno dla kwarców jak i dla rezonatorów. Optymalna pojemność kondensatorów zależy od użytego kwarcu lub rezonatora, ilości pasożytniczych pojemności oraz zakłóceń elektromagnetycznych środowiska. Kilka wstępnych wskazówek wyboru kondensatorów dla kryształów kwarcu podaje poniższa tabelka. Dla rezonatorów ceramicznych należy stosować wartości podawane przez producenta.

Zakres częstotliwości(1)
[MHz]
Zalecany zakres pojemności C1 i C2
[pF]
CKSEL3...1
0,4 ... 20 12 ... 22 011
Uwagi: 1. Jeśli częstotliwość kwarcu przekracza możliwości mikrokontrolera (zależne od VCC), to można zaprogramować bit bezpiecznikowy CKDIV8 w celu podziału wewnętrznej częstotliwości przez 8. Należy zapewnić, iż częstotliwość wynikowa po podziale spełnia wymagania częstotliwościowe układu.

Czasy startu oscylatora pełnej mocy podaje poniższa tabelka:

Źródło oscylatora / Warunki zasilania Czas uruchamiania po trybie wyłączenia i oszczędzania energii Dodatkowe opóźnienie od resetu (VCC = 5V) CKSEL0 SUT1...0
Rezonator ceramiczny, szybko narastające zasilanie  258 CK 14CK + 4,1ms(1) 0 00
Rezonator ceramiczny, wolno narastające zasilanie 258 CK 14CK + 65ms(1) 0 01
Rezonator ceramiczny, włączone BOD 1K CK 14CK(2) 0 10
Rezonator ceramiczny, szybko narastające zasilanie 1K CK 14CK + 4,1ms(2) 0 11
Rezonator ceramiczny, wolno narastające zasilanie 1K CK 14CK + 65ms(2) 1 00
Kryształ kwarcu, włączone BOD 16K CK 14CK 1 01
Kryształ kwarcu, szybko narastające zasilanie 16K CK 14CK + 4,1ms 1 10
Kryształ kwarcu, wolno narastające zasilanie 16K CK 14CK + 65ms 1 11
Uwagi: 1. Te opcje powinny być używane jedynie wtedy, gdy mikrokontroler nie pracuje w pobliżu swojej częstotliwości maksymalnej oraz tylko, gdy stabilność częstotliwości przy uruchamianiu nie jest istotna dla aplikacji. Opcje te nie nadają się dla kryształów kwarcu.
  2. Te opcje przeznaczono do użytku z rezonatorami ceramicznymi i zapewnią one stabilność częstotliwości przy uruchamianiu. Można je również używać z kwarcami, gdy mikrokontroler nie pracuje w pobliżu swojej częstotliwości maksymalnej oraz, gdy stabilność częstotliwości przy starcie nie jest istotna dla aplikacji.
Na początek:  podrozdziału   strony 

Oscylator kwarcowy o niskiej częstotliwości

Oscylator kwarcowy niskiej częstotliwości został zoptymalizowany do pracy z zegarkowym kwarcem 32,768kHz. Przy wyborze kryształów kwarcu należy brać pod uwagę ich zastępczą oporność szeregową (ang. Equivalent Series Resistance, ESR). Jest ona określana przez producenta. Oscylator mikrokontrolera ATmega48A/PA/88A/PA/168A/PA/328/P jest zoptymalizowany dla bardzo niskiego poboru energii, dlatego przy doborze kryształów zobacz do poniższej tabelki, gdzie podano zalecenia dla maksymalnej wartości ESR kryształów 6,5pF, 9,0pF i 12,5pF.

CL kryształu (pF) Maksymalne ESR (kΩ)
6,5 75
9,0 65
12,5 30

Oscylator kwarcowy niskiej częstotliwości posiada wewnętrzną pojemność obciążenia na każdej z końcówek TOSC, co pokazuje poniższa tabelka.

Mikrokontroler Typ oscylatora 32kHz Pojemność (XTAL1/TOSC1) Pojemność (XTAL2/TOSC2)
ATmega48A/PA/88A/PA/168A/PA/328/P systemowy 18pF 8pF
timera 18pF 8pF

Pojemność (Ce+Ci) potrzebną na każdej końcówce TOSC można obliczyć przy pomocy wzoru:

gdzie:
– Ce – jest pojemnością zewnętrznego kondensatora C1/C2
– Ci – jest pojemnością końcówki wg tabelki powyżej
– CL – jest pojemnością obciążenia kryształu 32,768kHz określaną przez producenta
– CS – jest całkowitą pojemnością pasożytniczą dla jednej końcówki TOSC

Kryształy określające pojemność obciążenia (CL) wyższą od 6 pF wymagają dołączenia zewnętrznych kondensatorów.

Oscylator kwarcowy niskiej częstotliwości musi być wybrany przez ustawienie bitów bezpiecznikowych CKSEL na “0110” lub “0111”. Czasy uruchamiania są określane przez bity bezpiecznikowe SUT.

SUT1...0 Dodatkowe opóźnienie od resetu (VCC = 5V) Zalecane zastosowanie
00 4 CK Szybko narastające VCC lub włączony moduł BOD
01 4 CK + 4,1ms Wolno narastające VCC
10 4CK + 65ms Stabilna częstotliwość przy uruchamianiu
11 Zarezerwowane

Czasy startu przy wyborze zegara oscylatora kwarcowego o niskiej częstotliwości

CKSEL3...0 Czas startu z trybu wyłączenia i oszczędzania energii Zalecane zastosowanie
0100(1) 1K CK  
0101 32K CK Stabilna częstotliwość przy starcie
Uwaga: 1. Tej opcji należy użyć, jeśli stabilność częstotliwości przy starcie nie jest istotna dla aplikacji.
Na początek:  podrozdziału   strony 

Kalibrowany, wewnętrzny oscylator RC

Standardowo wewnętrzny oscylator RC dostarcza zegara o przybliżonej częstotliwości 8,0MHz. Chociaż zależny on jest od napięcia i temperatury, to użytkownik może go bardzo dokładnie skalibrować. Mikrokontroler jest sprzedawany z zaprogramowanym bitem bezpiecznikowym CKDIV8. Zobacz do podrozdziału "Preskaler zegara systemowego", gdzie znajdziesz więcej szczegółów na ten temat.

Zegar ten można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych CKSEL, co pokazuje poniższa tabelka.

Tryby pracy kalibrowanego, wewnętrznego oscylatora RC

Zakres częstotliwości(2) MHz CKSEL3...0
7,3 – 8,1 0010(1)
Uwagi: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.
  2. Jeśli częstotliwość 8MHz wykracza poza możliwości mikrokontrolera (zależy to od VCC), można zaprogramować bit bezpiecznikowy CKDIV8 w celu podzielenia tej częstotliwości wewnętrznej przez 8.

Jeśli zostanie wybrany, to będzie pracował bez zewnętrznych elementów. Podczas resetu mikrokontroler umieszcza w rejestrze OSCAL zaprogramowaną wartość kalibracyjną, co automatycznie kalibruje oscylator RC. Przez programową zmianę zawartości rejestru OSCAL możliwe jest otrzymanie większej dokładności kalibracji niż przy użyciu kalibracji fabrycznej.

Gdy oscylator ten jest używany jako zegar układu, oscylator licznika zegarowego wciąż będzie używany dla tego licznika oraz dla czasów opóźnień w trakcie resetu. Po wyborze oscylatora RC czasy uruchamiania będą określane przez bity bezpiecznikowe SUT wg poniższej tabelki.

Warunki zasilania Czas uruchamiania z trybu wyłączenia i oszczędzania Dodatkowe opóźnienie z resetu (VCC = 5V) SUT1...0
Włączony BOD 6 CK 14 CK(1) 00
Szybko narastające VCC 6 CK 14 CK + 4,1ms 01
Wolno narastające VCC 6 CK 14CK 65ms(2) 10
Zarezerwowane 11
Uwagi: 1. Jeśli bit bezpiecznikowy RSTDISBL został zaprogramowany, to ten czas uruchamiania wzrośnie do 14CK + 4,1ms, aby zapewnić możliwość wejścia w tryb programowania.
  2. Mikrokontroler jest sprzedawany z ustawioną tą opcją.

Wewnętrzny oscylator 128 kHz

Wewnętrzny oscylator 128kHz jest oscylatorem o niskim poborze prądu dostarczającym zegara 128kHz. Częstotliwość osiąga wartość znamionową przy 3V i 25°. Zegar ten można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych CKSEL na "0011", jak pokazano w tabelce poniżej.
Częstotliwość znamionowa(1) CKSEL3...0
128kHz 0011
Uwaga: 1. Oscylator 1238kHz jest źródłem zegarowym o bardzo małej mocy i nie był projektowany z myślą o dużej dokładności.

Gdy to źródło zegarowe zostanie wybrane, czasy startu będą określane przez bity bezpiecznikowe SUT wg poniższej tabelki.

Warunki zasilania Czas uruchamiania z trybu wyłączenia i oszczędzania Dodatkowe opóźnienie z resetu (VCC = 5V) SUT1...0
Włączony BOD 6 CK 14 CK(1) 00
Szybko narastające VCC 6 CK 14 CK + 4ms 01
Wolno narastające VCC 6 CK 14CK 64ms 10
Zarezerwowane 11
Uwagi: 1. Jeśli bit bezpiecznikowy RSTDISBL został zaprogramowany, to ten czas uruchamiania wzrośnie do 14CK + 4,1ms, aby zapewnić możliwość wejścia w tryb programowania.
Na początek:  podrozdziału   strony 

Zegar zewnętrzny

Aby taktować mikrokontroler zewnętrznym źródłem zegarowym, końcówka XTAL1 powinna być sterowana zgodnie z poniższym rysunkiem. Bity bezpiecznikowe CKSEL należy w tym przypadku zaprogramować na wartość "0000".

Częstotliwość zegara oscylatora kwarcowego

Częstotliwość CKSEL3...0
0 – 20 MHz 0000

Gdy to źródło zegarowe zostanie wybrane, czasy startu będą określane przez bity bezpiecznikowe SUT wg poniższej tabelki.

Warunki zasilania Czas uruchamiania z trybu wyłączenia i oszczędzania Dodatkowe opóźnienie z resetu (VCC = 5V) SUT1...0
Włączony BOD 6 CK 14 CK(1) 00
Szybko narastające VCC 6 CK 14 CK + 4ms 01
Wolno narastające VCC 6 CK 14CK 64ms 10
Zarezerwowane 11

Przy zastosowaniu zegara zewnętrznego wymagane jest unikanie nagłych zmian w jego częstotliwości w celu zapewnienia stabilnej pracy mikrokontrolera. Zmiana częstotliwości większa niż 2% w sąsiednich taktach zegara może prowadzić do nieprzewidywalnych zachowań mikrokontrolera. Jeśli taka zmiana jest konieczna, zapewnij utrzymanie mikrokontrolera w stanie resetu podczas zmian.

Zwróć uwagę, iż preskaler zegara systemowego może zostać użyty do zaimplementowania zmian częstotliwości zegara wewnętrznego podczas pracy mikrokontrolera przy jednoczesnym zapewnieniu jej stabilności. Szczegóły znajdziesz w podrozdziale "Preskaler zegara systemowego".

Na początek:  podrozdziału   strony 

Bufor wyjściowy zegara

Mikrokontroler może wyprowadzać zegar systemowy na końcówkę CLKO. Aby włączyć tę funkcją, należy zaprogramować bit bezpiecznikowy CKOUT. Ten tryb jest użyteczny, gdy zegar mikrokontrolera jest wykorzystywany do sterowania innych układów w danym systemie. Zegar ten będzie również wyprowadzany podczas resetu, a normalna praca końcówki we/wy zostanie przechwycona po zaprogramowaniu bitu bezpiecznikowego CKOUT. Gdy na wyjściu CLKO wyprowadzany jest zegar, można wybrać dowolne źródło zegarowe, łącznie z wewnętrznym oscylatorem RC. Jeśli używany jest preskaler zegara systemowego, to na wyjściu CLKO będzie wyprowadzany podzielony zegar systemowy.

Na początek:  podrozdziału   strony 

Oscylator timera/licznika

Mikrokontroler ATmega48A/PA/88A/PA/168A/PA/328/P używa tego samego oscylatora kwarcowego dla oscylatora niskiej częstotliwości oraz oscylatora timera/licznika. Szczegóły znajdziesz w podrozdziale "Oscylator kwarcowy o niskiej częstotliwości".

Mikrokontroler ATmega48A/PA/88A/PA/168A/PA/328/P współdzieli końcówki oscylatora timera/licznika (TOSC1 i TOSC2) z XTAL1 i XTAL2. Gdy jest używany ten oscylator timera/licznika, zegar systemowy musi posiadać częstotliwość cztery razy większą od częstotliwości oscylatora. Z tego powodu oscylator timera/licznika można używać tylko wtedy, gdy wybrano kalibrowany, wewnętrzny oscylator RC jako źródło zegara systemowego.

Źródło zegara zewnętrznego na końcówce TOSC1 można używać, jeśli bit EXTCLK w rejestrze ASSR zostanie zapisany logiczną jedynką. Szczegóły znajdziesz w podrozdziale "Asynchroniczna praca timera/licznika 2".

Na początek:  podrozdziału   strony 

Preskaler zegara systemowego

Mikrokontroler ATmega48A/PA/88A/PA/168A/PA/328/P posiada preskaler zegara systemowego, a zegar systemowy może być dzielony przez ustawienie rejestru preskalera CLKPR (ang. Clock Prescale Register). Opcji tej można używać do zmniejszania częstotliwości zegara systemowego oraz poboru prądu, gdy spadają wymagania na moc obliczeniową. Można to stosować ze wszystkimi opcjami źródeł zegarowych i wpłynie to na częstotliwość zegarową mikroprocesora oraz wszystkich synchronicznych modułów peryferyjnych.

Przy przełączaniu ustawień preskalera, zapewnia on, iż systemie zegarowym nie pojawią się żadne zakłócenia. Zapewnia on również, iż częstotliwość pośrednia nie będzie większa ani od częstotliwości odpowiadającej poprzedniemu ustawieniu preskalera, ani od częstotliwości odpowiadającej nowemu ustawieniu. Licznik szeregowy implementujący preskaler pracuje z częstotliwością niepodzielonego zegara, która może być wyższa od częstotliwości zegarowej mikroprocesora. Stąd nie jest możliwe określenie stanu preskalera – nawet, gdyby udało się go odczytać, a dokładny czas przełączania z jednego podziału zegara na inny nie może zostać dokładnie przewidziany. Od czasu zapisu wartości CLKPS do aktywacji nowej częstotliwości zegara występuje opóźnienie od T1 + T2 do T1 + 2 * T2. W tym okresie tworzone są dwa aktywne zbocza zegarowe. Tutaj T1 oznacza poprzedni okres zegara, a T2 jest okresem odpowiadającym nowemu ustawieniu preskalera.

Aby zapobiec niezamierzonym zmianom częstotliwości zegarowej, należy postępować wg specjalnej procedury, aby zmienić bity CLKPS:

  1. Zapisz jedynką logiczną bit uaktywnienia zmiany preskalera zegara (ang. Clock Prescaler Change Enable, CLKPCE), a pozostałe bity w rejestrze CLKPR na zero.
  2. W ciągu czterech taktów zegara mikroprocesora zapisz pożądaną wartość do bitów CLKPS, zapisując jednocześnie zero do bitu CLKPCE.

Przy zmienianiu ustawień preskalera przerwania muszą być wyłączone, aby zapewnić, iż procedura zapisu nie będzie zakłócana.

Na początek:  podrozdziału   strony 

Opis rejestrów

OSCCAL – Oscillator Calibration Register – Rejestr kalibracyjny oscylatora

Bit 7 6 5 4 3 2 1 0  
(0x66) CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa Wartość kalibracyjna specyficzna dla danego układu  

Bity 7:0 – CAL[7:0]: Oscillator Calibration Value – Wartość kalibracyjna oscylatora

Rejestr OSCCAL wykorzystywany jest do strojenia wewnętrznego oscylatora kalibrowanego RC w celu usunięcia odchyłek produkcyjnych z częstotliwości oscylatora. Zaprogramowana wcześniej wartość jest automatycznie wpisywana do tego rejestru podczas resetu układu, dając częstotliwość skalibrowaną fabrycznie. Oprogramowanie aplikacji może zapisać ten rejestr inną wartością, aby zmienić częstotliwość oscylatora. Więcej szczegółów znajdziesz w podrozdziale "Charakterystyki zegarowe". Zauważ, iż ten oscylator używany jest do odmierzania czasu przy zapisywaniu do pamięci EEPROM i FLASH, zatem czasy zapisu zmienią się odpowiednio. Jeśli w aplikacji wykonywany jest zapis do EEPROM lub FLASH, nie kalibruj powyżej 8,8 MHz. W przeciwnym razie zapis EEPROM/FLASH może się nie powieść.

Bit CAL7 określa zakres działania dla oscylatora. Ustawienie go na 0 da najniższy zakres częstotliwości, ustawienie na 1 da najwyższy. Te dwa zakresy nakładają się, innymi słowy ustawienie OSCCAL = 0x7F daje wyższą częstotliwość niż OSCCAL = 0x80.

Bity CAL6...0 są używane do regulacji częstotliwości w wybranym zakresie. Ustawienie 0x00 daje najniższą częstotliwość, a ustawienie 0x7F daje najwyższą częstotliwość w wybranym zakresie.

CLKPR – Clock Prescaler Register – Rejestr preskalera zegara

Bit 7 6 5 4 3 2 1 0  
(0x61) CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Zapis/Odczyt Z/O O O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 Zobacz do opisu bitów  

Bit 7 – CLKPCE: Clock Prescaler Change Enable – Uaktywnienie zmian preskalera zegara

Bit CLKPCE należy zapisać logiczną jedynką, aby uaktywnić zmianę bitów CLKPS. Bit CLKPCE zostanie uaktualniony tylko wtedy, gdy pozostałe bity w rejestrze CLKPR są jednocześnie zapisywane zerami. Bit CLKPCE jest zerowany sprzętowo po czterech taktach zegarowych od momentu zapisu lub po zapisie bitów CLKPS. Ponowne zapisanie bitu CLKPCE w tym przedziale czasu ani nie wydłuża tego czasu, ani nie zeruje bitu CLKPCE.

Bity 3:0 – CLKPS[3:0]: Clock Prescaler Select Bits 3 - 0 – Bity wyboru preskalera

Te bity definiują współczynnik podziału pomiędzy wybranym źródłem zegarowym a wewnętrznym zegarem systemowym. Można je zapisać w trakcie pracy programu w celu zmiany częstotliwości zegarowej, aby dopasować ją do wymagań aplikacji. Gdy dzielnik dzieli główną częstotliwość zegara mikrokontrolera, prędkość wszystkich synchronicznych modułów peryferyjnych jest redukowana przy używaniu współczynnika podziału. Współczynniki te podaje poniższa tabelka.

Wybór zegara preskalera
CLKPS3 CLKPS2 CLKPS1 CLKPS0 Współczynnik podziału zegara
0 0 0 0 1
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 Zarezerwowane
1 0 1 0 Zarezerwowane
1 0 1 1 Zarezerwowane
1 1 0 0 Zarezerwowane
1 1 0 1 Zarezerwowane
1 1 1 0 Zarezerwowane
1 1 1 1 Zarezerwowane

Bit bezpiecznikowy CKDIV8 określa wartość początkową bitów CLKPS. Jeśli bit CKDIV8 jest niezaprogramowany ("1"), bity CLKPS zostaną zresetowane na "0000". Jeśli bit CKDIV8 jest zaprogramowany, bity CLKPS są resetowane na “0011”, co ustawia współczynnik podziału na 8 przy uruchamianiu mikrokontrolera. Opcję tą powinno się używać, jeśli wybrane źródło zegarowe posiada częstotliwość wyższą od maksymalnej dla danego mikrokontrolera przy aktualnych warunkach pracy. Zauważ, iż dowolna wartość może być wpisana do bitów CLKPS bez względu na ustawienie bitu bezpiecznikowego CKDIV8. Oprogramowanie aplikacji musi zapewnić odpowiedni współczynnik podziału, jeśli wybrane źródło zegarowe posiada częstotliwość od maksymalnej częstotliwości układu mikrokontrolera w bieżących warunkach pracy. Mikrokontroler jest sprzedawany z zaprogramowanym bitem bezpiecznikowym CKDIV8.

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.