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
Porty we/wy mikrokontrolera AVR zostają natychmiast zresetowane do swojego stanu początkowego, gdy źródło resetu staje się aktywne. Nie wymaga to pracy żadnego źródła zegarowego.
Po ustąpieniu wszystkich źródeł resetu włączany jest licznik opóźniający, który rozciąga wewnętrzny reset. Pozwala to napięciu zasilającemu osiągnąć stabilny poziom przed rozpoczęciem normalnej pracy. Okres zliczania licznika opóźniającego jest definiowany przez użytkownika poprzez bity bezpiecznikowe CKSEL.
Logika resetu
Parametry resetu
Symbol | Parametr | Warunek | Min. | Typ. | Max. | Jednostki |
VPOT | Napięcie progu resetu przy włączaniu (narastające) | 1,4 | 2,3 | V | ||
Napięcie progu resetu przy włączaniu (opadające)(1) | 1,3 | 2,3 | ||||
VRST | Napięcie progu końcówki RESET | 0,2 | 0,9 | VCC | ||
tRST | Minimalna długość impulsu na końcówce RESET | 1,5 | μs | |||
VBOT | Napięcie progu resetu przy spadku VCC(2) | BODLEVEL = 1 | 2,5 | 2,7 | 2.9 | V |
BODLEVEL = 0 | 3,6 | 4,0 | 4,2 | |||
tBOD | Minimalny okres niskiego napięcia przy wykrywaniu spadku VCC | BODLEVEL = 1 | 2 | μs | ||
BODLEVEL = 0 | 2 | |||||
VHYST | Histereza detektora spadku napięcia zasilania | 50 | mV |
Obwód POR zapewnia resetowanie mikrokontrolera przy włączeniu zasilania. Gdy napięcie osiąga próg POR, włącza się licznik opóźniający, który określa czas utrzymywania mikrokontrolera w stanie resetu po podniesieniu się napięcia VCC. Sygnał resetu jest ponownie aktywowany bez żadnej zwłoki, gdy napięcie zasilające VCC spadnie poniżej poziomu wykrywania.
Start mikrokontrolera,
RESET połączony z Vcc
Start mikrokontrolera,
RESET przedłużony zewnętrznie
Reset zewnętrzny w trakcie pracy mikrokontrolera
Obwód BOD może być włączany/wyłączany przez bit bezpiecznikowy BODEN. Gdy BOD jest włączone (BODEN zaprogramowany) a VCC obniża się do wartości poniżej poziomu wyzwalania (VBOT- na obrazku poniżej), zostaje natychmiast uaktywniony reset od spadku napięcia. Gdy VCC wzrośnie powyżej poziomu wyzwalania (VBOT+), licznik opóźniający uruchamia mikrokontroler po upływie okresu zliczania tTOUT.
Obwód BOD tylko wtedy wykryje spadek w VCC, jeśli napięcie to pozostanie poniżej poziomu wyzwalania przez czas dłuższy od 2μs.
Reset przy spadku napięcia zasilającego w
trakcie pracy
Reset od licznika zegarowego podczas pracy
mikrokontrolera
Rejestr MCUSR dostarcza informacji na temat źródła, które spowodowało reset mikrokontrolera.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 (0x54) | JTD | ISC2 | - | JTRF | WDRF | BORF | EXTRF | PORF | MCUCSR |
Zapis/Odczyt | Z/O | Z/O | O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | Zobacz na opis bitów |
Ten bit zostanie ustawiony, jeśli reset powodowany jest przez logiczną jedynkę w rejestrze resetu JTAG wybranego instrukcją JTAG AVR_RESET. Bit jest zerowany przez reset przy włączaniu lub przez zapis logicznego zera do tego znacznika.
Ten bit jest ustawiany, jeśli wystąpi reset od licznika zegarowego. Bit jest zerowany przez reset przy włączeniu zasilania lub poprzez zapis logicznego zera do tego znacznika.
Ten bit jest ustawiany, jeśli wystąpi reset od spadku napięcia zasilania. Bit jest zerowany przez reset przy włączeniu zasilania lub poprzez zapis logicznego zera do tego znacznika.
Ten bit jest ustawiany, jeśli wystąpi reset zewnętrzny. Bit jest zerowany przez reset przy włączeniu zasilania lub poprzez zapis logicznego zera do tego znacznika.
Ten bit jest ustawiany, jeśli wystąpi reset przy włączeniu zasilania. Bit jest zerowany tylko przez zapis logicznego zera do znacznika.
Aby skorzystać ze znaczników resetu, użytkownik powinien odczytać, a następnie wyzerować rejestr MCUSR tak szybko, jak to jest możliwe w programie. Jeśli rejestr zostanie wyzerowany przed wystąpieniem następnego resetu, to źródło resetu można znaleźć przez testowanie poszczególnych znaczników resetu.
Napięcie odniesienia posiada pewien czas uruchamiania, który może wpływać na sposób jego wykorzystywania. Czas uruchamiania podany poniżej w tabeli. W celu oszczędności energii napięcie odniesienia nie zawsze jest włączane. Jest ono aktywne w następujących sytuacjach:
Stąd, jeśli układ BOD nie jest włączony, po ustawieniu bitu ACBG lub po włączeniu przetwornika A/C program użytkownika musi zawsze odczekać, aż napięcie to uruchomi się, zanim będzie można skorzystać z wyjścia komparatora analogowego lub przetwornika A/C.
Aby zmniejszyć pobór energii w trybie wyłączenia zasilania (ang. Power-down mode), przed wejściem w ten tryb uśpienia użytkownik może unikać trzech opisanych powyżej sytuacji, co zapewni wyłączenie modułu napięcia odniesienia.
Parametry wewnętrznego napięcia odniesienia
Symbol | Parametr | Min. | Typ. | Max. | Jednostki |
VBG | Napięcie odniesienia | 1,15 | 1,23 | 1,35 | V |
tBG | Czas aktywacji VBG | 40 | 70 | μs | |
IBG | Prąd pobierany przez układ generujący VBG | 10 | μA |
Aby uniknąć niezamierzonego wyłączenia licznika zegarowego, należy wykonać specjalną sekwencję wyłączającą, gdy licznik zegarowy ma faktycznie zostać wyłączony. Zobacz do opisu rejestru WDTCR.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 (0x41) | – | – | – | WDTOE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
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 zostały zarezerwowane w ATmega32 i zawsze przy odczycie mają wartość zero.
Ten bit musi być ustawiony, gdy bit WDE jest zapisywany logiczną jedynką. W przeciwnym razie licznik zegarowy nie zostanie wyłączony. Po wpisaniu jedynki bit ten zostanie sprzętowo wyzerowany po czterech taktach zegara. Zobacz do opisu następnego bitu, gdzie znajdziesz procedurę wyłączania licznika zegarowego.
Gdy do bitu WDE zostanie wpisana logiczna jedynka, zostaje włączony licznik zegarowy, a jeśli do WDE zostanie wpisane logiczne zero, timer licznika zegarowego zostaje wyłączony, WDE można wyzerować tylko wtedy, gdy bit WDCE ma poziom logiczny jeden. Aby włączyć lub wyłączyć timer licznika zegarowego, należy wykonać poniższą procedurę:
Bity WDP2, WDP1 i WDP0 określają preskalowanie timera licznika zegarowego, gdy timer ten jest włączony. Poniższa tabela pokazuje różne wartości preskalowania oraz odpowiadające im okresy zliczania.
WDP2 | WDP1 | WDP0 | Liczba cykli oscylatora | Typowy czas zliczania dla VCC = 3,0 V | Typowy czas zliczania dla VCC = 5,0 V |
0 | 0 | 0 | 16K (16384) | 17,1 ms | 16,3 ms |
0 | 0 | 1 | 32K (32768) | 34,3 ms | 32,5 ms |
0 | 1 | 0 | 64K (65536) | 68,5 ms | 65 ms |
0 | 1 | 1 | 128K (131072) | 0,14 s | 0,13 s |
1 | 0 | 0 | 256K (262144) | 0,27 s | 0,26 s |
1 | 0 | 1 | 512K (524288) | 0,55 s | 0,52 s |
1 | 1 | 0 | 1024K (1048576) | 1,1 s | 1,0 s |
1 | 1 | 1 | 2048K (2097152) | 2,2 s | 2,1 s |
Poniższy przykład kodu pokazuje jedną funkcję w asemblerze i w języku C wyłączania timera licznika zegarowego. Przykład zakłada, iż przerwania są kontrolowane globalnie, aby można je było chwilowo wyłączyć i nie wystąpiły podczas wykonywania tych funkcji.
Przykład w kodzie maszynowym |
WDT_off: ; Resetuj timer licznika zegarowego wdr ; Zapisz logiczną jedynkę do WDCE i WDE ; Zachowaj stare ustawienie preskalera, aby zapobiec ; niezamierzonemu zakończeniu okresu zliczania in r16, WDTCR ori r16, (1<<WDTOE) | (1<<WDE) out WDTCR, r16 ; Wyłącz WDT ldi r16, (0<<WDE) out WDTCR, r16 ret |
Przykład w języku C |
void WDT_off(void) { /* Resetuj timer licznika zegarowego */ _WDR(); /* Zapisz logiczną jedynkę do WDCE i WDE */ WDTCR |= (1<<WDTOE) | (1<<WDE); /* Wyłącz WDT */ WDTCR = 0x00; } |
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.