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 |
©2025 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Tryby uśpienia umożliwiają aplikacji wyłączenie nieużywanych modułów w mikrokontrolerze, przez co oszczędzana jest energia. Architektura AVR udostępnia różne tryby uśpienia, które pozwalają użytkownikowi dopasować zużycie energii do wymagań aplikacji.
W poprzednim rozdziale znajduje się poniższy rysunek przedstawiający różne systemy zegarowe i ich przydział w mikrokontrolerze ATtiny2313A/4313.
Rysunek ten jest pomocny przy wyborze odpowiedniego trybu uśpienia. W poniższej tabeli zebrano różne tryby uśpienia i ich źródła wybudzeń.
Tryb uśpienia | Aktywne zegary | Oscylatory | Źródła wybudzania | ||||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Bezczynny | X | X | X | X | X | X | X | ||
Wyłączenia | X(2) | X | X | ||||||
Gotowości(1) | X | X(2) | X | X |
Uwagi: | 1. | Zalecane tylko przy pracy z zewnętrznym kwarcem lub rezonatorem wybranym jako źródło zegarowe. |
2. | Dla INT0 tylko przerwanie od poziomu. |
Aby wejść w dowolny z trzech trybów uśpienia, bit SE w rejestrze MCUCR musi być zapisany stanem logicznym jeden oraz musi zostać wykonana instrukcja SLEEP. Bity SM1:0 w rejestrze MCUCR wybierają rodzaj trybu uśpienia (bezczynny, wyłączenia lub czuwania w gotowości), który zostanie uaktywniony przez instrukcję SLEEP. Gdy uaktywnione przerwanie wystąpi podczas uśpienia mikrokontrolera, zostanie on wybudzony. Następnie mikrokontroler jest wstrzymywany przez cztery cykle oprócz czasu uruchamiania, po czym wykonuje on procedurę obsługi przerwania i wznawia wykonywanie programu od następnej instrukcji za SLEEP. Zawartość zestawu rejestrów i pamięci SRAM jest niezmieniona, gdy mikrokontroler wybudza się z uśpienia. Jeśli podczas uśpienia wystąpi reset, to mikrokontroler wybudza się i wykonuje program od wektora Resetu.
Zauważ, że w przypadku stosowania przerwania wyzwalanego poziomem do wybudzania mikrokontrolera zmieniony poziom musi być utrzymany przez pewien czas, aby wybudzić mikrokontroler i spowodować wejście do procedury obsługi przerwania.
Gdy bity SM1:0 zostaną ustawione w stan 00, to instrukcja SLEEP wprowadza mikrokontroler w tryb bezczynności, zatrzymując mikroprocesor lecz pozwalając dalej pracować komparatorowi analogowemu, układowi UART, timerom/licznikom, licznikowi zegarowemu oraz systemowi przerwań. Ten tryb uśpienia głównie zatrzymuje zegary clkCPU i clkFLASH, natomiast pozwala dalej pracować pozostałym zegarom.
Tryb bezczynności pozwala mikrokontrolerowi wybudzić się przy przerwaniach wyzwalanych zarówno zewnętrznie jak i wewnętrznie, jak nadmiar licznika czy przerwaniom po zakończeniu transmisji przez moduł UART. Jeśli wybudzenie z 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.
Przy wybudzaniu z trybu wyłączenia zasilania istnieje pewne opóźnienie pomiędzy pojawieniem się warunku wybudzenia a samym wybudzeniem. Pozwala to wznowić pracę zegara i ustabilizować go po wcześniejszym wyłączeniu. Czas wybudzania definiowany jest przez te same bity bezpiecznikowe CKSEL, które definiują czas uruchamiania po resecie, co jest opisane w rozdziale "Zegar systemowy i opcje zegarowe".
Gdy bity SM1...0 mają stan 10 i została wybrana opcja zewnętrznego kryształu kwarcowego lub rezonatora ceramicznego, to instrukcja SLEEP wprowadzi mikrokontroler w tryb oczekiwania. Tryb ten jest identyczny z trybem wyłączenia zasilania z wyjątkiem tego, iż oscylator kontynuuje działanie. Z trybu oczekiwania mikrokontroler wybudza się w sześciu taktach zegarowych.
Gdy detektor spadku napięcia zasilania (ang. Brown-out Detector, BOD) został włączony przez bity bezpiecznikowe BODLEVEL, to moduł BOD aktywnie monitoruje napięcie zasilania podczas okresu uśpienia. W niektórych mikrokontrolerach można zmniejszyć pobór prądu przez programowe wyłączenie BOD w trybach wyłączenia i gotowości. Wtedy globalny pobór prądu będzie taki sam jak przy wyłączeniu modułu BOD bitami bezpiecznikowymi.
Gdy BOD został wyłączony programowo, to jego funkcja przestanie działać natychmiast po wejściu w tryb uśpienia. Po wybudzeniu z uśpienia BOD jest automatycznie włączany ponownie. To zapewnia bezpieczne działanie w przypadku, gdy poziom VCC spadł w okresie uśpienia. Gdy BOD został wyłączony, czas wybudzania z trybu uśpienia wyniesie w przybliżeniu 60 μs, aby zapewnić poprawna pracę BOD, zanim mikroprocesor rozpocznie wykonywanie kodu. Wyłączenie BOD kontrolowane jest przez bit BODS (ang. BOD Sleep, uśpienie BOD) w rejestrze BODCR (ang.Brown-Out Detector Control Register, rejestr sterujący detektora spadku napięcia zasilania). Zapisanie tego bitu stanem 1 wyłącza moduł BOD w trybie wyłączenia i w trybie gotowości, natomiast wpisanie zera utrzymuje moduł BOD w stanie aktywnym. Standardowym ustawieniem jest zero, tj. BOD jest aktywny.
Zapis bitu BODS jest sterowany czasową sekwencją i bitem uaktywniającym, zobacz do opisu rejestru BODCR.
Rejestr zmniejszania poboru energii (ang. Power Reduction Register, PRR) udostępnia metodę zmniejszania poboru energii przez zatrzymanie zegara dla indywidualnych modułów peryferyjnych. Gdy zegar jest zatrzymany dla modułu peryferyjnego, to:
W większości przypadków moduł peryferyjny powinien zostać wyłączony przed wstrzymaniem zegara. Wyzerowanie bitu PPR wybudza moduł peryferyjny i przywraca mu ten sam stan, który miał przed wyłączeniem.
Wyłączanie peryferiów można stosować w trybie bezczynnym i aktywnym do znaczącego zmniejszania poboru prądu. We wszystkich pozostałych trybach uśpienia zegar jest już wyłączony.
Przy wejściu w tryb bezczynności (ang. Idle mode), komparator analogowy powinien zostać wyłączony, jeśli się z niego nie korzysta. 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 bity bezpiecznikowe BODLEVEL, 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 w podrozdziale "Wykrywanie spadku napięcia zasilającego".
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 pobierał nadmierny prąd. Przy końcówkach analogowych cyfrowe bufory wejścia powinny zawsze być wyłączane przez wpis do rejestrów wyłączania wejść cyfrowych (ang. Digital Input Disable Registers, DIDR).
Rejestr ten zawiera bity sterujące zarządzaniem poborem energii.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 (0x55) | PUD | SM1 | SE | SM0 | ISC11 | ISC10 | ISC01 | ISC00 | MCUCR |
Zapis/Odczyt | O/Z | Z/O | Z/O | Z/O | Z/O | O/Z | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bity te wybierają jeden z trzech dostępnych trybów uśpienia, jak pokazano w poniższej tabeli:
SM1 | SM0 | Tryb uśpienia |
0 | 0 | Bezczynny (ang. Idle) |
0 | 1 | Wyłączenie zasilania (ang. Power-down) |
1 | 0 | Oczekiwanie w gotowości(1) (ang. Stand-by) |
1 | 1 | Wyłączenie zasilania (ang. Power-down) |
Uwaga: | 1. | Tryb oczekiwania w gotowości zalecany jest jedynie w przypadku używania kryształów kwarcowych lub rezonatorów ceramicznych. |
Bit SE musi być ustawiony na 1, aby mikrokontroler wszedł w tryb uśpienia po wykonaniu instrukcji SLEEP. Aby zapobiec niezamierzonemu wejściu mikrokontrolera w tryb uśpienia, zaleca się ustawianie bitu SE tuż przed wykonaniem instrukcji SLEEP i zerowanie go tuż po wybudzeniu.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x06 (0x26) | - | - | - | - | PRTIM1 | PRTIM0 | PRUSI | PRUSART | PRR |
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ą zarezerwowane i przy odczycie zawsze będą miały wartość 0.
Wpisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 1. Gdy timer/licznik 1 zostanie włączony, rozpocznie pracę tak jak przed wyłączeniem.
Wpisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 0. Gdy timer/licznik 0 zostanie włączony, rozpocznie pracę tak jak przed wyłączeniem.
Wpisanie logicznej jedynki do tego bitu wyłącza USI przez zatrzymanie zegara dla tego modułu. Gdy USI zostanie wybudzony ponownie, należy go zainicjować w celu zapewnienia poprawnego działania.
Wpisanie logicznej jedynki do tego bitu wyłącza USART przez zatrzymanie zegara dla tego modułu. Gdy USART zostanie wybudzony ponownie, należy go zainicjować w celu zapewnienia poprawnego działania.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x07 (0x27) | - | - | - | - | - | - | BODS | BODSE | BODCR |
Zapis/Odczyt | O | O | O | O | O | O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
W celu wyłączenia modułu BOD w czasie uśpienia bit BODS należy zapisać stanem logicznym jeden. Jest to kontrolowane przez sekwencję czasową i bit uaktywniające BODSE. Najpierw oba bity BODS i BODSE należy ustawić na jeden. Następnie w ciągu czterech taktów zegara bit BODS należy ustawić na jeden, a bit BODSE na zero. Bit BODS jest aktywny przez trzy takty zegarowe po jego ustawieniu. Instrukcja uśpienia musi zostać wykonana, gdy BODS jest aktywny, aby moduł BOD został wyłączony w aktualnym trybie uśpienia. Bit BODS jest automatycznie zerowany po trzech taktach zegarowych.
Bit BODSE uaktywnia ustawianie bitu sterującego BODS, jak wyjaśniono powyżej. Wyłączanie BOD kontrolowane jest sekwencją czasową.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2025 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.