Altre funzioni - Pin change
Chi ha prestato attenzione avrà notato che nella trattazione del TIMER0,
il registro OPTION risulta avere due bit non dedicati al timer.
Questo si ottiene impostando a 0 i bit !GPWU e
!GPP dell' OPTION_REGISTER e
interessa contemporaneamente GP1, GP2
e GP3 (quest'ultimo se non utilizzato
come MCLR).
Occorre, ovviamente, che il pin sia impostato come GPIO, con le operazioni
viste in precedenza.
Inoltre, occorre che il pin sia indicato nel TRISGPIO come ingresso (bit
relativo = 1). Se il bit è a 0 (uscita digitale) la funzione di wakeup è
disabilitata per quel pin.
Prima di entare in sleep occorre
tassativamente leggere lo stato degli ingressi digitali. |
Il flag interno della condizione di wakeup per il cambio di livello dei pin
viene cancellato con la lettura degli ingressi digitali. Se durante lo stato
di sleep avviene la variazione di livello su un pin, la condizione di wake up
resta attiva fino a che non viene effettuata questa lettura. Quindi,
omettendola ed entrando in sleep, si avrà un immediato wakeup a causa della
mancanza di azzeramento del flag.
Cosa sono questi pull-up, cosa è sleep?
Senza entrare in altri dettagli, dobbiamo dire che i PIC Baseline non hanno
una gestione a interrupt. Questo è sostituito con una diversa considerazione,
riguardante il basso consumo che ci si aspetta da questi componenti.
In sostanza, l' impiego previsto, nel caso di rilevamento di eventi, è il
seguente:
- il PIC viene posto in sleep, condizione a bassissimo consumo. In queste
condizioni il generatore del clock è spento e l' energia richiesta è
minima L' entrata in modalità sleep si ottiene con una specifica
istruzione.
- un evento (cambio del livello di tensione su un pin, overflow del WDT,
reset esterno) "svegliano" il processore dal sonno
- una analisi dei flag dello STATUS consente di discriminare la causa del
reset ed agire di conseguenza
Per facilitare l' utilizzatore, il microcontroller contiene dei pull-up
(detti weak pull-up) programmabili dal registro OPTION:
OPTION
|
bit
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
nome
|
!GPWU
|
!GPPU
|
T0CS
|
T0SE
|
PSA
|
PS2
|
PS1
|
PSO
|
funzione
|
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
default
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
-
bit 7 !GPWU
: Enable Wake-up on Pin Change bit (GP0, GP1, GP3)
1 = disabilitato
(default)
0 = abilitato
-
bit 6 !GPPU :
Enable Weak Pull-ups bit (GP0, GP1, GP3)
1 = disabilitato (default)
0 = abilitato
Il bit 7 a 1 disabilita la funzione (default al POR), mentre programmandolo
a 0 si abilita il wake-up per i pin GP0/1/3 se sono configurati come ingressi
digitali. Se i pin sono configurati come uscite o come altra funzione l'
azione sul bit 7 non ha effetto. GP2 è escluso da questa funzione.
Il bit 6 abilita o meno i pull-up integrati, che possono sostituire
resistenze di pull-up esterne con risparmio di spazio e costo.
Il meccanismo del wake-up è semplice: la lettura dello stato degli I/O
prima dello sleep fotografa la loro situazione. Se durante lo sleep un
livello cambia, la condizione di sonno è interrotta e si riprende da un reset.
Sleep
La condizione di sleep, a cui si accede con l' esecuzione dell' istruzione sleep,
più che una periferica, è una modalità di funzionamento che consente di
portare il processore in uno stato di "ibernazione", a bassissimo
consumo, dal quale si esce a seguito di alcune condizioni programmate
(comparatore, variazione pin, WDT, MCLR, ecc).
Il clock primario viene sospeso. L' uscita da sleep genera un reset.
Per la trattazione di questa modalità si rimanda a quanto indicato dal
foglio dati
WDT
Il Watchdog è un sistema di sicurezza implementato in tutti i PIC. Si
tratta di un contatore, dotato di un pre divisore programmabile, in questi PIC
condiviso con Timer0, che incrementa seguendo il clock interno generato da un
oscillatore RC proprio. Questo fa si che WDT sia in funzione anche durante lo
sleep.
Se si lascia esaurire il conteggio, all' overflow il modulo WDT genera un
reset.
La sua funzione è analoga al "pulsante di uomo morto" che si
utilizza come sicurezza in alcune apparecchiature : se l' utente non lo preme
ad una certa cadenza, l' apparecchiatura si blocca.
Altrettanto WDT è inteso principalmente come sicurezza da verificare
periodicamente; la mancanza di questa azione blocca il programma in corso.
La cancellazione periodica del contatore si ottiene con l' istruzione clrwdt.
Maggiori informazioni
sul WDT le trovate qui.
|