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
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".
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.
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 przetwarzanie rozpocznie się automatycznie przy wejściu w ten tryb uśpienia.
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.
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.
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.
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.
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.
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).
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 |
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 |
Ten bit jest zarezerwowany i przy odczycie zawsze ma wartość 0.
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:
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 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 | - | - | - | 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 |
Te bity są zarezerwowane i przy odczycie zawsze będą miały wartość 0.
Zapisz logicznej jedynki do tego bitu wyłącza moduł interfejsu Two-Wire.
Zapisz logicznej jedynki do tego bitu wyłącza moduł SPI.
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.
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.
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.
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.