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 |
©2023 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Tryby uśpienia umożliwiają aplikacji zamknięcie nieużywanych modułów w mikrokontrolerze, przez co oszczędzana jest energia. AVR udostępnia różne tryby uśpienia pozwalające użytkownikowi dopasować zużycie energii do wymagań aplikacji.
Aby wejść w dowolny z sześciu trybów uśpienia, należy wpisać logiczną jedynkę do bitu SE w rejestrze MCUCR, a następnie wykonać instrukcję SLEEP. Bity SM2...0 w rejestrze MCUCR określają, który tryb uśpienia (bezczynny, zmniejszania zakłóceń dla przetwornika A/C, wyłączenia zasilania, oszczędzania, oczekiwania w gotowości i rozszerzonego oczekiwania w gotowości) zostanie uaktywniony przez instrukcję SLEEP. Gdy w trakcie uśpienia pojawi się dozwolone przerwanie, mikrokontroler wybudzi się. Następnie mikrokontroler jest wstrzymywany przez cztery cykle zegara dodatkowo do czasu uruchamiania, po czym wykonuje procedurę obsługi przerwania i kontynuuje realizację programu głównego od następnej instrukcji za SLEEP. Gdy mikrokontroler wybudza się z uśpienia, zawartość zestawu rejestrów i pamięci SRAM jest niezmieniona. Gdy w trakcie uśpienia wystąpi reset, mikrokontroler wybudza się i wykonuje program od wektora resetu.
![]() |
Powyższy rysunek z poprzedniego rozdziału przedstawia różne systemy zegarowe w mikrokontrolerze ATmega64 i ich dystrybucję. Rysunek jest pomocny przy wyborze odpowiedniego trybu uśpienia.
Tryb bezczynności pozwala mikrokontrolerowi wybudzić się przy przerwaniach wyzwalanych zarówno zewnętrznie jak i wewnętrznie, jak przerwania od nadmiarów timerów i przy zakończeniu transmisji USART. 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.
Obniża to poziom zakłóceń od sieci logicznej, co poprawia precyzję przetwarzania w przetworniku A/C, umożliwiając pomiary z większą rozdzielczością. 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 zgodności adresu 2-przewodowego interfejsu szeregowego, przerwanie z timera/licznika 0, przerwanie od gotowości SPM/EEPROM, przerwanie zewnętrzne od poziomu na wejściach NT7:4 lub przerwanie zewnętrzne na wejściach INT3:0.
Zapamiętaj, iż jeśli do wybudzania z trybu wyłączenia używane jest przerwanie wyzwalane poziomem, to zmieniony poziom musi się utrzymywać przez pewien czas, aby wybudzić mikrokontroler. Zobacz do rozdziału "8-bitowy timer/licznik 0 z PWM i z pracą asynchroniczną".
Przy wybudzaniu z trybu wyłączenia istnieje pewne opóźnienie od czasu wystąpienia warunku wybudzenia do jego aktywacji. Pozwala to zegarowi uruchomić się ponownie i ustabilizować po wcześniejszym zatrzymaniu. Okres wybudzania definiują te same bity bezpiecznikowe CKSEL, które definiują okres upływu czasu resetu, co opisano w podrozdziale "Źródła zegarowe".
Jeśli timer/licznik 2 jest taktowany asynchronicznie, tj. jest ustawiony bit AS2 bit rejestrze ASSR, to timer/licznik 2 będzie pracował podczas uśpienia. Mikrokontroler może wybudzić się albo przy przepełnieniu timera, albo przy zdarzeniu Output Compare z timera/licznika 2, jeśli odpowiednie bity uaktywnienia przerwania z timera/licznika 2 zostały ustawione w rejestrze TIMSK oraz ustawiony jest bit globalnego włączania przerwań I w rejestrze stanu SREG.
Jeśli asynchroniczny timer NIE jest taktowany asynchronicznie, zaleca się tryb wyłączenia zasilania zamiast trybu oszczędzania energii, ponieważ zawartość rejestrów w asynchronicznym timerze powinna być traktowana jako niezdefiniowana po wybudzeniu z trybu oszczędzania energii, jeśli AS2 ma stan 0.
Ten tryb uśpienia zasadniczo zatrzymuje wszystkie zegary z wyjątkiem clkASY, pozwalając na pracę jedynie modułom asynchronicznym, łącznie z timerem/licznikiem 2, jeśli jest on taktowany asynchronicznie.
Aktywne domeny zegarowe | Oscylatory | Źródła wybudzeń | |||||||||||
Tryb uśpienia | clkCPU | clkFLASH | clkIO | clkADC | clkASY | Włączone główne źródło zegarowe | Włączony oscylator timera | INT2/INT1/INT0 | Zgodność adresu TWI | Timer 2 | Gotowość SPM/EEPROM | ADC | Inne we/wy |
Bezczynność | X | X | X | X | X(2) | X | X | X | X | X | X | ||
Redukcja zakłóceń | X | X | X | X(2) | X(3) | X | X | X | X | ||||
Wyłączenie zasilania | X(3) | X | |||||||||||
Oszczędność energii | X(2) | X(2) | X(3) | X | X(2) | ||||||||
Gotowość(1) | X | X(3) | X | ||||||||||
Rozszerzona gotowość(1) | X(2) | X | X(2) | X(3) | X | X(2) |
Uwagi: | 1. | Jako źródło zegarowe wybrany został zewnętrzny kwarc lub rezonator. |
2. | Jeśli bit AS2 w ASSR jest ustawiony. | |
3. | Tylko przerwanie INT3:0 lub przerwanie od poziomu INT7:4. |
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".
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".
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 bit bezpiecznikowy BODEN, 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 konfiguracji modułu BOD znajdziesz w podrozdziale "Wykrywanie spadku napięcia".
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 "Timer licznika zegarowego".
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. Zobacz do rozdziału "Porty we/wy".
Jeśli został uaktywniony wewnętrzny system debugowania przez bit bezpiecznikowy OCDEN, a układ wszedł w tryb uśpienia wyłączenia zasilania lub oszczędzania energii, to główne źródło zegarowe pozostaje włączone. W tych trybach przyczyni się to znacząco do całkowitego poboru prądu. Można tego uniknąć na trzy alternatywne sposoby:
Końcówka TDO pozostaje w stanie niepodłączonym, gdy włączony jest interfejs JTAG, a kontroler JTAG TAP nie przesuwa danych. Jeśli układ sprzętowy połączony z końcówką TDO nie podciągnie w górę poziomu logicznego, to pobór prądu zwiększy się. Zauważ, iż końcówka TDI dla następnego układu w łańcuchu skanowania zawiera opornik podciągający, który eliminuje ten problem. Zapis jedynką bitu JTD w rejestrze MCUCSR lub pozostawienie w stanie niezaprogramowanym bitu bezpiecznikowego JTAGEN wyłączy interfejs JTAG.
Rejestr ten zawiera bity sterujące zarządzaniem poborem energii.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 (0x55) | SRE | SRW10 | SE | SM1 | SM0 | SM2 | IVSEL | IVCE | 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 SE musi być zapisany logiczną jedynką, aby mikrokontroler wszedł w tryb uśpienia, gdy wykona instrukcję SLEEP. Aby uniknąć wejścia w uśpienie, jeśli nie jest to intencją programisty, zaleca się ustawienie bitu SE tuż przed wykonaniem instrukcji SLEEP i natychmiastowe wyzerowanie go po wybudzeniu.
Bity te wybierają jeden z sześciu dostępnych trybów uśpienia według tabelki poniżej.
SM2 | SM1 | SM1 | Tryb uśpienia |
0 | 0 | 0 | Bezczynność |
0 | 0 | 1 | Redukcja zakłóceń dla przetwornika A/C |
0 | 1 | 0 | Wyłączenie zasilania |
0 | 1 | 1 | Oszczędzanie energii |
1 | 0 | 0 | Zarezerwowane |
1 | 0 | 1 | Zarezerwowane |
1 | 1 | 0 | Gotowość(1) |
1 | 1 | 1 | Rozszerzona gotowość(1) |
Uwaga: | 1. | Tryby gotowości i rozszerzonej gotowości dostępne są tylko przy taktowaniu mikrokontrolera zewnętrznymi kwarcami lub rezonatorami. |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 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.