Programmare i processori PIC con i file HEX
I file HEX (e anche i progetti completi) si scaricano dalla pagina: technical/schematics
I micro-controllori usati nel sistema Theremino sono:
– PIC24FJ64GB002 (tutti i Master, dal 2012 al 2015)
– PIC24FJ128GB202 (futuri Master con 12 o 13 InOut e 2 bit in più negli ADC)
– PIC32MX110F016 (futuri Master a 32 bit) (Nota 1)
– PIC24F16KA101 (tutti gli slaves, Servo e CapSensor)
(Nota 1) Probabilmente non useremo i modelli a 32 bit perché, oltre a non dare reali vantaggi in velocità e precisione, limitano la posizione dei Pin della seriale. Preferiamo invece usare i nuovi PIC della serie 24, che permetteranno 12 o anche 13 Pin e che contengono i nuovi ADC, quattro volte più precisi.
Connettori ICSP – In Circuit Serial Programming
Tutti i moduli del sistema Theremino hanno il connettore ICSP, che permette una comoda programmazione “in circuit”, con programmatori di tipo PicKit2, PicKit3 o simili.
Connessione del cavetto di programmazione
Sui moduli la posizione del Pin 1 viene indicata con un pallino bianco. Nelle versioni più recenti con un triangolo, simile a quello dei programmatori PicKit2 e PicKit3. In tutti i casi il Pin 1 è sempre indicato anche con “VPP”.
Solitamente il cavetto di programmazione ha sei fili, mentre i connettori ICSP ne hanno cinque. Il sesto filo serve per usare il programmatore come oscilloscopio, o analizzatore di segnali, e non serve per programmare, quindi lo lasceremo scollegato.
Nella serigrafia di alcuni CapSensor prodotti in passato le due parole DAT e CLK erano scambiate. Ma non fateci caso, la connessione giusta è quella che si vede in questa immagine. Tutti i moduli del sistema Theremino hanno questa disposizione, con il CLK all’estremo opposto di VPP.
Su alcuni programmatori individuare la posizione del filo “1” può essere difficile. Ad esempio il PicKit3 della Olimex non ha nessun triangolo, o pallino, per indicarlo. Nemmeno leggendo con cura il manuale si riesce a individuare il Pin 1. Le uniche immagini che pubblicano non si riferiscono al connettore sul programmatore, ma sulla inutile piastrina di programmazione. Quindi per individuare il Pin 1, usare l’immagine seguente:
Consigliamo di contrassegnare il Pin 1 con un triangolo o un pallino nero, tenendo il programmatore con i led e il connettore in basso.
Acquistare un PicKit2
Meglio acquistare i PicKit2 che sono più facili da usare dei PicKit3.
Su eBay è facile trovarli, ecco alcuni link:
http://www.ebay.it/itm/161327061057
http://www.ebay.it/itm/191911587734
http://www.ebay.it/itm/122179854117 (economico ma spedizione lenta dalla Cina)
Oppure su Amazon:
https://www.amazon.it/…….pickit2 (su Amazon costano leggermente di più)
Un esempio PicKit2 in vendita su eBay – Cliccare l’immagine per ingrandirla.
Se i link precedenti non fossero più validi avvertiteci. Per trovarne di simili consigliamo di fare una ricerca su eBay, con le parole “USB Programmer PICKIT2”.
Zoccoli ZIF? No grazie.
Programmando “in circuit” si collauda il modulo completo e si ha la sicurezza che tutto sia a posto. Invece con gli zoccoli non è nemmeno sicuro che si riesca a programmare (mancano i componenti esterni e la alimentazione). E non si risparmia tempo, anzi si impiega altro tempo, per estrarre il PIC dallo zoccolo e spostarlo sul circuito definitivo. Quindi non acquistate gli zoccoli insieme al programmatore. Sono costosi e resterebbero inutilizzati in un cassetto.
In circuit debuggers?
Lasciate perdere, sono macchinosi, costosi e lentissimi, non li userete mai. Ci sono modi migliori per debuggare, ad esempio gli emulatori di MPLAB, ma soprattutto la furbizia (modificare il punto giusto e vedere cosa succede) e la tecnica dicotomica (dividere il problema in due parti e ripetere fino a trovare l’errore).
Metodi di programmazione e programmatori
Il primo livello di difficoltà, prevede di usare i file HEX, preparati da noi e di programmarli con il PicKit2. Un po’ più macchinoso è programmarli con il PicKit3.
Il terzo livello, solo per i più coraggiosi, è MPLAB, che permette anche di modificare il firmware e ricompilarlo. Far partire MPLAB è difficile, perché si devono anche installare i compilatori. Oltre a questo, non è detto che con MPLAB e PicKIt2 si riescano a programmare tutti i modelli di PIC. E quasi certamente non si riesce a usare il PicKit3.
E infine c’è MPLAB X, che fa diventare la programmazione dei PIC un vero divertimento (abbastanza simile a un gioco di azzardo). MPLAB X è stato scritto per permettere la programmazione anche su Apple e Linux, e così non solo non si riesce a programmare con Mac OS e Ubuntu, ma non si riesce più a programmare nemmeno con Windows. Noi non siamo riusciti a farlo funzionare su nessuno dei nostri PIC e questi sono alcuni commenti trovati in rete:
ENGLISH “…Unfortunately, the combination of new IDEs, compilers and devices can often result in rise of serious issues. Which is why it is often referred to as the “bleeding” edge, due to the pulling of hair, gnashing of teeth, sleep deprivation and occasional blood loss, while troubleshoot these issues…”
ITALIAN “…Purtroppo, la combinazione di nuovi IDE, compilatori e dispositivi può spesso causare gravi problemi. Questo è spesso definito in inglese, come “limite del sanguinamento”, a causa dello strappare i capelli, digrignare i denti, privazione del sonno e occasionali perdite di sangue, durante la risoluzione di questi problemi…”
Consigli per la programmazione
Purtroppo con centinaia di modelli di PIC, compilatori, programmatori e debuggers, nessuno riesce a mantenere allineati gli strumenti di sviluppo. Prima di riuscire a sistemare tutti i bug, Microchip progetta qualche altra decina di PIC e si ricomincia da capo. Stiamo quindi completandoli noi stessi, man mano che ci servono.
Questo non è un difetto di Microchip, assolutamente! Siamo felicissimi che producano micro per ogni esigenza, da quelli microscopici fino ai potentissimi dsPIC, e che continuino a produrre modelli sempre migliori, solo che è difficile stargli dietro. Altri costruttori (Atmel) continuano a produrre lo stesso micro da quindici anni, gli ADC sono sempre gli stessi, le prestazioni sempre le stesse…
Presto passeremo al PIC24FJ128GB202 (con due bit in più negli ADC, quindi quattro volte più precisi) e i problemi di programmazione si complicheranno ulteriormente (specialmente per chi ha un PicKit3).
Per far funzionare alcuni modelli di PIC e programmatori potrebbe essere necessario:
– Scegliere manualmente la famiglia (24) e il modello del PIC.
– Alimentare il modulo dalla USB mentre si programma.
– Alimentare sempre dallo stesso PC che è collegato al programmatore.
– Usare lo High Voltage Programming (HVP).
– Eseguire prima di tutto un Erase.
– Disabilitare il Write Protect.
– Aprire, con blocco note, il file “PICkit2.ini” che si trova accanto a “PICkit2V2.exe”.
– Modificare la linea “PE24: Y” in “PE24: N”.
La linea “PE:24: N” disabilita il caricamento del “Programming Executive” che, in alcuni casi, impedisce di programmare.
Invece impostare il “Fast Programming” è una buona idea. Si raddoppia la velocità di programmazione.
Come essere sicuri che il PIC sia programmato bene
Meglio non fare letture della memoria perché in molti casi ingannano. Per programmare si carica l’HEX, si preme “Write” e si controlla la scritta verde “Programming Successfully”. In alcuni casi appaiono dei “Warning” in colore arancio, ma non importa. Il PIC è programmato bene anche se ci sono dei Warning.
L’unica vera prova, è la USB che si attiva e il led che lampeggia. Sul Master il led lampeggia veloce appena finita la programmazione, invece sugli slave il led lampeggia solo dopo aver configurato i Pin con la applicazione HAL.
Applicazione per il programmatore PicKit2
Questa utility permette di programmare i PIC senza installare MPLAB. Basta avere il file HEX e un programmatore PicKit2. La versione che pubblichiamo è basata sulla versione 2.61 di Microchip, che nessuno più aggiorna da molti anni. Noi abbiamo corretto molti piccoli difetti e la abbiamo rinominata 3.0.
Non fatevi ingannare dalle versioni, il file EXE si chiama sempre PicKit2V2 perché funziona sul programmatore PicKit2 Versione 2. Invece la versione della applicazione non è la 2 ma quella che è scritta nel nome del file ZIP.
PicKit2_Programmer_V3.0.zip
Pickit2_Programmer_V3.0_WithSources.zip (versione per programmatori)
La versione 3.2 comprende anche il “Device file” modificato per programmare i nuovi PIC24FJ128GB202 (non completeremo il firmware per i 202 perché hanno dei difetti insormontabili). E comprende anche la disabilitazione del “Programming Executive” per evitare problemi con alcuni PIC.
PicKit2_Programmer_V3.2.zip
Pickit2_Programmer_V3.2_WithSources.zip (versione per programmatori)
La versione 3.3 funziona meglio. La barra inferiore che indica il completamento delle operazioni ora scorre in modo regolare e fino alla fine. Il “Device file” è modificato per programmare alcuni piccoli PIC come il 12F1571 e ci sono altri “Device File” che potrebbero essere utili a chi sa come editarli e sostituirli. Infine quando si va nel menu “Help / About” la versione viene riportata correttamente come 3.3 (nelle versioni precedenti era sempre 3.0).
PicKit2_Programmer_V3.3.zip
Pickit2_Programmer_V3.3_WithSources.zip (versione per programmatori)
Applicazione per il programmatore PicKit3
Le istruzioni per l’uso, sia in italiano che in inglese, sono nel file “Theremino_Pickit3_ReadMe” che si trova nella cartella “Docs”.
Il programma è “portatile”, non installatelo in C:Programmi ma semplicemente estraetelo dallo ZIP, in una cartella dell’utente, ad esempio una sotto cartella di Documenti.
Questo file ZIP contiene tutto il necessario per programmare con il PicKit3. Ci sono anche le nostre modifiche al “PK2DeviceFile.dat”, con le quali siamo riusciti a programmare anche i nuovi PIC24FJ128GB202.
PicKit3_Programmer_V4.0.zip
Pickit3_Programmer_V4.0_WithSources.zip (versione per programmatori)
Applicazione per editare il file Devices.DAT
Purtroppo sia il PicKit2 che il PicKit3 non sono completi e non riescono a programmare tutti i modelli di PIC. Questa applicazione serve per completare e correggere i dati (che si trovano nel file “PK2DeviceFile.dat”). Noi la abbiamo usata per correggere le maschere di bit per i PIC24FJ128GB202 e con questa correzione siamo riusciti a programmarli.
DeviceFile_Editor.zip
Datasheets dei PIC
Questi sono i datasheets di tutti i PIC usati nel sistema Theremino, corredati con le note di applicazione, i dati per le famiglie di PIC e le errata-corrige.
PIC_Datasheets
Modificare il firmware e ricompilarlo con MPLAB
Per fare modifiche al firmware si deve installare MPLAB e il compilatore C. Consigliamo di installare MPLAB versione 8.92 da qui: MPLAB_Archives (dovesse sparire lo trovate qui: MPLAB_IDE_8_92.zip)
DOPO aver installato MPLAB si deve installare il compilatore C30: C30_Compiler
La registrazione per scaricare il compilatore C30 non è impegnativa, Microchip non manda SPAM. Il compilatore C30 va installato in versione “lite”, cui manca solo qualche ottimizzazione. Il codice viene leggermente più grande, ma non importa perché abbiamo molto posto libero in memoria (dovesse sparire lo trovate qui: MPLABC30Combo_v3_31.zip)
Infine si deve caricare il progetto completo (non il solo file HEX), compilarlo, verificare che non ci siano stati errori durante la compilazione e scriverlo nel PIC.
MPLAB X
Il nuovo MPLAB X è noto per avere alcuni difettucci, primo fra tutti che non si riescono a programmare i PIC. Per chi vuole provarlo, il link è questo: MPLAB_X
Microchip Technology components
Tutti i moduli del sistema Theremino sono realizzati con micro-controllers Microchip serie 24. Il master usa un PIC24FJ64GB002, gli slave usano un PIC24F16KA101. Questi micro-controllers funzionano a 3.3 Volt per cui la tensione di 5 volt abbastanza instabile della porta USB, viene stabilizzata con un regolatore Microchip LDO (Low Dropout) di tipo MCP1700-3.3V.
Abbiamo scelto i componenti della Microchip, per le loro caratteristiche, che ci hanno permesso di implementare le seguenti innovazioni:
– Ricetrasmissione UART su un unico filo.
– Velocità di comunicazione USB a 12 megabit/secondo e seriale fino a 4 megabit/secondo.
– ADC velocissimi che, con adeguato oversampling, producono una risoluzione effettiva di oltre 14 bit (e fino a 16 bit con i più recenti PIC24FJ128GB202)
– Tecnologia CTMU che facilita la misura di capacità molto piccole.
– Consumi ridottissimi grazie alla nanoWatt XLP™ Technology.
– Possibilità di costruire moduli piccolissimi grazie ai package SOIC Low Pin Count.
– Ottimo supporto nei DataSheet e nelle ApplicationNotes.
– Strumenti di sviluppo comodi e gratuiti.