http://tomasella.altervista.org/it/elettronica/microcontrollori/PICkit2/

PICkit2

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).

The original

foto del PICkit2 originale

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.

schermata di esempio del programma 'PICkit2 Logic Tool'

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.

foto del clone del PICkit2

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-b). 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. Se proprio non avete la possibilità di sfruttare uno dei due metodi già citati, potete provare a contattarmi.

Schema elettrico

schema elettrico del clone del PICkit2

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,85×4,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.

schema elettrico del clone del PICkit2 semplificato per sole EEPROM
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.

aggiunta di uno jumper allo schema elettrico del clone del PICkit2

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.

sbroglio del circuito del clone del PICkit2

Firmware(s)

Il firmware originale completo potete prenderlo dal sito della Microchip a questa pagina (oppure direttamente da qui). È 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).

modifica da apportare tramite il PICkit2 programmer

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.

modifiche da apportare al file boot_main.c

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.

Upgrade 2018

Verso la fine del 2018 ho voluto provare un servizio on-line di prototipazione di PCB. Ho quindi pensato di realizzare una versione aggiornata del PCB e, approfittando del fatto che il fornitore in questione realizza PCB a doppia faccia, ho potuto ridurre un po' gli ingombri. Allo stesso tempo, ho aggiunto lo spazio per montare l'EEPROM (versione SMD) per la programmazione diretta dei PIC con PC scollegato e di inserire il jumper sull'alimentazione, come descritto sopra. In questo caso ho utilizzato il software open source KiCad. Qui trovate la cartella compressa contenente i file gerber per la realizzazione dello stampato. Di seguito trovate lo schema elettrico rivisto e la foto del prototipo che ho realizzato.

schema elettrico del clone del PICkit2 aggiornato con EEPROM e jumper di selezione alimentazione interna/esterna
fotografia del clone del PICkit2 aggiornato con EEPROM e jumper di selezione alimentazione interna/esterna



1 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 si trova all'interno della cartella "C:\Program Files\Microchip\PICkit 2 v2", con questo file. Naturalmente usate questo file a vostro rischio e pericolo.

Io 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 menu "Tools" disabilitate la voce "Fast Programming", mentre sul menu "Programmer" selezionare "Manual Device Select". Sul menu "Device Family" selezionare la voce "Ancient" che trovate all'interno del sottomenu "Midrange", come illustrato nell'immagine seguente. Infine, sul menu 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.

schermata che illustra come impostare il programma 'PICkit2 Logic Tool' per programmare il PIC16F84



torna all'inizio     Stampa



Progetto creato nell'aprile del 2010.

Ultimo aggiornamento avvenuto il 30/11/2018.

Valid HTML 4.01 Transitional    Valid CSS