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.

Podobne dokumenty