- Elettronica Open Source - https://it.emcelettronica.com -

Scheda di sviluppo con porta USB

Dopo tanti circuiti complessi e articolati, abbiamo pensato di proporre una semplice scheda di sviluppo con cui ogni lettore può testare le funzionalità dei microcontrollori PIC a 8 bit con porta USB e la praticità dei bootloader che usano tale porta.

La scheda di sviluppo che presentiamo (vedi figura 1) utilizza l’integrato PIC18F4550 che ha, tra le tante caratteristiche interessanti, anche quella di integrare al suo interno tutta la circuiteria necessaria per collegare una porta USB 2.0 [1]. Questo collegamento viene usato sia per la programmazione del microcontrollore sia per l’alimentazione dell’intero circuito. Come periferiche di test sono presenti 8 led per testare le porte d’uscita, un trimmer per testare l’ingresso analogico e 3 pulsanti.

Figura 1: il circuito come si presenta a montaggio ultimato. Notare la presenza della porta USB per la programmazione.

Figura 1: il circuito come si presenta a montaggio ultimato. Notare la presenza della porta USB per la programmazione.

PERCHÉ UN’ALTRA SCHEDA DI SVILUPPO?

Sul  WEB  e  nelle  riviste specializzate sono apparse ormai decine di schede di sviluppo che impiegano integrati Microchip o Atmel. Alcune aziende, come la serba MikroElektronika [2], hanno fatto fortuna proprio grazie a queste schede e ai loro linguaggi di programmazione. Non meno diffusa l’Arduino board che ha reso così popolare il nostro Massimo Banzi partito da Ivrea. La maggior parte di queste schede usa componentistica SMD e sono molto complesse, alcune montano display a colori e sensori touch. Anche se lo schema elettrico è pubblico, risulta difficile per un hobbista l’autocostruzione. Inoltre, la maggior parte di queste schede dispone ancora di porta RS232 e spesso necessitano di un programmatore esterno. Quando, invece, è presente la porta USB, questa viene implementata con un adattatore seriale tipo FTDI. Volevamo proporre, quindi, una scheda facile da costruire e che usasse soltanto componentistica classica montata su uno stampato a singola faccia. Per rendere le cose più facili, abbiamo usato un microcontrollore già dotato di porta USB (vedi figura 2), in modo da non obbligare l’utente ad usare un programmatore. Ogni piedino dell’integrato, poi, è collegato con una piazzola supplementare, in modo da poter collegare le varie porte ad una eventuale breadboard o a qualche altra periferica esterna.

Figura 2: la porta USB tipo B per la programmazione del PIC18F4550.

Figura 2: la porta USB tipo B per la programmazione del PIC18F4550.

IL CIRCUITO

L’elettronica utilizzata per realizzare questa scheda (vedi schema di cui in figura 3) è quanto di più essenziale serve per far funzionare un PIC18F4550. La tensione di alimentazione è presa direttamente dalla porta USB e viene protetta da eventuali inversioni di polarità dal diodo D3. Sulle porte RB4 e RB5 sono collegati due pulsanti per eventuali prove, questi piedini sono collegati a livello alto per mezzo di due resistenze da 10k e vengono collegati a massa quando si premono i rispettivi pulsanti. Per evitare cortocircuiti dovuti ad una errata programmazione delle porte di I/O, sono presenti le resistenze R15 e R16 da 470 Ohm. È presente, inoltre, un pulsante di reset e un trimmer collegato alla porta RA0 per testare il convertitore A/D interno del micro.

ICSP

ICSP (In Circuit Serial Programmer) è un connettore, presente in molti circuiti, necessario per collegare un programmatore e trasferire il firmware al microcontrollore. Sembrerà strano trovarlo nel nostro circuito perché, come si è detto, è dotato di porta USB per la programmazione e quindi questo connettore apparentemente non dovrebbe servire. Purtroppo, almeno una volta, lo si dovrà utilizzare perché la nostra scheda funziona collegata ad un PC solo se precedentemente si è trasferito un bootloader nel PIC. Per questa prima programmazione si potrà ricorrere al programmatore PicKit2/3 di Microchip oppure ad un programmatore autocostruito.

IL BOOTLOADER

Abbiamo visto quindi che la porta USB è attiva per la programmazione solo se prima si è messo un piccolo programma all’interno del microcontrollore. Questo piccolo programma si chiama bootloader e in rete è possibile trovarne di diversi, alcuni di piccole dimensioni altri più efficienti ma voluminosi. Noi abbiamo scelto quello sviluppato da Microchip che si trova all’interno del pacchetto USB Framework scaricabile dal sito di Microchip [1] nelle Microchip Application Libraries (nel momento in cui scriviamo il file di 107 MB si chiama MCHP_App_Lib_v2010_10_19_Installer.zip). Una volta decompresso il pacchetto e fatto partire il file EXE, verrà creata una cartella in C:\Microchip Solutions v2010-10-19 in cui sono presenti tutte le librerie fornite da Microchip necessarie agli sviluppatori. Molto annidiata in queste cartelle si trova anche una cartella chiamata USB Device – Bootloaders in cui è presente proprio il bootloader che ci serve. Nel sito di Firmware è disponibile, comunque, un file con tutto il necessario per programmare questo circuito.

Figura 3: circuito elettrico della scheda di sviluppo. Notare l’assenza di stadio di alimentazione e di chip FTDI per l’implementazione della porta USB.

Figura 3: circuito elettrico della scheda di sviluppo. Notare l’assenza di stadio di alimentazione e di chip FTDI per l’implementazione della porta USB.

I DRIVER

Una volta programmato il microcontrollore con il file "PIC18F4550bootloader 20MHz.hex" attraverso un programmatore di propria scelta, siamo pronti all’installazione dei driver nel nostro computer. La piedinatura del Pic è visibile in figura 4. Per attivare la modalità programmazione nel nostro circuito, bisogna premere Reset mentre si tiene premuto il tasto S2. Se la procedura è corretta si vedranno i primi due led lampeggiare e il PC ci chiederà l’installazione dei driver. Anche questi si trovano nelle cartelle di cui abbiamo parlato prima (mchpusb.inf e mchpusb.sys).

Figura 4: piedinatura del PIC18F4550.

Figura 4: piedinatura del PIC18F4550.

IL PROGRAMMA

Il programma necessario per trasferire i file HEX dal nostro computer al PIC attraverso la porta USB ci viene fornito sempre da Microchip e si chiama PDFSUSB.exe. Appena fatto partire (non serve l’installazione) riconosce subito la presenza del nostro circuito. Però, bisogna fare attenzione che il riconoscimento avviene soltanto se la basetta è in modalità programmazione (Reset + S2). Selezionare la nostra USB Board nell’apposita finestra e poi premere il pulsante Load HEX File per caricare il file HEX da trasferire. Una volta fatto, premere Program Device e attendere il trasferimento del file. Avvenuta la programmazione si può premere Reset sulla basetta per far partire il PIC oppure si può premere direttamente Execute e far partire il PIC direttamente dal computer.

CONFIGURATION DATA

Molto probabilmente, quando si trasferisce il file HEX, si otterrà un messaggio di avvertimento che ci informa che gli switch del nostro HEX sono diversi rispetto a quelli che si trovano già nel PIC e che sono quelli del bootloader. A questo messaggio di avviso bisogna rispondere con NO, altrimenti, sovrascrivendo gli switch, si renderà inattivo il bootloader e la nostra basetta non funzionerà più. Se inavvertitamente si rispondesse Yes, si può ripristinare il corretto funzionamento della basetta semplicemente ritrasferendo il bootloader all’interno del PIC attraverso la porta ICSP (figura 5). La figura 6, invece, mostra il riconoscimento della scheda da parte del Sistema Operativo.

Figura 5: il connettore ICSP necessario per installare il Bootloader la prima volta.

Figura 5: il connettore ICSP necessario per installare il Bootloader la prima volta.

 

Figura 6: ecco come Windows riconosce la nostra scheda.

Figura 6: ecco come Windows riconosce la nostra scheda.

ACCORTEZZE NELLA PROGRAMMAZIONE

Qualsiasi file HEX può essere trasferito nella nostra basetta senza problemi attraverso la porta USB (vedi figura 7 e figura 8). L’unica accortezza, quando si programma, è quella di non usare la parte di memoria iniziale che è occupata dal bootloader. Questa memoria va dalla locazione 0 alla 799 esadecimali. Ecco un esempio di linee di codice da aggiungere ai nostri sorgenti quando si programma in PicBasic [2] per ottenere la compatibilità con la scheda e il bootloader.

DEFINE LOADER_USED 1
DEFINE RESET_ORG 800h
DEFINE INTERRUPT_ORG 808h
DEFINE OSC 48

Nel sito di Firmware sono disponibili due esempi di file HEX che possono essere utilizzati per testare il buon funzionamento della scheda. Il primo fa lampeggiare un led, il secondo riproduce il tipico effetto luci presente nella Pontiac del telefilm Supercar.

Figura 7: ecco come si presenta il programma fornito da Microchip per programmare attraverso la porta USB.

Figura 7: ecco come si presenta il programma fornito da Microchip per programmare attraverso la porta USB.

 

Figura 8: gli switch del bootloader non devono essere sovrascritti altrimenti il circuito non funzionerà più. La risposta in questa finestra deve essere NO.

Figura 8: gli switch del bootloader non devono essere sovrascritti altrimenti il circuito non funzionerà più. La risposta in questa finestra deve essere NO.

 

Figura 9: layout dei componenti.

Figura 9: layout dei componenti.

 

Figura 10: circuito stampato lato saldature.

Figura 10: circuito stampato lato saldature.

MONTAGGIO DEL CIRCUITO

Il circuito va montato nella basetta raffigurata rispettando la polarità dei componenti, come mostrato in figura 9. Il circuito stampato realizzato è visualizzato in figura 10. Fare attenzione nel montaggio dei diodi led che sono collegati metà in un modo e metà in un altro. Per variare la luminosità dei diodi led si potranno variare i valori delle resistenze R1-R8. Ricordarsi che appena terminato il montaggio (vedi figura 11 e figura 12), per poter rendere operativa la basetta, bisognerà programmare all’interno del PIC il bootloader e successivamente trasferire un file HEX adeguato. Nel sito di Firmware si può scaricare un file da 1 MB relativo a questo progetto denominato devUSBboard.zip (vedi figura 13). In questo pacchetto sono presenti tutti i file e i sorgenti di supporto per questa scheda. USBprogrammer: contiene il programma per trasferire i file HEX.
Esempi: contiene due file HEX con cui testare il trasferimento e la funzionalità dei led. Sono stati messi pure i file sorgenti in PICBasic.
Eagle: contiene i file dello schema elettrico e del circuito stampato elaborati con il programma Eagle.
Driver Bootloader: contiene i driver necessari a Windows (XP, Seven o Vista) per riconoscere la nostra scheda.
PIC18F4550 bootloader 20 Mhz: è il file HEX che si deve trasferire all’interno del microcontrollore per renderlo attivo alle funzioni di cui abbiamo trattato in questo articolo. È il primo file da usare.

Figura 11 tutti i componenti necessari per il montaggio.

Figura 11 tutti i componenti necessari per il montaggio.

 

Figura 12: lato saldature terminato il montaggio. Il PCB è stato prodotto con una macchina CNC utilizzando Eagle [3] e PCBgcode [4].

Figura 12: lato saldature terminato il montaggio. Il PCB è stato prodotto con una macchina CNC utilizzando Eagle [3] e PCBgcode [4].

Figura 13: contenuto del file devUSBboard.zip scaricabile dal sito di Firmware.

Figura 13: contenuto del file devUSBboard.zip scaricabile dal sito di Firmware.

CONCLUSIONI

Con pochi componenti e con software disponibile gratuitamente, è possibile costruire una basetta di sviluppo con porta USB e alcune periferiche di test. Non sarà un dispositivo con cui testare display OLED touch o sensori I2C, ma è un circuito senz’altro valido per iniziare a programmare, magari con un linguaggio evoluto. Il trasferimento dei file HEX prodotti poi è semplificato dalla porta USB. Molto probabilmente i componenti per realizzare questo circuito sono già presenti nel cassetto dei nostri lettori e non dimentichiamoci che Microchip è ben nota per la celerità con cui spedisce i propri sample.