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