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

ATmega64

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

Na początek:  podrozdziału   strony 

Źródła zegarowe

Mikrokontroler posiada pokazane poniżej źródła zegarowe, wybierane bitami bezpiecznikowymi FLASH. Zegar z wybranego źródła jest podawany na wejście generatora zegarowego AVR, a następnie przekazywany do odpowiednich modułów.
Opcja taktowania mikrokontrolera CKSEL3...0
Zewnętrzny kwarc/rezonator ceramiczny 1111 - 1010
Zewnętrzny kwarc niskiej częstotliwości 1001
Zewnętrzny oscylator RC 1000 - 0101
Wewnętrzny kalibrowany oscylator RC 0100 - 0001
Zegar zewnętrzny 0000

Uwaga: 1. Dla wszystkich bitów bezpiecznikowych "0" oznacza stan zaprogramowania, a "1" stan niezaprogramowania.

W następnych podrozdziałach są opisane różne wybory dla każdej opcji zegarowej. Gdy mikroprocesor wybudza się z trybu wyłączenia lub z trybu oszczędzania energii, wybrane źródło zegarowe jest wykorzystywane do odmierzania czasu uruchomienia, zapewniając stabilną pracę oscylatora przed rozpoczęciem wykonywania instrukcji. Gdy mikroprocesor wznawia pracę po resecie, wprowadzane jest dodatkowe opóźnienie, które pozwala napięciu zasilającemu osiągnąć stabilny poziom przed rozpoczęciem normalnego działania. Do odmierzania tej rzeczywistej części czasu startowego wykorzystywany jest oscylator licznika zegarowego. Liczba cykli tego oscylatora używana dla każdego z okresów jest pokazana w tabelce poniżej. Częstotliwość oscylatora licznika zegarowego zależy od napięcia, co pokazano w rozdziale "Typowe charakterystyki  – TA = -40°C do 85°C".

Typowy okres zliczania (VCC = 5,0 V) Typowy okres zliczania (VCC = 3,0 V) Liczba taktów
4,1ms 4,3ms 4K (4.096)
65ms 69ms 64K (65.536)
Na początek:  podrozdziału   strony 

Standardowe źródło zegarowe

Mikrokontroler sprzedawany jest z bitami bezpiecznikowymi ustawionymi na: CKSEL = “0001” i SUT = “10”. Stąd standardowe ustawienie źródła zegarowego brzmi: wewnętrzny oscylator RC z najdłuższym czasem uruchamiania. To standardowe ustawienie zapewnia. iż wszyscy użytkownicy będą mogli ustawić pożądane źródło zegara za pomocą programatora wbudowanego lub równoległego.
Na początek:  podrozdziału   strony 

Kwarc

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. Bit bezpiecznikowy CKOPT wybiera pomiędzy dwoma różnymi trybami wzmacniacza oscylatora. Gdy jest zaprogramowany, to sygnał wyjściowy będzie oscylował pomiędzy 0V a VCC. Tryb ten jest odpowiedni do pracy w bardzo zakłóconym środowisku lub gdy wyjście z XTAL2 napędza drugi bufor zegarowy. Ten tryb posiada szeroki zakres częstotliwości. Gdy bit bezpiecznikowy CKOPT jest niezaprogramowany, to wyjście oscylatora ma mniejszą amplitudę przebiegu, co znacząco zmniejsza pobór prądu. Tryb posiada ograniczony zakres częstotliwości i nie można go używać do napędzania innych buforów zegarowych.

Dla rezonatorów maksymalna częstotliwość wynosi 8MHz przy niezaprogramowanym bicie bezpiecznikowym CKOPT i 16MHz przy zaprogramowanym tym bicie. 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.

Oscylator może pracować w trzech różnych trybach, z których każdy został zoptymalizowany dla określonego zakresu częstotliwości. Tryb pracy jest wybierany za pomocą bitów bezpiecznikowych CKSEL3...1 jak pokazuje poniższa tabelka:

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

Bit bezpiecznikowy CKSEL0 wraz z SUT1...0 wybiera czasy uruchamiania mikrokontrolera, jak pokazuje tabelka poniżej.

CKSEL0 SUT1:0 Czas startu po trybach wyłączenia i oszczędzania Dodatkowe opóźnienie od resetu (VCC = 5,0 V) Zalecane użycie
0 00 258 CK(1) 4,1 ms Rezonator ceramiczny, szybko narastające VCC
0 01 258 CK(1) 65 ms Rezonator ceramiczny, wolno narastające VCC
0 10 1K CK(2) Rezonator ceramiczny, włączone BOD
0 11 1K CK(2) 4,1 ms Rezonator ceramiczny, szybko narastające VCC
1 00 1K CK(2) 65 ms Rezonator ceramiczny, wolno narastające VCC
1 01 16K CK Oscylator kwarcowy, włączone BOD
1 10 16K CK 4,1 ms Oscylator kwarcowy, szybko narastające VCC
1 11 16K CK 65 ms Oscylator kwarcowy, wolno narastające VCC
Uwagi: 1. 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.
  2. Te opcje są przeznaczone do użytku z rezonatorami kwarcowymi i zapewniają stabilność częstotliwości przy starcie. Można ich również użyć z kryształami, gdy mikrokontroler nie pracuje blisko swojej częstotliwości maksymalnej i stabilność częstotliwości przy starcie nie jest istotna dla aplikacji.
Na początek:  podrozdziału   strony 

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 ‘1001’. Kwarc należy podłączyć zgodnie z rysunkiem poniżej.  Przez zaprogramowanie bitu bezpiecznikowego CKOPT użytkownik może uaktywnić wewnętrzne kondensatory na wejściach XTAL1 i XTAL2, co usunie potrzebę stosowania kondensatorów zewnętrznych. Wewnętrzne kondensatory posiadają pojemności 36pF.

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 trybach wyłączenia i oszczędzania Dodatkowe opóźnienie od resetu (VCC = 5,0 V) Zalecane użycie
00 1K CK(1) 4,1 ms Szybko narastające VCC lub włączone BOD
01 1K CK(1) 65 ms Wolno narastające VCC
10 32K CK 65 ms Stabilna częstotliwość przy starcie
11 Zarezerwowane
Uwaga: 1. Te opcje można stosować, jeśli stabilność częstotliwości przy starcie nie jest istotna.
Na początek:  podrozdziału   strony 

Zewnętrzny oscylator RC

Dla aplikacji nieczułych na dokładne odmierzanie czasu można użyć zewnętrznej konfiguracji RC pokazanej na poniższym rysunku. Częstotliwość jest zgrubnie określona wzorem:

Kondensator C powinien posiadać pojemność co najmniej 22 pF. Przez zaprogramowanie bitu bezpiecznikowego CKOPT użytkownik może uaktywnić wewnętrzny kondensator 36 pF pomiędzy końcówkami XTAL1 i GND, co usunie potrzebę stosowania kondensatora zewnętrznego.

Oscylator może pracować w czterech różnych trybach, z których każdy został zoptymalizowany dla określonego zakresu częstotliwości. Tryb pracy wybierany jest przez bity bezpiecznikowe CKSEL3...0 wg poniższej tabelki.

CKSEL3...0 Zakres częstotliwości (MHz)
0101 0,1 - 0,9
0110 0,9 - 3,0
0111 3,0 - 8,0
1000 8,0 - 12.0

Gdy ten oscylator zostanie wybrany, czasy startowe są określane przez bity bezpiecznikowe SUT wg poniższej tabelki.

SUT1...0 Czas startu po trybach wyłączenia i oszczędzania Dodatkowe opóźnienie od resetu (VCC = 5,0 V) Zalecane użycie
00 18 CK BOD włączone
01 18 CK 4,1 ms Szybko narastające napięcie zasilania
10 18 CK 65 ms Wolno narastające napięcie zasilania
11 6CK(1) 4,1 ms Szybko narastające napięcie zasilania lub włączone BOD
Uwaga: 1. Tej opcji nie należy stosować, gdy mikrokontroler nie pracuje w pobliżu swojej częstotliwości maksymalnej
Na początek:  podrozdziału   strony 

Wewnętrzny kalibrowany oscylator RC

Wewnętrzny kalibrowany oscylator RC udostępnia zegar o ustalonej częstotliwości 1,0 MHz, 2,0 MHz, 4,0 MHz lub 8,0 MHz. Wszystkie te częstotliwości są wartościami znamionowymi przy 5V i 25°C. Zegar ten można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych zgodnie z tabelką poniżej. Jeśli zostanie wybrany, będzie pracował bez zewnętrznych elementów. Gdy jest używana ta opcja zegarowa, bit bezpiecznikowy CKOPT powinien zawsze być niezaprogramowany. Podczas resetu sprzętowo ładowany jest bajt kalibracyjny 1 MHz do rejestru OSCCAL, co automatycznie kalibruje ten oscylator. Przy zasilaniu 5V w temperaturze 25°C i wybranej częstotliwości oscylatora 1,0 MHz kalibracja ta ustawia częstotliwość roboczą z odchyłką ±3% od częstotliwości znamionowej. Używając metod kalibracji w czasie pracy można osiągnąć dokładność ±1% przy danych VCC i temperaturze. Gdy ten oscylator będzie używany jako zegar układu, to oscylator licznika zegarowego wciąż będzie stosowany dla licznika zegarowego i odmierzania czasów opóźnień po resecie. Więcej informacji na ten temat znajdziesz w podrozdziale "Bajt kalibracyjny".
CKSEL3...0 Częstotliwość znamionowa (MHz)
0001(1) 1,0
0010 2,0
0011 4,0
0100 8,0
Uwaga: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.

Gdy jest wybrany ten oscylator, to czasy uruchamiania są określane przez bity bezpiecznikowe SUT pokazane w tabelce poniżej. Końcówki XTAL1 i XTAL2 powinny zostać zostawione jako niepodłączone.

SUT1...0 Czas startu po trybach wyłączenia i oszczędzania Dodatkowe opóźnienie od resetu (VCC = 5,0 V) Zalecane użycie
00 6 CK BOD włączone
01 6 CK 4,1 ms Szybko narastające napięcie zasilania
10(1) 6 CK 65 ms Wolno narastające napięcie zasilania
11 Zarezerwowane
Uwaga: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.
Na początek:  podrozdziału   strony 

Zegar zewnętrzny

Aby taktować mikrokontroler zegarem zewnętrznym, należy sygnał zegarowy podawać na końcówkę XTAL1 wg poniższego rysunku. Aby mikrokontroler wykorzystywał ten zegar, należy zaprogramować bity bezpiecznikowe CKSEL na “0000”. Przez zaprogramowanie bitu bezpiecznikowego CKOPT użytkownik może uaktywnić wewnętrzne kondensatory 36pF pomiędzy końcówkami XTAL1 i GND oraz XTAL2 i GND.

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

SUT1...0 Czas startu po trybach wyłączenia i oszczędzania Dodatkowe opóźnienie od resetu (VCC = 5,0 V) Zalecane użycie
00 6 CK BOD włączone
01 6 CK 4,1 ms Szybko narastające napięcie zasilania
10 6 CK 65 ms Wolno narastające napięcie zasilania
11 Zarezerwowane

Gdy stosuje się zegar zewnętrzny, wymagane jest unikanie nagłych zmian w stosowanej częstotliwości zegarowej w celu zapewnienie stabilnej pracy mikrokontrolera. Zmiana w częstotliwości większa niż 2% z jednego cyklu na drugi może prowadzić do nieokreślonego zachowania. Wymagane jest utrzymywanie mikrokontrolera w stanie resetu podczas takich zmian w częstotliwości zegarowej.

Na początek:  podrozdziału   strony 

Oscylator timera/licznika

W mikrokontrolerach AVR z końcówkami oscylatora timera/licznika (TOSC1 i TOSC2) kryształ kwarcu podłączany jest bezpośrednio pomiędzy tymi końcówkami. Nie są potrzebne zewnętrzne kondensatory. Oscylator jest zoptymalizowany do użytku z kwarcem zegarkowym 32,768 kHz. Podłączanie zewnętrznego źródła zegarowego do końcówki TOSC1 nie jest zalecane.

Uwaga: Oscylator timera/licznika używa tego samego rodzaju kwarcu co oscylator niskiej częstotliwości i wewnętrzne kondensatory posiadają tę samą pojemność znamionową 36 pF.

Na początek:  podrozdziału   strony 

Opis rejestrów

XDIV – XTAL Divide Control Register – Rejestr sterujący podziałem XTAL

Rejestr XDIV używany jest do podziału częstotliwości zegara źródłowego przez liczbę z zakresu od 2 do 129. Funkcję tę można wykorzystywać do zmniejszania poboru energii, gdy wymagania na moc obliczeniową są niskie.

Bit 7 6 5 4 3 2 1 0  
0x3C (0x5C) XDIVEN XDIV6 XDIV5 XDIV4 XDIV3 XDIV2 XDIV1 XDIV0 XDIV
Zapis/Odczyt O/Z 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  

Bit 7 – XDIVEN: XTAL Divide Enable – Włączenie podziału XTAL

Gdy bit XDIVEN zostanie zapisany stanem 1, częstotliwość zegarowa mikroprocesora i wszystkich peryferiów (clkI/O, clkADC, clkCPU, clkFLASH) jest dzielona przez dzielnik określony ustawieniem bitów XDIV6 - XDIV0. Bit ten można zapisywać w czasie działania programu, aby zmieniać częstotliwość zegara do potrzeb aplikacji.

Bity 6:0 – XDIV6:XDIV0: XTAL Divide Select Bits 6 - 0 – Bity 6 - 0 wyboru podziału XTAL

Bity te definiują dzielnik stosowany do podziału częstotliwości zegarowej, gdy zostaje ustawiony bit XDIVEN. Jeśli wartość tych bitów oznaczymy jako d, to następujący wzór definiuje częstotliwość wynikową mikroprocesora i peryferiów fCLK:

Wartość tych bitów można zmieniać tylko wtedy, gdy bit XDIVEN ma stan zero. Gdy bit XDIVEN jest zapisywany jedynką, to wartość wpisywana jednocześnie do bitów XDIV6:XDIV0 jest przyjmowana jako dzielnik. Gdy XDIVEN jest zapisywany zerem, to wartość wpisywana równolegle do XDIV6:XDIV0 jest odrzucana. Ponieważ dzielnik dzieli wejście głównego zegara dla mikrokontrolera, to prędkość wszystkich układów peryferyjnych zostanie zredukowana, gdy ten dzielnik zostanie użyty.

Uwaga: Gdy dzielony jest zegar systemowy, timer/licznik 0 może być używany tylko z zegarem asynchronicznym. Częstotliwość tego zegara asynchronicznego musi być niższa niż 1/4 częstotliwości skalowanego w dół źródła zegarowego. W przeciwnym razie przerwania mogą być tracone i dostęp do rejestrów timera/licznika 0 może się nie powieść.


OSCCAL – Oscillator Calibration Register – Rejestr kalibracyjny oscylatora

Bit 7 6 5 4 3 2 1 0  
(0x6F) 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 Wartość kalibracyjna specyficzna dla mikrokontrolera  

Rejestr OSCCAL jest niedostępny w trybie kompatybilności z ATmega103.

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

Zapis bajtu kalibracyjnego pod ten adres spowoduje dostrojenie wewnętrznego oscylatora w celu usunięcia różnic produkcyjnych z częstotliwości oscylatora. Podczas resetu wartość kalibracyjna dla 1 MHz przechowywana w starszym bajcie rzędu sygnatury (adres 0x00) jest automatycznie ładowana do rejestru OSCCAL. Jeśli wewnętrzny oscylator RC jest używany przy innych częstotliwościach, to wartość kalibracyjna musi zostać wpisana ręcznie. Jest to wykonywane przez odczytanie najpierw wiersza sygnatury przez programistę, a następnie zapisanie wartości kalibracyjnych we FLASH lub w EEPROM. Później wartość ta może być odczytywana przez program i ładowana do rejestru OSCCAL. Gdy OSCCAL ma zawartość zero, to zostaje wybrana najniższa dostępna częstotliwość. Zapis niezerowej wartości do tego rejestru zwiększy częstotliwość wewnętrznego oscylatora. Zapis 0xFF do tego rejestru daje najwyższą dostępną częstotliwość. Oscylator kalibrowany jest wykorzystywany przy odmierzaniu czasów dostępu do EEPROM i do FLASH. Jeśli w aplikacji zapisywana jest pamięć EEPROM lub FLASH, nie kalibruj powyżej 10% od częstotliwości znamionowej. W przeciwnym razie EEPROM lub FLASH mogą zawieść. Zauważ, iż zamiarem kalibracji jest ustawienie częstotliwości znamionowej na 1,0 MHz, 2,0 MHz, 4,0 MHz lub 8,0 MHz. Dostrojenie do innych wartości nie jest gwarantowane, co zaznaczono w poniższej tabelce.

Wartość OSCCAL Minimalna częstotliwość jako procent częstotliwości znamionowej (%) Maksymalna częstotliwość jako procent częstotliwości znamionowej (%)
0x00 50 100
0x7F 75 150
0xFF 100 200
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.