Tutorials - PIC

 

PIC12F510 e 16F506


Order of precedence for pin function 

Abbiamo visto che ogni pin ha disponibili tre diverse funzioni. Se abbiamo qualche idea di come utilizzare quella di I/O digitale, resta da chiarire come utilizzare le altre.

E in questo si celano alcune delle difficoltà di base per l' utente che affronta per la prima volta questi processori.
E queste difficoltà, delle piccole trappole poste sul percorso del principiante, derivano tutte dalla linea guida citata prima, ovvero dalla volontà del costruttore di assegnare ai default le condizioni di minimo consumo energetico.

Il foglio dati da una indicazione essenziale nella tabella 5-4 (foglio dati DS41268B-page 34)

Come abbiamo visto, nonostante la semplicità dei moduli integrati, tutti i pin possono assumere differenti funzioni, di cui quella di GPIO si trova al livello di precedenza più basso.
Che cosa si intende con questo? Semplicemente che una determinata configurazione dei registri sovra scrive un' altra a precedenza inferiore. Questo può mettere in difficoltà chi voglia utilizzare un pin come semplice I/O digitale. Vediamo in dettaglio.
Questa è una "trappola" in cui cade il principiante o chi si accinge ad usare per la prima volta questo chip. Così, volendo utilizzare GP2, dove sono prioritarie altre funzioni rispetto a quella di semplice I/O digitale, il LED collegato al pin resterà ostinatamente spento !

Per quanto riguarda le funzioni attribuibili ai pin, possiamo dividerle in due gruppi.
Il primo riguarda funzioni che vanno definite con la configurazione (__CONFIG) che sarà descritta più avanti e che si trova al di fuori della gestione attraverso il programma vero e proprio:

  • sul pin 4 l' alternativa a GP3 è la funzione di reset MCLR, che viene selezionata nella configurazione
  • sul pin 3 l' alternativa a GP4 è la funzione dell' oscillatore esterno, che viene selezionata nella configurazione
  • sul pin 2 l' alternativa a GP5 è la funzione dell' oscillatore esterno, che viene selezionata nella configurazione

Del secondo gruppo fanno parte le funzioni che sono attribuibili attraverso la programmazione di bit nei registri di controllo, operazione che deve essere effettuata durante l' esecuzione del programma:

  • sul pin 7 l' alternativa a GP0 è la funzione di ingresso analogico, che viene selezionata da programma con un apposito registro di controllo
  • sul pin 6 l' alternativa a GP1 è identica alla precedente
  • sul pin 5 l' alternativa a GP2 è più complessa, in quanto il pin può essere assegnato:
    - ad un ingresso analogico (AN2)
    - all' ingresso di conteggio esterno (T0CKI) del timer
    - all' uscita digitale del comparatore (C1OUT)

Una differenza essenziale tra i due gruppi è che le opzioni del primo, una volta impostate in fase di scrittura della memoria del chip, non possono essere modificate durante l' esecuzione del programma. Ad esempio, l' assegnazione  della funzione di oscillatore estero è fissata nella configurazione e non può essere modificata da programma, cosicchè i pin GP4 e GP5 assumono la funzione di ingresso e uscita del circuito esterno di oscillatore e non potranno essere usati per altro fino ad una nuova riscrittura del chip.
Invece, le funzioni relative al secondo gruppo possono essere modificate solo attraverso il programma e questo, dove necessario, può essere operato dinamicamente. Ad esempio, il pin GP2  potrebbe essere definito come ingresso per il timer e in un' altra fase di lavoro programmato come ingresso digitale.

Una situazione come quella qui descritta è caratteristica inevitabile dei microcontroller, dove esiste la possibilità di disporre di un numero elevato di funzioni programmabili, ma non di una quantità sufficiente di pin per supportarle tutte contemporaneamente. Sta all' utilizzatore definire con chiarezza quali sono le funzioni da attribuire ai pin ed agire di conseguenza sui registri di programmazione.
Parlando dei default, abbiamo visto che la filosofia di base è quella di assegnare loro la situazione di minimo consumo energetico. Ne risulta che la funzione più "gettonata", ovvero quella di semplice I/O digitale, viene a trovarsi al fondo della lista delle priorità e che per attivarla occorre una serie di manovre preliminari a volte non proprio evidenti.

Il foglio dati, comunque, ci viene in aiuto con una ulteriore tabella in cui sono indicate le azioni necessarie per liberare i pin:

Le celle in colore grigio indicano che il bit relativo non incide sulla scelta. Quelli a fondo chiaro indicano le permutazioni con cui si può arrivare ad utilizzare la funzione digitale del pin.

Una prima occhiata alla tabelle getta chiunque nello sconforto: poter usare la più semplice funzione richiesta a un pin del microcontroller, quella di ingresso o uscita digitale, necessita un discreto lavoro!
Una nota: altri PIC più semplici, ovvero con un numero minore di periferiche, come 10F200, presentano una situazione di accesso ai pin meno ingarbugliata. Si è voluto comunque utilizzare 12F510 per la possibilità di avere disponibili il massimo delle funzioni dei Baseline in un solo chip a basso numero di pin.

Vediamo la cosa organizzata in una tabella diversa:

Pin Possibilità
GP0 La funzione di ingresso analogico del modulo ADC è privilegiata dal fatto questa selezione è quella che minimizza il consumo di corrente. Per disporre del pin come GPIO occorre disabilitare la funzione analogica e quella di comparazione.
GP1 Situazione analoga a GP0. Per disporre del pin come GPIO occorre disabilitare la funzione analogica e quella di comparazione.
GP2 E' un pin "complicato", in quanto vi concorrono ben 4 diverse funzioni.  Occorre disabilitare la funzione analogica(/comparatore e quella di ingresso  T0CKI
GP3 Diventa automaticamente ingresso digitale se è stato impostato _MCLRE_OFF nel CONFIG
GP4 Diventa automaticamente I/O digitale se è stato scelto nel CONFIG l' oscillatore interno
GP5 Diventa automaticamente I/O digitale se è stato scelto nel CONFIG l' oscillatore interno

Quindi:

 per usare i pin come semplici GPIO occorre:
 
Pin Azione Dove SFR Bit
GP0 disabilitare AN0
disabilitare comparatore
da programma ADCON0
CM1CON0
ANS1:0 = 00, 01
C1ON = 0
GP1 disabilitare AN1
disabilitare comparatore
ADCON0
CM1CON0
ANS1:0 = 00, 01
C1ON = 0
GP2  disabilitare AN2
disabilitare comparatore
disabilitare T0CKI
ADCON0
CM1CON0
OPTION
ANS1:0 = 00
C1ON = 0

T0CS = 0
disabilitare AN2
disabilitare uscita comparatore
disabilitare T0CKI
ADCON0
CM1CON0
OPTION
ANS1:0 = 00
C1T0CS=1, C1OUTEN=1
T0CS = 0
GP3
disabilitare MCLR da CONFIG config_word _MCLRE_OFF
GP4 abilitare INTOSC _INTOSC
GP5

 


Per quanto riguarda 16F506, il foglio dati riporta la tabella 5-6 (DS41268B-page 36) relativa al PORTB, con una situazione analoga a quella sopra riportata. Inoltre è necessaria la tabella 5-7 relativa al PORTC
Da notare che la funzione
T0CKI viene spostata su PORTC,5.

Osserviamo che sono stati citati altri registri di controllo, oltre ai già considerati TRIS e GPIO: vediamo a cosa servono.

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 30/04/13.