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

ATtiny2313A/4313

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 ATtiny2313A/4313. 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.

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 timery/liczniki i USART. Zegar we/wy używany jest również 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. Również zauważ, iż warunek startowy w module USI jest obsługiwany asynchronicznie, gdy zegar clkI/O jest zatrzymany, co pozwala na jego wykrywanie 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.

Na początek:  podrozdziału   strony 

Źródła zegarowe

Poniższa tabela przedstawia źródła zegarowe, z których może korzystać mikrokontroler ATtiny13. Źródła te wybierane są za pomocą bitów bezpiecznikowych CKSEL. Zegar z wybranego źródła jest podawany na wejście generatora zegarowego AVR, a stąd kierowany do odpowiednich modułów
Opcja zegarowa CKSEL3:0(1)
Zegar zewnętrzny 0000
Wewnętrzny oscylator kalibrowany 4 MHz 0010
Wewnętrzny oscylator kalibrowany 8 MHz 0100
Wewnętrzny oscylator  licznika zegarowego 128 kHz 0110
Zewnętrzny generator kwarcowy 1000-1111
Zarezerwowane 0001/0011/0101/0111

Nota: 1. Dla wszystkich bitów bezpiecznikowych "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany.

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 zależy od wartości napięcia zasilajacego:

Okres licznika zegarowego
(VCC = 5,0V)
Okres licznika zegarowego
(VCC = 3,0V)
Liczba cykli
4,1ms 4,3 ms 512
65ms 69 ms 8K (8192)
Na początek:  podrozdziału   strony 

Standardowe źródło zegarowe

Mikrokontroler jest sprzedawany z zaprogramowanymi bitami bezpiecznikowymi: CKSEL = “0100”, SUT = “10”, i CKDIV8 = "0". Dlatego standardowym ustawieniem zegara jest wewnętrzny oscylator RC pracujący z częstotliwością 8 MHz z długim czasem uruchamiania i wewnętrznym podziałem częstotliwości przez 8, co daje częstotliwość zegarową 1 MHz. Takie ustawienie standardowe zapewnia, iż wszyscy użytkownicy będą mogli wybrać pożądane źródło zegarowe za pomocą programatora ISP.

Przy mikrokontrolerach niskonapięciowych należy zauważyć, iż odprogramowanie bitu bezpiecznikowego CKDIV8 może skutkować przetaktowaniem. Przy niskich napięciach (poniżej 2,7V) mikrokontrolery mogą pracować z maksymalną częstotliwością 4 MHz, lecz skierowanie sygnału zegarowego z wewnętrznego oscylatora bezpośrednio do linii zegara systemowego wymusi pracę z częstotliwością 8 MHz.

Na początek:  podrozdziału   strony 

Oscylator kwarcowy

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

Może tutaj zostać wykorzystany albo kwarc, albo rezonator ceramiczny.

Zarówno dla kwarców jak i rezonatorów ceramicznych kondensatory C1 i C2 powinny mieć równe pojemności. Optymalna pojemność tych kondensatorów zależy od użytego kwarcu lub rezonatora, pojemności pasożytniczych oraz zakłóceń elektromagnetycznych ośrodka. Kilka wskazówek dotyczących wyboru kondensatorów do użytku z kwarcami znajdziesz w tabeli poniżej. Przy rezonatorach ceramicznych należy zawsze stosować wartości pojemności podane przez producenta.

Oscylator może pracować w trzech różnych trybach, każdy z nich zoptymalizowany dla określonego zakresu częstotliwości. Tryb pracy wybierany jest bitami bezpiecznikowymi CKSEL3..1.

CKSEL3..1 Zakres częstotliwości(1) w MHz Zalecany zakres pojemności kondensatorów C1 i C2 w pF
100(2) 0,4...0,9
101 0,9...3,0 12...22
110 3,0...8,0 12...22
111 8,0... 12...22
Noty: 1. Podane częstotliwości ją jedynie poglądowe. Rzeczywisty zakres należy określić.
  2. Tej opcji nie należy używać z kryształami kwarcowymi, tylko z rezonatorami ceramicznymi.

Bit bezpiecznikowy CKSEL0 wraz z bitami bezpiecznikowymi SUT1...0 wybierają czas uruchamiania, co pokazuje poniższa tabela:

CKSEL0 SUT1...0 Czas startu po trybie wyłączenia i oszczędzania energii Dodatkowe opóźnienie z resetu (VCC = 5,0V) Zalecane użycie
0 00 258 CK(1) 14 CK + 4,1ms Rezonator ceramiczny, szybko narastające zasilanie
0 01 258 CK(1) 14 CK + 65ms Rezonator ceramiczny, wolno narastające zasilanie
0 10 1K CK(2) 14 CK Rezonator ceramiczny, włączone BOD
0 11 1K CK(2) 14 CK + 4,1ms  
1 00 1K CK(2) 14 CK + 65ms  
1 01 16K CK 14 CK  
1 10 16K CK 14 CK + 4,1ms  
1 11 16K CK 14 CK + 65ms  
Noty: 1. Te opcje powinny być używane, gdy mikrokontroler nie pracuje w pobliżu swojej maksymalnej częstotliwości, oraz gdy przy starcie stabilność częstotliwości nie jest istotna dla aplikacji. Opcje te nie nadają się dla kryształów kwarcowych.
  2. Te opcje są przeznaczone do użytku z rezonatorami ceramicznymi i zapewniają one stabilność częstotliwości przy starcie. Można ich również używać z kwarcami, gdy częstotliwość pracy nie jest bliska częstotliwości maksymalnej mikrokontrolera oraz gdy stabilność częstotliwości przy starcie nie jest istotna dla aplikacji.
 
Na początek:  podrozdziału   strony 

Kalibrowany oscylator wewnętrzny

Kalibrowany oscylator wewnętrzny dostarcza źródła zegarowego o ustalonej częstotliwości 8,0 MHz. Częstotliwość ta osiąga swoją wartość nominalną przy napięciu 3V i w temperaturze 25°C. Jeśli częstotliwość wykracza poza specyfikację dla mikrokontrolera (zależy to od VCC), to należy zaprogramować bit bezpiecznikowy CKDIV8, aby wewnętrzny zegar był dzielony przez 8 podczas uruchamiania. Mikrokontroler jest sprzedawany z zaprogramowanym bitem bezpiecznikowym CKDIV8. Wybór wewnętrznego oscylatora na zegar systemu jest dokonywany poprzez zaprogramowanie bitów bezpiecznikowych CKSEL, jak pokazano w tabeli poniżej. Jeśli zostanie wybrany, będzie pracował bez żadnych elementów zewnętrznych.

Tryby pracy kalibrowanego oscylatora wewnętrznego

CKSEL3:0 Częstotliwość nominalna
0010 4,0 MHz
0100 8,0 MHz(1)

Nota: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.

Podczas resetu do rejestru OSCCAL zostaje sprzętowo załadowana informacja kalibracyjna, co powoduje automatyczne skalibrowanie oscylatora RC. Przy zasilaniu 3V i 25°C kalibracja daje częstotliwość z odchyłką ± 10% częstotliwości nominalnej. Przy użyciu metod kalibracyjnych możliwe jest osiągnięcie dokładności ± 2% przy danym napięciu VCC i temperaturze. Gdy ten oscylator jest używany jako zegar układu, oscylator licznika zegarowego wciąż będzie stosowany dla tego licznika oraz do odmierzania opóźnień przy resecie.

Po wyborze tego oscylatora, czasy uruchamiania są określane przez bity bezpiecznikowe SUT, jak pokazano w poniższej tabeli:

SUT1: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 Włączone BOD
01 6 CK 14 CK + 4,1 ms Szybko narastające zasilanie
10(1) 6 CK 14 CK + 65 ms Wolno narastające zasilanie
11 Zarezerwowane

Nota: 1. Mikrokontroler jest sprzedawany z ustawioną tą opcją.

Na początek:  podrozdziału   strony 

Zegar zewnętrzny

Aby sterować mikrokontroler zewnętrznym źródłem zegarowym, sygnał zegara należy doprowadzić do końcówki XTAL1, jak na poniższym rysunku. Aby mikrokontroler działał z zegarem zewnętrznym, bity bezpiecznikowe CKSEL muszą być zaprogramowane na “0000”.

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

Częstotliwość zegara z kryształu kwarcowego

CKSEL3...0 Zakres częstotliwości
0000 - 0001 0 - 16 MHz
SUT1:0 Czas uruchamiania po wybudzeniu z trybu wyłączenia/oszczędzania Dodatkowe opóźnienie z resetu Zalecane zastosowanie
00 6 CK 14 CK Włączone BOD
01 6 CK 14 CK + 4,8 ms Szybko narastające zasilanie
10 6 CK 14 CK + 65 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.

Na początek:  podrozdziału   strony 

Wewnętrzny oscylator 128 kHz

Jest to oscylator o niskim poborze energii, który dostarcza zegara 128 kHz. Częstotliwość nominalna jest osiągana przy 3V i w temperaturze 25°C. Zegar ten można wybrać na zegar systemowy przez zaprogramowanie bitów bezpiecznikowych CKSEL na 0110. Gdy zostanie wybrane to źródło zegarowe, czasy uruchamiania są określane przez bity bezpiecznikowe SUT, jak pokazano w poniższej tabeli:

SUT1:0 Czas uruchamiania po wybudzeniu z trybu wyłączenia/oszczędzania 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
Na początek:  podrozdziału   strony 

Preskaler zegara systemowego

Zegar systemowy mikrokontrolera ATtiny2313A/4313 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, clkCPU i clkFLASH są dzielone przez współczynnik podany w tabeli w opisie rejestru CLKPR.

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.

Aby uniknąć niezamierzonych zmian częstotliwości zegarowej, należy postępować wg specjalnej procedury przy zmianie stanu bitów CLKPS:

  1. Zapisz stan 1 do bitu CLKPCE (ang. Clock Prescaler Change Enable, uaktywnienie zmiany ustawień preskalera zegara), a do wszystkich pozostałych bitów w rejestrze CLKPR wpisz zero.
  2. W ciągu czterech cykli procesora wpisz pożądaną wartość do CLKPS, wpisując jednocześnie zero do bitu CLKPCE.

Przerwania muszą zostać wyłączony przy zmianie ustawień preskalera, aby zagwarantować, iż procedura zapisu nie będzie przerywana. 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.

Na początek:  podrozdziału   strony 

Bufor wyjściowy zegara

Mikrokontroler może wyprowadzać zegar systemowy na końcówce CKOUT. Aby włączyć tę funkcję, należy zaprogramować bit bezpiecznikowy CKOUT. Ten tryb pracy przydaje się wtedy, gdy zegar układu musi sterować inne obwody w systemie.

Zauważ, iż zegar nie będzie wyprowadzany podczas resetu oraz normalna praca tej końcówki we/wy zostanie przejęta po zaprogramowaniu bitu bezpiecznikowego. Gdy zegar jest wyprowadzany na końcówce CKOUT, 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 systemowy po podziale częstotliwości 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 (0x51) - CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Zapis/Odczyt O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 Wartość kalibracyjna specyficzna dla mikrokontrolera  

Bit 7 – Zarezerwowany

Ten bit w ATtiny2313A/4313 jest zarezerwowany i przy odczycie daje zawsze wartość 0.

Bity 6:0 – CAL6:0: Oscillator Calibration Value – Wartość kalibracyjna oscylatora

Zapis bajtu kalibracyjnego pod ten adres wyreguluje wewnętrzny oscylator w celu usunięcia odchyłek generowanej częstotliwości spowodowanych rozrzutem parametrów przy produkcji. Jest to wykonywane automatycznie przy resetowaniu układu. Gdy rejestr OSCCAL ma wartość 0, to zostaje wybrana najniższa dostępna częstotliwość. Zapis niezerowej wartości do tego rejestru zwiększy częstotliwość wewnętrznego oscylatora. Zapis 0x7F da najwyższą możliwą częstotliwość.

Kalibrowany oscylator jest wykorzystywany przy odmierzaniu czasów dostępu do pamięci EEPROM oraz FLASH. Jeśli wykonywane są zapisy do EEPROM lub FLASH, nie kalibruj częstotliwości ponad 10% wartości nominalnej. W przeciwnym razie zapis do EEPROM lub FLASH może się nie powieść. Zwróć uwagę, iż oscylator ma w zamyśle być kalibrowany na częstotliwość 8,0 lub 4,0 MHz. Dostrojenie do innych częstotliwości nie jest gwarantowane, jak pokazuje tabela poniżej.

Aby zapewnić stabilne działanie mikrokontrolera, wartość kalibracyjna powinna być zmieniana małymi krokami. Odchyłka ponad 2% w częstotliwości od jednego cyklu do następnego może doprowadzić do nieprzewidywalnego 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 Prescaler Register – Rejestr preskalera zegara

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  

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.

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