PIC16x84
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. Questo potrebbe non sembrarvi un pregio rispetto
ai concorrenti, ma se considerate che il 16F84 è contenuto in
un banale DIL a 18 pin potreste anche cambiare idea!
Il resto è routine: 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 piuttosto robusti (20mA source, 25mA
sink) e un sacco di funzioni aggiuntive come Power-On Reset (POR),
Sleep mode e cifratura dei dati.
Tutto questo in un dispositivo che costa
orientativamente attorno alle 10 mila lire... non
male, vero?
È necessario comunque parlare anche degli
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 quasi "da colpo sicuro": bisogna adottare
una certa parsimonia nel riprogrammarlo, quindi buona parte del
debug deve essere fatta col simulatore (a onor del vero devo dire che
certi PIC "di prova" li programmo praticamente da anni, e non
hanno ancora nemmeno una cella danneggiata... la Microchip è sicuramente
stata molto prudente nel dichiarare il numero minimo di riscritture).
La pratica
Questo è ciò che serve per iniziare a
lavorare con i PIC:
Il
datasheet. Se avete già esperienze di programmazione su altre CPU o
microcontrollori, nel datasheet troverete tutto ciò che vi serve. È
praticamente un manuale di programmazione. Potete trovare la versione più aggiornata su
www.microchip.com.
Il compilatore/assembler.
Esistono diverse alternative, sia gratuite che a pagamento, per diversi
linguaggi di programmazione. Secondo il mio modo di vedere le cose programmare in
BASIC un microcontrollore RISC con 68 byte di RAM è un abominio, quindi
consiglio di usare direttamente il linguaggio assembly.
Personalmente consiglio di usare MPLAB, la suite per Windows fornita gratuitamente dalla Microchip che comprende
ambiente di sviluppo grafico, assembler e debugger. L'interfaccia utente sa di antico, ma
trasmette comunque una sensazione di professionalità e
robustezza molto rassicurante. Manco a dirlo, potete trovare l'ultima versione di
MPLAB sul sito della Microchip.
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 e costano una barca di soldi) ai circuiti composti da un paio di diodi e due
transistor. C'è purtroppo da dire che la pirateria della TV via satellite ha
dato una notevole diffusione ad alcuni programmatori a basso prezzo e qualità
ancora inferiore; vi sconsiglio vivamente di costruire o comperare dei
programmatori autoalimentati, che prendono cioè l'alimentazione dalla
porta parallela o seriale. Per due lire in più (oppure diverse decine di mila
lire in meno, se ve li autocostruite) ci sono delle alternative decisamente
migliori. In questa sede ve ne propongo due:
-
Un clone del propic2.
Il propic2 è un programmatore che si collega sulla porta parallela che
supporta una vasta gamma di PIC delle famiglie 12x, 16x e altre ancora, nonché le
memorie EEPROM seriali su bus I2C. Gli schemi elettrici del propic2 sono di
pubblico dominio, io non ho fatto altro che progettare una versione singola
faccia del circuito stampato (quello proposto sul sito originale è doppia
faccia) che non supporta il "production mode". Il software "ufficiale" del propic2 è a pagamento e non
consiglio proprio di comprarlo: lo trovo decisamente brutto, e oltretutto
non funziona sotto a Windows NT/2000. Consiglio invece di usare IC-Prog:
è free, supporta il propic2 nonché molti altri programmatori, funziona
anche sotto a Windows NT/2000 e ha un'interfaccia molto migliore. Per il programma ICprog rimando
al siti dell'autore; per quanto riguarda invece il PCB del programmatore in formato FidoCAD
e BMP, potete scaricarlo da qui assieme
a qualche informazione utile per costruirlo. Qui
trovate la versione online del pacchetto.
-
Un programmatore
derivato direttamente dalla Application Note AN589 della
Microchip: A PC-Based Development Programmer for the PIC 16C84.
Anche questo programmatore si collega alla porta parallela, ma supporta solo
ed esclusivamente i PIC16x84. Il software di programmazione è mio, l'ho
scritto ex-novo; funziona anche sotto a Windows NT/2000 e non ha particolari
problemi. Comunque anche IC-Prog lo supporta. Vi consiglio comunque di costruire il clone del propic2; in ogni caso il necessario per questo programmatore lo trovate qui.
|