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 |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
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.
Poniższy rysunek z poprzedniego rozdziału przedstawia różne systemy zegarowe oraz ich rozdział w ATtiny4/5/9/10. Rysunek może być pomocny przy wyborze odpowiedniego trybu uśpienia.
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 (1) |
Aktywne źródło zegara głównego |
INT0 i zmiana wejść |
ADC (1) |
Inne we/wy |
Przerwanie od licznika zegarowego |
Przerwanie VLM |
|
Bezczynność | X | X | X | X | X | X | X | X | ||
Redukcja zakłóceń dla ADC | X | X | X (2) | X | X | X | ||||
Gotowość | X | X (2) | X | |||||||
Wyłączenie zasilania | X (2) | X |
Uwagi | 1. | Przetwornik A/C (ADC) dostępny jest tylko w ATtiny 5 i 10. |
2. | Dla INT0 tylko przerwanie od poziomu. |
Aby wejść w dowolny z czterech trybów uśpienia, bity SM (ang. Sleep Mode – Tryb Uśpienia) w rejestrze SMCR (ang. Sleep Mode Control Register – Rejestr Sterujący Trybami Uśpienia) muszą być ustawione na 1 i musi zostać wykonana instrukcja SLEEP. Bity SM2:0 w rejestrze SMCR 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".
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 (tylko ATtiny 5 i 10), to konwersja rozpoczyna się natychmiast, gdy mikrokontroler wejdzie w ten tryb uśpienia.
Gdy w bitach SM2:0 zostanie umieszczona wartość dwójkowa 001, 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 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 konwersja rozpocznie się automatycznie przy wejściu w ten tryb uśpienia.
Tryb ten jest jest dostępny na wszystkich mikrokontrolerach, chociaż jedynie ATtiny 5 i 10 są wyposażone w przetwornik A/C.
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.
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.
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.
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.
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.
Przetwornik A/C jest tylko w ATtiny 5 i 10.
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.
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).
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | - | - | - | - | SM2 | SM1 | SM0 | SW | 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ą zarezerwowane i przy odczycie zawsze będą miały wartość 0.
Te bity 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 (1) |
0 | 1 | 1 | Zarezerwowane |
1 | 0 | 0 | Gotowość |
1 | 0 | 1 | Zarezerwowane |
1 | 1 | 0 | Zarezerwowane |
1 | 1 | 1 | Zarezerwowane |
Uwaga: | (1) Ten tryb dostępny jest na wszystkich czterech mikrokontrolerach, jednak tylko ATtiny 5 i 10 posiadają przetwornik A/C |
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.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | - | - | - | - | - | - | PRADC | PRTIM0 | PRR |
Zapis/Odczyt | O | O | O | O | O | 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 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.
Przetwornik A/C dostępny jest jedynie na mikrokontrolerach
ATtiny 5 i 10.
Wpisanie logicznej jedynki do tego bitu wyłącza moduł timera/licznika 0. Gdy moduł ten zostanie włączony, jego działania będzie dokładnie takie samo jak przed wyłączeniem.
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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.