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