Mikrokontrolery AVR XMEGA w praktyce, część 8. Generatory RC

W poprzedniej części kursu przedstawiłem ogólnie, jakie mikrokontrolery XMEGA mają dostępne do wybory generatory sygnału zegarowego i jakie mamy dostępne możliwości. W tym odcinku, korzystając z modułu prototypowego X3-DIL64 z Leon Instruments, dostępnego w ofercie KAMAMI, zobaczymy, jak uruchamia się wbudowane generatory RC. Podczas ćwiczeń zbudujemy układ, którego schemat przedstawiono na rysunku 1 – schemat ten będzie przydatny dla wszystkich części kursu od 7 do 10. Pliki z kodami źródłowymi można pobrać na dole strony.

Rys. 1. Schemat układu demonstracyjnego
Wewnętrzne generatory RC 32 MHz i 2 MHz
Po wciśnięciu przycisku FLIP, podłączonego na płytce X3-DIL64 z Leon Instruments do pinu E5, zostanie wywołana funkcja Osc32MHz(), uruchamiająca wbudowany generator 32 MHz.
Bardzo miło, że projektanci mikrokontrolerów XMEGA udostępnili nam wbudowany generator, który bez podłączania żadnych dodatkowych elementów umożliwi osiągnięcie maksymalnej mocy obliczeniowej. Poza tym, generator RC nie wymaga żadnej konfiguracji, więc możemy od razu przystąpić do jego uruchomienia. Aby to zrobić, musimy wpisać odpowiednią wartość do rejestru kontrolnego oscylatora, a mianowicie do OSC.CTRL. Zobaczmy fragment dokumentacji, przedstawiony na rysunku 2.

Rys. 2. Rejestr OSC.CTRL oraz generatory dostępne do wyboru
…zatem aby uruchomić generator 32 MHz, powinniśmy do rejestru OSC.CTRL wpisać wartość OSC_RC32MEN_bm. Zwróćmy uwagę, że dokumentacja wyraźnie ostrzega nas, że musimy poczekać aż oscylator się ustabilizuje, zanim wykorzystamy go jako źródło sygnału zegarowego. W tym celu musimy w pętli sprawdzać rejestr OSC.STATUS i czekać tak długo, aż bit OSC_RC32MRDY_bm przyjmie wartość 1.
void Osc32MHz(void) {
OSC.CTRL = OSC_RC32MEN_bm; // włączenie oscylatora 32MHz
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // czekanie na ustabilizowanie się generatora
CPU_CCP = CCP_IOREG_gc; // odblokowanie zmiany źródła sygnału zegarowego
CLK.CTRL = CLK_SCLKSEL_RC32M_gc; // zmiana źródła sygnału zegarowego na RC 32MHz
LcdClear(); // czyszczenie wyświetlacza
Lcd("Wewn RC 32MHz"); // komunikat o uruchomieniu generatora
}
Po wykonaniu tej funkcji, na wyświetlaczu powinien pojawić się komunikat o taktowaniu procesora zegarem 32MHz, a dioda podłączona do pinu E0 powinna migać wyraźnie szybciej.
Uruchomienie wbudowanych generatorów 2 MHz oraz 32 kHz wykonuje się bardzo podobnie – wystarczy zmienić tylko RC32M na RC2M lub RC32K.
void Osc2MHz(void) {
OSC.CTRL = OSC_RC2MEN_bm; // włączenie oscylatora 2MHz
while(!(OSC.STATUS & OSC_RC2MRDY_bm)); // czekanie na ustabilizowanie się generatora
CPU_CCP = CCP_IOREG_gc; // odblokowanie zmiany źródła sygnału zegarowego
CLK.CTRL = CLK_SCLKSEL_RC2M_gc; // zmiana źródła sygnału zegarowego na RC 2MHz
LcdClear(); // czyszczenie wyświetlacza
Lcd("RC 2MHz"); // komunikat o uruchomieniu generatora
}
|
|
Dominik Leon Bieczyński
http://www.leon-instruments.pl/


Jak kompletować zamówienie w hurtowni elektrotechnicznej przed remontem?
Od wzmacniacza nieodwracającego do integratora i wzmacniacza ładunkowego, czyli historia z zaskakującą pointą jak w dobrym kryminale
Green czy smart? Jak decyzje ESG zaczynają optymalizować procesy produkcyjne 

![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)


