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

ATtiny20

System zegarowy

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

System zegarowy

Poniższy rysunek przedstawia główne systemy zegarowe oraz ich podział w mikrokontrolerze ATtiny20. Nie wszystkie zegary muszą być aktywne w danym czasie. Aby zmniejszyć pobór prądu, zegary nieużywanych modułów mogą zostać wstrzymane przez użycie różnych trybów uśpienia oraz bitów w rejestrze ograniczania pobieranej energii, jak opisano w rozdziale " Zarządzanie zasilaniem i tryby uśpienia". Oto szczegóły systemu zegarowego:

obrazek

Na początek:  podrozdziału   strony 

Podsystemy zegarowe

Zegar mikroprocesora – clkCPU

Zegar CPU jest kierowany do części systemu zajmujących się działaniem rdzenia AVR. Przykładami takich modułów są zestaw rejestrów ogólnego przeznaczenia, rejestry systemowe i pamięć danych SRAM. Zatrzymanie zegara CPU blokuje wykonywanie ogólnych operacji i obliczeń w rdzeniu.

Zegar we/wy – clkI/O

Zegar we/wy jest używany przez większość modułów we/wy, takich jak timer/licznik. Zegar we/wy jest również używany przez moduł przerwań zewnętrznych, lecz weź pod uwagę, iż niektóre przerwania zewnętrzne są wykrywane przez asynchroniczną logikę, co pozwala wykrywać takie przerwania nawet przy zatrzymanym zegarze we/wy

Zegar pamięci nieulotnej – clkNVM

Zegar NVM steruje działaniem sterownika pamięci nieulotnej (ang. Non-Volatile Memory Controller). Zegar NVM jest zwykle aktywny równolegle z zegarem mikroprocesora.

Zegar przetwornika analogowo-cyfrowego – clkADC

Przetwornik A/C (ang. Analog to Digital Converter, ADC) posiada swój dedykowany zegar. Pozwala to zatrzymać zegary clkCPU i clkI/O w celu zmniejszenia zakłóceń generowanych przez sieci cyfrowe. W efekcie otrzymuje się dokładniejsze wyniki przetwarzania analogowo-cyfrowego.

Na początek:  podrozdziału   strony 

Źródła zegarowe

Wszystkie synchroniczne sygnały zegarowe są otrzymywane z głównego zegara. Układ mikrokontrolera posiada trzy alternatywne źródła dla głównego zegara, a mianowicie:

Kalibrowany oscylator wewnętrzny 8 MHz

Kalibrowany oscylator wewnętrzny dostarcza sygnału zegarowego o częstotliwości w przybliżeniu równej 8 MHz. Chociaż zegar ten jest zależny od napięcia i temperatury, to jednak może być bardzo dokładnie skalibrowany przez użytkownika.

Ten zegar można wybrać na zegar główny przez ustawienie bitów wyboru głównego zegara (ang. Clock Main Select bits) CLKMS[1:0] w rejestrze CLKMSR (ang. Clock Main Settings Register – Rejestr Ustawień Zegara Głównego) na 0b00. Po uaktywnieniu oscylator będzie pracował bez żadnych elementów zewnętrznych. Podczas resetowania, sieć logiczna mikrokontrolera ładuje bajt kalibracyjny do rejestru OSCCAL (ang. Oscillator Calibration Register – Rejestr Kalibracji Oscylatora) i w ten sposób automatycznie kalibruje oscylator.

Gdy oscylator jest używany jako zegar główny, oscylator licznika zegarowego wciąż będzie używany przez licznik zegarowy do odmierzania czasu do resetu mikrokontrolera.

Zegar zewnętrzny

Aby używać mikrokontroler z zewnętrznym źródłem zegara, wejście CLKI powinno być sterowane wg obrazka poniżej. Zegar zewnętrzny jest wybierany na zegar główny przez ustawienie bitów CLKMS[1:0] w rejestrze CLKMSR na 0b10.

obrazek

Gdy stosowany jest zegar zewnętrzny, należy unikać nagłych zmian w jego częstotliwości, aby zapewnić stabilne działanie mikrokontrolera. Zmiana częstotliwości większa niż 2% pomiędzy dwoma cyklami zegarowymi może prowadzić do niezdefiniowanego zachowania. Wymagane jest, aby mikrokontroler był utrzymywany w stanie resetu podczas takich zmian w częstotliwości zegarowej.

Wewnętrzny oscylator 128 kHz

Wewnętrzny oscylator 128 kHz jest oscylatorem o małym poborze prądu, który udostępnia zegar 128 kHz. Częstotliwość zależy od napięcia zasilającego, temperatury oraz indywidualnych różnic parametrów danej serii mikrokontrolerów. Zegar ten można wybrać jako zegar główny przez ustawienie bitów CLKMS[1:0] rejestru CLKMSR na 0b01.

Przełączanie źródła zegara

Źródło głównego zegara może być przełączone w czasie pracy mikrokontrolera za pomocą rejestru głównych ustawień zegara CLKMSR. Przy przełączaniu pomiędzy dowolnymi źródłami zegara, system zegarowy zapewnia, iż nie wystąpi żaden błąd w impulsach zegarowych zegara głównego.

Standardowe źródło zegara

Kalibrowany oscylator wewnętrzny 8 Mhz jest zawsze wybierany na zegar główny, gdy mikrokontroler został włączony lub zresetowany. Synchroniczny zegar systemowy jest głównym zegarem podzielonym przez 8, sterowanym przez preskaler zegara systemowego (ang. System Clock Prescaler). Bity wybierające preskaler zegara mogą być zapisane później w celu zmiany częstotliwości zegara systemu.

Na początek:  podrozdziału   strony 

Preskaler zegara systemowego

Zegar systemu jest otrzymywany z zegara głównego poprzez preskaler zegara systemowego (ang. System Clock Prescaler). Zegar systemowy może być dzielony przez ustawienie rejestru CLKPSR (ang. Clock Prescaler Register – Rejestr Preskalera Zegara). Preskaler zegara systemowego może być używany do zmniejszania poboru prądu w czasie, gdy występuje niskie zapotrzebowanie na moc obliczeniową, lub do ustawienia maksymalnej częstotliwości zegara systemu. Preskaler może być używany ze wszystkimi źródłami zegara głównego, wpływając na częstotliwość zegara mikroprocesora i wszystkich synchronicznych układów peryferyjnych.

Preskaler zegara systemowego może być używany do implementacji w czasie pracy mikrokontrolera zmian wewnętrznej częstotliwości zegarowej przy jednoczesnym zapewnieniu stabilnej pracy mikrokontrolera.

Przełączanie ustawień preskalera

Gdy przełączane są ustawienia preskalera, zapewnia on, że w zegarze systemowym nie pojawią się żadne błędy oraz że częstotliwość pośrednia nie będzie wyższa ani od częstotliwości odpowiadającej poprzedniemu ustawieniu, ani od częstotliwości zegarowej odpowiadającej nowemu ustawieniu.

Licznik szeregowy, na bazie którego oparty jest preskaler, pracuje przy częstotliwości zegara głównego, która może być wyższa od częstotliwości zegarowej CPU. 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 zostać dokładnie przewidziany.

Od czasu zapisu wartości CLKPS przełączenie na nową częstotliwość zajmuje T1 + T2 lub T1 + 2*T2. W tym czasie powstają dwie aktywne krawędzie impulsu zegara. Tutaj T1 jest poprzednim okresem zegara, a T2 jest okresem odpowiadającym nowemu ustawieniu preskalera.

Na początek:  podrozdziału   strony 

Uruchamianie

Uruchamianie po resecie

Wewnętrzny reset jest natychmiast aktywowany, gdy źródło resetu staje się aktywne. Reset wewnętrzny jest utrzymywany aż źródło resetu przestanie być aktywne i zostanie ukończona sekwencja restartu. Sekwencja restartu zawiera trzy poniższe kroki:

  1. W pierwszym kroku, gdy źródło resetu zostało zwolnione, rozpoczyna się odliczanie czasu do uruchomienia. Celem tego opóźnienia jest upewnienie się, że napięcie zasilające osiągnęło wystarczający poziom. Czas restartu po resecie jest odliczany z wykorzystaniem wewnętrznego oscylatora 128 kHz. W tabeli poniżej znajdują się szczegóły czasu uruchamiania po resecie.
    Zwróć uwagę, że rzeczywiste napięcie zasalające nie jest monitorowane przez logikę uruchamiania. Mikrokontroler będzie czekał, aż czas restartu po resecie upłynie, nawet jeśli zasilające go napięcie osiągnęło wystarczający poziom wcześniej.
  2. w drugim kroku następuje oczekiwanie na uruchomienie się oscylatora, który zapewnia, iż kalibrowany oscylator wewnętrzny osiągnie stabilny stan, zanim zostanie użyty do sterowania innymi elementami systemu. Oscylator ten musi wykonać minimalną liczbę cykli, zanim będzie można uznać go za stabilny. Szczegóły w tabeli poniżej.
  3. Ostatni krok przed zwolnieniem wewnętrznego resetu to załadowanie wartości kalibracyjnych i konfiguracyjnych z pamięci nieulotnej, aby poprawnie skonfigurować mikrokontroler. Szczegóły w tabeli poniżej.

Czas uruchamiania, gdy używany jest kalibrowany oscylator wewnętrzny.

Reset Oscylator Konfiguracja Całkowity czas uruchomienia
64 ms 6 cykli 21 cykli 64ms + 6 cykli oscylatora + 21 cykli zegara systemu(1)(2)
Uwagi: 1. Po włączeniu mikrokontrolera lub po resecie zegar systemowy zostaje automatycznie ustawiony na wewnętrzny oscylator kalibrowany 8MHz dzielony przez 8.
  2. Gdy jest aktywne wykrywanie spadków napięcia zasilającego, czas uruchomienia po resecie wynosi 128 ms po uruchomieniu mikrokontrolera.

Uruchamianie po trybie wyłączenia zasilania

Gdy następuje przebudzenie z trybu wyłączenia zasilania, zakłada się, że napięcie zasilające jest na wystarczającym poziomie i jedynie potrzebne jest opóźnienie na uruchomienie się oscylatora w celu zapewnienia jego stabilnej pracy. Czas uruchamiania oscylatora jest liczony wg wybranego zegara głównego i zależy on od tego wyboru.

Czas uruchamiania po wybudzeniu z trybu wyłączenia zasilania.

Oscylator Całkowity czas uruchomienia
6 cykli 6 cykli oscylatora(1)(2)
Uwagi: 1. Czas uruchamiania jest mierzony w cyklach oscylatora głównego zegara.
  2. Gdy używane jest programowe wyłączenie BOD, czas wybudzenia z trybu uśpienia wyniesie w przybliżeniu 60 μs.

Uruchamianie po trybie bezczynności, po trybie redukcji zakłóceń przy przetwarzaniu A/C, po trybie gotowości

Przy wybudzaniu z jednego z powyższych trybów uśpienia oscylator już pracuje i nie ma potrzeby wprowadzania opóźnień na jego uruchamianie.

Na początek:  podrozdziału   strony 

Opis rejestrów

CLKMSR – Clock Main Settings Register – Rejestr Ustawień Zegara Głównego

Bit 7 6 5 4 3 2 1 0  
0x37 - - - - - - CLKMS1 CLKMS0 CLKMSR
Zapis/Odczyt O O O O O O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:2 – Zarezerwowane

Te bity są zarezerwowane i  przy odczycie zawsze mają wartość 0.

Bity 1:0 – CLKMS[1:0]: Bity wyboru głównego zegara

Te bity wybierają źródło głównego zegara systemu. Bity można zapisywać w czasie działania programu w celu przełączenia tego źródła głównego zegara. System zegara zapewnia przełączenie na inne źródło sygnałów zegarowych bez zakłóceń. Poniższa tabela przedstawia ustawienia tych bitów oraz wybierane przez nie źródło głównego zegara:

CLKM1 CLKM0 Źródło głównego zegara
0 0 Wewnętrzny oscylator kalibrowany 8 MHz
0 1 Wewnętrzny oscylator 128 kHz (Oscylator licznika zegarowego)
1 0 Zegar zewnętrzny
1 1 Zarezerwowane

Aby uniknąć niezamierzonego przełączenia źródła głównego zegara, zmiana bitów CLKMS wymaga zabezpieczonego dostępu do tych bitów, który uzyskujesz następująco:

  1. Zapisz w rejestrze CCP sygnaturę, aby uaktywnić zmianę chronionego rejestru we/wy.
  2. W ciągu czterech cykli instrukcji zapisz bity CLKMS pożądaną wartością.

CLKPSR – Clock Prescaler Register – Rejestr Preskalera Zegara

Bit 7 6 5 4 3 2 1 0  
0x36 - - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPSR
Zapis/Odczyt O O O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 1 1  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane i  przy odczycie zawsze mają wartość 0.

Bity 3:0 – CLKPS[3:0]: Bity Wyboru Preskalera Zegara

Bity te definiują współczynnik podziału pomiędzy wybranym źródłem zegara a wewnętrznym zegarem systemowym. Można je zapisywać w czasie działania programu w celu zmieniania częstotliwości zegarowej i dopasowania jej do wymagań aplikacji. Gdy preskaler dzieli główny zegar dla mikrokontrolera, szybkość wszystkich synchronicznych elementów peryferyjnych jest zmieniana zgodnie z tym podziałem. Współczynniki podziału podane są w poniższej tabeli:

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 (standardowo)
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

Aby uniknąć niezamierzonych zmian częstotliwości zegarowej, należy zastosować dostęp chroniony do bitów rejestru CLKPSR:

  1. Zapisz w rejestrze CCP sygnaturę chronionego rejestru we/wy, aby uaktywnić zmianę chronionego rejestru we/wy.
  2. W ciągu czterech cykli instrukcji zapisz bity CLKPS pożądaną wartością.

Przy starcie bity CLKPS są resetowane do 0b0011, aby wybrać współczynnik podziału zegara równy 8. Jeśli wybrane źródło zegara ma częstotliwość wyższą od dozwolonej maksymalnej, aplikacja musi upewnić się, że zostanie zastosowany wystarczający współczynnik podziału. Aby upewnić się, iż procedura zapisu nie będzie przerwana, przerwania muszą być wyłączone przy zmianie ustawień preskalera.


OSCCAL – Oscillator Calibration Register – Rejestr Kalibracji Oscylatora

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

Bity 7:0 – CAL[7:0]: Wartość Kalibracyjna Oscylatora

Rejestr kalibracji oscylatora jest używany do regulacji częstotliwości wewnętrznego oscylatora kalibrowanego w celu usunięcia odchyłek częstotliwości. Zaprogramowana wartość jest automatycznie zapisywana do tego rejestru podczas resetowania układu, co ustawia częstotliwość skalibrowaną fabrycznie.

Oprogramowanie użytkownika może zapisać ten rejestr nową wartością w celu zmiany częstotliwości oscylatora. Oscylator może być kalibrowany na częstotliwości określone w rozdziale "Charakterystyki elektryczne". Kalibracja poza podany zakres nie jest gwarantowana. Bity CAL[7:0] są używane do strojenia częstotliwości oscylatora. Wartość 0x00 daje najniższą częstotliwość, a wartość 0xFF daje najwyższą częstotliwość.

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.