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

©2025 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny2313A/4313

Zarządzanie energią i tryby uśpienia

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

Tryby uśpienia

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.

Tryb bezczynny (ang. Idle Mode)

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.

Tryb wyłączenia zasilania (ang. Power-down Mode)

Gdy bity SM1...0 zostaną zapisane wartością 01 lub 11, to instrukcja SLEEP wprowadzi mikrokontroler w tryb wyłączenia zasilania. W trybie tym zatrzymywany jest zewnętrzny oscylator, natomiast działają przerwania zewnętrzne, wykrywanie stanu startu USI oraz licznik zegarowy (jeśli został wcześniej włączony). Mikrokontroler może zostać wybudzony jedynie przez zewnętrzny reset, reset z licznika zegarowego, reset z układu wykrywania spadku napięcia zasilania, przerwanie od stanu startu USI, przerwanie zewnętrzne od niskiego poziomu na końcówce INT0 lub przerwanie od zmiany stanu końcówki. Ten tryb uśpienia wyłącza wszystkie generowane zegary, co pozwala na pracę jedynie modułów asynchronicznych. Zauważ, iż jeśli do wybudzenia mikrokontrolera z trybu wyłączenia zasilania używane jest przerwanie wyzwalane poziomem, to zmieniony poziom musi być utrzymywany przez pewien czas, aby mikrokontroler się wybudził. Zobacz do rozdziału "Przerwania zewnętrzne".

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".

Tryb oczekiwania w gotowości (ang. Stand-up Mode)

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.


do podrozdziału  do strony 

Programowe wyłączanie modułu BOD

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.


do podrozdziału  do strony 

Rejestr zmniejszania poboru energii

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.


do podrozdziału  do strony 

Minimalizowanie poboru energii

Istnieje kilka zagadnień do rozważenia przy próbach minimalizowania poboru prądu w systemie zarządzanym przez mikrokontroler AVR. Ogólnie należy stosować tryby uśpienia tak często, jak jest to możliwe, co powoduje wyłączanie niepotrzebnych modułów we/wy. Wszystkie zbędne funkcje powinny być wyłączane. W szczególności dotyczy to poniższych modułów:

Komparator analogowy

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".

Detektor spadku napięcia zasilania

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".

Wewnętrzne napięcie odniesienia

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".

Licznik zegarowy

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".

Końcówki portu

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).


do podrozdziału  do strony 

Opis rejestrów

MCUCR – MCU Control Register – Rejestr sterujący mikrokontrolerem

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 6,4 – SM[1:0]: Sleep Mode Select Bits 1:0 –  Bity wyboru trybu uśpienia

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.

Bity 5 – SE: Sleep Enable – Uaktywnienie uśpienia

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.


PRR – Power Reduction Register – Rejestr Zmniejszania Poboru Energii

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  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane i przy odczycie zawsze będą miały wartość 0.

Bit 3 – PRTIM1: Power Reduction Timer/Counter1 – Wyłączenie timera/licznika 1

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.

Bit 2 – PRTIM0: Power Reduction Timer/Counter0 – Wyłączenie timera/licznika 0

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.

Bit 1 – PRUSI: Power Reduction USI – Wyłączenie interfejsu USI

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.

Bit 0 – PRUSART: Power Reduction USART – Wyłączenie USART

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.


BODCR – Brown-Out Detector Control Register – Rejestr sterujący detektorem spadku napięcia zasilania

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  

Bit 1 – BODS: BOD Sleep – Uśpienie BOD

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 0 – BODSE: BOD Sleep Enable – Uaktywnienie uśpienia BOD

Bit BODSE uaktywnia ustawianie bitu sterującego BODS, jak wyjaśniono powyżej. Wyłączanie BOD kontrolowane jest sekwencją czasową.


do podrozdziału  do strony 

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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.