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