raat (Guida pratica al PIC 16F84- Utlizzere la porte 1
Utilizzare le porte di I/O
Le porte di I/O (PORT A e PORT B)
Il PIC dispone di 13 linee di 1/0, programmabili individualmente
come linee di ingresso o uscita. Questi pin sono mappati
direttamente nei registri PORT_A e PORT_B.
PORT_B controlla | pin RBO,RB1,RB2,RB3,RB4,RB5,RB6 € RB7.
PORT_A controlla i pin RAO,RA1,RA2,RA3 @ RA4, I tre bit piu’
significativi del registro non sono usati (si ricorda che la porta A
possiede solo 5 linee)
In figura si mostrano i collegamenti logici* tra porte e pin di 1/0
esterni
* ovviamente la struttura interna reale di "collegamento" e' molto piu’ complessa
PIC 16FB4
UO
RAa2 — —+—_ Fat
RAB RAD
Rt ——-————}
[ [ I [Jefe ot [bo
Porta
port a
ep)? |[=[=]"
RBO RBT
RBI RBG
RB2 RBS
RBS RBS
I due registri PORT_A e PORT_B hanno associati i relativi registri
di direzione, cioe’ TRIS_A e TRIS_B. Questi ultimi due registri
sono posizionati nel banco 1 della RAM in corrispondenza dei
primi. Ogni bit dei registri TRIS_A e TRIS_B specifica la direzione
della relativa linea di 1/0. Se il bit vale 1, la corrispondente linea
e' di input, se vale 0 e' di output. Ovviamente anche il registro
TRIS_A sara’ di soli 5 bit; | 3 bit piu’ significativi non sono
utilizzati
hitpglanlucs82.ahervstacrgpict6@Aldarao mlraat (Guida pratica al PIC 16F84- Utlizzere la porte 1
Di default (quindi anche all'accensione del pic) tutti i bit del
registro TRIS_A e di TRIS_B sono impostati a 1; cio’ significa che
tutte le linee RAO...RA3 ¢ RBO..RB7 sono di input.
Per modificare la direzione di una linea di 1/0 e! sufficiente
settare opportunamente il bit corrispondente nel registro TRIS_A 0
TRIS_B, ad esempio utilizzando le istruzioni di set e clear dei bit
‘oppure scrivendo direttamente il byte opportuno con MOVWF.
Caratteristiche elettriche
ee porta A
Le linee della porta A come detto prima sono 5, associate ai
registri PORT_A e TRIS_A. I pin RAQ,RAI,RA2 e RA3, quando
configurati come output, Sono di tipo push-pull, ovverosia possono
essere utilizzati sia come "sorgenti" di corrente (drain mode) che
come "pozzi" (sink mode), in altre parole sono in grado sia di
assorbire corrente dal positivo dell'alimentazione (25mA max), sia
di fornirla verso massa (20mA max).
In figura si mostrano i collegamenti interni per i pin RAQ,RA1,RA2
e RAB
vopin
RD PORT MN.
a
Note: IO gins have pretecton diodes to VoD and Vss.
II pin RA4 e' un caso a parte perche' e’ di tipo a collettore aperto
(open drain); cio significa che e' possibile _utilizzarlo
esclusivamente come pozzo di corrente: il suo comportamento
equivalente e' come quello di un interruttore che si chiude verso
massa. La figura mostra i collegamenti interni relativi alla linea
RA:
hitpglanlucs82.ahervstacrgpict6@Aldarao mlraat (Guida pratica al PIC 16F84- Utlizzere la porte 1
bs. lpg
FORT
\ RASDIn
Data Latch [7
a
wR
pots
TRIS Latch 7
Ww
ROTRIS
0 clock no
Note 10 phn has prteetion odes b Vss ony.
I pin della porta A impostati come ingressi sono automaticamente
configurati come linee in alta impedenza (flottanti); se una di tali
linee non viene utilizzata occorre necessariamente collegarla al
positivo (VCC) tramite apposita resistenza di pull-up (ad esempio
da 10Kohm)
Linee porta B
La porta 8 e' composta da 8 linee, RBO,RB1,RB2,RB3,RB4,RB5,RB6
RB7. Quando una linea B e' impostata come output, valgono le
stesse considerazioni viste per le linee RAO,RAI,RA2 e RA3
(modalita' sink/drain e stessi assorbimenti massimi).
In modalita’ input le linee B possiedono ognuna una resistenza di
pull-up interna, non e' quindi necessario inserirla esternamente
come accade per le linee A. Tali resistenze interne possono
essere abilitate settando a zero il bit #RBPU del registro
OPTION REG (il registro e' collocato nel banco RAM 1, alla
locazione 0x01). Di default le resistenze sono disabiltate.
Lettura e scrittura
La lettura e scrittura delle porte di I/O e' estremamente semplice.
Una volta che si siano scelte le direzioni delle linee tramite
Vimposizione dei bit dei registri TRIS_A e TRIS_B sara’ sufficiente
settare opportunamente i bit dei registri di porta (ad esempio con
le istruzioni MOV,BCF,BSF etc..) per ottenere le tensioni ai capi
dei pin corrispondenti. Ovviamente ha senso imporre lo stato del
bit solo per le linee dichiarate come output, Per acquisire lo stato
delle linee di input e' sufficiente andare a leggere lo stato dei
relativi bit di porta, con le normali tecniche di lettura del registri
messe a disposizione (istruzioni della famiglia MOV).
Una linea di 1/0 impostata come output presentera’ all'esterno
(cive’ sul relative pin) una tensione di +5volt se il bit
pigianluca2.ateristaorgpictBteAldaain!raat
(Guida pratica al PIC 16F84- Utlizzere la porte 1
corrispondente nel registro di porta (PORT_A 0 PORT_B) e' settato
ad 1; Ovolt nel caso sia settato a 0.
Una linea di 1/0 impostata come input invece e' I'esatto contrario:
se la tensione ai capi del relativo pin e’ di circa Svolt, allora il PIC
imposta ad 1 il bit corrispondente nel registro di porta. Se la
tensione e' nulla, lo seta a0.
Esempi software
Esempio:
Inizializzare la porta A in modo che RAQ e RAI siano di output &
RA2,RA3 e RA4 di input.
STATUS EQU 0x03
PORT_AEQU 0x05
TRIS A EQU 0x05
BCF STATU sselezione del baneo RAM 0
CLRF PORT_A —sazzeramento di PORT_A
BSF STATUS _;selezione del banco RAM 1
MOVLW 0x1C svalore di inizializzazione
MOVWF TRIS_A _jscrittura del valore in TRIS_A.
NOTA: Ox1C e' il valore di inizializzazione corretto perche’ in
binario vale 11100. Scrivere tale parola in TRIS_A corrisponde a
dichiarare le prime due linee come output (RAO e RAL) e le
restanti tre (RA2 RA3 RA4) come input.
Esempi
‘Supponendo che tutte le linee della porta B siano gia’ settate
come input, leggere tale porta e salvare Il risultato alla locazione
(0x20 (un registro GPR).
STATUS EQU 0x03
BCF STATUS,S _;selezione del banco RAM 0
MOVF 0x06,0 __;caricamento del contenuto di PORT_B in W
MOVWE 0x20 :scrive il contenuto di W alla locazione 0x20
Esempi
‘Supponendo che tutte le linee della porta B siano gia’ settate
come output, scrivere il contenuto del registro 0x20 su tale porta.
STATUS EQU 0x03
PORT_B EQU 0x06
BCF STATU sselezione del banco RAM 0
MOVF 0x20,0 _;caricamento del contenuto del registro 0x20 in W
MOVWFPORT_B —_;scriveil contenuto di Win PORT_B
Esempi di collegamento
hitpglanlucs82.ahervstacrgpict6@Aldarao mlraat (Guida pratica al PIC 16F84- Utlizzere la porte 1
Utilizzare i piedini come output
Ecco alcuni esempi di collegamenti al pin RBO configurato come
output.
In figura si riporta un collegamento di un led alla linea RBO del
microcontrollore:
we
REO
330chm
up
Pilotare un led con RBO - source mode
La resistenza da 330 ohm limita la corrente nel ramo a circa
15mA. Quando sulla linea RBO viene imposto un 1 il piedino si
porta a VCC Volt ed inizia a fluire una corrente VERSO massa e
quindi il led si accende. Quando viene imposto 0 il piedino si porta
a massa e la corrente smette di fluire; il led si spenge.
Il circuito appena descritto utilizza il piedino RBO come sorgente
(source) di corrente.
Il prossimo schema mostra come utilizzare il piedono RBO come
pozzo (sink) di corrente:
vee
xy
REO
330chm
Pioltare un led con RBO - sink mode
Quando sulla linea RBO viene imposto un 1 il piedino si porta alla
tensione VCC (esattamente come prima) ma il questa volta il led
rimane spento perche non fluisce corrente. Quando viene imposto
uno 0, il piedino si porta a massa ed inizia a scorrere una
corrente VERSO di questo, accendendo il led.
I led sono dispositivi a bassa potenza e possono essere alimentati
direttamente dalle linee di 1/0 del microcontrollore. Altri
dispositivi invece richiedono molta piu' potenza e si rendono
necessari appositi stadi driver. II prossimo schema mostra come
azionare una lampada a 220 Volt tramite la linea RBO del
microcontrollor
hitpglanlucs82.ahervstacrgpict6@Aldarao mlraat (Guida pratica al PIC 16F84- Utlizzere la porte 1
wv
B
anaooa & 220 0
REO o—_
10K BCS47
Attivazione di una lampada a 220 Volt tramite la linea RBO
Quando sul bit RBO viene posto uno 0, il transistor BC547 rimane
interdetto, non scorre alcuna corrente lungo il ramo del rele che
quindi non scatta e la lampada rimane spenta
Quando sul bit RBO viene posto un 1, il piedino RBO si porta a VCC
Volt ed inizia a scorrere una corrente verso massa, attraverso la
base e l'emettitore del BC547; tale corrente e' di piccola entita’
(limitata dalla resistenza da 10k) ma sufficiente a portare in
conduzione il transistor, che quindi “diventa" un cortocircuito.
Inizia a fluire corrente lungo il ramo del rele’ che quindi si attiva e
chiude il circuito al quale e' collegata la lampada.
Utilizzare i piedini come input
Per le linee B con resistenze interne di pull-up attivate e!
sufficiente tenere scollegata la linea per avere un 1 logico,
portarla a massa per ottenere uno 0 logico.
Nello schema seguente si setta un bit sulla linea RBO tramite un
semplice interruttore:
Schema per impostare lo stato della linea RBO (resistenze interne
di pull-up attivate!)
REO
Se le resistenze interne di pull-up sono disattivate e' necessario
presentare una tensione di +5 volt per avere un 1 logico o portare
a massa per ottenere unno 0 logico, come nello schema seguente:
hitpglanlucs82.ahervstacrgpict6@Aldarao mlraat (Guida pratica al PIC 16F84- Utlizzere la porte 1
vec
10K
REO
1
Schema per impostare lo stato della linea RBO (resistenze interne
di pull-up disattivate!)
Lo schema precedente e' obbligatorio per gli input delle linee A,
per le quali non sono previste resistenze di pull-up interne
attivabili via software come accade per le B.
Torna all'indice
hitpglanlucs82.ahervstacrgpict6@Aldarao ml
m7