Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Poniższy rysunek przedstawia główne systemy zegarowe w AVR oraz ich podział. Nie wszystkie zegary muszą być aktywne w danym czasie. W celu zmniejszenia poboru energii, zegary nieużywanych modułów mogą być zatrzymane przez użycie różnych trybów uśpienia, co opisuje następny rozdział.
Zegar mikroprocesora jest kierowany do części systemu związanych z działaniem rdzenia AVR. Przykładami takich modułów są zestaw rejestrów ogólnego przeznaczenia, rejestr stanu oraz pamięć danych zawierająca wskaźnik stosu. Zatrzymanie zegara mikroprocesora uniemożliwia wykonywanie przez rdzeń ogólnych operacji i obliczeń.
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ł przerwań zewnętrznych, lecz zauważ, iż niektóre z przerwań zewnętrznych są wykrywane przez logikę asynchroniczną, co pozwala je wykrywać nawet przy zatrzymanym zegarze we/wy.
Zegar FLASH kieruje pracą interfejsu FLASH. Zegar ten jest zwykle aktywny razem z zegarem mikroprocesora.
Przetwornik analogowo/cyfrowy pracuje w dedykowanej domenie zegarowej. Umożliwia to zatrzymanie mikroprocesora i zegarów we/wy w celu zmniejszenia poziomu zakłóceń generowanych przez obwody cyfrowe. Daje to dokładniejsze wyniki przetwarzania w przetworniku A/C.
Mikrokontroler posiada poniżej przedstawione opcje wyboru źródła zegara, wybierane za pomocą bitów bezpiecznikowych w pamięci FLASH. Zegar z wybranego źródła jest podawany na wejście generatora zegarowego AVR, a później kierowany do odpowiednich modułów.
Opcja taktowania kontrolera | CKSEL3:0(1) |
Zegar zewnętrzny | 0000 |
Zarezerwowane | 0001 |
Kalibrowany oscylator wewnętrzny 8 MHz | 0010 |
Zarezerwowane | 0011 |
Wewnętrzny oscylator 128 kHz | 0100 |
Zarezerwowane | 0101 |
Oscylator kwarcowy niskiej częstotliwości | 0110 |
Zarezerwowane | 0111 |
Oscylator kwarcowy/rezonator ceramiczny | 1000-1111 |
Uwaga: 1. Dla wszystkich bitów bezpiecznikowych "1" oznacza stan niezaprogramowany, a "0" zaprogramowany
Kolejne podrozdziały opisują różne warianty dla każdej opcji taktowania. Gdy mikroprocesor wychodzi z trybu wyłączenia, to wybrane źródło zegarowe wykorzystywane jest do odmierzania sekwencji startowej, zapewniając stabilną pracę oscylatora przed rozpoczęciem wykonywania instrukcji. Gdy mikroprocesor rozpoczyna działanie po resecie, zostaje dodane dodatkowe opóźnienie na ustabilizowanie się napięcia zasilającego przed podjęciem normalnej pracy. Oscylator licznika zegarowego jest używany do odmierzania w czasie rzeczywistym tej części czasu uruchamiania. Liczba taktów oscylatora licznika zegarowego dla każdego z okresów zliczania podaje poniższa tabelka:
Typowy czas zliczania | Liczba taktów |
4ms | 512 |
64ms | 8K (8192) |
Aby taktować mikrokontroler z zewnętrznego źródła zegarowego, końcówka CLKI powinna być sterowana wg poniższego rysunku. Aby mikroprocesor pracował na zegarze zewnętrznym, należy zaprogramować bity bezpiecznikowe CKSEL na “0000”.
Gdy to źródło zegarowe zostanie wybrane, czasy uruchamiania będą określane przez bity bezpiecznikowe SUT, co pokazuje poniższa tabelka:
SUT1:0 | Czas startu po trybie wyłączenia | Dodatkowe opóźnienie od resetu | Zalecane zastosowanie |
00 | 6 CK | 14CK | BOD włączone |
01 | 6 CK | 14CK + 4 ms | Szybko narastające napięcie zasilania |
10 | 6 CK | 14CK + 64 ms | Wolno narastające napięcie zasilania |
11 | Zarezerwowane |
Przy stosowaniu 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ęcej niż 2% z jednego taktu na następny może doprowadzić do nieprzewidywalnego zachowania. Podczas takich zmian częstotliwości zegarowej mikrokontroler musi być utrzymywany w stanie resetu. Zapamiętaj, iż preskaler zegara systemowego może być użyty do zaimplementowania zmian wewnętrznej częstotliwości zegarowej przy zapewnieniu stabilnej pracy. Zobacz do następnego podrozdziału.
Standardowo wewnętrzny oscylator dostarcza zegara 8 MHz. Pomimo zależności tego zegara od napięcia i temperatury, użytkownik może go bardzo dokładnie skalibrować. Mikrokontroler jest sprzedawany z zaprogramowanym bitem bezpiecznikowym CKDIV8. Więcej szczegółów znajdziesz w następnym podrozdziale.
Zegar można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych CKSEL wg poniższej tabelki:
CKSEL3:0 | Częstotliwość znamionowa |
0010(1) | 8,0 MHz |
Uwaga: 1. Mikrokontroler posiada tę opcję zaprogramowaną fabrycznie.
Jeśli zegar zostanie wybrany, to będzie pracował bez żadnych zewnętrznych elementów. Podczas resetu sprzętowo jest ładowana zaprogramowana wcześniej wartość kalibracyjna do rejestru OSCCAL, co automatycznie kalibruje oscylator RC. Dokładność tej kalibracji pokazuje poniższa tabelka:
Metoda kalibracji | Częstotliwość docelowa | VCC | Temperatura | Dokładność(1) |
Fabryczna | 8,0 MHz | 3V | 25°C | ±10% |
Użytkownika | Ustalona częstotliwość: 7,3 ... 8,1 MHz |
Ustalone napięcie w zakresie: 1,8 ... 5,5V(2) 2,7 ... 5,5V(3) |
Ustalona temperatura: od -40°C do +85°C |
±1% |
Uwagi: | 1. | Dokładność częstotliwości oscylatora w punkcie kalibracji (ustalona temperatura i ustalone napięcie zasilania) |
2. | Zakres napięć dla ATtiny24V/44V/84V. | |
3. | Zakres napięć dla ATtiny24/44/84. |
Przez zmianę rejestru OSCCAL można uzyskać wyższą dokładność kalibracji od kalibracji fabrycznej.
Gdy oscylator jest używany jako zegar układu, oscylator licznika zegarowego będzie wciąż używany dla timera tego licznika i przy odmierzaniu opóźnień przy resecie.
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:
Czasy startu przy zegarze 128 kHz.
SUT1:0 | Czas startu po trybie wyłączenia | Dodatkowe opóźnienie od resetu | Zalecane użycie |
00 | 6 CK | 14 CK(1) | Wyłączone BOD |
01 | 6 CK | 14 CK + 4 ms | Szybko narastające VCC |
10 | 6 CK | 14 CK + 64 ms | Wolno narastające VCC |
11 | Zarezerwowane |
Uwaga: | 1. | Jeśli jest zaprogramowany bit bezpiecznikowy RSTDISBL, to ten czas startu zostaje zwiększony do 14CK + 4 ms, aby umożliwić wejście w tryb programowania. |
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 włą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 |
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(3) | 14CK | Rezonator ceramiczny, włączone BOD |
0 | 11 | 1K CK(3) | 14CK + 4 ms | Rezonator ceramiczny, szybko narastające VCC |
1 | 00 | 1K CK(3) | 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 |
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.
W mikrokontrolerach niskonapięciowych (ATtiny24V/44V/84V) należy zwrócić uwagę, iż przeprogramowanie bitu bezpiecznikowego CKDIV8 może spowodować przetaktowanie. Przy niskich napięciach (poniżej 2,7V) maksymalna częstotliwość pracy wynosi 4 MHz, lecz skierowanie sygnału zegarowego z wewnętrznego oscylatora bezpośrednio na linię zegara systemowego spowoduje pracę mikrokontrolera z częstotliwością 8 MHz.
Częstotliwość zegara systemowego ATtiny24/44/84 można podzielić za pomocą ustawień rejestru preskalera zegara CLKPR. Cecha ta może zostać użyta do zmniejszenia poboru prądu, gdy występuje niskie zapotrzebowanie na moc przetwarzania. Można to zrobić ze wszystkimi opcjami źródeł zegarowych i wpłynie to na częstotliwość zegarową mikroprocesora oraz synchronicznych peryferiów. Zegary clkI/O, clkADC, clkCPU i clkFLASH są dzielone przez odpowiedni współczynnik.
Gdy przełącza się ustawienia preskalera, to zapewnia on, iż sygnał zegarowy nie będzie posiadał żadnych niepożądanych zakłóceń, ani częstotliwości pośredniej wyższej od poprzednio ustawionej i od nowo ustawionej.
Licznik implementujący preskaler pracuje z 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 dokładny czas przełączenia z jednego podziału zegara na inny nie może być dokładnie przewidziany. Od momentu zapisu wartośc CLKPS i w rejestrze CLKPR upływa od T1 + T2 do T1 + 2*T2 zanim nowa częstotliwość się uaktywni (T1 – poprzedni okres zegara, T2 nowy okres zegara). W tym przedziale czasu powstają dwa aktywne zbocza zegarowe.
Aby uaktywnić to wyjście, należy zaprogramować bit bezpiecznikowy CKOUT. Tryb ten nadaje się do sterowania zegarem układu innych elementów systemu. Zauważ, iż zegar ten nie będzie wyprowadzany podczas resetu, a normalne działanie końcówki we/wy zostanie przechwycone przez zegar po zaprogramowaniu bitu bezpiecznikowego. Gdy zegar jest wyprowadzany na CKOUT, wciąż można wybrać dowolne źródło zegarowe, łącznie z wewnętrznym oscylatorem RC. Jeśli używany jest preskaler zegara systemowego, to wyprowadzany jest zegar o odpowiednio podzielonej częstotliwości.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 (0x51) | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Zapis/Odczyt | O/Z | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | Wartość kalibracyjna specyficzna dla mikrokontrolera |
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 | 3V | 25°C | ±10% |
Kalibracja użytkownika | Ustalona w zakresie: 7,3 – 8,1 MHz |
Ustalone w zakresie: 1,8 – 5,5V(2) 2,7 – 5,5V(3) |
Ustalona w zakresie: -40°C do +85°C |
±1% |
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.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 (0x46) | 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 |
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.
Te bity w ATtiny24/44/88 są zarezerwowane i przy odczycie dają zawsze wartość 0.
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ę zapisu przy zmianie bitów CLKPS:
Przerwania muszą być wyłączone przy zmianie ustawień preskalera, aby zagwarantować, iż powyższa procedura zapisu nie będzie przerwana.
Bit bezpiecznikowy CKDIV8 określa początkową wartość bitów CLKPS. Jeśli CKDIV8 jest niezaprogramowany, to bity CLKPS zostaną zresetowane na “0000”. Jeśli bit CKDIV8 jest zaprogramowany, bity CLKPS są resetowane na “0011”, dając przy starcie współczynnik podziału 8. Ta cecha powinna zostać użyta, jeśli wybrane źródło zegarowe ma wyższą częstotliwość niż maksymalna częstotliwość mikrokontrolera w bieżących warunkach pracy. Zwróć uwagę, że do bitów CLKPS można wpisać dowolną wartość bez względu na ustawienie bitu bezpiecznikowego CKDIV8. Program aplikacji musi zapewnić wybór wystarczającego współczynnika podziału, jeśli wybrane źródło zegarowe ma wyższą częstotliwość od maksymalnej częstotliwości pracy mikrokontrolera. 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 |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.