Titolo
Progetto di un programmatore per i
microcontrollori PIC16 della Microchip
Autori : Pierluigi Guerzoni, IZ4AKO -
Giovanni Braga IW4DUW
Indice
Introduzione
Descrizione del
circuito
Descrizione del SW
Funzionamento
Conclusioni
Bibliografia
Introduzione
Dopo avere sperimentato alcune
tipologie circuitali e i relativi software per la programmazione dei
microcontrollori appartenenti alla famiglia dei PIC16 della
Microchip[2], gli autori presentano, con questo articolo, una
soluzione che ritengono molto adatta sia a chi desidera personalizzare il
progetto esposto, sia a chi desidera un prodotto finito semplice ed
affidabile.
Il dispositivo descritto si
collega alla porta parallela di un personal computer (PC), dalla quale riceve le
istruzioni di programmazione e il microcodice. Il PIC da programmare, a
differenza di altri programmatori, non risiede su questa scheda, ma le linee di
programmazione pervengono a una spina multipolare, rendendo, di fatto, il
dispositivo modulare. L'utente può scegliere, a seconda delle necessita', di
inserire un modulo con uno zoccolo adeguato al PIC che si intende programmare,
oppure di prolungare le linee per la programmazione "in-circuit".
La gestione del protocollo di
programmazione è delegata ad un apposito software (SW). Quello usato dagli
autori può programmare i modelli PIC16F84 e PIC16C84 (quest'ultimo è obsoleto),
ma alcuni tipi di SW sono molto completi, offrendo la possibilita' di
programmare molti processori Microchip e anche quelli di altre marche.
Questo sistema è stato sperimentato,
con esito positivo dagli autori, per la programmazione del microcontrollore
PIC16F84 e a tale dispositivo si fara' riferimento nel seguito dell'articolo,
salvo diversamente specificato.
Ricordiamo,
che un microcontrollore è un microprocessore dedicato nella gestione di
periferiche, possiede ingressi e uscite digitali, qualche modello anche
convertitori ADC, registri di memoria di programma, dati e RAM. Questo insieme
di caratteristiche rende il microcontrollore uno dei dispositivi più
interessanti e versatili alla portata dello sperimentatore elettronico. In
particolare, il PIC16F84 è un processore a 8 bit con architettura Harvard a 14
bit, contiene 1K di memoria programma flash a 14 bit, 64 byte di memoria per
dati non volatili, 36 byte di RAM, 15 registri speciali, 13 linee di I/O
digitale, 4 sorgenti di interrupt, un timer a 8 bit, watchdog timer, sleep mode
e 4 tipi di oscillatore selezionabili dall'utente.
Descrizione del
circuito
Il circuito elettrico è veramente semplice perché, come detto in
precedenza, il controllo della programmazione è delegato al SW. Si tratta,
quindi, di interfacciare i livelli elettrici della porta parallela del PC con
quelli previsti per le operazioni di programmazione.
Questo
schema è stato derivato, quasi integralmente, dalla versione 0.5 del
programmatore di David Tait[1], pubblicata in lingua inglese su
Internet nel 1998 (?), alla quale rimandiamo il lettore per la descrizione
dell'articolo originale. In questa sede, desideriamo, invece, soffermarci su
alcune particolarita' del progetto originale e le varianti che sono state
introdotte dagli autori.
I segnali utilizzati
della porta parallela sono ACK, D0, D1, D2 e D3, e ciascuno di questi è
collegato a una diversa porta logica del circuito integrato U1. Il segnale ACK è
un ingresso ed è usato per leggere il contenuto (dump) di un PIC programmato,
mentre gli altri sono uscite.
Il transistor Q1, comandato da
D2, serve per commutare la tensione, circa 13.5V, per l'accesso alla
programmazione del PIC (MCLR). Il transistor Q2, comandato da D3, serve per
alimentare il PIC durante la programmazione (PROGVCC). I segnali RB6 e RB7 sono
rispettivamente il CLOCK e I/O di programmazione del PIC.
Gli
integrati U2 e U3 servono per derivare due tensioni stabilizzate da un'unica
sorgente. L'uso del ponte raddrizzatore D1 è opzionale. Con D1 la tensione di
alimentazione della scheda deve essere circa 18V e senza D1 circa 17V. I diodi
D2 e D3 non sarebbero opzionali, ma non sono stati installati da uno degli
autori: in questo caso il rispettivo piedino di U2 deve essere collegato a massa
e le tensioni dette sopra possono essere calate di circa
2V.
L'integrato U1 proposto è il 7407,
composto da sei porte buffer open-collector; in alternativa, si può usare il
7406 che si compone di sei porte invertenti open-collector. Il SW è
configurabile per entrambe le tipologie di
integrato.
Analizzando il circuito, si osserva che l'uso di una
porta open-collector è strettamente necessaria solo per pilotare Q1. Infatti,
una porta totem-pole, la cui uscita è al massimo 5V, non è in grado di interdire
Q1, anche considerando il partitore resistivo R1 e R2. Tuttavia, gli autori
hanno sperimentato che alcune marche di 7404, sei porte invertenti, non hanno
questo problema: evidentemente, non c'è caduta di tensione ai capi di R1. Gli
autori usano correntemente questi 7404 nei loro
programmatori.
La programmazione "in-circuit"
è quella che avviene direttamente sulla applicazione che usa il PIC: potrebbe
essere quella montata su una scheda protoboard, su circuito stampato, oppure su
una scheda commerciale. Questa modalita' è molto interessante perché consente
una revisione del firmware molto rapida e senza dovere sfilare il PIC dal suo
zoccolo.
A questo scopo, i segnali di programmazione arrivano
ad una spina multipolare e devono essere portati sull'applicazione a cura del
lettore. In particolare, gli autori hanno previsto un doppio deviatore che
risulta essere molto comodo quando si montano dei prototipi su protoboard. In
una posizione si scarica il firmware e nell'altra si alimenta la protoboard: in
pochi secondi si verifica il funzionamento del proprio lavoro. Infine, se la
programmazione "in-circuit" non interessa, il lettore può realizzare un modulo
con uno zoccolo forza-zero e lasciare il deviatore nella posizione di
programmazione.
Descrizione del
SW
Per degli accaniti progettisti e costruttori, come gli
autori, risulta difficile ammettere che tutta la logica di
programmazione è gestita dal SW: istruzioni, temporizzazioni, cicli di lettura e
scrittura. Ma questa è l'evidenza dei fatti e, se può servire a semplificare un
progetto, ben venga.
Il SW che consigliamo è quello di David
Tait v. 0.5. È pubblicato in forma di eseguibile e di sorgente in linguaggio C
su Internet[1] e può programmare i soli PIC16C84 e PIC16F84. Appare
subito evidente che modificando un po' il sorgente è possibile istruire il SW
per la programmazione di qualunque PIC; il codice, scritto in forma molto
ordinata, è compatibile con il Borland Turbo C++ v. 3.0, ed è stato ricompilato
ed eseguito, dagli autori, senza errori.
Esistono altri SW che
sono compatibili con questo progetto, ma sono privi del sorgente e alcuni sono a
pagamento[3].
Funzionamento
Il progetto qui presentato si presta
per la programmazione del PIC in-system in particolare su protoboard. Per
ottenere questo risultato bisogna procedere come descritto di seguito :
- collegare il segnale VCCBOARD alla linea di alimentazione
positiva della protoboard
- collegare il segnale PICVCC
direttamente al piedino 14 del pic
- collegare il segnale MCLR
direttamente al piedino 4 del pic
- collegare il segnale RB7
direttamente sul piedino 13 del pic
- collegare il segnale GND
alla massa generale
- collegare il segnale RB6 direttamente al
piedino 12 del pic.
In pratica l'unica accortezza e' quella di
alimentare la protoboard con la VCC, mentre il solo pic con la PICVCC. Lo
scambio tra programmazione e alimentazione viene fatto agevolmente con
l'apposito deviatore.
Per quanto riguarda il software nel
seguito si fa riferimento al sw originale di David Tait. Il file eseguibile si
chiama PP ed e' corredato da un esauriente manuale in lingua inglese. PP
funziona senza problemi in finestra dos dentro win9x. I comandi piu' importanti
sono :
- pp -e : serve a cancellare il contenuto del
pic
- pp -d dump.hex : serve a leggere il contenuto del pic e a
memorizzarlo nel file dump.hex
- pp programma.hex : serve a
programmare il pic
Per quanto riguarda la
scelta dell'hardware e' necessario specificare che si sta usando un 7407 e i
transistor PNP. Per fare questo bisogna settare una variabile di ambiente prima
di lanciare pp. Nel caso dell'hardware in questione e' sufficiente digiare set
PPSETUP=3.
Una funzione senz'altro utile e' quella di DEBUG
dell'hardware attivabile facendo set PPDEBUG=1 e poi lanciando pp.
Conclusioni e sviluppi
futuri
Il progetto proposto è utilizzato dagli autori per la programmazione del
PIC16F84 nella modalita' "in-circuit" su protoboard. Questo sistema consente un
rapido sviluppo del firmware, almeno per quanto riguarda le fasi di
programmazione e di messa in esecuzione del programma.
Il circuito è compatibile con la
programmazione di altri modelli di PIC, purché il SW sia modificato per tenere
conto delle caratteristiche di questi. In alternativa, alcuni SW commerciali,
generalmente di basso costo, sono gia' predisposti per questo compito.
Gli autori metteranno a disposizione
degli interessati su pagina WEB[4] il file circad del circuito
stampato, le immagini del prototipo montato, il progetto originale di Tait, il
progetto di una semplice applicazione di prova e il relativo file HEX, ed
eventualmente altri file e informazioni ritenute utili. La collaborazione
costruttiva dei lettori sara' gradita per migliorare il prodotto.
Bibliografia
[1] David Tait. Tait ha dismesso il suo
sito personale, e, a quanto ci risulta, non è più contattabile con E-Mail. Del
suo lavoro, esistono dei mirroring (copie) in giro per il Web, gestite da altri
utenti.
[2] http://www.microchip.com/ Sito ufficiale
della casa costruttrice dei PIC. Si trovano i data sheet, le application notes,
alcuni progetti dimostrativi, il sistema di sviluppo MPLAB ecc.
[3] www.geocities.com/SiliconValley/Peaks/9620
software compatibile con l'hardware di Davit Tait a pagamento ma per tutti i
PIC.
[4] http://ferrara.linux.it/members/iz4ako
Schemi e PCB
fatti con CIRCAD 3.52
Programmatore per
pic 16F84
Programmatore
per pic 16F87x
Home Page di Michele
Guerra, autore di un ottimo corso di Circad
Document converted from ms word 8 by MSWordView(mswordview
0.5.14 (bw6))
MSWordView written by Caolan McNamara