Per rendere più adattabili i PIC
alle diverse esigenze di utilizzo, la Microchip
ha implementato diverse tipologie di stati d'uscita per le linee di I/O. Esistono quindi
dei gruppi di pin il cui comportamento è leggermente differenziato da altri gruppi.
Conoscendo meglio il funzionamento dei diversi stadi d'uscita potremo sfruttare al meglio
le loro caratteristiche ed ottimizzare il loro uso nei nostri progetti.
Stadio d'uscita delle linee RA0,
RA1, RA2 e RA3
Iniziamo dal gruppo di linee RA0, RA1,
RA2 ed RA3 per le quali riproduciamo, nella figura
seguente, lo schema dello stadio d'uscita estratto dal data sheet della Microchip:

Come accennato al passo precedente, la
configurazione di una linea come ingresso o uscita dipende dallo stato dei bit nel
registro TRIS (TRISA per la porta A e TRISB
per la porta B).
Prendiamo come esempio la linea RA0
ed analizziamo il funzionamento dello stadio d'uscita sia quando la linea funziona in
ingresso, che quando funziona in uscita.
Funzionamento in ingresso
Per configurare la linea RA0
in ingresso, dobbiamo mettere a 1 il bit 0 del registro TRISA
con l'istruzione:
bsf TRISA,0
Questo determina una commutazione ad 1
dello stato logico del flip-flop di tipo D-latch
indicato nel blocco con il nome TRIS latch. Per ogni linea di I/O esiste
uno di questi flip-flop e lo stato logico in cui si trova dipende strettamente dallo stato
logico del relativo bit nel registro TRIS (anzi per meglio dire ogni bit
del registro TRIS è fisicamente implementato con un TRIS latch).
L'uscita Q del TRIS
latch è collegata all'ingresso di una porta logica di tipo OR.
Questo significa che, indipendentemente dal valore presente all'altro ingresso, l'uscita
della porta OR varrà sempre 1 in quanto uno dei suoi ingressi vale 1 (vedi tavola della
verità). In questa condizione il transistor P non conduce e mantiene la
linea RA0 scollegata dal positivo d'alimentazione.
Allo stesso modo l'uscita negata del TRIS
latch è collegata all'ingresso di una porta AND quindi l'uscita di
questa varrà sempre 0 in quanto uno dei suoi ingressi vale 0 (vedi tavola). In questa
condizione anche il transistor N non conduce mantenendo la linea RA0
scollegata anche dalla massa. Lo stato logico della linea RA0 dipenderà esclusivamente
dalla circuiteria esterna a cui la collegheremo.
Applicando 0 o 5 volt al pin RA0, sarà
possibile leggerne lo stato sfruttando la circuiteria d'ingresso del blocco rappresentata
dal TTL input buffer e dal latch d'ingresso.
Funzionamento in uscita
Per configurare la linea RA0 in uscita,
dobbiamo mettere a 0 il bit 0 del registro TRISA con
l'istruzione:
bcf TRISA,0
Questo determina la commutazione a 0
dell'uscita Q del TRIS latch (ed a 1 dell'uscita Q negata). In questo
stato il valore in uscita dalle porte OR e AND dipende
esclusivamente dallo stato dell'uscita Q negata del Data Latch.
Come per il TRIS latch, anche il Data Latch dipende dallo stato di un bit in un registro,
in particolare del registro PORTA. La sua uscita negata viene inviata
all'ingresso delle due porte logiche OR e AND e quindi direttamente sulla base dei transistor
P ed N.
Se mettiamo a 0 il bit 0 del registro PORTA
con l'istruzione:
bcf PORTA,0
otterremo la conduzione del transistor
N con conseguente messa a 0 della linea RA0. Se invece mettiamo a 1 il bit 0 con
l'istruzione:
bsf PORTA,0
otterremo la conduzione del transistor
P con conseguenza messa a +5 volt della linea RA0. In questa condizione è sempre
possibile rileggere il valore inviato sulla linea tramite la circuiteria d'ingresso.
Stadio d'uscita della linea RA4
Analizziamo ora il funzionamento dello
stadio d'uscita della linea RA4 che si differenzia da tutte le altre
linee di I/O in quanto condivide lo stesso pin del PIC16F84 con il TOCKI
che andremo ad analizzare al passo successivo.
Nella figura seguente viene riprodotto lo
schema a blocchi dello stadio d'uscita estratto dal data sheet Microchip:

La logica di commutazione è
sostanzialmente identica al gruppo di linee RA0-3 ad eccezione dell'assenza della porta OR
e del transistor P, ovvero di tutta la catena che consente di collegare
al positivo la linea RA4. Questo significa, in termini pratici, che quando la linea RA4
viene programmata in uscita e messa a 1 in realtà non viene connessa al positivo ma
rimane scollegata. Tale tipo di circuiteria d'uscita viene denominata a "collettore
aperto" ed è utile per applicazioni in cui sia necessario condividere uno
stesso collegamento con più pin d'uscita e ci sia quindi la necessità di mettere in alta
impedenza una linea d'uscita senza doverla riprogrammare come linea d'ingresso.
Se vogliamo essere sicuri che la linea RA4
vada a 1 dovremo collegare esternamente una resistenza di pull-up, ovvero una resistenza
collegata al positivo di alimentazione.
Vedremo in seguito l'utilizzo della linea
indicata sullo schema TMR0 clock input.
Stadio d'uscita delle linee RB0,
RB1, RB2 ed RB3
Anche per questo gruppo di linee rimane sostanzialmente
invariata la logica di commutazione. Esse dispongono in aggiunta una circuiteria di weak
pull-up attivabile quando le linee sono programmate in ingresso.
In ingresso infatti, come spiegato precedentemente, le
linee vengono completamente scollegate dal PIC in quanto sia il transitor P
che il transistor N sono aperti. Lo stato delle linee dipende quindi
esclusivamente dalla circuiteria esterna. Se tale circuiteria è di tipo a collettore
aperto o più semplicemente è costituita da un semplice pulsante che, quando premuto,
collega a massa la linea di I/O, è necessario inserire una resistenza di pull-up verso il
positivo per essere sicuri che quando il pulsante è rilasciato ci sia una condizione
logica a 1 stabile sulla linea d'ingresso. La circuiteria di weak pull-up consente di
evitare l'uso di resistenze di pull-up e può essere attivata o disattivata agendo sul bit
RBPU del registro OPTION .
Nella figura seguente viene riprodotto lo
schema a blocchi dello stadio d'uscita estratto dal data sheet Microchip:

La sola linea RB0 inoltre, presenta una
caratteristica molto particolare. Essa, quando viene configurata come linea di ingresso,
può generare, in corrispondenza di un cambio di stato logico, un interrupt,
ovvero una interruzione immediata del programma in esecuzione ed una chiamata ad una
subroutine speciale denominata interrupt handler. Ma di questo parleremo
in seguito.
Stadio d'uscita delle linee RB4,
RB5, RB6 e RB7
La circuiteria di commutazione di questo
gruppo di linee è identica al gruppo RB0-3. Queste linee dispongono anche della
circuiteria di weak pull-up. In più rispetto alle linee RB0-3 hanno uno stadio in grado
di rilevare variazioni di stato su una quansiasi linea e di generare un interrupt di cui
parleremo nelle prossime lezioni.
Nella figura seguente viene riprodotto lo
schema a blocchi dello stadio d'uscita estratto dal data sheet Microchip:

|