PIC16x84 INTRODUZIONE
La teoria
Il PIC 16F84 (e 16C84, che si differenzia per molto poco) della Microchip è un
microcontrollore RISC a 8 bit molto interessante. Si distingue dai suoi concorrenti per una
serie di motivi:
•
•
•
•
Architettura Harvard: il bus dei dati (a 8 bit) è distinto dal bus del programma (a 13
bit). A differenza della marea dei microprocessori che per ridurre i costi di
produzione adottano l'architettura Von Neumann, i PIC non condividono la stessa
memoria per codice e dati. Ciò gli consente di accedere contemporaneamente a
entrambi;
RISC: i PIC 16x dispongono di un set di appena 35 istruzioni, già inclusi tutti i tipi di
indirizzamento (immediato, diretto, indiretto); qualsiasi istruzione occupa una sola
word di codice (14 bit). Grazie a una 2-stage pipeline, mentre un'istruzione viene
decodificata/eseguita l'istruzione successiva viene caricata (fetch). In questo modo
il tempo di esecuzione di una generica istruzione si riduce a un solo ciclo macchina
(eccetto le istruzioni di salto, che ne richiedono due). Dato che ogni ciclo macchina
corrisponde a quattro cicli di clock, diventa davvero banale calcolare i cicli di clock
necessari per eseguire un determinato spezzone di codice;
EEPROM seriale interna per codice/dati: sia la memoria del programma che la
memoria per i dati non volatile sono implementate grazie a delle EEPROM interne,
programmabili serialmente con grande facilità. Ciò permette di ridurre al minimo la
circuiteria di contorno al PIC; per farlo funzionare bastano un quarzo e due
condensatori.
13 pin di ingresso/uscita, alcuni dei quali utilizzabili per generare diversi tipi di
interrupt.
timer (interno o pilotabile da un segnale esterno) più relativo divisore programmabile,
interrupt generati da 4 diverse fonti (watchdog, timer, piedino RB0/INT, ingressi con
change notification RB4,5,6,7), frequenze di clock fino a 10MHz, stack a 8 livelli separato
da dati e codice, 36 registri general-pourpose, ingressi/uscite TTL compatibili ed altre
funzioni aggiuntive come Power-On Reset (POR), Sleep mode e cifratura dei dati.
svantaggi:
•
Scarsa memoria dati a disposizione. Il 16F84 dispone di 1K di memoria per il codice
(1024 istruzioni da 14 bit l'una), il che è buono e in linea con i concorrenti, ma
soltanto di 68 bytes di data SRAM (36 nel 16C84) e 64 bytes di data EEPROM. La
EEPROM viene utilizzata per memorizzare dati in modo non volatile e deve essere
considerata una memoria secondaria, sia per la sua particolare lentezza (tempo di
cancellazione/scrittura 10 ms) che per la sua deperibilità (tempo minimo di vita 1
milione di riscritture); quindi la memoria "di lavoro" è la sola SRAM: scordatevi di
memorizzare una grossa mole di dati. Si potrebbe pensare di utilizzare una RAM
esterna, ma in questo modo si occuperebbero molti pin (anche multiplexando tutto il
multiplexabile, 8 pin sarebbero comunque necessari).
•
Scarsa longevità della program EEPROM. Il tempo minimo di vita è di sole 100
riscritture, il che rende il PIC un dispositivo col quale occorre avere una certa
parsimonia nel riprogrammarlo, quindi buona parte del debug deve essere fatta col
simulatore
La pratica
Questo è ciò che serve per iniziare a lavorare con i PIC:
Il compilatore/assembler. Esistono diverse alternative, sia gratuite che a pagamento, per
diversi linguaggi di programmazione. Programmare in BASIC un microcontrollore RISC
con 68 byte di RAM è sconsigliabile, quindi è consigliabile usare direttamente il linguaggio
assembly. Es. MPLAB, la suite per Windows fornita gratuitamente dalla Microchip che
comprende ambiente di sviluppo grafico, assembler e debugger.
Il programmatore e relativo software. In questo caso c'è ancora più scelta che per
quanto riguarda il compilatore. Si spazia dai kit di sviluppo prodotti dalla stessa Microchip
(che spesso comprendono anche programmatore e in-circuit debugger, sono direttamente
supportati da MPLAB ed hanno un costo elevato) ai circuiti composti da un paio di diodi e
due transistor.
PIEDINATURA
Figura 1 - Piedinatura
RA0 To RA4
RA è una porta bidirezionale. Cioè può essere configurata sia come una porta di input che
di output. Il numero seguente si riferisce al bit ad essa relativo (0 to 4). Pertanto abbiamo
una porta di 5 bit bidirezionale dove ciascun bit può essere configurato come Input o
Output.
RB0 To RB7
RB è una seconda porta bidirezionale. Si comporta esattamente come la RA, però ci sono
8 bit.
VSS And VDD
Sono i piedini di alimentazione del microcontrollore. VDD è il positivo, and VSS è il
negativo, o 0V. La massima tensione applicabile è di 6V, e il minimo è 2V
OSC1/CLK IN And OSC2/CLKOUT
Sono i pin a cui si collega l’oscillatore esterno (external clock), in modo tale che il
microcontrollore possa essere in grado di gestire il tempo.
MCLR
Pin utilizzato per cancellare la memoria del PIC (i.e. quando vogliamo riprogrammarlo).
INT
è un ingresso che può essere monitorato. Se questo pin va alto, possiamo far ripartire il
programma, fermarlo o qualsiasi altra singola funzione noi si desideri.
T0CK1
è un altro ingresso di clock, su questo opera un timer interno. È totalmente indipendente
rispetto al clock principale.