Il PIC 16F84
Introduzione
Il 16F84 un microcontrollore RISC a 8 bit della Microchip estremamente versatile e semplice da utilizzare. E' possibile
controllare led, rele', motori e attuatori in genere oppure controllare lo stato di sensori esterni. E' molto utilizzato anche
come manipolatore e generatore/ricevitore di segnali (radiocomandi, lettore di schede magnetiche e/o simeard etc...).
Prima di poter utilizzare il PIC occorre programmarlo; ci' richiede l'inserimento del programma compilato anella
memoria interna. Il programma invece viene realizzato e compilato con l'ausilio di un normale computer casalingo.
Una volta programmato ed acceso, il PIC inizia ad eseguire il programma e, se previsto, a comunicare opportunamente
con il mondo esterno tramite i suoi 13 piedini di ingresso/uscita. Il microcontrollore anche molto economico (un
singolo pezzo pu venire a costare intorno ai 7 euro, mentre se presi in stock si arriva anche a 50 centesimi l'uno) il che
lo rende adatto anche per l'elettronica amatoriale.
Caratteristiche
Architettura Harvard: il
Memoria FLASH per le istruzioni da 1 K (1024 istruzioni) programmabile con l'ausilio di un computer esterno.
Questa memoria supporta fino ad un massimo di 1000 cicli di cancellazione/scrittura.
Memoria RAM dei dati da 90 bytes, dei quali 22 utilizzati per i registri interni di sistema (SFR = Special Function
Registers) e i restanti 68 come registri utente liberi (GPR = General Purpose Register)
http://gianluca82.altervista.org/pic16f84/data/pic16f84.html
1/6
26/10/2016
Memoria EEPROM interna da 64 bytes. Questa memoria pu essere programmata via software dal PIC stesso e
sopporta fino ad un massimo di 1 milione di cicli di cancellazione/scrittura. Tale memoria non pu essere utilizzata
come RAM aggiuntiva per via della sua lentezza (20 ms in scrittura) e l'accesso seriale (non e' mappata nello
spazio degli indirizzi direttamente raggiungibili dalla CPU e viene letta/scritta solo tramite l'ausiliio di alcuni dei
registri speciali SFR)
Stack a 8 livelli (Lo stack implementato in una memoria a parte non visibile da programma e quindi non occupa
lo spazio della RAM)
Watch-dog interno
2 porte di I/O (porta A a 5 bit e porta B a 8 bit) per un totale di 13 piedini di ingresso/uscita. Ogni linea pu essere
programmata indipendentemente dalle altre come linea di ingresso o linea di uscita. Possono sembrare poche ma
va sempre ricordato che il microcontrollore alloggiato in un DIL a soli 18 piedini!
4 diverse possibilit di interrupt (esterno tramite piedino apposito, del timer, esterno dovuto al cambio di stato dei
piedini di I/O, interno di completamento della fase di scrittura della EEPROM)
Opzione di protezione del codice. Settando questa opzione viene impedito ogni tentativo di lettura della memoria
FLASH d programma.
Piedinatura
Come detto prima il PIC possiede 18 piedini. 13 di questi sono adibiti all'I/O in logica TTL: questo significa che i valori
booleani sono rappresentati dalle tensioni 0V e +5V rispettivamente per lo 0 e 1 logico. I rimanenti piedini vengono
impiegati per il reset, l'alimentazione e per l'oscillatore esterno che fornisce il clock al PIC stesso. Come si vede in figura
alcuni piedini hanno una duplice funzione (ad esempio il piedino numero 3 porta la dicitura RA4 e TOCKI) anche se di
default vale la prima (il piedino numero 3 e' di default RA4). Le funzioni secondarie verranno spiegate piu' avanti.
RA2
RAI
RA3
RAO
RA4 . TOCKI
#MCLR GND
RBO/INT REM
http://gianluca82.altervista.org/pic16f84/data/pic16f84.html
RB2 RB3
OSCI / CLKIN
2/6
26/10/2016
OSC2/CLKOUT
VDD
RB7
RBO
RB5
RB4
Ecco l'elenco dei piedini e delle loro funzioni
http://gianluca82.altervista.org/pic16f84/data/pic16f84.html
3/6
26/10/2016
RAO, RAI, RA2, RA3, RA4 - Sono i 5 piedini della porta A (tale porta e' a 5
bit). I piedini possono essere configurati indipendentemente come linee di
ingresso o di uscita. Quando un piedino e' impostato come linea di uscita,
presenter' una tensione di 0V o 5V a seconda che il PIC abbia associato
uno 0 o 1 logico al piedino stesso, tramite apposite istruzioni. Quando e'
impostato come ingresso, il PIC potr' ricevere un valore booleano leggendo
il livello di tensione fornito al piedino in questione. Se il livello e' maggiore di
2V verr' letto un 1 logico, se inferiore a 0.8V verr' letto lo 0 logico.
Applicando una tensione compresa tra 0.8 e 2V il risultato e' impredicibile.
RBO, RBI, RB2, RB3, RB4, RB5, RB6, RB7 - Sono gli 8 piedini della porta B.
Valgono le considerazioni viste per quelli della porta A.
http://glanluca82.altervlsta.org/pic16f84/data/plc16f84.html
4/6
26/10/2016
Il piedino #MCLR
Per funzionare correttamente il PIC ha bisogno di tenere alto il livello logico del
piedino di reset (#MCLR). Ogni volta che si desidera resettare il PIC occorrer'
invece portare a massa tale piedino.
Come si vedr' anche negli esempi questo circuito e' praticamente sempre
presente.
Oscillatore esterno
XT
http://glanluca82.altervlsta.org/pic16f84/data/plc16f84.html
5/6
26/10/2016
2 0pF
OSCi/CLKII ---------------------------Il
XTAL
OSC2/CLKOUT-------------------------- 1 i~
2 OpF
GND
RC
VE'D
--------------- OSC1/CLKIN
C T eiJD
LP e HS
Durante la fase di programmazione del PIC andr' specificato quale dei 4 tipi di
oscillatore e' stato utilizzato. In questo modo i piedini 15 e 16 del PIC (OSC1/CLKIN
e OSC2/CLKOUT) si configureranno in modo opportuno per ricevere il segnale da
quello specifico tipo di oscillatore.
http://glanluca82.altervlsta.org/pic16f84/data/plc16f84.html
6/6
26/10/2016
Struttura interna
In figura viene riportata a grandi linee la struttura interna del PIC. In alto a sinistra
e' la memoria delle istruzioni da 1024 posizioni. In alto al centro la RAM principale,
chiamata anche RAM File Register da 68 byte (cio' 68 registri). A destra di questa
e' la memoria EEPROM da 64 byte.
Le porte di I/O (porta A e porta B) sono mappate in RAM, ci' significa che si pu'
leggere e scrivere nelle porte semplicemente leggendo e scrivendo nelle relative
locazioni in RAM. Ad esempio, una scrittura di un byte nella locazione di memoria
collegata alla porta B causa la configurazione opportuna dei segnali di tensione
nei piedini della porta B (RB0,RB1,RB2 ... RB7), viceversa una lettura traduce in un
byte la configurazione attuale delle tensioni applicate sui piedini di tale porta.
Ovviamente un piedino di I/O non pu' essere simultaneamente di input e di
putput: occorre decidere all'inizio la "direzione" dei piedini per tutte e 13 le linee e
ci' si risolve ancora una volta scrivendo in determinate posizioni di memoria
RAM.
http://glanluca82.altervlsta.org/pic16f84/data/plc16f84.html
7/6
26/10/2016
13
Flash
Program
Memory
FJC16FB4A
TK X 14
Dola Bus
Program Counter
RAM
file Registers
3 Level Stack
(12-tJlt/
EEOATA
PIC16F64A
EEPROM
Data Memori!
64 n6
68 x 3
J/ RAM Addr f
LACR
AddrMus^\
Inspection reg
1/ Indirect
Direct Addi
Addr
TMRO
FSR reg
STATUS reg
\ MUX /
Power-up
Timer
instruction
Decode a
Consol
Timing
Generation
OSC2/CLK0U1
OSCl/Ci-KlN
Oscillator
tar!-uc Timer
ALU
Power-on
Reset
VittcTioog
Timer
W reg
IXJ X
MCLR VCD. VSS
Torna all'indice
http://glanluca82.altervlsta.org/pic16f84/data/plc16f84.html
8/6