Tutorials - PIC

 

PIC10F220/222


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.


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 06/05/13.