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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny4/5/9/10

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. Sekwencja startowa jest opisana w podrozdziale "Uruchamianie".


Na początek:  podrozdziału   strony 

Źródła resetu

Mikrokontrolery ATtiny4/5/9/10 posiadają trzy ź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 "Parametry systemu i resetowania".

Start mikrokontrolera, RESET połączony z VCC

obrazek

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

obrazek

Monitorowanie poziomu napięcia zasilającego Vcc

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.

Resetowanie zewnętrzne

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

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


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

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.

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

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

VLMCSR – VCC Level Monitoring Control and Status register – Rejestr stanu oraz sterowania poziomami monitorowania napięcia zasilającego

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  

Bit 7 – VLMF: VLM Flag – Znacznik VLM

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.

Bit 6 – VLMIE: VLM Interrupt Enable – Uaktywnienie przerwań od poziomu napięcia Vcc.

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.

Bity 5:3 – Zarezerwowane

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 2:0 – VLM2:0: Trigger Level of Voltage Level Monitor – Poziom wyzwalania monitora poziomu napięcia zasilającego

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


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

Bity 7:4, 2 – Zarezerwowane

Te bity są zarezerwowane i w ATtiny4/5/9/10 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 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.


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
©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: i-lo@eduinf.waw.pl

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

Informacje dodatkowe.