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) | 1,4 | 2,3 | V | ||
Napięcie progu resetu przy włączaniu (opadające) | 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,4 | 2,6 | 2,9 | V |
BODLEVEL = 0 | 3,7 | 4,0 | 4,5 | |||
tBOD | Minimalny okres niskiego napięcia przy wykrywaniu spadku VCC | BODLEVEL = 1 | 2 | μs | ||
BODLEVEL = 0 | 2 | |||||
VHYST | Histereza detektora spadku napięcia zasilania | 130 | mV |
Impuls POR (ang. Power-on Reset – reset przy włączeniu zasilania) jest generowany przez wewnętrzny obwód wykrywający. POR jest aktywowany zawsze, gdy napięcie zasilające VCC spadnie poniżej poziomu wykrywania. Obwód POR może zostać użyty zarówno do wyzwalania resetu przy włączaniu zasilania, jak również do wykrywania awarii napięcia zasilającego.
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
Zewnętrzne resetowanie generowane jest przez niski stan na wyprowadzeniu RESET. Impuls resetu dłuższy niż 2,5 μs wygeneruje reset, nawet jeśli zegar mikrokontrolera nie pracuje. Krótsze impulsy nie dają gwarancji wygenerowania resetu. Gdy zastosowany sygnał osiągnie napięcie progu resetowania VRST (ang. Reset Threshold Voltage) na zboczu narastającym (0 → 1), licznik opóźnienia uruchomi mikrokontroler po upływie okresu opóźnienia tTOUT.
Reset zewnętrzny w trakcie pracy mikrokontrolera
ATmega8 posiada wewnętrzny obwód wykrywania spadku
napięcia zasilającego (ang. Brown-out
Detection, BOD)
przeznaczony do monitorowania poziomu VCC podczas
pracy przez porównywanie go z ustalonym poziomem wyzwalającym.
Poziom wyzwalania dla modułu BOD można wybrać za pomocą bitu
bezpiecznikowego BODLEVEL na 2,7 V (BODLEVEL
niezaprogramowany) lub 4,0 V (BODLEVEL
zaprogramowany). Poziom wyzwalania ma histerezę, aby
zapewnić bezzakłóceniowe wykrywanie spadku napięcia
zasilającego. Histereza na poziomie wykrywania powinna być
interpretowana jako:
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
Gdy licznik zegarowy dojdzie do końca okresu swojego zliczania, wygeneruje krótki impuls reset o czasie trwania równym jednemu cyklowi zegara CK. Przy opadającym zboczu tego impulsu licznik opóźniający zaczyna zliczać okres opóźnienia tTOUT.
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) | - | - | - | - | WDRF | BORF | EXTRF | PORF | MCUSR |
Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | Zobacz na opis bitów |
Te bity są zarezerwowane w ATmega8 i dają zawsze odczyt zero.
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.
ATmega8 posiada wewnętrzne napięcie odniesienia, które używane jest do wykrywania spadków napięcia zasilania i może służyć jako dane wejściowe dla komparatora analogowego lub przetwornika A/C. Napięcie odniesienia 2,56 V dla przetwornika A/C generowane jest z wewnętrznego napięcia odniesienia,
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,30 | 1,40 | V |
tBG | Czas aktywacji VBG | 40 | 70 | μs | |
IBG | Prąd pobierany przez układ generujący VBG | 10 | μA |
Timer licznika zegarowego jest taktowany z osobnego, wbudowanego w układ oscylatora, który pracuje z częstotliwością 1 MHz. Jest to typowa wartość przy VCC = 5V. Zobacz na Parametry tego oscylatora przy innych poziomach VCC:
Przez sterowanie preskalerem timera licznika zegarowego interwał resetowania przez licznik zegarowy można ustawić zgodnie z tabelą w opisie rejestru WDTCR. Instrukcja WDR (ang, Watchdog Reset – reset licznika zegarowego) powoduje zresetowanie tego licznika i ponowne rozpoczęcie zliczania interwału. Timer licznika zegarowego jest również resetowany, gdy zostanie wyłączony lub gdy nastąpi reset układu. W celu określenia okresu resetowania można wybrać osiem różnych okresów cykli zegarowych. Jeśli okres resetowania minie bez zresetowania licznika zegarowego, to ATmega8 resetuje się i wykonuje program od wektora Reset.
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) | – | – | – | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Zapis/Odczyt | O | O | O | 0Z/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 ATmega8 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. Przy poziomach bezpieczeństwa 1 i 2 bit ten należy również ustawiać przy zmianie bitów preskalera.
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<<WDCE) | (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<<WDCE) | (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.