Risolvere i problemi del PICkit 3
Il PICkit 3, lo sappiamo un po’ tutti, è una brutta bestia: è lento e capriccioso. Il PICkit 2 era così bello: rapido, non perdeva mai un colpo, alimentava la scheda senza problemi. Il 3 per poter supportare un numero sempre maggiore di dispositivi viene riprogrammato dall’IDE ogni volta che si cambia fascia di PICmicro (l’IDE gli cambia il firmware ogni volta), e questo, unito alla maggiore lentezza in fase di programmazione rispetto al PICkit 2, lo fanno davvero una lumaca di programmatore.
Ma… Fosse soltanto questo il problema! Spesso in fase di programmazione restituisce errori strani che spesso non sono facili da risolvere e soprattutto non è nemmeno facile districarsi tra le innumerevoli impostazioni. Vediamo quindi in questo articolo come risolvere i problemi più comuni che possiamo riconoscere dal messaggio di errore scritto in rosso nella finestra di output di MPLAB X IDE, tipo questo:
Gli stessi errori possono essere restituiti anche in MPLAB IPE (Integrated Programming Environment) che è un tool a sé stante, installato di default insieme ad MPLAB X IDE, che permette unicamente di programmare i PICmicro tramite i programmatori Microchip fornendo l’HEX (ma anche di leggerli/verificarli). MPLAB IPE sostituisce di fatto la vecchia applicazione stand-alone del PICkit 2 con la differenza che si può utilizzare con tutti i programmatori.
Indice dei contenuti
Target device was not found / Target Vdd not detected
L’errore che si presenta è questo:
Target device was not found (could not detect target voltage VDD). You must connect to a target device to use PICkit 3.
oppure:
Failed to program device
Target Vdd not detected. Please ensure the target device is connected.
[orario] Programming failed.
La prima descrizione comincia con un sibillino “non trovo il dispositivo da programmare” e qua viene spontaneo lanciare imprecazioni del tipo:
“Ma è li! Ce l’hai collegato davanti al naso!! Come fai a dire che non lo trovi?! E’ pure nuovo, appena tolto dalla bustina antistatica!!”
Questo accade perchè il PICmicro non è alimentato, per cui il PICkit 3 non può interrogarlo per avere l’ID code (un codice univoco che i PICmicro hanno in un’area di memoria riservata che serve per essere identificati dal programmatore). Vi meraviglierete perchè Il PICkit 2 non aveva questo problema: dal pin Vdd difatti forniva alimentazione anche se non volevamo… Il 3 non lo fa! A meno che non glielo specifichiamo di volta in volta nelle impostazioni.
La prima soluzione, la più comoda e sicura, è quella di alimentare il circuito target dall’esterno: questa soluzione evita anche tanti altri problemi che vedremo dopo. Può però capitare che ci troviamo a fare i nostri esperimenti nel gabinetto (come faccio io) o ci siamo portati appresso tutto il cucuzzaro durante una trasferta (gli altri si portano libri, fumetti, cibo… Io mi porto il laptop con il PICkit e la demoboard… ognuno ha i suoi vizi!) e quindi abbiamo bisogno di fornire tensione dal PICkit! La cosa è un po’ laboriosa ma una volta che avete afferrato il meccanismo è facile da ricordare.
Aprite le proprietà del progetto (tasto destro sul nome del progetto nell’elenco progetti -> selezionare “Properties” – si trova in fondo all’interminabile menù contestuale, è proprio l’ultimissima voce):
Si apre quindi la finestra con tutte le proprietà del progetto: questa finestra è importantissima perchè da qui potete cambiare la toolchain e svariate opzioni che, ripeto, sono proprietà del progetto! Significa che ogni modifica che fate qui si rifletterà solo sul progetto selezionato, comprese le opzioni di funzionamento del PICkit3.
La prima schermata che si apre è la configurazione di default del progetto. E’ possibile difatti specificare più configurazioni per uno stesso progetto che ci permettono, ad esempio, di adattarlo a diversi picmicro, diversi compilatori ecc, cambiando soltanto la configurazione. E’ il sistema che utilizzano molti esempi della Microchip per cui uno stesso progetto ha svariate configurazioni in modo che potete adattarlo alla demoboard che avete cambiando soltanto il parametro “configurazione”. Ma per ora questo non ci interessa.
Nel riquadro sinistro (Categories), cliccare su PICkit 3 sotto Conf:[default]. A destra compaiono tutte le opzioni del PICkit 3 relative a questa configurazione (default) del progetto:
In “Option categories”, selezioniamo “Power” come illustrato nell’immagine sopra. Compare questa schermata:
Spuntate la casella affianco “Power target circuit from PICkit3” : in questo modo il PICkit3 proverà (è d’obbligo questa parola!) a fornire la tensione al circuito dal pin Vdd. Nella casella “Voltage Level” è possibile selezionare la tensione che di default varrà 5V o 3.3V a seconda del PICmicro selezionato nel progetto. Per ora lasciate 5V (o 3.3V) ma tenete a mente che possiamo cambiare tensione: questo ci tornerà utile se incorriamo nel problema illustrato successivamente
Ora il PICkit 3 fornisce tensione alla scheda. Ripeto: l’abbiamo fatto per QUESTO progetto: non è un’impostazione generale, questo vuol dire che quando cambieremo progetto, dovremo rifare la stessa operazione.
Altre volte può essere necessario mettere un grosso condensatore elettrolitico tra Vdd e GND, vicino al PICmicro.
PICkit is trying to supply X.x Volts
L’immane errore è bellissimo, lungo, dettagliato, un vero poema:
PICkit 3 is trying to supply 5.000000 volts from the USB port, but the target VDD is measured to be 4.625000 volts. This could be due to the USB port power capabilities or the target circuitry affecting the measured VDD.
The target circuit may require more power than the debug tool can provide. An external power supply might be necessary.
Connection Failed.
Questo errore è di quanto più fastidioso il PICkit 3 potesse fare ed è un problema che è stato risolto con il PICkit4.
L’errore ci informa che il PICkit 3 sta provando a fornire X Volts ma non ci riesce perchè ne misura di meno e ci dice anche che questo problema potrebbe essere causato da due diverse situazioni: o la porta USB non riesce a fornire la corrente necessaria oppure il circuito sta assorbendo troppo (che poi è più o meno la stessa cosa!).
E qui è spontanea l’imprecazione: “Il PICkit 2, sulla stessa porta USB, sulla stessa scheda, con lo stesso cavo, fa il suo lavoro senza fiatare! Tu che sei la versione 3 perchè diavolo non ci riesci?”. Questa domanda non avrà mai risposta (o meglio: l’avrà, ma non potrà mai placare i nostri animi assetati di giustizia).
Bando alle ciance, questo problema si può bypassare in diversi modi:
- Fornire la tensione di alimentazione dall’esterno, come dicevo al paragrafo precedente. Questo è l’unico sistema che funziona sempre ed è l’unico a cui potete/dovete ricorrere nel caso falliscano tutte le altre soluzioni.
- Molti risolvono staccando e riattaccando il PICkit 3 dalla porta USB, cambiandola anche di volta in volta.
- Provate ad utilizzare un cavo più massiccio, possibilmente quello rosso fornito nella stessa confezione del PICkit 3.
- Provare a impostare una tensione più bassa nelle opzioni del PICkit3 come dicevo al paragrafo precedente: nello specifico provate ad impostare la tensione più bassa indicata dall’errore (4.625V nel mio esempio ma voi dovete leggere la tensione che viene indicata dall’errore). MAI e poi MAI impostare una tensione più alta: rischiate di fare una frittata.
- A volte può essere necessario mettere un grosso condensatore elettrolitico tra Vdd e GND, vicino al PICmicro.
- Da windows 8.1 in su la Microsoft dice di aver “migliorato” il sistema di gestione dell’alimentazione sulla USB, questo miglioramento in realtà induce dei peggioramenti. Provate a seguire la loro guida (clicca qui) per disabilitare questo fatidico miglioramento dell’USB e vedete se funziona. In alternativa, se siete esperti e vi prendete la responsabilità di ciò che state facendo, potete fare questa modifica anche manualmente agendo nel registro di configurazione:
HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → Enum → USB → VID_04D8&PID_900A → BURxxxxxxxx → Device Parameters → EnhancedPowerManagementEnabled (impostare questo valore a zero)
Per il PICkit 2 la chiave di registro è la stessa, cambia soltanto il PID (VID_04D8&PID_0033).
Ma ripeto: questa cosa vale soltanto da Windows 8.1 a salire, Se avete Windows 7, la voce EnhancedPowerManagementEnabled non è presente, e anche se la inserite, non serve a un tubo.
Se gli ultimi metodi non funzionano, non c’è nulla da fare: o usate il PICkit 2 (se ce l’avete e se supporta il PICmicro che state utilizzando) o fornite alimentazione dall’esterno. Non ci sono altre soluzioni.
Invalid Calibration Data
Questo errore si presenta generalmente con PICmicro di vecchia generazione. L’errore recita:
Target has invalid calibration data (0x00)
Di questo problema ne ho già parlato in un precedente articolo: è sempre una questione di alimentazione che si risolve mettendo un condensatore elettrolitico tra Vdd e GND. Vi rimando al vecchio articolo per ulteriori informazioni: cliccate qui.
Dispositivo USB non riconosciuto
Questo errore lo fornisce Windows e il PICkit rimane con tutti 3 i led accesi. A me è capitato che il cavo rosso fornito col PICkit 3 si guastasse. Ho cambiato il cavo ed il PICkit 3 è stato riconosciuto. Dopo averlo collegato al PC devono rimanere accesi soltanto i led Power e Active, il led Status dopo un po’ deve spegnersi.
Altri problemi
In caso di altri problemi durante la programmazione, provate anche a cambiare il metodo di programmazione nelle opzioni di programmazione del PICkit 3 (sempre nelle proprietà del progetto come illustrato al primo paragrafo). Da Option categories selezionate “Program Options” e in Programming Method selezionate “Apply Vpp before Vdd (Recommended)” come illustrato qui sotto:
la cosa bella è che, pur essendo un’impostazione “Recommended”, non è selezionata di default! Valli a capire…
Se avete altre soluzioni o altri errori del PICkit 3 postateli nei commenti (vi prego: solo errori del PICkit 3, se postate altri errori, del tipo che vi siete dimenticati un punto e virgola nel codice, non vi rispondo).