Per poter programmare un PIC occorrono fondamentalmente tre cose:

Per poter programmare un PIC occorrono fondamentalmente tre cose:



Un programma assemblatore per trasformare il testo sorgente assembler (.asm) in
codice eseguibile (.hex)
Un circuito di programmazione da collegare al PC (programmatore)
Un software di controllo del programmatore per trasferire l'eseguibile sul PIC.
Assemblatore
Un ottimo assemblatore free (dotato anche di potenti funzionalita' macro) e' Mpasmwin.
E' contenuto nel pacchetto MPLAB scaricabile direttamente dal sito della Microchip
Technology Inc. (cercare sotto MPLAB IDE).
Programmatore
Di programmatori ne esistono parecchi, sia per porta seriale che parallela che USB, sia
intelligenti (cioe' con un micro gia' programmato a bordo) che non intelligenti (in cui i
segnali di programmazione sono gestiti completamente dal software del PC).
Ciascuno presenta vantaggi e svantaggi, in ogni caso comunque i requisiti hardware
indispensabili per ogni programmatore "serio" sono la capacita' di fornire le due tensioni
stabilizzate necessarie (5V per la Vcc e 12..14V per la Vpp) e la presenza di un bus I2C a
livelli TTL per il dialogo con il PIC.
Esistono alcuni programmatori ultrasemplificati (spesso senza alimentazione esterna) che
permettono di programmare pochi tipi di PIC se non uno solo, per esempio il 16F84 ma
non il 16F84A. In questo caso la colpa non e' dei PIC "duri" da programmare come
qualcuno sostiene, ma dei programmatori che lavorano completamente fuori specifica e in
qualche caso riescono a funzionare solo per pura fortuna affidandosi alle tolleranze (e alla
resistenza allo stress) dei PIC stessi. Infatti attenendosi rigorosamente ai requisiti visti
prima non esiste niente di simile a un PIC "duro", se sono richiesti da 12 a 14V per la
tensione di programmazione Vpp, non ci si puo' lamentare se dandone solo 10 non si
riesce a programmarlo...
Il circuito che segue, che ho chiamato "minipropic2 clone", e' un programmatore
alimentato non intelligente per porta parallela. E' una personale rielaborazione e
semplificazione di altri schemi free disponibili in rete, in particolare del propic2 clone di
Lorenzo Lutti, ed e' composto solamente da 1 integrato, 7 resistenze e 2 transistor. Sono
presenti solo i circuiti strettamente indispensabili per una corretta programmazione: +5V e
+13,2V controllati tramite transistor interruttori, e un bus I2C (con linea di clock e linea dati
bidirezionale) . I terminali sulla sinistra vanno collegati alla porta parallela del PC (sono
riportati i numeri dei pin e i nomi dei segnali). I 5 terminali sulla destra sono invece da
collegare ai diversi chip secondo gli schemi riportati di seguito. Una soluzione economica
per programmare piu' tipi di PIC e' quella di costruire una basetta con montati tutti i diversi
tipi di zoccolo, collegando assieme i vari Vpp Vcc SCK SDA GND. E'invece sconsigliato
usare un unico zoccolo ZIF su cui portare i segnali in modo da corrispondere ai pin di
programmazione e alimentazione di tutti i tipi di PIC, perche' in questo caso si rischia di
portare delle tensioni su dei pin che dovrebbero invece rimanere scollegati.
Per il corretto funzionamento del programmatore
e' necessario usare un SN7407 o un SN74LS07.
Le versioni cmos 74HC e 74HCT potrebbero invece non funzionare
a causa della presenza di diodi interni collegati
al positivo dell'alimentazione.
Per alimentare questo programmatore occorrono due regolatori di tensione in grado di
fornire +5V e circa 13V stabilizzati. Lo schema qui sotto puo' essere alimentato in alternata
recuperando un trasformatorino da 12..18Vca, o direttamente in continua (con 16..25V)
eliminando il ponte raddrizzatore.
Schema pratico di collegamento
dei due regolatori di tensione,
7 componenti in tutto...
Nelle foto si possono vedere gli zoccoli multipli per accettare piu' tipi di PIC e il circuito
interno assemblato su millefori. Agli zoccoli sono stati asportati tutti i pin non
indispensabili, in modo da ridurre al minimo la forza di inserzione e lo sforzo sui pin del
PIC. Nella foto di destra si nota un trimmer multigiri azzurro non presente nello schema, la
foto si riferisce infatti ad un prototipo molto simile che prevedeva uno stabilizzatore
regolabile. La soluzione qui proposta evita invece ogni tipo di taratura e ogni problema di
"deriva" del trimmer. Anche se nelle foto i regolatori di tensione sono dotati di alette di
raffreddamento queste non sono affatto necessarie vista l'esigua corrente richiesta. Il cavo
flat che collega il programmatore agli zoccoli deve essere lungo al massimo una decina di
cm, questo vale anche nel caso che detto cavo venga usato per la programmazione incircuit (ICSP).
Sebbene per il funzionamento non serva altro, e'
comunque utile aggiungere alcuni LED che indichino la
presenza dell'alimentazione generale (LED verde), e
della Vpp e Vcc verso il PIC da programmare.
Infatti puo' essere dannoso inserire o togliere un chip
dallo zoccolo mentre sono presenti delle tensioni di
alimentazione.
Per lo stesso motivo il PIC va inserito sullo zoccolo
solo a programma di controllo avviato, in quanto
questo provvede a settare correttamente i segnali della
porta parallela.
Software di programmazione
Un ottimo programma free e' IC-PROG (scaricabile da http://www.ic-prog.com/), supporta
molti tipi di PIC e diversi tipi di programmatori, dispone di buffer multipli e permette di
editare manualmente i singoli bytes. Per poter usare il programmatore presentato in
questa pagina e' importantissimo settare IC-PROG nel seguente modo:



Programmatore: ProPic 2 programmer
Inverti MCLR: selezionato
Inverti VCC: selezionato
E' inutile ricordare che il software deve prevedere esattamente il tipo di micro che si vuole
programmare, selezionando per esempio 16F628 e inserendo fisicamente un 16F628A la
programmazione potrebbe non andare a buon fine.
Per adesso il funzionamento e' stato testato con Windows98 con i PIC 12F675, 16F84A,
16F628, 16F873, 16F876, 16F877 e 18F452, verificando anche la capacita' del
programmatore di cancellare i chip protetti contro la lettura.
Con Windows XP e' necessario installare il driver icprog.sys come indicato nella pagina:
http://filrub.altervista.org/wp/?p=10 Non tutti i tipi di pic sono pero' risultati programmabili,
in particolare sul mio programmatore non funziona piu' la programmazione dei seguenti
PIC: 16F84A, 16F873, 16F876 e 16F877.
Altre persone mi hanno comunque comunicato che a loro invece con ic-prog funziona tutto
perfettamente.
Ulteriori informazioni
Ogni PIC e' diverso dall'altro per quanto riguarda aree di memoria usabili, registri interni,
funzionalita' dei piedini ecc... Per ciascun tipo sul sito della Microchip e' presente un
completo e indispensabile datasheet in formato pdf (piu' molte interessanti application
notes). In linea generale bisogna sempre tenere in considerazione quattro cose prima di
addentrarsi nella programmazione e prima di migrare un programma da un tipo di PIC
all'altro:




Area di memoria disponibile per il programma (indirizzi e ampiezza)
Area di memoria per i dati utente e per i registri di controllo (indirizzi, divisione in
banchi, ampiezza)
Configuration word (chiamata anche settaggio dei fuses)
Configurazione di default dei pin di I/O all'accensione
Oltre ai datasheet, e alle application notes della casa madre, in rete sono presenti molti siti
ricchi di informazioni, come l'ottimo tutorial "Pic By Example di Sergio Tanzilli http://www.tanzilli.com"
Usando questi due programmi free, e costruendo questo programmatore, si dispone di un
completo sistema di sviluppo piu' che adatto per usi non professionali, non velocissimo ma
sicuramente funzionante, completamente free ed economico.
Altri siti in cui viene trattato questo programmatore (o sue piccole varianti) con tanto di
circuito stampato, consigli sull'utilizzo e applicazioni molto interessanti:


http://filrub.altervista.org
http://spazioinwind.libero.it/nferrarese/
Una modifica...
Esistono altri software di programmazione, free o in versione beta.
Il primo e' WinPic, scaricabile da: http://www.qsl.net/dl4yhf/winpicpr.html
Nella lista dei programmatori supportati non compare il propic2, ma basta andare su
"interfaccia" e selezionare: "Tait, 7407(driver)+ transistor PNP", il cui circuito e' quasi del
tutto identico (d'altra parte tutti i programmatori ridotti all'osso finiscono per forza di cose
con l'essere praticamente uguali).
Anche con WinPic alcuni PIC sono risultati utilizzabili e altri no, in particolare in questo
caso riesco a programmare il 16F84A e il 16F877, ma non il 18F452, mentre i 16F873 e
876 in versione non A non sono supportati.
Un software piu' recente e decisamente meglio funzionante si puo' trovare in versione beta
sul sito www.melabs.com Si chiama MeProg ed e' molto piu' veloce degli altri nella
programmazione dei chip. Il suo uso richiede pero' una piccola modifica al circuito del
programmatore come riportato nello schema seguente, si tratta in sostanza di
interrompere il segnale proveniente dal pin 6 della parallela quando si vuole usare
MeProg.
Questo il risultato provvisorio dei dei test, devo verificare
se c'e' qualche criticita' nel cablaggio del mio programmatore:
IcProg1.05c Win98 IcProg1.06a+drv WinXP
WinPic WinXP
MeProg4.22beta WinXP
12F675
OK
OK
OK
OK
16F84A
OK
errore address 0
OK
OK
16F628
OK
OK
OK
OK
16F873
OK
errore address 0
non supportato
OK
16F876
OK
errore address 0
non supportato
OK
16F876A
OK
errore address0
OK
OK
16F877
OK
errore address 0
OK
OK
18F452
OK
OK
non accende Vpp
OK