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

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny20

 Zarządzanie zasilaniem 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ść oraz duża efektywność kodu sprawiają, iż mikrokontrolery AVR stanowią idealny wybór przy tworzeniu aplikacji o niskim poborze energii. Dodatkowo tryby uśpienia pozwalają aplikacji wyłączać nieużywane moduły w mikrokontrolerze, a w ten sposób oszczędzać energię. Architektura AVR udostępnia różne tryby uśpienia, dzięki którym użytkownik może dostosować zużycie energii do wymagań aplikacji.

Tryby uśpienia

Poniższy rysunek z poprzedniego rozdziału przedstawia różne systemy zegarowe oraz ich rozdział w ATtiny20. Rysunek może być pomocny przy wyborze odpowiedniego trybu uśpienia.

obrazek

Różne tryby uśpienia oraz ich źródła wybudzeń:

Tryb uśpienia Aktywne zegary Oscylatory Źródła wybudzeń
clkCPU clkNVM clkIO clkADC Aktywne
źródło
zegara
głównego
INT0
i
zmiana
wejść
Licznik
zegarowy
TWI
Slave
Przetwornik
A/C
Inne
we/wy
Bezczynność     X X X X X X X X
Redukcja zakłóceń  dla ADC       X X X(1) X X(2) X  
Gotowość         X X(1) X X(2)    
Wyłączenie zasilania           X(1) X X(2)    
Uwagi: 1. Dla INT0 tylko przerwanie od poziomu
  2. Tylko przerwanie przy zgodności adresu TWI

Aby wejść w dowolny z czterech trybów uśpienia, bity SE w rejestrze MCUCR muszą być ustawione na 1 i musi zostać wykonana instrukcja SLEEP. Bity SM2:0 w rejestrze MCUCR  wybierają tryb uśpienia (bezczynny, redukcję szumu dla ADC, gotowość lub wyłączenie zasilania), który zostanie aktywowany przez instrukcję SLEEP.

Jeśli uaktywnione przerwanie wystąpi, gdy mikrokontroler znajduje się w trybie uśpienia, zostanie on wybudzony. Mikrokontroler jest wtedy zatrzymywany przez dodatkowe 4 takty oprócz czasu uruchamiania, następnie wykonuje on procedurę obsługi przerwania i wznawia wykonywanie programu od instrukcji za rozkazem SLEEP. Zawartość zestawu rejestrów oraz pamięci SRAM nie ulega zmianie, gdy układ zostaje wybudzony ze stanu uśpienia. Jeśli w czasie trwania trybu uśpienia wystąpi reset, mikrokontroler budzi się i rozpoczyna wykonywanie programu od wektora resetu.

Zwróć uwagę, iż przy używaniu przerwania wyzwalanego poziomem do wybudzania mikrokontrolera, zmieniony poziom musi być utrzymywany przez pewien czas, aby wybudzić mikrokontroler (oraz aby mikrokontroler wszedł do procedury obsługi tego przerwania). Szczegóły znajdziesz w rozdziale "Przerwania".

Tryb bezczynności (ang. Idle Mode)

Gdy bity SM2:0 zostaną ustawione w stan 000, to instrukcja SLEEP wprowadza mikrokontroler w tryb bezczynności, zatrzymując mikroprocesor lecz pozwalając dalej pracować komparatorowi analogowemu, licznikowi/timerowi, licznikowi zegarowemu oraz systemowi przerwań. Ten tryb uśpienia głównie zatrzymuje zegary clkCPU i clkNVM, 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 redukcji zakłóceń dla przetwornika A/C (ang. ADC Noise Reduction Mode)

Gdy w bitach SM2:0 zostanie umieszczona wartość dwójkowa 001, to instrukcja SLEEP wprowadzi mikrokontroler w tryb redukcji 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 clkNVM, 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 przetwarzanie rozpocznie się automatycznie przy wejściu w ten tryb uśpienia.

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

Gdy w bitach SM2:0 umieści się wartość dwójkową 010, 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 lub przerwanie od zmiany poziomu na wejściu. Ten tryb uśpienia zatrzymuje wszystkie generowane zegary, zezwalając na pracę tylko modułom asynchronicznym.

Tryb gotowości (ang. Standby Mode)

Gdy w bitach SM2:0 zostanie umieszczona wartość dwójkowa 100, to instrukcja SLEEP wprowadzi mikrokontroler w tryb gotowości, a właściwie w tryb oczekiwania w pełnej gotowości. Jest on identyczny do trybu wyłączenia zasilania z tym wyjątkiem, iż oscylator nie jest zatrzymywany. Skraca to czas wybudzenia, ponieważ  oscylator pracuje i nie musi być uruchamiany.

Na początek:  podrozdziału   strony 

Programowe wyłączenie BOD

Gdy jest uaktywniony detektor spadku napięcia zasilającego (ang. Brown-out Detector, BOD) za pomocą bitu bezpiecznikowego BODLEVEL, to monitoruje on ciągle napięcie zasilające w okresie uśpienia. W niektórych mikrokontrolerach możliwe jest zaoszczędzenie energii przez programowe wyłączenie modułu BOD w trybach wyłączenia zasilania oraz gotowości. W takim przypadku pobór energii w trybie uśpienia będzie na takim samym poziomie, jak przy globalnym wyłączeniu modułu BOD za pomocą bitów bezpiecznikowych.

Jeśli funkcja BOD zostanie zablokowana programowo, to przestaje ona działać natychmiast po wejściu w tryb uśpienia. Przy wybudzeniu funkcja BOD zostaje ponownie włączona automatycznie. Zapewnia to bezpieczne działanie w przypadku, gdy poziom napięcia zasilającego VCC spadł podczas uśpienia mikrokontrolera.

Gdy moduł BOD został wyłączony, czas wybudzenia z trybu uśpienia wyniesie w przybliżeniu 60μs, aby zapewnić poprawne działanie BOD przed kontynuowaniem wykonywania kodu przez mikrokontroler.

Wyłączenie funkcji BOD sterowane jest bitem BODS (ang. BOD Sleep) w rejestrze sterującym mikrokontrolerem (ang. MCU Control Register, MCUCR). Zapisanie stanu 1 w tym bicie powoduje wyłączenie BOD w trybach wyłączenia zasilania i gotowości, natomiast  zapis 0 utrzymuje funkcję BOD aktywną. Standardową wartością jest 0, tzn. funkcja BOD aktywna.

Zapis bitu BOD jest wykonywany w ograniczonej czasowo sekwencji rozkazów, zobacz na opis rejestru MCUCR.

Na początek:  podrozdziału   strony 

Rejestr zmniejszania poboru energii

Rejestr PRR (ang. Power Reduction Register – Rejestr Zmniejszania Poboru Energii) udostępnia metodę zmniejszenia poboru energii przez zatrzymanie zegara dla indywidualnych modułów peryferyjnych. Gdy zegar dla modułu peryferyjnego jest zatrzymany:

W większości przypadków moduł peryferyjny powinien zostać zablokowany przed wyłączeniem zegara. Wyzerowanie bitu w rejestrze PRR wybudza moduł peryferyjny i wprowadza go w ten sam stan, w jakim znajdował się przed wyłączeniem.

Wyłączenie modułu peryferyjnego może zostać użyte w trybie bezczynności lub w trybie aktywnym w celu znaczącego obniżenia całkowitego poboru energii. We wszystkich innych trybach uśpienia zegar jest już wyłączony.

Na początek:  podrozdziału   strony 

Minimalizowanie poboru energii

Istnieje kilka zagadnień do rozważenia przy próbach zminimalizowania poboru energii w systemie sterowanym przez rdzeń AVR. Ogólnie należy stosować tryby uśpienia tak często, jak to jest możliwe, a tryb uśpienia należy wybierać tak, aby pracowało jak najmniej niezbędnych składników. Niepotrzebne funkcje powinny zostać wyłączone. W szczególności moduły wymienione poniżej mogą wymagać szczególnego rozważenia przy próbach osiągnięcia najniższego do uzyskania poboru energii.

Komparator Analogowy (ang. Analog Comparator)

Przy wejściu w tryb bezczynności (ang. Idle Mode) komparator analogowy powinien zostać wyłączony, jeśli nie jest używany. W trybie wyłączenia zasilania (ang. Power-down Mode) komparator analogowy jest automatycznie wyłączany.

Przetwornik Analogowo-Cyfrowy (ang. Analog to Digital Converter)

Jeśli jest aktywny, przetwornik A/C pozostanie włączony we wszystkich trybach uśpienia. Aby zmniejszyć pobór energii, przetwornik A/C powinien być wyłączany przed wejściem w tryb uśpienia. Jeśli przetwornik A/C jest wyłączany i ponownie włączany, to następną konwersją będzie konwersja rozszerzona.

Licznik zegarowy (ang. Watchdog Timer)

Jeśli w aplikacji licznik zegarowy nie jest potrzebny, to moduł ten powinien zostać wyłączony. Jeśli licznik zegarowy jest włączony, to będzie on aktywny we wszystkich trybach uśpienia, a stąd będzie zawsze zużywał energię. W głębszych trybach uśpienia będzie to znacząco dokładało się do całkowitego poboru energii.

Detektor spadku napięcia zasilającego

Jeśli wykrywanie spadków napięcia zasilającego nie jest potrzebne w aplikacji, to moduł ten powinien zostać wyłączony. Jeśli detektor BOD jest uaktywniony za pomocą bitów bezpiecznikowych BODLEVEL, to będzie on działał we wszystkich głębszych trybach uśpienia, co przyczyni się znacząco do całkowitego poboru energii.

Końcówki portu (ang. Port Pins)

Gdy mikrokontroler wchodzi w tryb uśpienia, wszystkie wyprowadzenia portu powinny być skonfigurowane na minimalny pobór energii. najważniejszą rzeczą jest wtedy upewnienie się, że żadne wyprowadzenie nie zasila obciążeń oporowych. W trybach uśpienia, w których zatrzymany jest zegar we/wy (clkI/O) bufory wejściowe mikrokontrolera zostają wyłączone. Zapewnia to, iż nie będzie pobierana żadna energia przez wejściową sieć logiczną, gdy nie jest to potrzebne. Jednakże w niektórych przypadkach potrzebne jest działanie tej sieci w celu wykrywania warunków wybudzania, a wtedy będzie ona uaktywniana. Jeśli bufor wejścia jest włączony, a sygnał wejściowy jest pozostawiony w stanie nieokreślonym lub poziom sygnału analogowego jest w pobliżu napięcia VCC/2, to bufor wejścia będzie pobierał nadmierną energię.

Dla wyprowadzeń wejść analogowych, cyfrowy bufor wejściowy powinien zawsze być wyłączany. Poziom sygnału analogowego bliski VCC / 2 na wyprowadzeniu wejściowym może spowodować znaczący prąd nawet w trybie aktywnym. Cyfrowe bufory wejść można wyłączać przez zapis do rejestru wyłączania cyfrowych wejść (ang. Digital Input Disable Register, DIDR0).

Na początek:  podrozdziału   strony 

Opis rejestrów

MCUCR – MCU Control Register – Rejestr sterujący mikrokontrolerem

Rejestr MCUCR zawiera bity sterujące wykrywaniem wykrywaniem przerwań zewnętrznych oraz zarządzaniem poborem energii.

Bit 7 6 5 4 3 2 1 0  
0x3A ISC01 ISC00 - BODS SM2 SM1 SM0 SE MCUCR
Zapis/Odczyt Z/O Z/O O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:6 – ISC01, ISC00: Interrupt Sense Control – Sterowanie wykrywaniem przerwań

Przerwanie zewnętrzne 0 jest uaktywniane przez zewnętrzną końcówkę INT0 (PB2), jeśli są ustawione na 1 znacznik I w rejestrze SREG oraz odpowiedni bit w masce przerwań. Poziom i zbocza sygnału na zewnętrznej końcówce INT0, które aktywują przerwanie są zdefiniowane w poniższej tabeli. Wartość na końcówce INT0 jest próbkowana przed wykrywaniem zboczy. Jeśli zostało wybrane przerwanie od zbocza lub zmiany stanu, to impulsy o czasie trwania dłuższym od okresu zegara wygenerują przerwanie. Krótsze impulsy nie dają gwarancji wygenerowania przerwania. Jeśli zostanie wybrane przerwanie od niskiego poziomu, to niski poziom musi być utrzymany aż do zakończenia wykonywania bieżącej instrukcji, aby zostało wygenerowane przerwanie.

ISC01 ISC00 Opis
0 0 Niski poziom na końcówce INT0 wygeneruje przerwanie.
0 1 Zmiana stanu logicznego końcówki INT0 wygeneruje przerwanie.
1 0 Opadające zbocze sygnału na końcówce INT0 wygeneruje przerwanie.
1 1 Narastające zbocze sygnału na końcówce INT0 wygeneruje przerwanie

Bit 5 – Zarezerwowane

Ten bit jest zarezerwowany i przy odczycie zawsze ma wartość 0.

Bit 4 – BODS: BOD Sleep – Wyłączenie modułu BOD w trybach uśpienia

W celu wyłączenia funkcji BOD podczas uśpienia bit BODS należy zapisać stanem 1. Operacja ta jest kontrolowana przez zabezpieczony ciąg instrukcji, który należy wykonać następująco:

  1. Wpisz sygnaturę uaktywnienia zmiany chronionych rejestrów we/wy do rejestru CPP.
  2. W ciągu następnych czterech cykli instrukcji zapisz bit BODS.

Bity 3:1 – SM2..SM0: Bity Wyboru Trybu Uśpienia

Te bity (ang. SM – Sleep Mode) dokonują wyboru pomiędzy dostępnymi trybami uśpienia, jak pokazano w poniższej tabeli:

SM2 SM1 SM0 Tryb uśpienia
0 0 0 Bezczynny
0 0 1 Redukcja zakłóceń dla przetwornika A/C
0 1 0 Wyłączenie zasilania
0 1 1 Zarezerwowane
1 0 0 Gotowość
1 0 1 Zarezerwowane
1 1 0 Zarezerwowane
1 1 1 Zarezerwowane

Bit 0 – SE: Uaktywnienie uśpienia

Bit SE (ang. Sleep Enable) musi być ustawiony w stan logiczny 1, aby mikrokontroler wszedł w tryb uśpienia, gdy jest wykonywana instrukcja SLEEP. Aby uniknąć wprowadzenia mikrokontrolera w niezamierzony stan uśpienia, zaleca się zapisanie bitu SE tuż przed wykonaniem instrukcji SLEEP i wyzerowanie go natychmiast po wybudzeniu.


PRR – Power Reduction Register – Rejestr Zmniejszania Poboru Energii

Bit 7 6 5 4 3 2 1 0  
0x35 - - - PRTWI PRSPI PRTIM1 PRTIM0 PRADC PRR
Zapis/Odczyt O O O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:5 – Zarezerwowane

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

Bit 4 – PRTWI: Power Reduction Two-Wire Interface – Zmniejszenie poboru prądu przez TWI

Zapisz logicznej jedynki do tego bitu wyłącza moduł interfejsu Two-Wire.

Bit 3 – PRSPI: Power Reduction Serial Peripheral Interface – Zmniejszenie poboru prądu przez SPI

Zapisz logicznej jedynki do tego bitu wyłącza moduł SPI.

Bit 2 – PRTIM1: Power Reduction Timer/Counter1 – Zmniejszenie poboru prądu przez timer/licznik 1

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

Bit 1 – PRTIM0: Power Reduction Timer/Counter0 – Zmniejszenie poboru prądu przez timer/licznik 0

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

Bit 0 – PRADC: Power Reduction ADC – Ograniczenie Zasilania Przetwornika A/C

Wpisanie logicznej jedynki do tego bitu wyłącza przetwornik A/C. Przetwornik A/C musi zostać dezaktywowany przed wyłączeniem.
Komparator analogowy nie może używać wejścia multipleksera przetwornika A/C, gdy ten jest wyłączony.

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
©2021 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.