Brown-out Detection – źródła sygnałów reset

Brown-out Detection – źródła sygnałów reset
Oceń opis

Dla przykładu µC AVR – ATtiny13 posiada cztery źródła resetowania, sygnały mogą być generowane z wewnętrznych bloków jak i z zewnątrz:
Power-on Reset. MCU jest resetowany, gdy napięcie jest na poziomie niższym niż wytycza je próg Power-on Reset (VPOT).
External Reset. MCU jest resetowany, gdy niski poziom jest obecny na pinie RESET dłużej niż minimalna długość impulsu.
Watchdog Reset. MCU jest resetowany po przekroczeniu okresu Watchdog Timer gdy funkcjonalność Watchdog jest włączona.
Brown-out Reset. MCU jest resetowany, gdy napięcie VCC znajduje się poniżej progu Brown-out Reset (VBOT) i funkcja Brown-out Detection jest włączona.
Większe MCU posiadać jeszcze mogą dodatkowe źródło sygnału reset:
JTAG AVR Reset. MCU jest resetowany, tak długo jak utrzymywana jest logiczna jedynka w rejestrze Reset, jednego z kanałów systemu JTAG.

Brown-out Detection – BOR.

Stanowi funkcjonalność wewnętrznego modułu µC, odpowiedzialnego za uruchomienie źródła resetu gdy napięcie zasilania będzie zbyt niskie – nieprawidłowe. Zatem uruchomienie tej funkcjonalności ustrzeże nas przed skutkami nieprawidłowego działania układu/programu w przypadku problemów z zasilaniem bądź jego zakłóceniami wywołanymi czynnikami zewnętrznymi.
Pamiętać należy, że każdy blok funkcjonalny, który jest dodatkowo załączony zużywa energię elektryczną  😉 ten szacunkowo około 20µA w przypadku większości µC ATtiny.
W zależności od wybranego napięcia zasilania mamy możliwość nastawienia progu zadziałania modułu BOD. Dodatkowo aktywacja i dezaktywacja sygnału reset uzależniona jest od histerezy (50mV).
Aktywacji funkcjonalności dokonuje się przez odpowiednią modyfikację bitu konfiguracyjnego BODEN, a wybór progu zadziałania określają bity BODLEVEL.

Warto zaznaczyć, iż producent zaleca aktywowanie BOD w przypadkach gdy wykorzystywana jest pamięć EEPROM. Funkcjonalność ta ma zapobiegać utracie danych gdy występują spadki napięcia lub problemy z zasilaniem.

Power-on Reset – POR.

Ten niezależny blok funkcjonalny zacznie działać generując sygnał reset, dopóki wzrastające napięcie zasilania nie przekroczy typowo 1,4V.

External Reset.

Sygnał generowany jest po ustawieniu stanu niskiego na pinie RESET (przekroczeniu napięcia progowego VRST). Teoretycznie wzbudzenie ma nastąpić gdy napięcie na pinie będzie zawierać się w przedziale 0,2÷0,9V, – dotyczy całej rodziny AVR. Ważne jest by czas trwania impulsu był odpowiednio długi, dla starszych µC może wynosić aż do 2,5µs (nowsze 400÷2000ns) i jego wymagana minimalna długość jest różna dla odmiennych poziomów napięć zasilania.
Wybrane µC mogą posiadać wbudowany trwale połączony rezystor Pull-up dla pinu RESET. Większość z nich dodatkowo ma funkcjonalność wyłączenia zewnętrznego sygnału reset, a pin może wtedy pełnić rolę standardowego wejścia wyjścia. Należy wtedy pamiętać o konsekwencjach zmiany funkcjonalności pinu reset – jest wymagany do programowania szeregowego.  :mrgreen: 

Watchdog Reset -WDR.

Ten blok generujący sygnał reset jest najbardziej rozbudowany z tytułu szerokiej możliwości konfiguracji. Jego funkcjonalność może znacznie się różnić w zależności od wybranego typu µC. Aby użyć tego wewnętrznego modułu należy ustawić bit konfiguracyjny WDTON i skonfigurować odpowiednio rejestr WDTCR. Gdy zostaną spełnione warunki zadziałania tego układu, generuje on krótki impuls, długości jednego cyklu swojego zegara. Na jego krawędzi opadającej tego sygnału, jak w każdym przypadku µC zacznie odliczać nastawiony czas zwłoki RESET TIME-OUT (trwania sygnału zerującego).

A co się działo wcześniej?

Producent umożliwił nam sprawdzenie źródła pochodzenia sygnału reset, w µC AVR dzięki rejestrom MCUSR (MCUCS) dla rodziny ATTiny i MCUCSR dla rodziny ATMega. Funkcjonalność taka pozwala analizować w programie czy µC wznowił pracę po resecie pochodzącym ze źródła External, BOD, lub Watchdog i JTAG (możliwe jest też przeprowadzenie bardziej zaawansowanych analiz łącznie z próbą odtworzenia stanu z przed resetu).
Gdyby ktoś pokusił się o używanie takiej funkcjonalności musi pamiętać o samodzielnym zerowaniu wartości rejestru po każdym odczycie. Rejestr jest zerowany wyłącznie po załączeniu zasilania. A wystąpienie kolejnego sygnału reset ze źródła innego niż POR ustawia odpowiedni znacznik rejestru MCUSR/MCUCSR.


Gdy źródło resetu jest aktywne, Porty I/O w AVR są natychmiast przywracane do stanu początkowego. Nie jest wymagane w tym celu żadne uruchomione źródło zegarowe.
Gdy wszystkie źródła resetu są już nieaktywne, wywoływany jest licznik opóźnienia, wewnętrznie rozciągając czas (tTOUT) trwania resetu nastawiany bitami CKSEL i SUT. Nastawiona zwłoka pozwala osiągnąć stabilny poziom zasilania przed rozpoczęciem normalnej pracy, oraz ustabilizować pracę oscylatora wewnętrznego.  Program rozpocznie pracę od wektora reset. W trakcie inicjalizacji µC,  wartości rejestrów roboczych i pamięci SRAM nie są zerowane.


Do wybudzenia µC z trybów uśpienia  – ADC Noise Reduction Mode i Power-Down Mode, nadadzą się sygnały reset ze źródeł Watchdog, External, i Brown-out.

A. D. 2014-06-25 po kilku konkretnych słowach „towarzysza doli i niedoli” tak Grzesio tu o tobie mowa  :mrgreen: uzupełnię ten wpis o kilka elementarnych informacji.

• Po pierwsze: dla przypomnienia aby uruchomić funkcjonalność BOD w Bascom AVR należy uruchomić funkcję programowania Program Chip , kolejnie zczytać konfigurację µC np posługując się opcją Identify Chip i przełączyć widok na zakładkę Lock and Fuse bits.

Załączam wbudowany blok funkcjonalny detektora BOR.


Nastawiam prawidłowy próg zadziałania funkcjonalności, zależny od aktualnie wybranego napięcia zasilania µC.

Na koniec obowiązkowo Write FS, zapis ustawień co układu scalonego.

Osobiście często posługuję się też funkcją programu Write PRG. Powoduje ona zapisanie dyrektywy konfiguracji bitów Lock and Fuse bits, w źródle programu. Bardzo wygodna funkcjonalność biorąc pod uwagę fakt, iż jest analizowana przez kompilator i brana pod uwagę podczas programowania MCU. Tym sposobem wracając do projektu, po pewnym czasie nie muszę dochodzić w swojej dokumentacji czy jakieś „fusy” nie były nastawione inaczej niż standardowo.

Dyrektywa jest wstawiana w aktualnej pozycji kursora w oknie kodu źródłowego!  😛

• Po drugie aby w pełni cieszyć się możliwością odczytu rejestru źródła pochodzenia sygnału reset, MCUSR (MCUCS), a co z tego wynika mieć dostęp do danych z przed resetu, należy zadbać by pamieć µC nie została wyzerowana automatycznie podczas kolejnego startu układu. Jak wiemy samo się to nie zrobi … ale każdorazowo po kompilacji, do kodu dołączana jest procedura inicjująca, która między innymi zeruje komórki pamięci. Przełącznikiem wyłączającym tą funkcjonalność jest: $noramclear. Dyrektywę należy umieścić w kodzie programu, mając na uwadze konsekwencje jej użycia.

Taka opcja powoduje stworzenie możliwości, oprogramowania nietuzinkowych funkcjonalności  :mrgreen: budowanego układu.

• Po trzecie, szczegółowego opisu użycia WDR w tym wpisie nie będzie. Temat jest na tyle złożony, że wykracza po za bieżący wątek.
Natomiast sama funkcjonalność tego bloku jest na tyle złożona i rozbudowana, tym samym ciekawa, że warto ją poruszyć w osobnym temacie. Dodatkowo możliwości funkcjonalne są odmienne dla indywidualnych układów, dużej rodziny µC AVR 8-bit.

Share Button
Tagi , , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

3 × 5 =