__________ lezioni sui MICROCONTROLLORI : PORTE I/O _________ prof.Romei Michele __________
Nel PIC 16F877A è dotata di 6 pin (RA5:RA0) che possono essere configurate come I/O digitali o ingressi analogici per l'ADC e i comparatori analogici C1 e C2. Questo compito, svolto dal registro ADCON1 <3:0>, richiede il settaggio del nibble basso di questo registro (è importante ricordare che all'accensione il PORTA è configurato per funzionare con tutti i pin analogici).
E'
importante sapere che i pin di questa porta che possono funzionare
sia in digitale che in analogico sono quelle che hanno entrambe le
etichette Ran/ANn (n = numero pin della porta).
Questa porta (evidenziata in verde nella figura) viene gestita anche da altri registri :
TRISA : consente di decidere se un pin viene usato come ingresso o come uscita, i bit con “1” sono ingressi mentre i bit con “0” sono uscite;
PORTA : consente di leggere, in funzionamento digitale, i pin che lavorano come ingressi e scrivere i pin, in funzionamento digitale, che lavorano come uscite.
CMCON e CVRCON : configurano i pin d'ingresso analogici e le uscite digitali dei comparatori C1, C2 ed l'uscita analogica voltage reference.
La linea RA4 (non utilizzata come ingresso analogico) può essere usata come clock esterno del timer0 (vedremo che cos'è) o come uscita del comparatore C1. Come ingresso digitale è un input trigger di Schmitt, come uscita digitale è un open drain.
Tutti gli altri pin configurati come ingressi digitali accettano livelli TTL, mentre come uscite digitali sono di tipo CMOS.
TRIGGER DI SCHMITT
In corrispondenza della soglia, non si ha più una netta commutazione dell’uscita, ma una serie di commutazioni dovute a ripetuti attraversamenti della soglia. La figura seguente mostra ciò che in tal caso avviene.
Questo problema può essere risolto usando particolari comparatori, detti comparatori con isteresi, o discriminatori con isteresi , od anche Trigger di Schmitt.
La soglia superiore, che possiamo indicare con UTP (Upper Threshold Point) , determina la commutazione dell’uscita quando la tensione di ingresso, crescente, la supera. Quella inferiore, indicata con LTP ( Lower Threshold Point) produce la commutazione quando la tensione di ingresso, decrescente, la oltrepassa. La figura sotto mostra il simbolo grafico del T. di S. e la situazione appena descritta, con soglie inferiore e superiore , rispettivamente, pari a -4V e 4V. La tensione d’isteresi vale H = 4V – (- 4V) = 8V.
La
scelta di usare una tensione negativa esalta l'esempio, ovviamente
nelle porte logiche le soglie sono entrambe positive e tenute a una
certa distanza.
Vediamo un esempio di lettura dello schema dei pin RA0, RA1, RA2, RA3. Prima con configurazione input e poi output :
Ha 8 linee digitali bidirezionali, la direzione è gestita con TRISB, mentre la scrittura e la lettura mediante PORTB. Oltre a funzionare come I/O digitali si possono configurare :
sui pin configurati come input è possibile abilitare/disabilitare dei resistori interni di pull-up (bit RBPU del registro OPTION_REG)
I pin RB3/PGM, RB6/PGC e RB7/PGD possono essere utilizzati in fase di programmazione o debugger in-circuit
il pin RB0/INT può essere usato per attivare un interrupt. Se viene richiesto questo :
bit INTE=”1” del registro INTCON
bit INTEDG del registro OPTION_REG che determina il fronte di lettura (“1” – salita; “0” - discesa
bit INTF=”1” flag registro INTCON che indica che l'evento di interrupt è dovuto al pin
RB0/INT
i quattro bit <RB7:RB4> quando configurati come ingressi, possono essere utilizzati come interrupt :
bit RBIE del registro INTCON
quando uno di questi pin (quelli settati come ingresso) varia lo stato logico parte l'interrupt
il bit che segnala che è avvenuto un interrupt a causa di uno di questi pin è RBIF=”1” del registro INTCON
E' importante ricordarsi che i flag che segnalano quale pin ha causato l'interruzione vanno resettati prima di uscire dalla subroutine dell'interrupt.
Attraverso il registro TRISC si decide quali pin sono ingressi e quali sono uscite (alcuni pin di questa porta sono usati da delle periferiche di di comunicazione, anche per questi pin il registro gestisce gli ingressi e le uscite). Mediante il registro PORTC si possono scrivere i pin output e leggere i pin input. I pin configurati come ingresso sono dei trigger di Schmitt.
Questa porta utilizza 8 pin bidirezionali, usa TRISD per definire la direzione e PORTD per leggere e scrivere. Questi pin, quando usati come ingressi, sono dei trigger di Schmitt. Il byte che rappresenta questa porta può essere usato come input/output della periferica PSP (Parallel Slave Port) che può essere attivata mediante TRISE<4>.
Questa porta ha solo tre pin <RE2:RE0> e il TRISE configura gli I/O con i bit <2:0>, gli altri sono usati per altri scopi !!!