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

ATtiny25/45/85

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 wykorzystanie

Poniższy rysunek przedstawia główne systemy zegarowe i ich rozdział w mikrokontrolerze ATtiny25/45/85. 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, takich jak timer/licznik. Zegar we/wy używany jest również przez moduł przerwania zewnętrznego, jednakże zwróć uwagę, iż niektóre przerwania zewnętrzne są wykrywane przez logikę asynchroniczną, co pozwala na ich wykrywanie nawet przy zatrzymanym zegarze we/wy.

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.

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. W rezultacie otrzymuje się dokładniejsze wyniki przetwarzania analogowo/cyfrowego.

Internal PLL for Fast Peripheral Clock Generation – clkPCK – Wewnętrzna pętla sprzężenia fazowego do generacji zegara dla szybkich peryferiów

Wewnętrzna pętla PLL w ATtiny25/45/85 generuje częstotliwość zegarową osiem razy wyższą od źródłowej częstotliwości wejściowej. Standardowo pętla PLL wykorzystuje jako źródło wyjście wewnętrznego oscylatora RC 8 MHz. Alternatywnie po ustawieniu bitu LSM w rejestrze PLLCSR pętla PLL będzie wykorzystywać wyjście oscylatora RC podzielone przez 2. Stąd jako wyjście z PLL zegar szybkich peryferiów ma częstotliwość 64MHz. Zegar ten lub zegar preskalowany z tej wartości może zostać wybrany na źródło zegarowe dla timera/licznika 1 lub jako zegar systemowy. Zobacz na rysunek poniżej. Częstotliwość zegara szybkich peryferiów jest dzielona przez dwa, gdy zostanie ustawiony bit LSM w rejestrze PLLCSR, co da w wyniku częstotliwość 32MHz. Zwróć uwagę, iż bitu LSM nie można ustawić, jeśli zegar PLLCLK jest używany jako zegar systemowy.

Pętla PLL jest na stałe połączona z oscylatorem RC i regulacja oscylatora RC poprzez rejestr OSCCAL spowoduje jednoczesną regulację częstotliwości zegara szybkich peryferiów. Jednakże. nawet jeśli oscylator RC zostanie ustawiony na wyższej częstotliwości niż 8MHz, zegar szybkich peryferiów wysyca się przy 85MHz (najgorszy przypadek) i pozostaje przy tej górnej granicy. Należy zwrócić uwagę, iż w tym przypadku pętla PLL nie jest sprzężona fazowo z oscylatorem RC. Dlatego nie zaleca się ustawień OSCCAL na wyższe częstotliwości niż 8MHz, inaczej pętla PLL nie będzie pracować w poprawnym zakresie roboczym. Pętla PLL jest włączana, gdy:

Bit PLOCK w rejestrze PLLCSR zostaje ustawiony, gdy pętla PLL jest sprzężona. W trybach uśpienia wyłączenia zasilania i gotowości wyłączone zostają wewnętrzny oscylator RC oraz pętla PLL.

Wewnętrzna pętla PLL w trybie kompatybilności z  ATtiny15

Ponieważ mikrokontroler ATtiny25/45/85 jest ulepszoną wersją dla użytkowników ATtiny15, to istnieje tryb kompatybilności z ATtiny15 dla wstecznej kompatybilności. Tryb kompatybilności z ATtiny15 zostaje wybrany po zaprogramowaniu bitów bezpiecznikowych CKSEL na ‘0011’. W trybie kompatybilności częstotliwość wewnętrznego oscylatora RC zostaje skalibrowana w dół na 6,4MHz, a współczynnik mnożenia PLL jest ustawiany na 4x. Zobacz na rysunek poniżej. Przy tych ustawieniach system zegarowy staje się kompatybilny z ATtiny15 i wynikowy zegar szybkich peryferiów ma częstotliwość 25,6MHz (tyle samo co w ATtiny15).

Zauważ, iż tryb niskiej prędkości nie został zaimplementowany w trybie kompatybilności z ATtiny15.

Na początek:  podrozdziału   strony 

Źródła zegarowe

Mikrokontroler posiada opcje zegarowe przedstawione w poniższej tabeli, wybierane za pomocą bitów bezpiecznikowych w pamięci FLASH. Zegar z wybranego źródła zegarowego jest wejściem dla generatora zegarowego AVR, a następnie jest kierowany do odpowiednich modułów.
Opcja zegarowa CKSEL[3:0](1)
Zegar zewnętrzny 0000
Zegar PLL o wysokiej częstotliwości 0001
Wewnętrzny oscylator kalibrowany 0010(2)
Wewnętrzny oscylator kalibrowany 0011(3)
Wewnętrzny oscylator 128 kHz 0100
Kryształ kwarcu o niskiej częstotliwości 0110
Kwarc/rezonator ceramiczny 1000 – 1111
Zarezerwowane 0101, 0111
Uwagi: 1 Dla wszystkich bitów bezpiecznikowych "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany.
  2. Mikrokontroler jest sprzedawany z tą opcją ustawioną.
  3. To wybierze tryb kompatybilności z ATtiny15, gdzie zegar systemowy jest dzielony przez cztery, dając wynikową częstotliwość zegarową 1,6 MHz.

W kolejnych podrozdziałach opisane są różne warianty dla każdej z opcji zegarowych. Gdy mikroprocesor wybudza się z trybu wyłączenia zasilania lub trybu oszczędzania energii, to wybrane źródło zegarowe jest używane do odmierzania czasu startu, upewniając się o stabilnej pracy oscylatora przed rozpoczęciem wykonywania instrukcji. Gdy mikroprocesor startuje po resecie, pojawia się dodatkowe opóźnienie, które pozwala napięciu zasilającemu osiągnąć stabilny poziom przed rozpoczęciem normalnego działania. Do odmierzania tej części czasu uruchamiania używany jest oscylator licznika zegarowego. Poniższa tabela pokazuje liczbę cykli tego oscylatora do przekroczenia okresu zliczania w liczniku zegarowym:

Okres licznika zegarowego Liczba cykli
4 ms 512
64 ms 8K (8192)

Zegar zewnętrzny

Aby uruchomić mikrokontroler na zegarze zewnętrznym, końcówka CLKI powinna być sterowana jak na poniższym obrazku. W tym przypadku bity bezpiecznikowe CKSEL0:1 powinny zostać zaprogramowane na "00".

obrazek

Gdy to źródło zegara zostało wybrane, czasy uruchamiania są określane przez bity bezpiecznikowe SUT wg poniższej tabeli:

SUT1:0 Czas uruchamiania po wybudzeniu z trybu wyłączenia Dodatkowe opóźnienie z resetu Zalecane zastosowanie
00 6 CK 14 CK Włączone BOD
01 6 CK 14 CK + 4 ms Szybko narastające zasilanie
10 6 CK 14 CK + 64 ms Wolno narastające zasilanie
11 Zarezerwowane

Gdy stosowany jest zegar zewnętrzny, wymaga się unikania nagłych zmian w stosowanej częstotliwości zegara w celu zapewnienia stabilnego działania mikrokontrolera. Zmiana w częstotliwości większa niż 2% z jednego cyklu do następnego może prowadzić do nieprzewidywalnego zachowania. Wymaga się, aby podczas takich zmian w częstotliwości zegarowej zapewnić utrzymywanie mikrokontrolera w stanie resetu.

Zwróć uwagę, iż preskaler zegara systemowego może być używany do implementacji w trakcie pracy zmian częstotliwości wewnętrznego zegara przy jednoczesnym zapewnieniu stabilnego działania.

Zegar PLL o dużej częstotliwości

Wewnętrzna pętla PLL dostarcza docelowo zegara 64MHz sprzężonego z oscylatorem RC do użytku w timerze/liczniku 1 oraz jako źródło zegara systemowego. Jeśli zegar ten zostanie wybrany jako źródło zegara systemowego, przez zaprogramowanie bitów bezpiecznikowych CKSEL na '0001', to będzie dzielony przez 4, jak w poniższej tabelce:

CKSEL[3:0] Częstotliwość znamionowa
0001 16 MHz

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

SUT1:0 Czas uruchamiania po wybudzeniu z trybu wyłączenia Dodatkowe opóźnienie z resetu (VCC = 5V) Zalecane zastosowanie
00 14CK + 1K (1024) CK + 4 ms 4 ms Włączone BOD
01 14CK + 16K (16384) CK + 4 ms 4 ms Szybko narastające zasilanie
10 14CK + 1K (1024) CK + 64 ms 4 ms Wolno narastające zasilanie
11 14CK + 16K (16384) CK + 64 ms 4 ms Wolno narastające zasilanie

Kalibrowany oscylator wewnętrzny

Standardowo wewnętrzny oscylator RC dostarcza zegara o częstotliwości zbliżonej do 8 MHz. Chociaż jest on zależny od napięcia i temperatury, to jednak użytkownik może go bardzo dokładnie skalibrować. Zobacz do podrozdziałów "Dokładność wewnętrznego oscylatora kalibrowanego RC" i " Prędkość wewnętrznego oscylatora". Mikrokontroler sprzedawany jest z zaprogramowanym bitem bezpiecznikowym CKDIV8. Zobacz do podrozdziału "Preskaler zegara systemowego".

Zegar ten można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych pokazanych w tabelce poniżej. Jeśli zostanie wybrany, będzie pracował bez żadnych elementów zewnętrznych. Podczas resetu sprzętowo ładowana jest do rejestru OSCAL zaprogramowana wcześniej wartość kalibracyjna, co powoduje automatyczną kalibrację oscylatora RC.

Zmieniając zawartość rejestru OSCAL możliwe jest uzyskanie większej dokładności kalibracji niż kalibracja fabryczna.

Gdy ten oscylator został wybrany na zegar układu, to oscylator licznika czasu będzie wciąż używany przez timer licznika czasu oraz do odmierzania opóźnień przy resecie.

Wewnętrzny oscylator można również ustawić na dostarczanie zegara 6,4 MHz przez zapis bitów bezpiecznikowych CKSEL wartością "0011", jak pokazano w poniższej tabelce. Ostawienie to odnosi się do trybu kompatybilności z ATtiny15 i ma za zadanie dostarczyć źródła zegarowego 6,4 MHz, jak w ATtiny15, w celu generowania sygnału zegarowego peryferiów 25,6 MHz dla timera/licznika 1 (zobacz do rozdziału "8-bitowy timer/licznik 1 w trybie ATtiny15"). Zauważ, iż w tym trybie pracy sygnał zegara 6,4 MHz jest zawsze dzielony przez cztery, dostarczając zegara systemowego 1,6 MHz.

Tryby pracy kalibrowanego oscylatora wewnętrznego

CKSEL[3:0] Częstotliwość nominalna
0010(1) 8,0 MHz
0011(2) 6,4 MHz
Uwagi: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.
  2. To ustawienie wybierze tryb kompatybilności z ATtiny15, gdzie zegar systemowy jest dzielony przez cztery, dając wynikową częstotliwość zegarową 1,6 MHz.

Po wyborze oscylatora 8 MHz, jako źródło zegarowe czasy uruchamiania są określane przez bity bezpiecznikowe SUT, jak pokazano w poniższej tabeli:

SUT[1:0] Czas uruchamiania po wybudzeniu z trybu wyłączenia/oszczędzania Dodatkowe opóźnienie z resetu (VCC = 5V) Zalecane zastosowanie
00 6 CK 14 CK(1) Włączone BOD
01 6 CK 14 CK + 4 ms Szybko narastające zasilanie
10(2) 6 CK 14 CK + 64 ms Wolno narastające zasilanie
11 Zarezerwowane
Uwagi: 1. Jeśli zostanie zaprogramowany bit bezpiecznikowy RSTDISBL, to ten czas startu zwiększy się do 14CK + 4 ms, aby zapewnić możliwość przejścia w tryb programowania.
  2. Mikrokontroler jest sprzedawany z ustawioną tą opcją.

W trybie kompatybilności z ATtiny15 czasy określane przez bity bezpiecznikowe SUT zmieniają się na te opisane w poniższej tabelce:

SUT[1:0] Czas uruchamiania po wybudzeniu z trybu wyłączenia/oszczędzania Dodatkowe opóźnienie z resetu (VCC = 5V) Zalecane zastosowanie
00 6 CK 14 CK + 64 ms  
01 6 CK 14 CK + 64 ms  
10 6 CK 14 CK + 4 ms  
11 1 CK 14 CK(1)  
Uwagi: 1. Jeśli zostanie zaprogramowany bit bezpiecznikowy RSTDISBL, to ten czas startu zwiększy się do 14CK + 4 ms, aby zapewnić możliwość przejścia w tryb programowania.

Wewnętrzny oscylator 128 kHz

Oscylator wewnętrzny 128 kHz

Wewnętrzny oscylator 128 kHz jest oscylatorem pobierającym niski prąd i dostarczającym zegara o częstotliwości 128 kHz. Częstotliwość ta zależy od napięcia zasilania, temperatury oraz odchyłek indywidualnych. Zegar 128 kHz można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych CKSEL na “0100”. Po wyborze tego zegara czasy uruchamiania są określane przez bity bezpiecznikowe SUT wg poniższej tabelki:

SUT[1:0[ Czas uruchamiania po wybudzeniu z trybu wyłączenia/oszczędzania Dodatkowe opóźnienie z resetu Zalecane zastosowanie
00 6 CK 14 CK(1) Włączone BOD
01 6 CK 14 CK + 4 ms Szybko narastające zasilanie
10 6 CK 14 CK + 64 ms Wolno narastające zasilanie
11 Zarezerwowane
Uwagi: 1. Jeśli zostanie zaprogramowany bit bezpiecznikowy RSTDISBL, to ten czas startu zwiększy się do 14CK + 4 ms, aby zapewnić możliwość przejścia w tryb programowania.

Oscylator kwarcowy o niskiej częstotliwości

Aby użyć zegarowego kwarcu 32,768 kHz jako źródła zegara dla mikrokontrolera, należy wybrać oscylator kwarcowy o niskiej częstotliwości przez ustawienie bitów bezpiecznikowych CKSEL na ‘0110’. Kwarc należy podłączyć zgodnie z rysunkiem poniżej.

Dobór właściwych kondensatorów C1 i C2 znajdziesz w materiałach technicznych producenta kwarcu.

Dla tego oscylatora czasy startowe są ustawiane bitami bezpiecznikowymi SUT wg poniższej tabelki:

SUT1:0 Czas startu po trybie wyłączenia Dodatkowe opóźnienie od resetu Zalecane użycie
00 1K CK(1) 4 ms Szybko narastające VCC lub wyłączone BOD
01 1K CK(1) 64 ms Wolno narastające VCC
10 32K CK 64 ms Stabilna częstotliwość przy starcie
11 Zarezerwowane
Uwaga: 1. Te opcje należy stosować, jeśli stabilność częstotliwości przy starcie nie jest istotna.

Oscylator kwarcowy niskiej częstotliwości wprowadza wewnętrzne obciążenie pojemnościowe, wg poniższej tabelki:

Układ Typ oscylatora
32 kHz
Pojemność
(XTAL1/TOSC1)
Pojemność
(XTAL2/TOSC2)
ATtiny24/44/84 Oscylator systemu 16 pF 6 pF

Oscylator kwarcowy/rezonator ceramiczny

Końcówki XTAL1 i XTAL2 są odpowiednio wejściem i wyjściem odwracającego wzmacniacza, który można skonfigurować do użytku jako wewnątrzukładowy oscylator, co pokazuje poniższy rysunek:

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

Kondensatory C1 i C2 powinny posiadać tę samą pojemność tak dla kwarców jak i dla rezonatorów. Optymalna pojemność tych kondensatorów zależna jest od użytego kwarcu lub rezonatora, ilości pojemności pasożytniczych oraz poziomu zakłóceń elektromagnetycznych środowiska. Pewne początkowe wskazówki doboru pojemności kondensatorów do użytku z kryształami kwarcu podaje tabelka poniżej.  Dla rezonatorów ceramicznych należy stosować wartości podawane przez producenta.

CKSEL3:1 Zakres częstotliwości (MHz) Zalecane pojemności C1 i C2 (pF)
100(1) 0,4 - 0,9
101 0,9 - 3,0 12 - 22
110 3,0 - 8,0 12 - 22
111 8,0 - 12 - 22
Uwaga: 1. Tej opcji nie należy stosować dla kwarców, tylko dla rezonatorów ceramicznych

Oscylator może pracować w trzech różnych trybach, każdy zoptymalizowany dla określonego zakresu częstotliwości. Tryb pracy jest wybierany bitami bezpiecznikowymi CKSEL3:1, co pokazuje powyższa tabelka. Bit bezpiecznikowy CKSEL0 wraz z bitami SUT1:0 wybiera czasy startowe pokazane w tabelce poniżej.

CKSEL0 SUT1:0 Czas startu po trybie wyłączenia(1) Dodatkowe opóźnienie od resetu Zalecane użycie
0 00 258 CK(2) 14CK + 4 ms Rezonator ceramiczny, szybko narastające VCC
0 01 258 CK(2) 14CK + 64 ms Rezonator ceramiczny, wolno narastające VCC
0 10 1K CK(2) 14CK Rezonator ceramiczny, włączone BOD
0 11 1K CK(2) 14CK + 4 ms Rezonator ceramiczny, szybko narastające VCC
1 00 1K CK(2) 14CK + 64 ms Rezonator ceramiczny, wolno narastające VCC
1 01 16K CK 14CK Oscylator kwarcowy, włączone BOD
1 10 16K CK 14CK + 4 ms Oscylator kwarcowy, szybko narastające VCC
1 11 16K CK 14CK + 64 ms Oscylator kwarcowy, wolno narastające VCC
Uwagi: 1. Gdy moduł BOD został wyłączony programowo, to czas wybudzenia z trybu uśpienia wyniesie w przybliżeniu 60μs, aby zapewnić poprawną pracę BOD, zanim mikrokontroler wznowi wykonywanie kodu.
  2. Te opcje powinny być stosowane, 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. Opcje te nie nadają się dla kryształów kwarcowych.

Standardowe źródło zegarowe

Mikrokontroler jest sprzedawany z zaprogramowanymi bitami bezpiecznikowymi CKSEL = “0010”, SUT = “10” i CKDIV8. W ten sposób standardowym źródłem zegarowym jest wewnętrzny oscylator pracujący z częstotliwością 8,0 MHz z najdłuższym czasem uruchamiania i wstępnym podziałem zegara przez 8, co daje w wyniku zegar systemowy 1,0 MHz. To standardowe ustawienie zapewnia, iż wszyscy użytkownicy będą mogli wybrać pożądane źródło zegarowe za pomocą programatora.

Na początek:  podrozdziału   strony 

Preskaler zegara systemowego

Zegar systemowy mikrokontrolera ATtiny25/45/85 może być dzielony przez ustawienie rejestru preskalera zegara CLKPR. Własność ta może zostać wykorzystana do zmniejszenia poboru energii, gdy nie ma zapotrzebowania na dużą moc przetwarzania. Preskaler może być używany ze wszystkimi opcjami zegara i wpływa on na mikroprocesor oraz wszystkie synchroniczne układy peryferyjne. Zegary clkI/O, clkADC, clkCPU i clkFLASH są dzielone przez współczynnik podany w tabeli w opisie rejestru CLKPR.

Czas przełączania

Przy przełączaniu ustawień w preskalerze, zapewnia on, iż nie pojawią się żadne zakłócenia w systemie zegarowym, a żadne z pośrednich częstotliwości nie będzie wyższa ani od poprzedniej częstotliwości, ani od częstotliwości związanej z nowymi ustawieniami.

Licznik szeregowy, z którego zbudowany jest preskaler, pracuje przy częstotliwości niedzielonego 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 dało się go odczytać, a  ścisłego czasu, który zajmuje przełączenie z jednego podziału zegara na inny, nie da dokładnie przewidzieć. Od czasu zapisu wartości podziału w rejestrze preskalera CLKPR upływa od T1 + T2 do T1 + 2*T2 czasu, zanim nowa częstotliwość stanie się aktywna. W tym interwale czasowym tworzone są 2 aktywne zbocza w sygnale zegarowym. Tutaj T1 jest okresem poprzedniego zegara, a T2 jest okresem odpowiadającym nowym ustawieniom preskalera.

Na początek:  podrozdziału   strony 

Bufor wyjściowy zegara

Mikrokontroler może wyprowadzać zegar systemowy na końcówce CLKO  (gdy nie jest używana jako końcówka XTAL2). Aby uaktywnić to wyjście, należy zaprogramować bit bezpiecznikowy CKOUT. Tryb taki przydaje się, gdy zegar układu jest używany do sterowania innych obwodów w systemie. Zwróć uwagę, że zegar nie będzie wyprowadzany podczas resetu, a normalna praca końcówki we/wy zostanie przejęta przez funkcję zegara po zaprogramowaniu bitu bezpiecznikowego. Gdy zegar jest wyprowadzany na CLKO, na zegar systemu można wybrać wewnętrzny oscylator RC, oscylator licznika czasu, pętle PLL i zegar zewnętrzny (CLKI). Przy wyprowadzaniu zegara na CLKO nie można używać oscylatorów kwarcowych (XTAL1, XTAL2). Jeśli używany jest preskaler zegara systemowego, to wyprowadzany jest zegar systemowy po podziale w preskalerze.

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  
0x31 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 mikrokontrolera  

Bity 7:0 – CAL7:0: Oscillator Calibration Value – Wartość kalibracyjna oscylatora

Rejestr kalibracyjny oscylatora jest używany do regulacji wewnętrznego oscylatora kalibrowanego RC w celu usunięcia z jego częstotliwości odchyłek danego egzemplarza mikrokontrolera. Zaprogramowana wcześniej wartość kalibracyjna jest automatycznie wpisywana do tego rejestru podczas resetu układu, co daje częstotliwość skalibrowaną fabrycznie określoną w poniższej tabelce.

Dokładność kalibracji wewnętrznego oscylatora RC

Metoda
kalibracji
Częstotliwość docelowa VCC Temperatura Dokładność przy danych VCC i temperaturze(1)
Kalibracja fabryczna 8,0 MHz(2) 3V 25°C ±10%
Kalibracja użytkownika Ustalona w zakresie:
6 – 8 MHz
Ustalone w zakresie:
1,8V – 5,5V(3)
2,7V – 5,5V(4)
Ustalona w zakresie:
-40°C do +85°C
±1%
Uwagi: 1. Dokładność częstotliwości oscylatora w punkcie kalibracji (przy ustalonej temperaturze i napięciu).
  2. Tylko ATtiny25/V: 6.4 MHz w trybie kompatybilności z ATtiny15.
  3. Zakres napięć zasilania dla ATtiny25V/45V/85V.
  4. Zakres napięć zasilania dla ATtiny25/45/85.

Oprogramowanie aplikacji może zapisywać do tego rejestru, aby zmieniać częstotliwość oscylatora. Oscylator można skalibrować na częstotliwości określone w tabelce powyżej. Kalibracja poza tym zakresem nie jest gwarantowana.

Zauważ, że oscylator ten jest używany przy odmierzaniu czasu dostępu zapisu do pamięci EEPROM i FLASH, zatem zmiana jego częstotliwości wpłynie odpowiednio na te czasy. Jeśli są zapisywane pamięci EEPROM lub FLASH, to nie kalibruj na częstotliwość wyższą od 8,8 MHz. W przeciwnym razie zapis EEPROM lub FLASH może się nie powieść.

Bit CAL7 określa zakres pracy dla oscylatora. Ustawienie tego bitu na 0 daje najniższy zakres częstotliwości, ustawienie tego bitu na 1 daje najwyższy zakres częstotliwości. Te dwa zakresy częstotliwości zachodzą na siebie, innymi słowy ustawienie OSCCAL = 0x7F da wyższą częstotliwość od OSCCAL = 0x80.

Bity CAL6:0 są używane do dostrojenia częstotliwości wewnątrz wybranego zakresu. Ustawienie ich na 0x00 da najniższą częstotliwość w tym zakresie, a ustawienie 0x7F da częstotliwość najwyższą zakresu.

Aby zapewnić stabilną pracę mikrokontrolera wartość kalibracyjna powinna być zmieniana małymi porcjami. Zmiana w częstotliwości większa od 2% pomiędzy dwoma kolejnymi taktami może prowadzić do nieokreślonego zachowania. Zmiany w OSCCAL nie powinny przekraczać 0x20 dla każdej kalibracji. Wymaga się, aby mikrokontroler był utrzymywany w stanie resetu podczas takich zmian w częstotliwości zegarowej.

Zakres częstotliwości wewnętrznego oscylatora

Wartość
OSCCAL
Najniższa częstotliwość w odniesieniu do częstotliwości nominalnej Najwyższa częstotliwość w odniesieniu do częstotliwości nominalnej
0x00 50% 100%
0x3F 75% 150%
0x7F 100% 200%

CLKPR – Clock Prescale Register – Rejestr preskalera zegara

Bit 7 6 5 4 3 2 1 0  
0x26 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 0 0 0 0  

Bit 7 – CLKPCE: Clock Prescaler Change Enable – Uaktywnienie możliwości wprowadzania zmian w ustawieniach preskalera

Do bitu CLKPCE należy wpisać logiczną jedynkę, aby mieć możliwość zmian bitów CLKPS. Bit CLKPCE jest uaktualniany tylko wtedy, gdy w tym samym czasie do pozostałych bitów w rejestrze CLKPR są wpisywane same zera. CLKPCE jest zerowany sprzętowo po czterech cyklach od momentu zapisu lub przy zapisie bitów CLKPS. Nadpisanie bitu CLKPCE w tym przedziale czasu ani nie wydłuża tego przedziału, ani nie zeruje bitu CLKPCE.

Bity 6:4 – Zarezerwowane

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

Bity 3:0 – CLKPS3:0: Clock Prescaler Select Bits 3 - 0 – Bity wyboru ustawienia preskalera zegara

Te bity definiują współczynnik podziału pomiędzy wybranym źródłem zegarowym a wewnętrznym zegarem systemowym. Bity można zapisywać w trakcie pracy mikrokontrolera, aby zmieniać częstotliwość zegara w celu dostosowania jej do wymagań aplikacji. Ponieważ dzielnik ten dzieli główne źródło zegarowe w mikrokontrolerze, to szybkość wszystkich synchronicznych układów peryferyjnych dostosowuje się do użytego współczynnika podziału. Współczynniki te są podane w tabeli poniżej.

Aby uniknąć niezamierzonych zmian częstotliwości zegarowej, należy zastosować specjalną procedurę przy zmianie bitów CLKPS:

  1. Zapisz logiczną jedynkę do bitu CLKPCE, a do pozostałych bitów tego rejestru wpisz same zera (wartość 0x80 dla CLKPR).
  2. W ciągu czterech cykli wpisz pożądaną wartość do bitów CLKPS, wpisując jednocześnie  zero do bitu CLKPCE.

Przy zmianie ustawień preskalera przerwania muszą być wyłączone, aby upewnić się, iż procedura zapisu do rejestru CLKPR nie zostanie przerwana w przeznaczonym dla niej przedziale czasu. Aplikacja musi zapewnić, że zostanie wybrany wystarczający współczynnik, jeśli wybrane źródło zegarowe posiada wyższą częstotliwość niż maksymalna dla mikrokontrolera w bieżących warunkach pracy. Mikrokontroler jest sprzedawany z zaprogramowanym bitem bezpiecznikowym CKDIV8.

Ustawienia preskalera zegara systemowego

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Współczynnik podziału
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
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.