Timer 1
Transkrypt
Timer 1
Systemy wbudowane Układy czasowo-licznikowe Obsługa przerwań Zasilanie, zegar i zerowanie Tryb uśpienia Ogólnie o timerach ● ● Układy czasowo-licznikowe służą do precyzyjnego odmierzania czasu i/lub zliczania impulsów ze źródeł zewnętrznych. Każdy mikrokontroler posiada w swojej strukturze kilka takich układów o różnych możliwościach. Mikrokontrolery z rodziny PIC16 mogą posiadać trzy układy czasowolicznikowe: ● TIMER 0 – 8 bitowy licznik impulsów zegarowych (cykl instrukcji) lub impulsów zewnętrznych doprowadzonych do wejścia T0CKI; posiada współdzielony z układem licznika nadzorcy (WDT) preskaler o podziale w zakresie od 1:2 do 1:256; ● TIMER 1 – 16 bitowy licznik impulsów zegarowych (cykl instrukcji) lub impulsów zewnętrznych doprowadzonych do wejścia T1CKI; do jego wejścia można podłączyć rezonator kwarcowy; posiada własny preskaler o podziale w zakresie od 1:1 do 1:8; współpracuje z układem CCP; ● TIMER 2 – 8 bitowy licznik impulsów zegarowych (cykl instrukcji); maksymalna wartość licznika ustawiana jest w rejestrze PR2; posiada własny preskaler o podziale w zakresie od 1:1 do 1:16 oraz postskaler w zakresie od 1:1 do 1:16; współpracuje z układem CCP. Timer 0 Układ czasowy TIMER0 jest 8-bitowym czasomierzem lub licznikiem impulsów. Posiada on następujące właściwości: · możliwość odczytu i zapisu; · możliwość dołączenia 8-bitowego preskalera; · możliwość wyboru źródła zliczanych impulsów (wewnętrzne lub zewnętrzne); · możliwość wyboru zbocza zewnętrznego zegara, na które układ będzie reagował; · możliwość wywołania przerwania przy przepełnieniu licznika (zmianie zawartości z FFh na 00h). Timer 0 - schemat Przerwanie od Timera 0 ● ● ● ● ● Układ czasowy TIMER0 ma możliwość generacji przerwania w momencie przepełnienia licznika. Przepełnienie licznika skutkuje ustawieniem bitu T0IF w rejestrze INTCON na jedynkę. Przerwanie to może zostać zamaskowane poprzez wyzerowanie bitu T0IE w rejestrze INTCON. Bit T0IF powinien zostać wyzerowany programowo w procedurze obsługi przerwania przed ponownym włączeniem przerwania od układu TIMER0. Układ czasowy TIMER0 nie jest zdolny do wybudzenia mikrokontrolera ze stanu uśpienia. Preskaler ● ● ● ● ● ● ● ● Układ czasowy TIMER0 posiada możliwość dołączenia wewnętrznego 8-bitowego preskalera, który jest jednocześnie postskalerem dla układu licznika nadzorcy (WDT). Użycie preskalera z układem TIMER0 powoduje, że nie jest on dostępny dla licznika nadzorcy i odwrotnie. Wybór układu, z którym połączony jest preskaler jest dokonywany za pomocą bitu PSA w rejestrze OPTION_REG. Jeżeli bit PSA jest ustawiony na jedynkę – preskaler jest dołączony do licznika nadzorcy (WDT), a jeśli jest wyzerowany – do układu TIMER0. Współczynnik podziału preskalera jest ustawiany za pomocą bitów PS2:PS0 w rejestrze OPTION_REG. Kiedy preskaler jest dołączony do układu TIMER0, wszystkie instrukcje modyfikujące rejestr TMR0 zerują preskaler. Kiedy preskaler jest dołączony do licznika nadzorcy instrukcja CLRWDT zerująca licznik nadzorcy – zeruje także preskaler. Do preskalera nie można zapisywać żadnych danych ani ich odczytywać. Preskaler Bity PS2,PS1,PS0 Podział dla TIMER0 Podział dla WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 Rejestry Timera 0 ● ● ● ● ● ● Rejestr TMR0 jest głównym rejestrem układu TIMER0. Do tego rejestru zapisuje się wartość od której licznik ma rozpocząć zliczanie impulsów. Przepełnienie rejestru TMR0 (zmiana wartości z FFh na 00h) powoduje wywołanie przerwania oraz ustawienie bitu T0IF na jedynkę. Rejestr OPTION_REG służy głównie do ustawiania opcji układu czasowego TIMER T0CS – wybór źródła impulsów, które będzie zliczał Timer0; gdy T0CS = 1 źródłem impulsów jest wyprowadzenie T0CKI, dla T0CS = 0 impulsy pochodzą od zegara systemowego; T0SE – wybór zbocza, które powoduje zwiększenie licznika; gdy T0SE = 1 wybierane jest zbocze opadające (z poziomu wysokiego na niski), dla T0SE = 0 zliczanie odbywa się przy zboczu rosnącym (z poziomu niskiego na wysoki); PSA – wybór układu, do którego dołączony jest preskaler; dla PSA = 1 preskaler jest podłączony do licznika nadzorcy (WDT), gdy PSA = 0 preskaler jest podłączony do TIMER0; PS2, PS1, PS0 – wybór podziału częstotliwości przez preskaler; gdy preskaler dołączony jest do układu TIMER0, Tryb czasomierza ● ● Tryb czasomierza jest wybierany poprzez wyzerowanie bitu T0CS w rejestrze OPTION_REG. W tym trybie zawartość licznika jest inkrementowana w każdym cyklu rozkazowym (bez preskalera). Jeżeli do rejestru licznika TMR0 jest zapisywana jakaś wartość, inkrementacja jest zawieszana na 2 następne cykle. Użytkownik powinien to skorygować poprzez wpisanie odpowiedniej wartości do rejestru TMR0. ; program zlicza za pomocą TIMER0 125 impulsów zegara wewnętrznego ; z podzielnikiem 1/8 (1000 impulsów) bsf STATUS, RP0 ; bank 1 movlw B'00000010' ; ustaw tryb czasomierza, prescaler na 1/8 movwf OPTION_REG ; zliczanie impulsów zegarowych bcf STATUS, RP0 ; bank 0 movlw movwf .256 - .125 TMR0 ; licz do 125 ; Tryb licznika ● ● ● ● Tryb licznika wybiera się poprzez ustawienie na jedynkę bitu T0CS w rejestrze OPTION_REG. W trybie licznika zawartość licznika będzie inkrementowana w przypadku nadejścia każdego narastającego lub opadającego zbocza na wyprowadzeniu RA4/T0CKI. Zbocze, na które licznik ma reagować jest ustalane za pomocą bitu T0SE w rejestrze OPTION_REG. Wyzerowanie tego bitu oznacza, że układ będzie reagował na zbocze narastające, a ustawienie na jedynkę oznacza, że układ będzie reagował na zbocze opadające sygnału na wyprowadzeniu RA4/T0CKI. bsf STATUS, RP0 ; bank 1 movlw B'00100001' ; ustaw tryb licznika, prescaler na 1/4 movwf OPTION_REG ; zliczanie impulsów zegarowych bcf STATUS, RP0 ; bank 0 movlw movwf .256 - .125 TMR0 ; licz do 125 ; Timer 1 ● ● ● ● ● Układ TIMER1 jest 16-bitowym licznikiem lub czasomierzem składającym się z dwóch rejestrów: TMR1H i TMR1L. Możliwy jest oczywiście zarówno odczyt, jak i zapis tych rejestrów. Para rejestrów TMR1H:TMR1L jest inkrementowana od wartości 0000h do FFFFh i po przepełnieniu – licznik zaczyna liczyć z powrotem od 0000h. Układ posiada preskaler, który może wstępnie podzielić częstotliwość zliczanych impulsów przez wartość 1, 2, 4 lub 8. Wszystkie instrukcje zapisujące do rejestrów TMR1H i TMR1L zerują preskaler. Timer 1 - schemat Timer 1 - cechy ● ● ● Układ TIMER1 ma możliwość zgłaszania przerwania, które jest generowane przy przepełnieniu licznika. ● Przerwanie jest sygnalizowane poprzez ustawienie na jedynkę bitu TMR1F w rejestrze PIR1. ● Przerwanie to może być aktywowane lub maskowane za pomocą ustawiania lub zerowania bitu TMRIE w rejestrze PIE1. Układ czasowy TIMER1 może pracować w dwóch trybach: w trybie czasomierza i w trybie licznika. Tryb pracy jest wybierany za pomocą bitu TMR1CS w rejestrze T1CON. ● W trybie czasomierza (TMR1CS=0) układ czasowy jest inkrementowany w każdym cyklu rozkazowym. ● W trybie licznika układ czasowy zwiększa swoją zawartość o 1 przy nadejściu każdego narastającego zbocza zewnętrznego sygnału zegarowego. Timer 1 - cechy ● ● ● ● Układ czasowy TIMER1 może być włączany lub wyłączany poprzez ustawianie lub zerowanie bitu TMR1ON w rejestrze T1CON. Układ czasowy TIMER1 posiada także wewnętrzne wejście zerujące. Sygnał Reset może być generowany przez jeden z dwóch modułów CCP (Capture, Compare, PWM). W przypadku, gdy włączony jest oscylator zewnętrzny układu TIMER1 (bit T1OSCEN w rejestrze T1CON ustawiony na jedynkę), wyprowadzenia RC1/T1OSI/CCP2 i RC0/T1OSO/T1CKI stają się wejściami. Wówczas zawartość bitów nr 1 i nr 0 rejestru TRISC jest ignorowana i z wyprowadzeń tych jest zawsze odczytywana wartość zero. Rejestr T1CON ● ● ● ● ● T1CKPS1, T1CKPS0 – wybór podziału częstotliwości przez preskaler; podział częstotliwości odbywa się w stosunku 1:2N, gdzie N jest wartością binarną, w której bity 1 i 0 są określone wartościami bitów odpowiednio T1CKPS1 i T1CKPS0; T1OSCEN – włączenie (wartością 1) lub wyłączenie (wartością 0) układu generatora zegarowego na wyprowadzeniach T1OSI i T1OSO; gdy generator nie jest potrzebny należy go wyłączyć w celu zmniejszenia poboru prądu przez układ; T1SYNC – włączenie (wartością 0) lub wyłączenie (wartością 1) synchronizacji sygnału zewnętrznego z wewnętrznym układem taktującym; gdy TMR1CS = 0 wartość tego bitu nie ma znaczenia (źródłem impulsów jest zegar systemowy); TMR1CS – wybór źródła impulsów, które będzie zliczał TIMER1; gdy TMR1CS = 1 źródłem impulsów jest wyprowadzenie T1CKI, dla TMR1CS = 0 impulsy pochodzą od zegara systemowego; TMR1ON – włączenie (wartością 1) lub wyłączenie (wartością 0) układu TIMER1. Timer 2 ● ● Układ TIMER2 jest 8-bitowym czasomierzem składającym się z dwóch rejestrów: TMR2 i PR2. Rejestr TMR2 może być odczytywany, jak i zapisywany oraz jest zerowany podczas każdego restartu mikrokontrolera Timer 2 - cechy ● ● ● ● ● ● ● ● Układ posiada preskaler pozwalający podzielić częstotliwość sygnału zegarowego w stosunku 1:2, 1:4 i 1:16. Wybór podziału odbywa się z wykorzystaniem rejestru T2CON. Układ czasowy TIMER2 posiada też rejestr PR2, w którym zapisuje się wartość do jakiej ma liczyć układ. Jeżeli zawartość rejestru TMR2 zrówna się z zawartością rejestru PR2 wówczas rejestr TMR2 jest zerowany w następnym cyklu rozkazowym. Możliwy jest zarówno odczyt, jak i zapis rejestru PR2, rejestr ten jest inicjowany wartością FFh w przypadku zerowania mikrokontrolera. Na wyjściu komparatora, porównującego zawartość rejestrów TMR2 i PR2 został umieszczony 4-bitowy postskaler (o stosunku podziału od 1:1 do 1:16), który generuje przerwanie ustawiające znacznik TMR2IF w rejestrze PIR1 na jedynkę. Układ TIMER2 może zostać wyłączony poprzez wyzerowanie bitu TMR2ON w rejestrze T2CON, w celu minimalizacji poboru mocy. Wyjście rejestru TMR2 może być podłączone do modułu SSP, który opcjonalnie może używać układu czasowego TIMER2 do generacji sygnału zegara. Preskaler i postskaler dla Timera 2 Układy preskalera i postskalera są zerowane w przypadku wystąpienia następujących sytuacji: · zapisu do rejestru TMR2; · zapisu do rejestru T2CON; · każdego typu zerowania mikrokontrolera (POR, MCLR, WDT lub BOR). ● ● ● ● Rejestr TMR2 nie jest zerowany w przypadku zapisu do rejestru T2CON. Wybór podziału częstotliwości preskalera odbywa się za pomocą bitów T2CKPS1, T2CKPS0 rejestru T2CON. Podział częstotliwości sygnału zegarowego odbywa się w stosunku 1:2N+1, gdzie N jest wartością binarną, w której bity 1 i 0 są określone wartościami bitów odpowiednio T2CKPS1 i T2CKPS0, przy czym dla N=2 i N=3 wartość podziału wynosi 16. Podział częstotliwości postskalera ustala się za pomocą bitów TOUTPS3, TOUTPS2, TOUTPS1, TOUTPS0. Podział ten odbywa się w stosunku 1:(N+1), gdzie N jest wartością binarną, w której bity 3, 2, 1 i 0 są określone wartościami bitów odpowiednio TOUTPS3, TOUTPS2, TOUTPS1 i TOUTPS0. Rejestr T2CON ● ● ● TOUTPS3, TOUTPS2, TOUTPS1, TOUTPS0 – wybór podziału częstotliwości wyjściowej przez postskaler; podział częstotliwości odbywa się w stosunku 1:(N+1), gdzie N jest wartością binarną, w której bity 3, 2, 1 i 0 są określone wartościami bitów odpowiednio TOUTPS3, TOUTPS2, TOUTPS1 i TOUTPS0; TMR2ON – włączenie (wartością 1) lub wyłączenie (wartością 0) układu TIMER2; T2CKPS1, T2CKPS0 – wybór podziału częstotliwości przez preskaler; gdy preskaler dołączony jest do układu TIMER2, podział częstotliwości odbywa się w stosunku 1:2N+1, gdzie N jest wartością binarną, w której bity 1 i 0 są określone wartościami bitów odpowiednio T2CKPS1 i T2CKPS0, przy czym dla N=2 i N=3 wartość podziału wynosi 16. Licznik nadzorcy ● ● ● ● Licznik nadzorcy, inaczej strażnik (WDT – Watchdog Timer) jest swobodnie działającym wewnętrznym oscylatorem RC, który nie potrzebuje żadnych komponentów zewnętrznych. Oscylator RC układu WDT jest odseparowany od oscylatora RC mikrokontrolera podłączonego do wyprowadzenia OSC1/CLKIN. Oznacza to, że licznik nadzorcy będzie działał nawet, jeżeli sygnał zegarowy na wyprowadzeniach OSC1 i OSC2 zostanie zatrzymany, np. przy wywołaniu instrukcji SLEEP. Układ WDT jest włączany i wyłączany za pomocą rejestru konfiguracyjnego mikrokontrolera przy programowaniu i nie można go wyłączyć programowo. Schemat blokowy WDT ● ● ● ● Do licznika nadzorcy można dołączyć postskaler o współczynniku podziału częstotliwości od 1:1 do 1:128. Postskaler ten jest współdzielony z układem czasowym TIMER0. Tylko jedno z tych urządzeń może w danej chwili używać układu preskalera/postskalera. Konfigurowanie układu postskalera odbywa się za pośrednictwem rejestru OPTION_REG. Działanie WDT ● ● ● ● ● ● Podczas normalnej pracy, przepełnienie licznika WDT generuje sygnał zerowania mikrokontrolera. Jeżeli mikrokontroler jest w trybie uśpienia, przepełnienie licznika WDT powoduje wyjście mikrokontrolera ze stanu uśpienia i kontynuowanie dalszej pracy. Licznik nadzorcy posiada nominalny czas przepełnienia licznika równy 18 ms (bez postskalera). Czas ten zależy od temperatury, napięcia zasilania i wykonania konkretnego układu scalonego. Jeżeli wymagany jest dłuższy czas przepełnienia wówczas można zastosować postskaler ze stosunkiem podziału do wartości 1:128. Instrukcje CLRWDT oraz SLEEP powodują wyzerowanie licznika WDT oraz postskalera (jeśli jest dołączony do licznika nadzorcy) i zabezpieczają go przed przepełnieniem i generacją sygnału zerowania. Po przepełnieniu licznika WDT zerowany jest bit TO w rejestrze STATUS. Schemat układu przerwań PIC16F877A Obsługa przerwań ● ● ● ● ● ● ● W mikrokontrolerze istnieje przynajmniej jeden rejestr do sterowania maskowaniem przerwań oraz do sprawdzania ich stanu. Jest to rejestr INTCON. Dodatkowe rejestry do obsługi przerwań od urządzeń peryferyjnych: PIE1, PIE2, PIR1, PIR2 W rejestrze INTCON znajduje się bit GIE (Global Interrupt Enable), który włącza (1) lub wyłącza (0) wszystkie przerwania. Poszczególne przerwania mogą być uaktywniane lub wyłączane za pomocą odpowiednich bitów w rejestrze INTCON Bit GIE jest zawsze wyzerowany podczas restartu mikrokontrolera. Instrukcja powrotu z przerwania (RETFIE) wychodzi z procedury przerwania jak również ustawia bit GIE, co pozwala na obsługę kolejnego przerwania. W rejestrze INTCON znajdują się zawsze bity sterujące przerwaniami od: wejścia INT, zmiany stanu na wyprowadzeniach RB7:RB4 portu B oraz przepełnienia licznika układu TIMER0. Obsługa przerwań ● ● ● ● ● Kiedy przerwanie jest obsługiwane, bit GIE powinien być wyzerowany, aby wyłączyć przerwania przychodzące, adres powrotu jest odkładany na stosie, a licznik rozkazów jest ładowany wartością 0004h. Następnie należy zidentyfikować przerwanie poprzez sprawdzanie znaczników flag poszczególnych przerwań w rejestrye INTCON. Generalnie, ustawiony znacznik przerwania powinien zostać z powrotem wyzerowany programowo przed ponownym włączeniem wszystkich przerwań, aby uniknąć rekurencji. Należy zwrócić uwagę na to, ze znaczniki identyfikujące przerwania, są ustawiane w wyniku nastąpienia jakiegoś zdarzenia niezależnie od stanu bitów maskujących przerwania, w tym bitu GIE. Należy też zauważyć, że kiedy instrukcja zerująca bit GIE jest wykonywana, inne przerwania czekające na obsługę w następnym cyklu są ignorowane. ● Jednostka centralna wykonuje instrukcję NOP w następnym cyklu po instrukcji zerowania bitu GIE. ● Przerwania, które zostały zignorowane nadal czekają na obsługę do czasu, aż bit GIE zostanie z powrotem ustawiony na jedynkę. Rejestr INTCON ● ● ● ● ● ● ● ● bit 7 (GIE): włączenie(1) lub wyłączenie(0) wszystkich przerwań (bit GIE posiada najwyższy priorytet ) bit 6: (PEIE): uaktywnienie (1) przerwań od urządzeń peryferyjnych (dalsza obsługa w rejestrach PIE1, PIR1, PIE2, PIR2); bit 5 (T0IE): bit uaktywniający (1) wywołanie przerwania po przepełnieniu licznika TIMER0 bit 4 (INTE): uaktywnienie (1) przerwania zewnętrznego (z wyprowadzenia RB0/INT) bit 3 (RBIE): włączenie (1) przerwania pochodzącego od zmiany stanu wyprowadzeń 4..7 na porcie B bit 2 (T0IF): bit informujący (1) o przerwaniu spowodowanym przepełnieniem licznika TIMER0 bit 1 (INTF): bit informujący (1) o tym, że ostatnie przerwanie zostało wywołane odpowiednią zmianą sygnału na końcówce RB0/INT bit 0 (RBIF): bit informujący (1) o tym, ze ostatnie przerwanie zostało wywołane zmianą stanu na jednym z wyprowadzeń portu B (RB7:RB4) Przerwanie zewnętrzne INT ● ● ● ● ● ● ● ● ● Mikrokontroler może reagować zarówno na zbocze narastające, jak i zbocze opadające sygnału na wyprowadzeniu INT. Jest to ustalane w rejestrze OPTION_REG za pomocą bitu nr 6 o nazwie INTEDG. Jeżeli bit INTEDG jest ustawiony na jedynkę – przerwanie jest generowane przy zboczu rosnącym sygnału, jeśli bit INTEDG jest wyzerowany – przy zboczu opadającym. Kiedy właściwe zbocze sygnału pojawi się na wejściu INT, zostaje ustawiony znacznik INTF w rejestrze INTCON. Przerwanie to może zostać wyłączone poprzez wyzerowanie bitu INTE w rejestrze INTCON. Bit znacznika INTF musi być wyzerowany w procedurze obsługi przerwania przed powtórnym włączeniem przerwań. Przerwanie od wejścia INT może obudzić mikrokontroler ze stanu uśpienia jeżeli bit INTE został ustawiony na jedynkę przed wprowadzeniem mikrokontrolera w stan uśpienia. Jeżeli przerwania będą globalnie zamaskowane (GIE=0), to mikrokontroler zostanie obudzony i następną wykonaną instrukcją będzie kolejna instrukcja po rozkazie SLEEP. Jeżeli przerwania będą włączone, to po obudzeniu mikrokontrolera z trybu uśpienia zostanie wywołana procedura obsługi przerwania zewnętrznego Przerwanie INT – przykład obsługi ;definicje zmiennych w_temp EQU status_temp EQU pclath_temp EQU 0x7D 0x7E 0x7F ; zmienne używane do zachowywania kontekstu ; (zawartości rejestrów) ; ORG 0x000 nop goto main ; wektor zerowania ; ; skok do głownego programu ORG 0x004 movwf w_temp movf STATUS,w movwf status_temp movf PCLATH,w movwf pclath_temp ; wektor przerwania ; zapisz zawartość rejestrów: ;W ; STATUS ; PCLATH ; CLRF STATUS BCF INTCON, GIE BTFSS INTCON, INTF GOTO INT_END BCF INTCON, INTF ; przejdź do banku 0 ; wyłącz przerwania ; sprawdź czy przyszło przerwanie od INT ; jeśli nie to przejdź na koniec ; jeśli tak to wyzeruj flagę INTF Przerwanie INT – przykład obsługi … INT_END BSF INTCON, GIE movf pclath_temp,w movwf PCLATH movf status_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie main … BSF INTCON, GIE BSF INTCON, INTE … ; obsłuż przerwanie ; włącz przerwania ; przywróć zawartość rejestrów: ; PCLATH ; STATUS ;W ; powrót z przerwania ; program główny ; włącz przerwania ; włącz przerwania od INT Przerwanie od układu Timer 0 ● ● ● ● Przerwanie jest generowane wówczas, gdy rejestr TMR0 zmieni swój stan z wartości FFh na 00h. Kiedy nastąpi przepełnienie licznika, zostaje ustawiony znacznik T0IF w rejestrze INTCON. Przerwanie to może zostać wyłączone poprzez wyzerowanie bitu T0IE w rejestrze INTCON, jednak nie blokuje to możliwości ustawienia znacznika T0IF podczas przepełnienia rejestru TMR0. Bit znacznika T0IF musi być wyzerowany w procedurze obsługi przerwania przed powtórnym włączeniem przerwań. Przerwanie od zmiany stanu na liniach RB7..4 ● ● ● ● ● ● Przerwanie jest generowane tylko w przypadku konfiguracji wyprowadzeń RB7:RB4 jako wejścia. Stan wejść jest wówczas porównywany z zawartością zatrzasków pamiętających poprzednią wartość na wyprowadzeniu. Jeżeli wartości się różnią, generowane jest przerwanie sygnalizowane bitem RBIF w rejestrze INTCON. Przerwanie to może zostać wyłączone poprzez wyzerowanie bitu RBIE w rejestrze INTCON, jednak nie blokuje to możliwości ustawienia znacznika RBIF. Bit znacznika RBIF musi być wyzerowany w procedurze obsługi przerwania przed powtórnym włączeniem przerwań. Przed wyzerowaniem RBIF należy jednak odczytać rejestr PORTB, gdyż dopiero wówczas znikną różnice pomiędzy stanami na wyprowadzeniach RB7:RB4 i wartościami zapamiętanymi w zatrzaskach. Zasilanie PIC ● ● ● ● Standardowe napięcie zasilające dla mikrokontrolerów PIC16 wynosi 5V. Jednak mikrokontrolery PIC16 mogą pracować w znacznie szerszym zakresie napięć wynoszącym od 2 do 6 V. Należy również pamiętać o tym, że mikrokontrolery pracujące z sygnałem zegarowym o częstotliwości 20 MHz, powinny być zasilane napięciem z przedziału od 4,5 do 6 V, a mikrokontrolery pracujące z częstotliwością 4 MHz – napięciem powyżej 4 V. Wyjątkiem jest seria mikrokontrolerów PIC16 oznaczona symbolem L (np. PIC16LF84), która może pracować już przy napięciu zasilającym równym 2V. Zegar Mikrokontrolery PIC16 są przystosowane do pracy z czterema typami generatorów sygnału zegarowego: • rezonator kwarcowy o niskiej częstotliwości (LP); • standardowy rezonator kwarcowy (XT); • rezonator kwarcowy wysokiej częstotliwości (HS); • zewnętrzny układ generatora RC (RC); Wyboru generatora dokonuje się za pomocą dwóch bitów konfiguracyjnych FOSC1, FOSC0 w rejestrze konfiguracyjnym dostępnym tylko podczas programowania mikrokontrolera Bity konfiguracyjne FOSC1,FOSC0 Typ generatora Uwagi Częstotliwość 11 RC Najtańsze rozwiązanie (wymagany jest tylko zewnętrzny rezystor i kondensator). Podstawowy tryb pracy 10 HS Tryb do zastosowań o dużej szybkości 4 – 20 MHz pracy. Tryb o największym poborze prądu. 01 XT Standardowa częstotliwość generatora (4MHz). Tryb o średnim poborze prądu. 100 kHz – 4 MHz 00 LP Tryb do zastosowań o niskiej szybkości i najmniejszym poborze prądu. 32 – 200 kHz do 20 MHz Rezonatory kwarcowe i ceramiczne ● ● ● W trybach XT, LP i HS rezonator kwarcowy lub ceramiczny jest dołączony do wyprowadzeń OSC1 i OSC2 w celu stabilizacji częstotliwości sygnału zegarowego. Wewnętrzny generator mikrokontrolera wymaga zastosowania rezonatora o rezonansie równoległym. Stosowanie rezonatorów szeregowych może spowodować różnicę częstotliwości generatora w stosunku do podanej przez producenta. Zewnętrzny generator sygnału zegarowego ● ● ● ● ● Jeżeli mikrokontroler jest sterowany sygnałem zegara ze źródła zewnętrznego, należy upewnić się, że w ustawieniach generatora jest wybrany tryb LP, XT lub HS. Zewnętrzny sygnał zegarowy powinien być dołączony do wyprowadzenia mikrokontrolera oznaczonego OSC1. Aby zredukować zakłócenia, wyprowadzenie OSC2 może zostać podłączone przez rezystor do masy, jednak może to spowodować zwiększenie poboru prądu przez mikrokontroler Jako zewnętrzne generatory sygnału zegarowego mogą być używane gotowe generatory scalone lub zbudowane samodzielnie w oparciu o bramki TTL i elementy pasywne RC. Gotowe generatory scalone charakteryzują się większą stabilnością pracy i szerokim zakresem częstotliwości sygnału. Do generacji sygnału zegarowego można użyć także układów zbudowanych w oparciu o bramki TTL bazujących na zjawisku rezonansu szeregowego lub równoległego, które przy poprawnym zbudowaniu zapewniają parametry wystarczające do właściwej pracy mikrokontrolera. Oscylator RC ● ● ● Najtańszym rozwiązaniem jest zastosowanie jako generatora sygnału zegarowego prostego układu RC. Częstotliwość oscylatora jest funkcją napięcia zasilania, dołączonych wartości rezystancji i pojemności oraz temperatury pracy układu. Kolejną sprawą jest różnica w wykonaniu różnych egzemplarzy układu scalonego mikrokontrolera oraz różna tolerancja parametrów elementów pasywnych (RC). Oscylator RC ● ● Częstotliwość oscylatora podzielona przez 4 jest dostępna na wyprowadzeniu OSC2/CLKOUT mikrokontrolera i może być wykorzystywana do synchronizacji innych układów współpracujących z mikrokontrolerem. Oscylator RC rozpoczyna pracę zaraz po tym, jak wartości napięć osiągną wymagany poziom określony w danych katalogowych. Czas startu oscylatora RC zależy przede wszystkim od: • wartości użytych elementów zewnętrznych RC; • szybkości narastania napięcia zasilającego; • temperatury otoczenia. Układ zerowania ● ● ● Układ zerowania w mikrokontrolerach PIC16 służy do przywrócenia początkowego stanu mikrokontrolera. Przyczyna zerowania może zostać określona poprzez analizę bitów w rejestrze STATUS. W mikrokontrolerach PIC16 mogą występować różne rodzaje zerowania: • zerowanie po włączeniu zasilania Power-on Reset (POR); • podanie niskiego stanu na wejście MCLR mikrokontrolera w trakcie normalnej pracy; • podanie niskiego stanu na wejście MCLR mikrokontrolera podczas trybu uśpienia; • zerowanie przez układ licznika nadzorcy (WDT) w takcie normalnej pracy; • zerowanie przez układ licznika nadzorcy (WDT) podczas trybu uśpienia; • zerowanie podczas spadku napięcia zasilania poniżej wymaganego poziomu (Brown-out Reset - BOR); • zerowanie w przypadku błędu parzystości (Parity Error Reset - PER). Schemat układu zerowania Większość rejestrów nie zmienia swojej zawartości podczas zerowania, ich zawartość jest nieznana w przypadku zerowania po włączeniu zasilania i pozostaje niezmieniona przy innych rodzajach zerowania. Zerowanie po włączeniu zasilania ● ● ● Impuls zerowania POR (Power-On Reset) jest generowany wewnątrz układu, gdy zostanie wykryty wzrost napięcia zasilającego VDD. Aby skorzystać z właściwości POR należy podłączyć wyprowadzenie MCLR do wyprowadzenia VDD (napięcia zasilania) bezpośrednio lub przez rezystor R Pozwala to wyeliminować konieczność korzystania z dodatkowych zewnętrznych układów RC zwykle używanych do budowy układu realizującego zerowanie po włączeniu zasilania (POR). Power-Up Timer ● ● ● ● ● ● Układ czasowy Power-Up Timer (PWRT) zapewnia nominalny czas opóźnienia równy 72 ms w przypadku zerowania po włączeniu zasilania (POR) lub zerowania spowodowanego spadkiem napięcia zasilania (BOR). Układ PWRT pracuje z wykorzystaniem specjalnego wewnętrznego oscylatora RC. Mikrokontroler jest podtrzymywany w stanie zerowania tak długo, dopóki sygnał PWRT jest aktywny. Opóźnienie wnoszone przez PWRT pozwala na wzrost napięcia zasilającego VDD do wymaganego poziomu. Układ PWRT może być włączony lub wyłączany za pomocą specjalnego bitu w rejestrze konfiguracyjnym mikrokontrolera (PWRTE). Zmiana ustawienia tego bitu jest możliwa tylko podczas programowania mikrokontrolera. Należy pamiętać też o tym, aby właściwość PWRT była włączona przypadku włączenia też właściwości BOR (Brown-Out Reset). Oscilator Start-up timer ● ● ● ● ● ● ● Oscillator Start-Up Timer (OST) jest układem, który zapewnia opóźnienie równe 1024 cyklom generatora zegarowego z wyprowadzenia OSC1 po zakończeniu opóźnienia wprowadzonego przez układ PWRT. Układ OST zapewnia, że generator zegarowy został w pełni uruchomiony i pracuje stabilnie. Opóźnienie układu OST jest wywoływane tylko dla trybów pracy: XT, LP i HS oscylatora i tylko w przypadku wystąpienia zerowania po włączeniu zasilania (POR), zerowania po spadku napięcia zasilania (BOR) oraz po wyprowadzeniu mikrokontrolera ze stanu uśpienia. Układ OST zlicza impulsy pojawiające się na wejściu OSC1/CLKIN. Licznik zaczyna działanie tylko wtedy, gdy amplituda sygnału zegarowego przekroczy wymagany poziom. Wprowadzone opóźnienie pozwala rezonatorowi kwarcowemu na ustabilizowanie swojego działania dopóki licznik OST zakończy zliczanie. Długość opóźnienia zależy od częstotliwości bazowej rezonatora. Zerowanie po spadku napięcia zasilania ● ● ● ● ● ● ● ● Układ zerowania Brown-Out Reset (BOR) zeruje mikrokontroler w przypadku spadku napięcia zasilania poniżej wymaganego poziomu (BVDD). Zapewnia to, że mikrokontroler nie będzie kontynuował programu poza wymaganym zakresem napięcia zasilania. Układy BOR są stosowane na przykład w przypadku zasilania bateryjnego. Do sterowania układem BOR służy bit BODEN w rejestrze konfiguracyjnym Jeżeli napięcie zasilania spadnie poniżej wymaganego progu BVDD (wartością typową jest 4 V) na czas dłuższy od wymaganego (dla PIC16F877A jest to 100 µs), układ BOR zresetuje mikrokontroler. Zerowanie nie jest gwarantowane jeżeli czas trwania niskiego poziomu napięcia będzie krótszy niż wymagany. W przypadku zadziałania układu BOR, uruchamiany jest układ PWRT, który wprowadza mikrokontroler w stan zerowania na czas 72 ms. Jeżeli napięcie zasilania spadnie podczas działania układu PWRT, wówczas układ PWRT zacznie działać od nowa. Tryb uśpienia ● ● ● ● ● ● ● ● Tryb uśpienia (Sleep Mode, Power-down Mode) jest trybem, w którym mikrokontroler jest w najbardziej energooszczędnym stanie. Generator sygnału zegarowego jest wyłączony, więc impulsy zegarowe nie dochodzą do mikrokontrolera. Tryb uśpienia jest włączany instrukcją SLEEP. Jeżeli licznik WDT jest włączony, to zostanie on wyzerowany w momencie przejścia mikrokontrolera w tryb uśpienia, ale będzie nadal pracował. Bit PD w rejestrze STATUS zostanie wyzerowany, a bit TO ustawiony. Porty wejścia/wyjścia zachowają swój wcześniejszy stan, sprzed wykonania instrukcji SLEEP. Aby zapewnić jak najmniejszy pobór prądu w tym trybie, wszystkie wyprowadzenia powinny być na poziomie dodatniego lub ujemnego napięcia zasilania bez możliwości poboru prądy z tych wyprowadzeń przez układy zewnętrzne. Także układy wewnętrzne mikrokontrolera, które pobierają minimalny prąd w stanie uśpienia powinny zostać wyłączone. Wyprowadzenie zerujące MCLR powinno być w wysokim stanie logicznym. Niektóre funkcje mikrokontrolera (np. WDT, BOR) powodujące pobór małego prądu w stanie uśpienia mogą zostać włączone lub wyłączone podczas programowania mikrokontrolera za pomocą bitów rejestru konfiguracyjnego. Wybudzenie z trybu uśpienia ● Mikrokontroler może zostać wyprowadzony ze stanu uśpienia poprzez wystąpienie jednego z następujących zdarzeń: • uruchomienie dowolnego trybu zerowania mikrokontrolera • obudzenie mikrokontrolera przez układ WDT (WDT Wake-up); • zgłoszenie przerwania przez dowolny moduł, który może ustawić znacznik przerwania w trybie uśpienia: o wejście RB0/INT; o zmiana stanu wyprowadzeń RB7:RB4; o komparatory; o przetwornik A/C; o układ czasowy TIMER1; o synchroniczny port szeregowy SSP; o moduł przechwytywania (CCP). Pierwsze z powyższych zdarzeń zresetuje mikrokontroler, a dwa pozostałe obudzą mikrokontroler i pozwolą na kontynuację wykonywanego programu.