Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny20

Sterowanie systemem i reset

obrazek

Educational and Non-Profit Use of Copyrighted Material:

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: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Resetowanie mikrokontrolera AVR

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.

obrazek

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.

Na początek:  podrozdziału   strony 

Źródła resetu

Mikrokontrolery ATtiny20 posiadają cztery źródła RESETU:

Reset przy Włączaniu Zasilania

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 "Charakterystyki systemu i resetowania".

Start mikrokontrolera, RESET połączony z Vcc
obrazek

Start mikrokontrolera, RESET przedłużony zewnętrznie
obrazek

Zewnętrzny reset

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
obrazek

Reset od licznika zegarowego

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
obrazek

Reset przy spadku napięcia zasilającego

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: VBOT+ = VBOT + VHYST / 2 oraz VBOT- = VBOT - VHYST / 2.

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 "Charakterystyki Systemu i Resetu".

Reset przy spadku napięcia zasilającego w trakcie pracy
 obrazek

Na początek:  podrozdziału   strony 

Wewnętrzne napięcie odniesienia

Mikrokontroler ATtiny20 posiada wewnętrzne napięcie odniesienia. Używane jest ono przez moduł wykrywania spadku napięcia zasilającego, a może również pełnić rolę napięcia wejściowego dla komparatora analogowego lub przetwornika A/C.

Sygnały uaktywniające wewnętrzne napięcie odniesienia i czas włączania

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

Na początek:  podrozdziału   strony 

Licznik zegarowy

Licznik zegarowy (ang. Watchdog Timer) jest sterowany impulsami zegarowymi z wewnętrznego oscylatora pracującego z częstotliwością128 kHz. Licznik zintegrowany jest z preskalerem, który po prostu jest dalszą częścią licznika. Na wyjściach preskalera pojawiają się impulsy zegara o częstotliwościach odpowiednio podzielonych przez potęgi liczby 2. Na pierwszym wyjściu jest to 128kHz/2048 = 64Hz, na drugim 32Hz, później kolejno 16Hz, 8Hz, 4H, 2Hz, 1Hz, 0,5Hz, 0,25Hz, 0,125Hz. Sygnały z tych wyjść trafiają do multipleksera, który na podstawie bitów WDP0...WDP3 wybiera jedno z nich i przekazuje jego stan na swoje wyjście. Tam wybrany sygnał trafia na wejście bramki AND wraz z bitem WDE, który w stanie 1 powoduje, że sygnał ten trafia na wyjście bramki.

obrazek

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

Procedura zmiany konfiguracji licznika zegarowego

Wymagane operacje różnią się następująco w zależności od wybranego poziomu bezpieczeństwa:

Poziom bezpieczeństwa 1

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ą:

  1. Zapisz sygnaturę aktywowania zmiany zabezpieczonego rejestru we/wy do rejestru CCP.
  2. W ciągu następnych czterech cyklów instrukcji zapisz bity WDE i WDP.

Poziom bezpieczeństwa 2

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:

  1. Wpisz sygnaturę dla aktywowania zmiany chronionego rejestru we/wy do rejestru CCP
  2. W ciągu czterech cykli instrukcji zapisz bit WPD. Wartość wpisywana do WDE jest nieistotna.

Przykładowy kod

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
Na początek:  podrozdziału   strony 

Opis rejestrów

WDTCSR – Watchdog Timer Control and Status Register – Rejestr stanu i sterowania licznikiem zegarowym

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 7 – WDIF: Watchdog Timer Interrupt Flag – Znacznik Przerwania od Licznika Zegarowego

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

Bit 6 – WDIE: Watchdog Timer Interrupt Enable – Włączenie Przerwania z Licznika Zegarowego

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.

Bit 4 – Zarezerwowany

Ten bit jest zarezerwowany i przy odczycie zawsze daje stan zero.

Bit 3 – WDE: Watchdog System Reset Enable – Aktywacja Resetu Systemu od Licznika Zegarowego

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.

Bits 5, 2:0 – WDP3..0: Watchdog Timer Prescaler 3, 2, 1 and 0 – Preskaler Licznika Zegarowego

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

RSTFLR – Reset Flag Register – Rejestr znaczników 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 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  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane i w ATtiny20 przy odczycie zawsze dają stan 0.

Bit 3 – WDRF: Watchdog Reset Flag – Znacznik resetu od licznika zegarowego

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.

Bit 2 – BORF: Brown-Out Reset Flag – Znacznik resetu przy spadku napięcia zasilającego

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.

Bit 1 – EXTRF: External Reset Flag – Znacznik resetu zewnętrznego

Ten bit zostaje ustawiony przy resecie zewnętrznym. Bit jest zerowany po resecie przy włączeniu zasilania lub przez zapis logicznego zera do znacznika.

Bit 0 – PORF: Power-on Reset Flag – Znacznik resetu przy włączeniu zasilania

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.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.