Clone del PICkit2 ed altre informazioni
Link Articolo Originale: http://www.grix.it/viewer.php?page=9319
Clone del PICkit2 ed altre informazioni
In questa pagina presento un programmatore per PIC, molto semplice da realizzare, abbastanza economico e, cosa molto importante, di tipo USB. Di fatto è un "clone" del PICkit2 originale della Microchip, in quanto usa lo stesso identico programma (e firmware). Sò bene che ci sono altre pagine su grix con questo argomento, ma credo/spero che qui troviate altre informazioni utili, frutto di un anno di prove e sviluppi vari (ovviamente non ho fatto solo questo in quest'anno).
THE ORIGINAL
L'originale permette di programmare una vasta quantità di pic di diverse serie. Infatti supporta molti microcontrollori delle serie PIC10F, PIC12F, PIC16F, PIC18F, PIC24, dsPIC30, dsPIC33, PIC32 e alcune EEPROM. La lista completa dei dispositivi supportati la trovate qui. Attenzione! Questo programmatore non supporta il famoso PIC16F841, ormai obsoleto; supporta invece la nuova versione PIC16F84A.
Il software da usare è il "PICkit2 programmer", il quale, oltre ad offrire una serie di funzioni accessorie, permette di leggere, programmare e verificare il dispositivo target. Il programma è chiaramente scaricabile dal sito della Microchip. Inoltre, con le ultime versioni di MPLAB, è possibile programmare il dispositivo target direttamente dall'ambiente di sviluppo. Infine è possibile programmare i pic direttamente dal pickit2, avendo caricato precedentemente (tramite il PICkit2 programmer) il firmware in una memoria EEPROM interna al pickit. Questa funzione permette di programmare svariati dispositivi (con lo stesso firmware) con il solo ausilio del pickit2, cosa che può essere comoda se si dovesse aggiornare in loco il firmware di numerosi esemplari di un particolare prodotto.
Una caratteristica interessante di questo programmatore è che può essere usato anche come analizzatore di stati logici con frequenza di campionamento fino ad 1MHz. Infatti, i pin "Data", "Clock" e "Aux" del connettore ICSP possono essere utilizzati come ingressi per segnali logici. Questa funzione è molto utile ad esempio nell'analisi di bus di comunicazione come il 1-wire o l'I2C.
Inoltre può essere usato per effettuare il debug dei circuiti ed ha anche la funzione di UART.
IL CLONE
L'idea del clone mi è venuta dopo che ne ho visti altri sul web e dopo aver notato che Microchip rende disponibili sul suo sito i file sorgenti e gli schemi relativi al PICkit2. Ho quindi rielaborato lo schema elettrico originale semplificandolo un po' a scapito di alcune funzioni che personalmente non uso.
A differenza dell'originale, questo circuito non implementa la funzione di programmazione senza l'ausilio del computer (poiché non ho incluso le memorie esterne al PIC) e la programmazione viene fatta alimentando il PIC "target" sempre a 5V (non è possibile impostare tensioni di alimentazione differenti). Mantiene invece le funzioni di analizzatore di stati logici, UART e debugger. Inoltre utilizza componenti di facile reperibilità ed è realizzato su una basetta monofaccia molto compatta e senza alcun ponticello.
Il motivo per cui ho creato questo programmatore è dato da vari fattori. Il primo è certamente dovuto al fatto che ormai le porte seriali RS232 stanno scomparendo dai computer, rendendo quindi impossibile l'uso dei vecchi programmatori (tipo il JDM). Un altro fattore che mi ha spinto a realizzarlo è dato dalla velocità di programmazione molto maggiore (infatti impiega solamente 5-10 secondi) rispetto agli altri programmatori "tradizionali" (col JDM mi ci volevano 2-3 minuti per programmare un PIC16F876). Inoltre, questo ha la possibilità di rilevare in automatico il microcontrollore collegato, quindi non c'è bisogno di cambiare le impostazioni del programmatore ogni volta che si deve programmare un PIC differente.
Naturalmente il problema di questo clone è che occorre un altro programmatore per programmare il PIC18F2550 (o PIC18F2455, come illustrerò in seguito) che impiega. Ci sono varie opzioni per superare questo ostacolo: la prima è chiedere a qualche amico che abbia un programmatore, la seconda è costruire (in via temporanea, anche su una breadboard) un programmatore alternativo come il JDM-b.
SCHEMA ELETTRICO
Lo schema elettrico, come già detto, è derivato da quello originale della Microchip che trovate qui alle pagine 77 e 78. Il nucleo del circuito è il microcontrollore PIC18F2550, che è dotato di porta USB interna e si occupa di tutto, compresa la gestione del circuito PWM step-up per la generazione dei 12V necessari alla programmazione. La programmazione del dispositivo "target" viene fatta tramite il connettore "ICSP" J2. L'alimentazione del circuito viene fornita dalla porta USB del computer. Le dimensioni del circuito che vedete in foto, sono di 4,85x4,85cm.
I due induttori siglati L1 ed L2 sono stati scelti perché nei negozi normalmente non se ne trovano con valore 680uH, perciò ho pensato di metterne due in serie di valore più comune. Probabilmente funziona anche con due induttori da 330uH. Un'altra opzione potrebbe essere quella di prendere un induttore da 1mH e togliere un po' di spire per arrivare ad un valore prossimo a 680uH.
I transistor BC337 possono essere sostituiti da dei BC547, mentre il transistor BC327 può essere rimpiazzato da un BC557. Nel caso non riusciate a reperire il BAT42 o un diodo schottky analogo, potete provare a sostituirlo con un comune 1N4148 (a me funziona senza problemi).
Ulteriore semplificazione
In seguito ad una richiesta un po' insolita di ridurre il circuito all'osso per la sola programmazione di EEPROM, ho ottenuto questo schema, eliminando tutta la sezione switching per la generazione dei 12V.
Possibili miglioramenti
Una possibile modifica migliorativa potrebbe essere quella di poter scegliere, tramite un jumper posto nel punto indicato nell'immagine, se alimentare il PIC da programmare direttamente coi 5V forniti dall'USB, oppure se sfruttare un'alimentazione esterna. Questa opzione potrebbe risultare comoda specialmente nel caso in cui fosse necessario programmare il PIC a tensioni diverse dai 5V, sopperendo così alla mancanza della circuiteria interna per la regolazione della tensione di alimentazione.
Nel normale utilizzo del clone non è necessario l'uso del pulsante SW1, il quale dunque può essere omesso.
SBROGLIO
Lo sbroglio del circuito è stato fatto utilizzando FidoCAD. A causa del decesso dell'hard disk contenente il file originale, ho dovuto ridisegnarlo. Quello originale funzionava perfettamente, questo invece mi sembra sia corretto, ma non vorrei aver commesso qualche errore di copiatura.
FIRMWARE(s)
Il firmware originale completo potete prenderlo dal sito della Microchip a questa pagina (oppure direttamente da qui). E' composto da un bootloader, che permette di aggiornare il firmware direttamente dal "PICkit 2 programmer", e dal firmware vero e proprio. Naturalmente è anche possibile caricare il solo bootloader e successivamente caricare (od aggiornare) il solo firmware che, attualmente, è giunto alla versione 2.32 (che, a quanto ho capito, è quella definitiva, in quanto non viene aggiornato dal 2008 a causa dell'uscita del successore PICkit3).
Prima modifica
In seguito ad alcune richieste, ho voluto provare a modificare il firmware per renderlo compatibile con quarzi da 4MHz anziché da 20MHz. Per farlo è sufficiente modificare l'impostazione del divisore di frequenza sul registro di configurazione "CONFIG1L" (vedi datasheet al paragrafo 25.1). Il modo più veloce è quello di caricare il file hex originale con il programma "PICkit 2 programmer", modificare il bit 2 del registro "CONFIG1" impostandolo a 0 (clickando sopra al bit) e salvare il file hex modificato (oppure caricarlo direttamente sul PIC).
Un altro metodo è invece quello di andare a modificare il file sorgente fornito dalla Microchip e ricompilarlo. Con questo intento ho scaricato il sorgente della versione 2.32 dal sito della Microchip ed ho provato a modificarlo e ricompilarlo (utilizzando il progetto del bootloader). Ho però scoperto che il file sorgente originale, se ricompilato, presenta un paio di errori. Corretti gli errori (dovuti credo a delle sviste o all'impiego di differenti versioni del compilatore), ho caricato il codice sul pic, ma questo non funziona! Cioè il file sorgente non corrisponde al codice macchina (file hex) fornito (il quale invece funziona!). Mi sono poi accorto che la data dell'ultimo aggiornamento del file sorgente è di un paio di mesi successiva a quella del file hex e pertanto ho pensato di andare a recuperare le precedenti versioni del firmware alla ricerca di un file sorgente funzionante. Sono dovuto andare a ritroso fino alla versione 1.21.
Anche in questo caso erano presenti un paio di banali errori (sul file boot_main.c, evidenziati in rosso nell'immagine soprastante). Il primo valore va impostato a 3, mentre la seconda voce va eliminata. Corretti quegli errori non ho riscontrato altri problemi. Ho potuto quindi modificare il registro di configurazione (impostando ad 1 il valore nel riquadro in blu) ed ottenere l'effetto desiderato. Per completezza metto a disposizione per il download l'archivio contenente l'intero progetto modificato.
Seconda modifica
Avendo a disposizione pochi PIC18F2550 e vari PIC18F2455, ho voluto provare ad adattare il firmware proprio a questi ultimi. La soluzione è stata quella di eliminare il bootloader e mantenere solamente il firmware vero e proprio, ottendendo così una versione (non aggiornabile tramite bootloader) del firmware compatibile anche coi PIC18F2455. Questa versione (ricavata dall'originale 2.32) è quella che uso attualmente (e dunque è funzionante) e la potete scaricare qui.
Per la verità mi è capitato di imbattermi in una discussione dove si spiega come questo sia in realtà possibile. Per farlo è sufficiente sostituire il file "PK2DeviceFile.dat", che tipicamente si trova all'interno della cartella "C:Program FilesMicrochipPICkit 2 v2", con questo file. Naturalmente usate questo file a vostro rischio e pericolo.
Io però ho voluto provare questo sistema e devo dire che funziona (anche se è più lento che con altri pic, ma è una cosa voluta proprio per rispettare le tempistiche di programmazione di questo dispositivo). Se volete addentrarvi in questa modifica, chiudete il programma "PICkit2 programmer", sostituite quel file e riaprite il programma. Quindi sul menù "Tools" disabilitate la voce "Fast Programming", mentre sul menù "Programmer" selezionare "Manual Device Select". Sul menù "Device Family" selezionare la voce "Ancient" che trovate all'interno del sottomenù "Midrange", come illustrato nell'immagine seguente. Infine, sul menù a tendina "Device" selezionate la voce "PIC16F84" (ovvero l'unica voce presente) e procedete con la programmazione del PIC, come fate normalmente con gli altri.
Sperando di non avervi annoiati più di tanto vi saluto e vi avviso che la presente pagina la trovate anche sul mio sito.