|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

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:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

Powyższy rysunek z poprzedniego rozdziału przedstawia różne systemy zegarowe w mikrokontrolerze ATmega128 i ich dystrybucję. Rysunek jest pomocny przy wyborze odpowiedniego trybu uśpienia. Tabela poniżej wymienia różne tryby uśpienia i ich źródła wybudzeń.
| Aktywne domeny zegarowe | Oscylatory | Źródła wybudzeń | ||||||||||||
| Tryb uśpienia | clkCPU | clkFLASH | clkIO | clkADC | clkASY | Włączone główne źródło zegarowe | Włączony oscylator timera | INT7:0 i zmiana stanu końcówki | Zgodność adresu TWI | Timer 2 | Gotowość SPM/EEPROM | Przerwanie WDT | ADC | Inne we/wy |
| Bezczynność | X | X | X | X | X(2) | X | X | X | X | X | X | X | ||
| Redukcja zakłóceń | X | X | X | X(2) | X(3) | X | X(2) | X | X | X | ||||
| Wyłączenie zasilania | X(3) | X | X | |||||||||||
| Oszczędność energii | X | X(2) | X(3) | X | X | X | ||||||||
| Gotowość(1) | X | X(3) | X | X | ||||||||||
| Rozszerzona gotowość | X(2) | X | X(2) | X(3) | X | X | X | |||||||
| Uwagi: | 1. | Zalecane tylko dla zewnętrznego kwarcu lub rezonatora wybranych jako źródło zegarowe. |
| 2. | Jeśli timer/licznik 2 pracuje w trybie asynchronicznym. | |
| 3. | Tylko przerwanie od poziomu INT7:4. |
Aby wejść w dowolny tryb uśpienia, należy wpisać logiczną jedynkę do bitu SE w rejestrze SMCR, a następnie wykonać instrukcję SLEEP. Bity SM2...0 w rejestrze SMCR określają, który tryb uśpienia (bezczynny, zmniejszania zakłóceń dla przetwornika A/C, wyłączenia zasilania, oszczędzania, oczekiwania w gotowości i rozszerzonego oczekiwania w gotowości) zostanie uaktywniony przez instrukcję SLEEP.
Gdy w trakcie uśpienia pojawi się dozwolone przerwanie, mikrokontroler wybudzi się. Następnie mikrokontroler jest wstrzymywany przez cztery takty zegara dodatkowo do czasu uruchamiania, po czym wykonuje procedurę obsługi przerwania i kontynuuje realizację programu głównego od następnej instrukcji za SLEEP. Gdy mikrokontroler wybudza się z uśpienia, zawartość zestawu rejestrów i pamięci SRAM jest niezmieniona. Gdy w trakcie uśpienia wystąpi reset, mikrokontroler wybudza się i wykonuje program od wektora resetu..
Tryb bezczynności pozwala mikrokontrolerowi wybudzić się przy przerwaniach wyzwalanych zarówno zewnętrznie jak i wewnętrznie, jak przerwania od nadmiarów timerów i przy zakończeniu transmisji USART. Jeśli wybudzenie od przerwania komparatora analogowego nie jest wymagane, komparator może zostać wyłączony przez ustawienie bitu ACD (ang. Analog Comparator Down) w rejestrze ACSR (ang. Analog Comparator Control and Status Register – Rejestr Stanu i Sterowania Komparatorem Analogowym). Zmniejszy to pobór energii w trybie bezczynności. Jeśli przetwornik A/C (ang. Analog to Digital Converter, ADC) jest uaktywniony, to konwersja rozpoczyna się natychmiast, gdy mikrokontroler wejdzie w ten tryb uśpienia.
Obniża to poziom zakłóceń od sieci logicznej, co poprawia precyzję przetwarzania w przetworniku A/C, umożliwiając pomiary z większą rozdzielczością. Jeśli przetwornik A/C jest uaktywniony, to konwersja rozpocznie się automatycznie przy wejściu w ten tryb uśpienia. Oprócz przerwania przy zakończeniu przetwarzania w przetworniku A/C mikrokontroler może być wybudzony z trybu zmniejszania zakłóceń tylko przez zewnętrzny reset, reset od licznika zegarowego, reset przy spadku napięcia zasilania, przerwanie od zgodności adresu 2-przewodowego interfejsu szeregowego, przerwanie z timera/licznika 0, przerwanie od gotowości SPM/EEPROM, przerwanie zewnętrzne od poziomu na wejściach INT7:4.
Zapamiętaj, iż jeśli do wybudzania z trybu wyłączenia używane jest przerwanie wyzwalane poziomem, to zmieniony poziom musi się utrzymywać przez pewien czas, aby wybudzić mikrokontroler. Zobacz do rozdziału "Przerwania zewnętrzne".
Przy wybudzaniu z trybu wyłączenia istnieje pewne opóźnienie od czasu wystąpienia warunku wybudzenia do jego aktywacji. Pozwala to zegarowi uruchomić się ponownie i ustabilizować po wcześniejszym zatrzymaniu. Okres wybudzania definiują te same bity bezpiecznikowe CKSEL, które definiują okres upływu czasu resetu, co opisano w podrozdziale "Źródła zegarowe".
Jeśli timer/licznik 2 jest uaktywniony, to będzie pracował w czasie uśpienia. Mikrokontroler może wybudzić się albo przy przepełnieniu timera, albo przy zdarzeniu Output Compare z timera/licznika 2, jeśli odpowiednie bity uaktywnienia przerwania z timera/licznika 2 zostały ustawione w rejestrze TIMSK2 oraz ustawiony jest bit globalnego włączania przerwań I w rejestrze stanu SREG.
Jeśli timer/licznik 2 nie pracuje to zamiast trybu oszczędzania energii zalecany jest tryb wyłączenia.
Timer/licznik 2 może być taktowany zarówno synchronicznie jak i asynchronicznie w trybie oszczędzania energii. Jeśli timer/licznik 2 nie używa zegara asynchronicznego, to jego oscylator zostaje zatrzymany podczas uśpienia. Jeśli timer/licznik 2 nie używa zegara synchronicznego, to źródło zegarowe jest zatrzymywane podczas uśpienia. Zauważ, iż nawet jeśli zegar synchroniczny pracuje w trybie oszczędzania energii, to to źródło zegarowe dostępne jest tylko dla timera/licznika 2.
Zwróć uwagę, iż jeśli zegar dla modułów peryferyjnych jest zatrzymany, to:
Moduł peryferyjny w większości przypadków należy wyłączyć przed zatrzymaniem jego zegara. Wybudzenie modułu, co wykonuje się przez wyzerowanie bitu w rejestrze PRR, umieszcza go w tym samym stanie, co przed wyłączeniem. Wyłączanie modułów można wykorzystać w trybach bezczynnym i aktywnym do znacznego obniżenia poboru energii. We wszystkich pozostałych trybach uśpienia zegar modułów jest już zatrzymywany.
Jeśli jest uaktywniony, przetwornik A/C będzie pracował w trybach uśpienia. Aby zaoszczędzić energię, należy go wyłączyć przed wejściem w dowolny tryb uśpienia. Gdy przetwornik A/C został wyłączony i włączony ponownie, to następna konwersja będzie konwersją rozszerzoną. Działanie przetwornika jest opisane w rozdziale "Przetwornik analogowo/cyfrowy".
Przy wejściu w tryb bezczynności (ang. Idle mode), komparator analogowy powinien zostać wyłączony, jeśli się z niego nie korzysta. Przy wejściu w tryb zmniejszania zakłóceń dla przetwornika A/C (ang. ADC Noise Reduction mode), komparator powinien zawsze być wyłączany. W pozostałych trybach uśpienia komparator analogowy jest wyłączany automatycznie. Jednakże, jeśli komparator analogowy został ustawiony na wykorzystywanie jako wejścia wewnętrznego napięcia odniesienia, to należy go wyłączać we wszystkich trybach uśpienia. W przeciwnym razie układ wewnętrznego napięcia odniesienia będzie uaktywniony bez względu na tryb uśpienia. Opis ustawień znajdziesz w rozdziale "Komparator analogowy".
Jeśli w aplikacji nie jest potrzebny moduł wykrywania spadku napięcia zasilającego (ang. Brown-out Detector), to można go wyłączyć. Jeśli moduł BOD jest uaktywniony przez bit bezpiecznikowy BODEN, to będzie on aktywny we wszystkich trybach uśpienia, a stąd zawsze będzie pobierał prąd. W głębszych trybach uśpienia będzie się to znacząco przyczyniać do całkowitego poboru energii przez mikrokontroler. Szczegóły konfiguracji modułu BOD znajdziesz w podrozdziale "Wykrywanie spadku napięcia".
Moduł wewnętrznego napięcia odniesienia zostanie uaktywniony w razie wykorzystywania przez detektor spadku napięcia zasilającego, komparator analogowy lub przetwornik A/C. Jeśli moduły te zostały wyłączone, jak opisano powyżej, to układ wewnętrznego napięcia odniesienia będzie wyłączony i nie będzie zużywał energii. Gdy zostanie ponownie włączony, program użytkownika musi odczekać pewien czas, zanim będzie mógł z niego skorzystać. Jeśli układ ten pracuje w trybie uśpienia, to z jego wyjścia można skorzystać natychmiast po wybudzeniu. Czasy uruchamiania są opisane w rozdziale "Wewnętrzne napięcie odniesienia".
Jeśli timer licznika zegarowego (ang. Watchdog Timer) nie jest potrzebny w aplikacji, to moduł ten powinien zostać wyłączony. Jeśli licznik zegarowy jest włączony, to będzie pracował we wszystkich trybach uśpienia i zawsze będzie zużywał energię. W głębszych trybach uśpienia będzie się to znacząco przyczyniać do całkowitego poboru energii przez mikrokontroler. Szczegóły konfiguracji licznika zegarowego znajdziesz w rozdziale "Przerwania".
Przy wejściu w tryb uśpienia wszystkie końcówki portu powinny być tak skonfigurowane, aby zużywać minimalną energię. Najważniejszą rzeczą będzie zapewnienie, iż żadna z końcówek nie zasila obciążenia oporowego. W trybach uśpienia z wyłączonymi oboma zegarami we/wy (clkI/O) oraz przetwornika A/C (clkADC) bufory wejściowe mikrokontrolera są wyłączone. Zapewnia to, iż nie jest zużywana energia przez układy logiczne wejść, gdy nie są one potrzebne. W niektórych przypadkach układy te są potrzebne do wykrywania warunków wybudzenia, a wtedy będą włączone. Jeśli bufor wejścia jest włączony, a sygnał wejściowy zmienia się lub sygnał analogowy posiada poziom bliski Vcc/2, to bufor wejścia będzie zużywał nadmierną energię. Przy końcówkach analogowych cyfrowe bufory wejścia powinny zawsze być wyłączane. Zobacz do rozdziału "Porty we/wy".
Jeśli wewnętrzny system debugowania (ang. On-chip debug system, OCD) został uaktywniony przez bit bezpiecznikowy OCDEN a mikrokontroler wszedł w tryb uśpienia, to włączane jest główne źródło zegarowe, które z tego powodu zawsze zużywa energię. W głębszych trybach uśpienia przyczynia się to znacząco do całkowitego poboru prądu.
Istnieją trzy alternatywne sposoby wyłączenia systemu OCD:
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x33 (0x53) | – | – | – | – | SM2 | SM1 | SM0 | SE | SMCR |
| Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są nieużywane w ATmega640/1280/1281/2560/2561 i zawsze przy odczycie mają wartość zero.
Te bity wybierają jeden z sześciu dostępnych trybów uśpienia, co pokazuje poniższa tabelka.
| SM2 | SM1 | SM0 | Tryb uśpienia |
| 0 | 0 | 0 | Bezczynność |
| 0 | 0 | 1 | Zmniejszanie zakłóceń dla przetwornika A/C |
| 0 | 1 | 0 | Wyłączenie zasilania |
| 0 | 1 | 1 | Oszczędność energii |
| 1 | 0 | 0 | Zarezerwowane |
| 1 | 0 | 1 | Zarezerwowane |
| 1 | 1 | 0 | Oczekiwanie w gotowości(1) |
| 1 | 1 | 1 | Rozszerzone oczekiwanie w gotowości(1) |
| Uwaga: | 1. | Tryb oczekiwania jest zalecany tylko przy taktowaniu mikrokontrolera zewnętrznym kwarcem/rezonatorem. |
Bit SE należy zapisać logiczną jedynką, aby wymusić wejście mikrokontrolera we wybrany tryb uśpienia, gdy wykona instrukcję SLEEP. Aby zapobiec wejściu mikroprocesora w uśpienie, o ile nie jest to zamiarem programisty, zaleca się zapisać bit włączenia trybu uśpienia (SE) jedynką tuż przed wykonaniem instrukcji SLEEP oraz wyzerować go natychmiast po wybudzeniu.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| (0x64) | PRTWI | PRTIM2 | PRTIM0 | – | PRTIM1 | PRSPI | PRUSART0 | PRADC | PRR0 |
| Zapis/Odczyt | Z/O | Z/O | Z/O | O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Zapisanie logicznej jedynki do tego bitu wyłącza TWI (ang. Two Wire Interface – interfejs dwuprzewodowy) przez zatrzymanie zegara dla tego modułu. Przy ponownym wybudzeniu TWI należy dokonać reinicjalizacji, aby zapewnić jego poprawne działanie.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 2 w trybie synchronicznym (bit AS2 ma stan 0). Gdy timer/licznik 2 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 0. Gdy timer/licznik 0 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Ten bit jest zarezerwowany w AATmega640/1280/1281/2560/2561 i zawsze daje odczyt zero.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 1. Gdy timer/licznik 1 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Jeśli jest używany debugWIRE wbudowanego systemu uruchomieniowego (ang. On-chip Debug System), ten bit nie powinien być ustawiany na 1. Zapisanie w nim logicznej jedynki wyłącza interfejs SPI przez zatrzymanie jego zegara. Przy ponownym wybudzeniu SPI moduł ten powinien zostać zainicjowany w celu zapewnienia poprawnej pracy.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł USART0 przez zatrzymanie jego zegara. Przy ponownym wybudzeniu USART0 moduł ten powinien zostać zainicjowany w celu zapewnienia poprawnej pracy.
Zapisanie logicznej jedynki do tego bitu wyłącza przetwornik A/C. Przed wyłączeniem przetwornik powinien zostać dezaktywowany. Gdy przetwornik A/C jest wyłączony, komparator analogowy nie może korzystać z jego multipleksera wejść analogowych.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| (0x65) | – | – | PRTIM5 | PRTIM4 | PRTIM3 | PRUSART3 | PRUSART2 | PRUSART1 | PRR1 |
| Zapis/Odczyt | O | O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega640/1280/1281/2560/2561 i zawsze dają odczyt zero.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 5. Gdy timer/licznik 5 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 4. Gdy timer/licznik 4 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 3. Gdy timer/licznik 3 zostaje włączony, będzie on kontynuował swoją prace jak przed wyłączeniem.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł USART3 przez zatrzymanie jego zegara. Przy ponownym wybudzeniu USART3 moduł ten powinien zostać zainicjowany w celu zapewnienia poprawnej pracy.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł USART2 przez zatrzymanie jego zegara. Przy ponownym wybudzeniu USART2 moduł ten powinien zostać zainicjowany w celu zapewnienia poprawnej pracy.
Zapisanie logicznej jedynki do tego bitu wyłącza moduł USART1 przez zatrzymanie jego zegara. Przy ponownym wybudzeniu USART1 moduł ten powinien zostać zainicjowany w celu zapewnienia poprawnej pracy.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.