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

ATtiny24/44/84

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.

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, uaktywniony 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. Okres zliczania w tym liczniku opóźniającym jest definiowany przez użytkownika poprzez bity bezpiecznikowe SUT i CKSEL.


Na początek:  podrozdziału   strony 

Źródła resetu

Mikrokontrolery ATtiny2313A/4313 posiadają cztery źródła RESETU:

Charakterystyka resetu

Symbol Parametr Warunki Min(1) Typ.(1) Max(1) Jednostki
VPOT Próg napięcia rosnącego dla resetu przy włączaniu TA = -40 ... +85°C   1,2   V
Próg napięcia opadającego dla resetu przy włączaniu(2) TA = -40 ... +85°C   1,1   V
VRST Próg napięcia końcówki RESET VCC = 1,8 ... 5,5V 0,2VCC   0,9VCC V
tRST Minimalna długość impulsu na końcówce RESET VCC = 1,8 ... 5,5V     2,5 μs
Uwagi: 1. Podane wartości są jedynie orientacyjne.
  2. Reset przy włączaniu nie zadziała, aż do momentu, gdy napięcie zasilające nie spadnie poniżej progu VPOT.

Reset przy Włączaniu

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
obrazek

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

Reset zewnętrzny

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
obrazek 

Reset przy spadku napięcia zasilającego

ATtiny2313A/4313 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ą bitów bezpiecznikowych BODLEVEL. 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.

Kodowanie bitów bezpiecznikowych BODLEVEL(1)

Bity BODLEVEL 2...0 Min. VBOT Typ. VBOT Max. VBOT Jednostki
111 Moduł BOD wyłączony
110   1,8   V
101   2,7   V
100   4,3   V
011 Zarezerwowane
010
001
000
Uwaga: 1. VBOT może być poniżej minimalnego napięcia pracy w niektórych mikrokontrolerach. W ich przypadku są one testowane dla VCC obniżanego do VBOT podczas testów fabrycznych. Gwarantuje to, iż reset przy spadku VCC wystąpi zanim napięcie to spadnie do wartości, przy której nie jest już zapewnione poprawne działanie mikrokontrolera. Testy te są wykonywane przy BODLEVEL = 110 dla ATtiny2313V i BODLEVEL = 101 dla ATtiny2313L.

Charakterystyka wykrywania spadku VCC

Symbol Parametr Min. Typ. Max. Jednostki
VHYST Histereza detektora BOD   50   mV
tBOD Minimalna długość impulsu
do wywołania resetu BOD
  2   μs

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.

Reset przy spadku napięcia zasilającego w trakcie pracy
 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 

Wewnętrzne napięcie odniesienia

Mikrokontroler ATtiny24/44/84 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. Napięcie odniesienia zmienia się z temperaturą oraz napięciem zasilającym.

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 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(1)

Symbol Parametr Warunki Min. Typ. Max. Jednostki
VBG Napięcie odniesienia VCC = 2,7V
TA = 25°C
1,0 1,1 1,2 V
tBG Czas aktywacji VBG VCC = 2,7V
TA = 25°C
  40 70 μs
IBG Prąd pobierany przez układ generujący VBG VCC = 2,7V
TA = 25°C
  15   μA
Uwaga: 1. Podane wartości są jedynie orientacyjne.

Na początek:  podrozdziału   strony 

Timer licznika zegarowego

Timer licznika zegarowego (ang. Watchdog Timer) jest taktowany z wewnętrznego oscylatora pracującego z częstotliwością 128 kHz. Sterując preskalerem timera licznika zegarowego można ustawiać odpowiedni interwał czasowy resetu z licznika zegarowego. Instrukcja WDR (ang. Watchdog Reset, reset licznika zegarowego) – resetuje timer licznika zegarowego. Timer ten jest również resetowany, gdy zostanie wyłączony lub gdy wystąpi reset układu (ang. Chip Reset). Można wybierać różne okresy cyklów zegarowych, aby określać okres resetu. Jeśli okres ten upłynie bez kolejnego zresetowania licznika zegarowego, to mikrokontroler ATtiny2313A/4313 zresetuje się i rozpocznie wykonywanie programu od wektora resetu.

Timer licznika zegarowego może również zostać skonfigurowany do generowania przerwania zamiast resetu. Może to być bardzo pomocne przy stosowaniu licznika zegarowego do wybudzania z trybu wyłączenia. Aby zapobiec niezamierzonemu wyłączeniu licznika zegarowego lub niezamierzonej zmianie okresu zliczania, bit bezpiecznikowy WDTON wybiera dwa różne poziomy bezpieczeństwa, jak pokazuje poniższa tabelka:

WDTON Poziom
bezpieczeństwa
Stan początkowy
licznika zegarowego
Jak wyłączyć
licznik zegarowy
Jak zmienić
okres zliczania
Niezaprogramowany 1 Wyłączony Sekwencja czasowa Bez ograniczeń
Zaprogramowany 2 Włączony Zawsze włączony Sekwencja czasowa

Timer licznika zegarowego

Sekwencje czasowe do zmiany konfiguracji timera licznika czasu

Sekwencja do zmiany konfiguracji różni się nieznacznie pomiędzy dwoma poziomami bezpieczeństwa. Dla każdego poziomu opisane są oddzielne procedury.

Poziom bezpieczeństwa 1

W tym trybie timer licznika zegarowego jest wstępnie wyłączony, lecz może zostać włączony przez zapis stanem jeden bitu WDE bez żadnych ograniczeń. Sekwencja czasowa jest potrzebna do wyłączenia uruchomionego timera licznika zegarowego. Należy w tym celu postępować wg poniższej procedury:
  • W tej samej operacji zapisz logiczne jedynki do bitów WDCE i WDE. Logiczna jedynka musi być wpisana do WDE bez względu na poprzednią wartość bitu WDE.
  • W ciągu następnych czterech taktów zegara w tej samej operacji zapisz bity WDE i WDP dowolnymi stanami logicznymi, lecz z wyzerowanym bitem WDCE.

Poziom bezpieczeństwa 2

W tym trybie timer licznika zegarowego jest zawsze włączony, a bit WDE zawsze daje przy odczycie stan logiczny jeden. Sekwencja czasowa potrzebna jest przy zmianie okresu zliczania timera licznika zegarowego. Aby zmienić ten okres, należy postępować wg następującej procedury:
  • W tej samej operacji wpisz logiczne jedynki do bitów WDCE i WDE. Nawet jeśli bit WDE jest zawsze ustawiony na 1, musi być zapisany jedynką, aby rozpocząć sekwencję czasową.
  • W ciągu następnych czterech taktów zegarowych w tej samej operacji wpisz do bitów WDP pożądaną wartość, lecz z bitem WDCE wyzerowanym. Wartość wpisywana do bitu WDE jest nieistotna.

Przykładowe programy

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:
  ; Wyłącz przerwania globalnie
  cli
  ; Resetuj timer licznika zegarowego
  wdr
  ; Zeruj bit WDRF w MCUSR
  in r16, MCUSR
  andi r16, (0xff - (1<<WDRF))
  out MCUSR, r16
  ; 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
  ; Włącz przerwania globalnie
  sei
  ret
Przykład w języku C(1)
void WDT_off(void)
{
  __disable_interrupt();
  __watchdog_reset();
  /* Zeruj WDRF w MCUSR */
  MCUSR &= ~(1<<WDRF);
  /* Zapisz logiczną jedynkę do WDCE i WDE */
  /* Zachowaj stare ustawienie preskalera, aby zapobiec
     niezamierzonemu zakończeniu okresu zliczania
  */
  WDTCR |= (1<<WDCE) | (1<<WDE);
  /* Wyłącz WDT */
  WDTCR = 0x00;
  __enable_interrupt();
}

Uwaga: 1. Przykładowy kod zakłada dołączenie odpowiednich plików nagłówkowych


Na początek:  podrozdziału   strony 

Opis rejestrów

MCUSR – MCU Status Register – Rejestr stanu 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  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane w ATtiny2313A/4313 i dają zawsze odczyt zero.

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 przez reset przy włączeniu zasilania lub poprzez zapis logicznego zera do tego znacznika.

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

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.

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

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.

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

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.


WDTCSR – Watchdog Timer Control Register – Rejestr sterujący licznika zegarowego

Bit 7 6 5 4 3 2 1 0  
0x21 (0x41) WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCSR
Zapis/Odczyt Z/O Z/O Z/O Z/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

Ten bit jest ustawiany, gdy timer licznika zegarowego zakończy swój okres zliczania i jest skonfigurowany na wygenerowanie przerwania. Bit WDIF jest zerowany sprzętowo przy wywołaniu odpowiedniego wektora obsługi przerwania. Alternatywnie bit WDIF można wyzerować przez zapis logicznej jedynki do znacznika. Gdy bity I w SREG oraz WDIE są ustawione, zakończenie okresu zliczania w timerze licznika zegarowego powoduje wykonanie przerwania od licznika zegarowego (ang. Watchdog Time-out Interrupt).

Bit 6 – WDIE: Watchdog Timer Interrupt Enable – Uaktywnienie przerwań od licznika zegarowego

Gdy ten bit zostanie zapisany jako 1 i bit I w rejestrze SREG jest ustawiony, to włączane są przerwania od licznika zegarowego. Jeśli w kombinacji z tym ustawieniem bit WDE jest wyzerowany, to timer licznika zegarowego pracuje w trybie przerwań, a odpowiednie przerwanie zostanie wykonane, jeśli timer zakończy swój okres zliczania.

Jeśli bit WDE jest ustawiony, to timer licznika zegarowego pracuje w trybie przerwania i resetu systemu. Za pierwszym razem gdy nastąpi zakończenie okresu zliczania w liczniku zegarowym, zostanie ustawiony znacznik WDIF. Wykonanie odpowiadającego mu wektora przerwań wyzeruje automatycznie bity WDIE i WDIF (licznik zegarowy przejdzie w tryb resetu systemu). Jest to przydatne przy utrzymywaniu bezpieczeństwa za pomocą licznika zegarowego przy korzystaniu z tego przerwania. Aby pozostać w trybie przerwania i resetu systemu, bit WDIE musi być ustawiany po każdym przerwaniu. Tego jednak nie powinno się wykonywać w samej procedurze obsługi przerwania, ponieważ moze to naruszyć funkcję bezpieczeństwa trybu resetu systemu przez licznik zegarowy. Jeśli przerwanie nie wystąpi do zakończenia następnego okresu zliczania licznika zegarowego, zostanie zastosowany reset systemu.

Konfiguracja timera licznika zegarowego

WDE WDTIE Stan timera licznika zegarowego Działanie przy zakończeniu okresu zliczania
0 0 Zatrzymany Żadne
0 1 Pracuje Przerwanie
1 0 Pracuje Reset
1 1 Pracuje Przerwanie

Bit 4 – WDCE: Watchdog Change Enable – Uaktywnienie zmian w liczniku zegarowym

Ten bit musi być ustawiony, gdy do bitu WDE jest wpisywane logiczne zero. W przeciwnym razie licznik zegarowy nie zostanie wyłączony. Po zapisaniu jedynką bit zostanie sprzętowo wyzerowany po czterech cyklach zegara. Zobacz na opis bitu WDE poniżej, gdzie jest procedura wyłączania licznika zegarowego. Bit ten również musi być ustawiony prze zmienianiu bitów preskalera.

Bit 3 – WDE: Watchdog System Reset Enable – Uaktywnienie resetu systemu od licznika zegarowego

Gdy do bitu WDE zostanie wpisana logiczna jedynka, licznik czasu zostaje uaktywniony, a gdy do WDE będzie wpisane logiczne zero, funkcja licznika zegarowego zostanie wyłączona. Bit WDE może zostać wyzerowany tylko wtedy, gdy bit WDCE  ma poziom logiczny jeden. Aby wyłączyć działający timer licznika zegarowego, należy postępować wg następującej procedury:

  1. W tej samej operacji wpisz logiczną jedynkę do bitów WDCE i WDE. Logiczna jedynka musi być wpisana do WDE, nawet jeśli przed operacją bit ten był ustawiony na jeden.
  2. W ciągu następnych czterech cykli zegara wpisz logiczne zero do WDE. Wyłączy to licznik zegarowy.

Przy poziomie 2 zabezpieczeń nie można wyłączyć licznika czasu, nawet za pomocą przedstawionego powyżej algorytmu.

Przy poziomie 1 zabezpieczeń bit WDE jest przechwytywany przez bit WDRF w rejestrze MCUSR. Oznacza to, iż WDE jest zawsze ustawiony, gdy WDRF jest ustawiony. Aby wyzerować WDE bit WDRF musi być wyzerowany przed wyłączeniem licznika zegarowego za pomocą opisanej wyżej procedury. Ta cecha zapewnia wielokrotne resety podczas sytuacji wywołujących błędy oraz bezpieczny start po takim błędzie.

Uwaga:

Jeśli licznik zegarowy nie będzie używany w aplikacji, to należy wykonać procedurę jego wyłączenia w czasie inicjalizacji mikrokontrolera. Jeśli licznik zegarowy przypadkowo włączy się, np. przez źle działający wskaźnik lub spadek napięcia zasilającego, to mikrokontroler zostanie zresetowany, co następnie doprowadzi do nowego resetu od licznika zegarowego. Aby uniknąć tej sytuacji, oprogramowanie aplikacji powinno zawsze zerować znacznik WDRF oraz bit sterujący WDE w procedurze inicjalizacyjnej.

Bity 5, 2:0 – WDP[3:0]: Watchdog Timer Prescaler 3, 2, 1 and 0 – Bity preskalera licznika zegarowego

Bity WDP[3:0] określają ustawienie preskalera dla timera licznika zegarowego, gdy timer ten jest uruchomiony. Wartości ustawień preskalera oraz odpowiadające im okresy zliczania są pokazane w poniższej tabeli:

WDP3 WDP2 WDP1 WDP0 Liczba cykli oscylatora licznika zegarowego Typowy okres zliczania przy VCC = 5V
0 0 0 0 2K (2048) 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,0 s
0 1 1 1 256K (262144) cykli 2,0 s
1 0 0 0 512K (524288) cykli 4,0 s
1 0 0 1 1024K (1048576) cykli 8,0 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

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.