|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s
permission is not required when using copyrighted material in:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

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.
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

Zewnętrzne resetowanie generowane jest przez niski stan na wyprowadzeniu RESET. Impuls resetu dłuższy niż 50 ns 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

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

ATtiny20 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 ma histerezę, aby zapewnić bezzakłóceniowe
wykrywanie spadku napięcia zasilającego. Histereza na poziomie
wykrywania powinna być interpretowana jako:
Gdy obwód BOD został aktywowany, a napięcie VCC zmniejsza się do wartości poniżej poziomu wyzwalania (na obrazku poniżej oznaczonym jako VBOT-), zostaje natychmiast aktywowany reset przy spadku napięcia zasilającego. Gdy VCC zwiększa się ponad poziom wyzwalania (oznaczony na obrazku jako VBOT+), licznik opóźniający uruchamia mikrokontroler po upływie okresu opóźnienia tTOUT.
Obwód BOD wykryje spadek napięcia VCC tylko wtedy, gdy pozostanie ono poniżej poziomu dłużej niż czas tBOD podany w rozdziale "Parametry Systemu i Resetu".
Reset przy spadku napięcia zasilającego w
trakcie pracy

Napięcie odniesienia posiada pewien czas uruchamiania, który może wpływać na sposób jego wykorzystywania. Czas uruchamiania podany jest w rozdziale "Parametry Systemu i Resetu". 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.

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 ATtiny20 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.
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 | ||
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 | BORF | EXTRF | PORF | RSTFLR |
| Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | X | X | X | X |
Te bity są zarezerwowane i w ATtiny20 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, jeśli wystąpi reset wywołany przez detektor spadku napięcia zasilania VCC. Bit jest zerowany przez reset przy włączaniu 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.
Aby skorzystać ze znaczników resetu przy wykrywaniu źródła resetu, użytkownik powinien odczytać, a następnie wyzerować rejestr RSTFLR tak szybko, jak to jest możliwe w programie. Jeśli rejestr zostanie wyzerowany przed wystąpieniem innego resetu, to jego źródło można znaleźć przez sprawdzenie stanu znaczników resetu.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.