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
Podczas resetu wszystkie rejestry we/wy są ustawiane na ich wartości początkowe, a wykonanie programu rozpoczyna się od wektora Reset. Instrukcją umieszczoną w tym wektorze musi być instrukcja skoku względnego RJMP (ang. Relative Jump) do procedury obsługi resetu. Jeśli program nigdy nie uaktywnia źródła przerwań, wektory przerwań nie są używane i w ich miejscu może zostać umieszczony zwykły kod. Schemat na poniższym rysunku pokazuje logikę resetu.
Porty we/wy zostają natychmiast zresetowane do swojego stanu początkowego, gdy źródło resetu staje się aktywne. Nie wymaga to pracy żadnego źródła sygnałów zegarowych. Gdy wszystkie źródła resetu staną się nieaktywne, wywołany zostaje licznik opóźnień, który rozciągnie w czasie wewnętrzny reset. Pozwoli to napięciu zasilającemu osiągnąć stabilny poziom przed rozpoczęciem normalnej pracy mikrokontrolera. Sekwencja startowa jest opisana w podrozdziale "Uruchamianie".
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.
Wartości poziomów wykrywania znajdziesz w podrozdziale "Parametry systemu i resetowania".
Start mikrokontrolera, RESET połączony z VCC
Start mikrokontrolera, RESET przedłużony zewnętrznie
Mikrokontrolery ATtiny4/5/9/10 posiadają obwód monitorowania poziomu napięcia zasilającego Vcc, VLM (ang. VCC Level Monitoring circuit), który porównuje poziom napięcia na końcówce VCC (nóżka nr 5) układu z ustalonymi poziomami wyzwalania. Poziomy wyzwalania są ustawiane za pomocą bitów VLM2:0 w rejestrze stanu i sterowania sterowania monitorowaniem poziomów napięcia Vcc, VLMCSR (ang. VCC Level Monitoring Control and Status register). Obwód VLM udostępnia znacznik stanu VLMF, który wskazuje, czy napięcie na wyprowadzeniu VCC jest poniżej wybranego poziomu wyzwalania. Znacznik może być odczytany z rejestru VLMCSR, lecz jest również możliwe wygenerowanie przerwania, gdy znacznik VLMF zostaje ustawiony. Przerwanie to jest uaktywniane bitem VLMIE w rejestrze VLMCSR Znacznik może zostać wyzerowany przez zmianę poziomu wyzwalania lub przez zapisanie do niego bitu o stanie 0. Znacznik jest automatycznie zerowany, gdy napięcie Vcc wzrośnie ponownie powyżej wybranego poziomu wyzwalania.
VLM może być również użyte do ulepszenia charakterystyk resetowania przy spadku napięcia zasilającego. Bez VLM reset przy włączeniu zasilania (POR) nie aktywuje się aż napięcie zasilające spadnie do poziomu, przy którym mikrokontroler niekoniecznie będzie dalej użyteczny. Przy pomocy VLM możliwe jest wygenerowanie resetu wcześniej.
Gdy obwód VLM jest aktywny, to pobiera nieco energii. Aby ją zaoszczędzić, obwód VLM można całkowicie wyłączyć lub włączać i wyłączać go w regularnych odstępach czasu. Jednakże pomiar zajmuje nieco czasu, dlatego zaleca się pozostawiać ten obwód włączony na tyle długo, aby sygnały zdążyły się ustalić. Gdy VLM jest aktywne a napięcie na końcówce VCC jest powyżej wybranego poziomu wyzwalania, działanie będzie takie jak normalnie, a VLM można wyłączyć na krótki okres czasu. Jeśli napięcie na końcówce VCC spadnie poniżej wybranego progu, VLM albo ustawi znacznik przerwania VLMF, albo wygeneruje reset, zależnie od konfiguracji.
Gdy VLM zostało skonfigurowane do generowania resetu przy niskim napięciu zasilającym, będzie utrzymywało mikrokontroler w stanie resetu tak długo, jak napięcie Vcc jest poniżej poziomu resetowania. Gdy napięcie zasilania wzrośnie powyżej poziomu resetowania, warunek zostanie usunięty, a mikrokontroler wyjdzie ze stanu resetu i zainicjuje sekwencję startową przy włączeniu zasilania (ang.power-up start-up sequence).
Jeśli napięcie zasilania spadnie wystarczająco, aby wyzwolić POR, to znacznik PORF zostanie ustawiony po powrocie napięcia do właściwego poziomu.
Zewnętrzne resetowanie generowane jest przez niski stan na wyprowadzeniu RESET (nóżka nr 6), jeśli zostało uaktywnione. Impuls resetu dłuższy od minimalnej szerokości impulsu (zobacz do podrozdziału “Parametry systemu i resetowania”) 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 krawędzi dodatniej (narastającej, 0 → 1), licznik opóźnienia uruchomi mikrokontroler po upływie okresu opóźnienia tTOUT. Zewnętrzny reset jest ignorowany przy zliczaniu w sekwencji startu po włączeniu zasilania. Po tej sekwencji wewnętrzny reset zostanie rozszerzony tylko wtedy, gdy na końcówce RESET panuje niski poziom logiczny, gdy licznik opóźnienia przy włączaniu zasilania zakończył zliczanie. Porównaj ze sobą dwa przebiegi umieszczone powyżej.
Reset zewnętrzny w trakcie pracy mikrokontrolera
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óźnienia zaczyna zliczać okres opóźnienia tTOUT.
Reset od licznika zegarowego podczas pracy mikrokontrolera
Sterując podziałem częstotliwości wyjściowej za pomocą preskalera, okres zliczania licznika zegarowego można regulować w szerokim zakresie (od 1/64s do 8s). Instrukcja WDR (ang. Watchdog Reset – resetowanie licznika zegarowego) zeruje ten licznik. Licznik zegarowy jest również zerowany, gdy zostaje zablokowany i gdy występuje reset mikrokontrolera. W celu określenia okresu resetowania można wybrać dziesięć różnych częstotliwości zegarowych. Jeśli okres resetowania minie bez kolejnego zerowania licznika zegarowego, mikrokontroler ATtiny4/5/9/10 zostaje zresetowany i wznawia wykonywanie programu od wektora resetu.
Licznik zegarowy można również zaprogramować do generowania przerwania zamiast resetu. Może być to bardzo pomocne, gdy licznik zegarowy jest wykorzystywany przy wybudzaniu z trybu uśpienia z wyłączeniem zasilania.
Aby zapobiec niezamierzonemu wyłączeniu licznika zegarowego lub niezamierzonej zmianie jego okresu zliczania, dwa różne poziomy bezpieczeństwa są wybierane przez bit bezpiecznikowy WDTON, jak pokazuje poniższa tabela:
WDTON | Poziom bezpieczeństwa |
Stan początkowy licznika zegarowego |
Jak wyłączyć licznik zegarowy? |
Jak zmienić okres zliczania? |
niezaprogramowany | 1 | Wyłączony | Zabezpieczona sekwencja zmiany |
Bez ograniczeń |
zaprogramowany | 2 | Włączony | Zawsze włączony | Zabezpieczona sekwencja zmiany |
Wymagane operacje różnią się następująco w zależności od wybranego poziomu bezpieczeństwa:
W tym trybie licznik zegarowy jest początkowo wyłączony, lecz może zostać włączony bez żadnych ograniczeń przez ustawienie bitu WDE. Specjalna sekwencja jest potrzebna przy włączaniu/wyłączaniu licznika zegarowego. W celu wyłączenia go, należy postępować zgodnie z następującą procedurą:
W tym trybie licznik zegarowy jest zawsze uaktywniony, a bit WDE ma przy odczycie zawsze stan 1. Do zmiany okresu zliczania licznika zegarowego potrzebna jest chroniona sekwencja zmiany, która wygląda następująco:
Poniższy przykładowy kod pokazuje, jak wyłączyć licznik zegarowy. Przykład zakłada kontrolowanie przerwań (np. przez globalne zablokowanie przerwań), aby żadne z nich nie wystąpiło podczas wykonywania tych instrukcji.
Przykład w kodzie maszynowym:
WDT_off: wdr ; Wyzeruj WDRF w RSTFLR in r16, RSTFLR andi r16, ~(1<<WDRF) out RSTFLR, r16 ; Wpisz sygnaturę uaktywnienia zmiany chronionego rejestry we/wy ldi r16, 0xD8 out CCP, r16 ; w ciągu czterech cykli instrukcji wyłącz WDT ldi r16, (0<<WDE) out WDTCSR, r16 ret |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | WDIF | WDIE | WDP3 | - | WDE | WDP2 | WDP1 | WDP0 | WDTCSR |
Zapis/Odczyt | Z/O | Z/O | Z/O | O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit ten jest ustawiany, gdy licznik zegarowy zliczy do końca swojego okresu, a został on skonfigurowany do przerwań. WDIF jest zerowany sprzętowo, gdy zostanie wykonany odpowiedni wektor obsługi przerwania. Alternatywnie WDIF można wyzerować zapisując do niego bit o wartości 1 (nie 0!). Gdy bit WDIE zostanie ustawiony, koniec okresu zliczania w liczniku zegarowym powoduje żądanie przerwania od licznika zegarowego (ang. Watchdog Time-out Interrupt).
Gdy ten bit zostanie zapisany stanem logicznym 1, uaktywnia się przerwanie z licznika zegarowego. Jeśli bit WDE jest wyzerowany w połączeniu z tym ustawieniem, licznik zegarowy pracuje w trybie przerwań, a odpowiednie przerwanie jest generowane, gdy licznik zliczy swój okres.
Jeśli WDE jest ustawione na 1, licznik zegarowy pracuje w trybie przerwań i resetowania systemu. Pierwszy okres w liczniku zegarowym ustawi WDIF. Wykonanie odpowiedniego wektora przerwań spowoduje automatycznie sprzętowe wyzerowanie WDIE i WDIF (licznik zegarowy przejdzie w tryb resetu systemu). Jest to przydatne przy utrzymywaniu bezpieczeństwa licznika zegarowego podczas użycia przerwania. Aby pozostać w trybie przerwań i resetowania systemu, bit WDIE musi być ustawiany po każdym przerwaniu. To jednak nie powinno być wykonywane wewnątrz procedury obsługi tego przerwania, ponieważ mogłoby doprowadzić do naruszenia funkcji bezpieczeństwa trybu resetowania systemu. Jeśli przerwanie nie zostanie wykonane przed następnym okresem licznika zegarowego, to zostanie zastosowane resetowanie systemu.
Konfiguracja licznika zegarowego
WDTON(1) | WDE | WDIE | Tryb | Działanie przy zliczeniu okresu |
1 | 0 | 0 | Zatrzymany | Żadne |
1 | 0 | 1 | Tryb przerwań | Przerwanie |
1 | 1 | 0 | Tryb resetowania systemu | Reset |
1 | 1 | 1 | Tryb przerwań i resetowania systemu | Przerwanie, następnie reset systemu |
0 | X | X | Tryb resetowania systemu | Reset |
Uwaga: | 1. Konfiguracja fusebitu WDTON ustawionego na “0“ oznacza zaprogramowany, a ustawionego na “1“ oznacza niezaprogramowany. |
Ten bit jest zarezerwowany i przy odczycie zawsze daje stan zero.
Bit WDE jest nadpisywany przez WDRF w RSTFLR. Oznacza to, iż WDE zawsze będzie ustawiany, gdy WDRF jest ustawiany. Aby wyzerować WDE, WDRF musi być wyzerowany najpierw. Ta cecha zapewnia wielokrotne resety podczas warunków powodujących awarie i bezpieczne uruchamianie po awarii.
Bity WDP3..0 określają podział częstotliwości, gdy licznik zegarowy jest uruchomiony. Poniższa tabela pokazuje wartości bitów preskalera wraz z odpowiadającymi im okresami zliczeń licznika zegarowego:
WDP3 | WDP2 | WDP1 | WDP0 | Liczba cykli oscylatora |
Typowy okres zliczania przy Vcc = 5.0V |
0 | 0 | 0 | 0 | 2K (2014) cykli | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) cykli | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) cykli | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) cykli | 0,125 s |
0 | 1 | 0 | 0 | 32K (32768) cykli | 0,25 s |
0 | 1 | 0 | 1 | 64K (65536) cykli | 0,5 s |
0 | 1 | 1 | 0 | 128K (131072) cykli | 1 s |
0 | 1 | 1 | 1 | 256K (262144) cykli | 2 s |
1 | 0 | 0 | 0 | 512K (524288) cykli | 4 s |
1 | 0 | 0 | 1 | 1024K (1048576) cykli | 8 s |
1 | 0 | 1 | 0 | Zarezerwowane | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | VLMF | VLMIE | - | - | - | VLM2 | VLM1 | VLM0 | VLMCSR |
Zapis/Odczyt | O | Z/O | O | O | O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Ten bit jest ustawiany przez obwód VLM w celu zasygnalizowania, iż warunek poziomu napięcia został wyzwolony (zobacz na tabelę poniżej). Bit ten zostaje wyzerowany, gdy w bitach VLM2:0 zostanie wybrane łączenie reakcji na poziom napięcia Vcc lub gdy napięcie Vcc wzrośnie ponad wybrany poziom wyzwalania.
Gdy zostanie ustawiony ten bit, mikrokontroler będzie reagował na przerwanie od poziomu napięcia zasilającego, VLM. Przerwanie to jest generowane zawsze, gdy jest ustawiany znacznik VLMF.
Te bity są zarezerwowane. W celu zapewnienia kompatybilności z przyszłymi wersjami mikrokontrolera, muszą być zapisane wartością zero, gdy następuje zapis do rejestru.
Bity te ustawiają poziom wyzwalania dla monitora poziomu napięcia, jak opisuje tabela poniżej:
VLM2:0 | Etykieta | Opis |
000 | VLM0 | Wyłączenie monitora napięcia zasilającego |
001 | VLM1L | Wyzwolenie powoduje
zwykły reset przy włączeniu zasilania. Znacznik VLM nie jest ustawiany |
010 | VLM1H | |
011 | VLM2 | Wyzwolenie ustawia znacznik VLM i generuje przerwanie VLM, jeśli zostało uaktywnione. |
100 | VLM3 | |
101 | Niedozwolone | |
110 | ||
111 |
Poziomy napięć opisane są w podrozdziale "Parametry systemowe i resetu".
Rejestr znaczników resetu udostępnia informację o tym, które ze źródeł resetu spowodowało reset mikrokontrolera.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | - | - | - | - | WDRF | - | EXTRF | PORF | RSTFLR |
Zapis/Odczyt | O | O | O | O | Z/O | O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | X | 0 | X | X |
Te bity są zarezerwowane i w ATtiny4/5/9/10 przy odczycie zawsze dają stan 0.
Ten bit jest ustawiany, jeśli wystąpi reset od licznika zegarowego. Bit jest zerowany po resecie przy włączeniu zasilania lub przez zapis logicznego zera do znacznika.
Ten bit zostaje ustawiony przy resecie zewnętrznym. Bit jest zerowany po resecie przy włączeniu zasilania lub przez zapis logicznego zera do znacznika.
Ten bit jest ustawiany po wystąpieniu resetu przy włączeniu zasilania. Bit jest zerowany tylko przez zapisanie logicznego zera do znacznika.
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.