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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny24/44/84

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

Wysoka wydajność i efektywność kodu czyni z mikrokontrolerów AVR idealny wybór dla aplikacji o małym poborze energii. Dodatkowo tryby uśpienia pozwalają aplikacji wyłączyć nieużywane moduły w mikrokontrolerze, co owocuje oszczędnością energii. Architektura AVR udostępnia różne tryby uśpienia pozwalające użytkownikowi dopasować zużycie energii do wymagań aplikacji.

Tryby uśpienia

Powyższy rysunek z poprzedniego rozdziału przedstawia różne systemy zegarowe w ATtiny24/44/84 oraz ich dystrybucję. Rysunek ten jest pomocny w wyborze odpowiedniego trybu uśpienia. Poniższa tabela pokazuje różne tryby uśpienia oraz ich źródła wybudzeń.

Aktywne źródła zegarowe i źródła wybudzeń w różnych trybach uśpienia

  Aktywne źródła zegarowe Oscylatory Źródła wybudzania
Tryb uśpienia clkCPU clkFLASH clkI/O clkADC Aktywne źródło zegara głównego INT0 zmiana na końcówce Gotowość SPM/EEPROM Przetwornik A/C Inne we/wy Przerwanie z licznika zegarowego
Bezczynny     X X X X X X X X
Redukcja szumu
dla przetwornika A/C
      X X X(1) X X   X
Wyłączenie zasilania           X(1)       X
Gotowości           X(1)       X

Uwaga: 1. Dla INT0 tylko przerwanie od poziomu niskiego

Aby wejść w dowolny z trzech trybów uśpienia, bit SE w rejestrze MCUCR musi być zapisany stanem jeden oraz musi zostać wykonana instrukcja SLEEP. Bity SM1:0 w rejestrze MCUCR wybierają rodzaj trybu uśpienia (bezczynny, zmniejszania szumów dla przetwornika A/C lub wyłączenia zasilania), 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.

Zwróć uwagę, że jeśli stosowane jest przerwanie wyzwalane poziomem do wybudzenia z trybu wyłączenia zasilania, to zmieniony poziom musi utrzymywać się przez pewien czas, aby wybudzić mikrokontroler. Szczegóły znajdziesz w podrozdziale "Przerwania zewnętrzne".

Tryb bezczynności (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, przetwornikowi A/C, timerowi/licznikowi, licznikowi zegarowemu oraz systemowi przerwań. Ten tryb uśpienia głównie zatrzymuje zegary clkCPU i clkFLASH, natomiast pozwala 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. 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. 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.

Tryb zmniejszania zakłóceń dla przetwornika A/C (ang. ADC Noise Reduction Mode)

Gdy w bitach SM1:0 zostanie umieszczona wartość dwójkowa 01, to instrukcja SLEEP wprowadzi mikrokontroler w tryb zmniejszania zakłóceń dla przetwornika A/C, zatrzymując mikroprocesor, lecz zezwalając na pracę przetwornika A/C, zewnętrznym przerwaniom oraz licznikowi zegarowemu (jeśli jest uaktywniony). Ten tryb uśpienia zatrzymuje zegary clkI/O, clkCPU i clkFLASH, natomiast pozostałe zegary pracują normalnie.

Obniża to poziom zakłóceń od sieci logicznej, co poprawia precyzję przetwarzania w przetworniku A/C, umożliwiając bardziej dokładne pomiary. 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 gotowości SPM/EEPROM, przerwanie od poziomu na wejściu INT0 lub przerwanie od zmiany stanu końcówki.

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

Gdy w bitach SM1:0 umieści się wartość dwójkową 10, to instrukcja SLEEP wprowadzi mikrokontroler w tryb wyłączenia zasilania. W tym trybie zatrzymywany jest oscylator, podczas gdy działają (jeśli są uaktywnione) przerwania zewnętrzne oraz licznik zegarowy. Mikrokontroler może zostać wybudzony jedynie przez reset z licznika zegarowego, przerwanie zewnętrzne na końcówce INT0 od poziomu niskiego lub przerwanie od zmiany stanu końcówki. Ten tryb uśpienia zatrzymuje wszystkie generowane zegary, zezwalając na pracę tylko modułom asynchronicznym.

Tryb gotowości (ang. Standby Mode)

Gdy bity SM1:0 mają wartość 11 i została wybrana opcja zegarowa zewnętrznego kryształu kwarcu/rezonatora, to instrukcja SLEEP wprowadzi mikrokontroler w tryb gotowości. Tryb ten jest identyczny z trybem wyłączenia zasilania z tym wyjątkiem, iż oscylator pracuje. Z trybu gotowości mikrokontroler wybudza się w ciągu do sześciu taktów zegara.


Na początek:  podrozdziału   strony 

Programowe wyłączenie modułu BOD

Gdy moduł detektora spadku napięcia (ang. Brown-out Detector, BOD) został uaktywniony przez bity bezpiecznikowe BODLEVEL, to monitoruje on aktywnie napięcie zasilające podczas okresu uśpienia. W niektórych mikrokontrolerach można programowo wyłączyć moduł BOD w trybach uśpienia wyłączenia i gotowości. Wtedy pobór prądu w trybie uśpienia będzie na tym samym poziomie, jak gdy BOD jest wyłączony globalnie bitami bezpiecznikowymi.

Jeśli BOD jest wyłączony programowo, to jego działanie zostaje przerwane natychmiast po wejściu w tryb uśpienia. Po wybudzeniu moduł BOD jest ponownie automatycznie aktywowany. Zapewnia to bezpieczne działanie w przypadku, gdy poziom VCC spadł podczas okresu uśpienia. Gdy moduł BOD został wyłączony, to czas wybudzania z trybu uśpienia wyniesie w przybliżeniu 60μs, aby zagwarantować poprawną pracę BOD zanim mikrokontroler wznowi wykonywanie kodu. Wytłaczanie modułu BOD kontrolowane jest przez bit BODS (ang. BOD Sleep) rejestru sterującego mikrokontrolera (ang. MCU Control Register, MCUCR). Wpisanie do tego bitu stanu 1 wyłącza moduł BOD w trybach wyłączenia zasilania i gotowości, natomiast stan 0 utrzymuje działanie BOD. Zapis do bitu BODS wykonywany jest przy pomocy sekwencji czasowej.


Ograniczenia

Wyłączanie modułu BOD zostało zaimplementowane jedynie w następujących mikrokontrolerach:

Wersja modelu jest oznaczana na obudowie mikrokontrolera i może być umiejscowiona następująco:


Na początek:  podrozdziału   strony 

Rejestr ograniczania poboru prądu

Rejestr ograniczania poboru energii (ang. Power Reduction Register, PRR), udostępnia metodę zmniejszenia poboru prądu przez zatrzymywanie zegara dla indywidualnych modułów peryferyjnych mikrokontrolera. Bieżący stan takiego modułu ulega zamrożeniu, a jego rejestrów we/wy nie można ani odczytać, ani zapisać. Zasoby wykorzystywane przez moduł peryferyjny z zatrzymanym zegarem pozostają zajęte, dlatego moduł ten powinien w większości przypadków zostać wyłączony przed zatrzymaniem mu zegara. Wybudzenie modułu, co wykonuje się przez wyzerowanie jego bitu w rejestrze PRR, wprowadza moduł w ten sam stan, w jakim był przed wyłączeniem. Wyłączanie modułów można stosować w trybach bezczynnym (ang. Idle Mode) i aktywnym (ang. Active Mode), aby znacząco zmniejszyć ogólny pobór prądu. We wszystkich pozostałych trybach zegar jest już zatrzymany.


Na początek:  podrozdziału   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:

Przetwornik analogowo/cyfrowy

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

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

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.

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 zużywał nadmierną energię. Przy końcówkach analogowych cyfrowe bufory wejścia powinny zawsze być wyłączane przez wpis do rejestru wyłączania wejść cyfrowych (ang. Digital Input Disable Register, DIDR0).


Na początek:  podrozdziału   strony 

Opis rejestrów

MCUCR – MCU Control Register – Rejestr sterowania mikrokontrolerem

Rejestr ten zawiera bity sterujące zarządzaniem poborem energii.

Bit 7 6 5 4 3 2 1 0  
0x35 (x55) BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – BODS: BOD Sleep – Uśpienie modułu BOD

W niektórych mikrokontrolerach dostępna jest opcja usypiania modułu BOD (monitorowanie spadków napięcia zasilającego). Zobacz do podrozdziału "Ograniczenia". Aby moduł BOD został wyłączony podczas uśpienia mikrokontrolera, bit BODS musi zostać zapisany stanem logicznym jeden. Kontrolowane jest to za pomocą czasowej (tzn. ograniczonej w czasie) sekwencji rozkazów oraz bitu uaktywniającego BODSE w rejestrze MCUR. Najpierw oba bity BODS i BODSE muszą zostać ustawione na jeden.  Następnie w ciągu czterech taktów zegara BODS musi zostać ustawiony na 1, a BODSE musi zostać ustawiony na 0. Bit BODS jest aktywny przez trzy takty zegara po ustawieniu. Instrukcja SLEEPmusi być wykonana w czasie, gdy bit BODS jest aktywny, aby moduł BOD został wyłączony dla aktualnego trybu uśpienia. Po upływie trzech taktów zegara bit BODS zostaje automatycznie wyzerowany.

W mikrokontrolerach bez zaimplementowanej opcji wyłączania BOD w czasie uśpienia bit ten jest nieużywany i przy odczycie zawsze daje wartość zero.

Bit 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 SLEEPi zerowanie go tuż po wybudzeniu.

Bity 4:3 – 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 Redukcja zakłóceń dla przetwornika A/C (ang. ADC Noise Reduction)
1 0 Wyłączenie zasilania (ang. Power-down)
1 1 Gotowości(1)
Uwaga: 1. Zalecane tylko z zewnętrznym kryształem kwarcu lub rezonatorem jako wybrane źródło zegara systemowego.

Bit 2 – BODSE: BOD Sleep Enable – Aktywacja bitu BODS

W niektórych mikrokontrolerach dostępna jest opcja usypiania modułu BOD. Zobacz do podrozdziału "Ograniczenia". Bit BODSE uaktywnia ustawianie bitu kontrolnego BODS, co jest wyjaśnione w jego opisie wyżej. Wyłączanie modułu BOD sterowane jest za pomocą sekwencji czasowej.

W mikrokontrolerach bez zaimplementowanej opcji wyłączania BOD w czasie uśpienia bit ten jest nieużywany i przy odczycie zawsze daje wartość zero.


PRR – Power Reduction Register – Rejestr Zmniejszania Poboru Energii

Bit 7 6 5 4 3 2 1 0  
0x00 (0x20) - - - - PRTIM1 PRTIM0 PRUSI PRADC 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

Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 1. Gdy timer/licznik 1 zostanie włączony, będzie pracował jak przed wyłączeniem.

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

Zapisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 0. Gdy timer/licznik 0 zostanie włączony, będzie pracował jak przed wyłączeniem.

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

Zapis logicznej jedynki do tego bitu wyłącza moduł USI przez zatrzymanie dla niego zegara. Gdy moduł USI jest ponownie wybudzany, powinien zostać jeszcze raz zainicjowany, aby zapewnić jego poprawne działanie.

• Bit 0 – PRADC: Power Reduction ADC – Wyłączenie przetwornika A/C

Zapisanie logicznej jedynki do tego bitu wyłącza moduł przetwornika analogowo/cyfrowego. Przetwornik musi zostać zablokowany przed wyłączeniem. Komparator analogowy nie może być używany przy wyłączonym przetworniku A/C.


Na początek:  podrozdziału   strony 

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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.