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 oraz ich podział w mikrokontrolerze ATtiny4/5/9/10. 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:
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 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 NVM steruje działaniem sterownika pamięci nieulotnej (ang. Non-Volatile Memory Controller). Zegar NVM jest zwykle aktywny równolegle z zegarem mikroprocesora.
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.
Przetwornik A/C dostępny jest tylko w mikrokontrolerach ATtiny 5 i 10.
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.
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.
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 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.
Ź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.
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.
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.
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.
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:
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* |
* – po uruchomieniu
mikrokontrolera lub po resecie zegar systemowy jest
automatycznie
ustawiany na wewnętrzny oscylator kalibrowany 8 MHz
podzielony przez 8
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* |
* – czas startu jest mierzony cyklami oscylatora zegara głównego
Przy wybudzaniu z jednego z powyższych trybów uśpienia oscylator już pracuje i nie ma potrzeby wprowadzania opóźnień na jego uruchamianie.
Przetwornik analogowo-cyfrowy dostępny jest tylko w ATtiny 5/10.
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 |
Te bity są zarezerwowane i przy odczycie zawsze mają wartość 0.
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:
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 |
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 "Parametry 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ść (około 7,3 MHz), a wartość 0xFF daje najwyższą częstotliwość (około 8,1 MHz).
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 |
Te bity są zarezerwowane i przy odczycie zawsze mają wartość 0.
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:
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.
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.