La cosa che apprezzo maggiormente di Arduino è la possibilità di realizzare una propria compatible-board. Questo permette di creare soluzioni integrate che si adattano meglio alle proprie esigenze di sviluppo e di implementazione.
Una volta realizzato un prototipo funzionante con la board ufficiale possiamo rimuovere il chip Atmel per adattarlo su una nostra scheda.
Per realizzare questo lavoro è sufficiente acquistare degli Atmega328P-PU vergini, caricare il bootloader, lo sketch e montare tutto sulla scheda dedicata.
Per poter programmare i nuovi chip con gli sketch è necessario prima di tutto caricare il bootloader al loro interno, questa procedura solitamente viene eseguita tramite un programmatore dedicato che costa qualche decina di euro.
Fortunatamente esiste una tecnica che permette di utilizzare la nostra board Arduino UNO per programmare il nuovo chip. Sul web sono presenti molti esempi che illustrano i collegamenti e spiegano come caricare il bootloader, quasi tutti in lingua inglese; ho deciso, quindi, di scrivere questo articolo per dare la possibilità, soprattutto per i neofiti, di imparare questa utile tecnica.
Prima di iniziare dobbiamo realizzare il circuito seguente:
La tabella seguente riassume i collegamenti tra l’Arduino UNO e il chip ATMEGA328
Arduino UNO | Chip vergine ATMEGA328 |
Pin 5V | da collegare ai pin 7 e pin 20 |
Pin GND | da collegare ai pin 8 e pin 22 |
Pin 10 | da collegare al pin 1 |
Pin 11 | da collegare al pin 17 |
Pin 12 | da collegare al pin 18 |
Pin 13 | da collegare al pin 19 |
Inoltre il pin1 del nuovo chip deve essere collegato alla +5Vdc tramite una resistenza da 10Kohm. I pin 9 e 10 devono essere collegati al quarzo da 16Mhz e ai due condensatori ceramici.
Lo schema proposto utilizza il canale SPI per caricare il bootloader nel chip vergine. Via software è necessario predisporre l’Arduino UNO in modo che funga da programmatore.
Non dobbiamo inventare niente, è sufficiente caricare lo sketch ArduinoISP presente nel menu File->Examplesdell’ambiente di sviluppo.
Ora carichiamo lo sketch sul nostro Arduino UNO utilizzando il pulsante upload e attendiamo il messaggio di conferma
A questo punto si potrebbero caricare sul nuovo chip diversi bootloader, a seconda del tipo di board che intendiamo realizzare (l’unica raccomandazione è comunque utilizzare una board compatibile col chip ATMEGA328).
A noi, per ora, ci interessa caricare il bootloader dell’Arduino UNO, quindi dal menu Tools->Board selezioniamo Arduino UNO
Non ci resta che avviare l’operazione tramite il menu Tools->Burn Bootloader-> w/ Arduino as ISP
La scrittura del bootloader richiede qualche minuto. Durante l’operazione i led L, TX e RX sulla board Arduino Unolampeggiano costantemente e si spengono solo quando la scrittura è completata.
dopo qualche minuto l’editor mostrerà un messaggio dell’avvenuta scrittura del bootloader
Su diversi blog ho letto che questa operazione potrebbe concludersi con l’errore avrdude: stk500_getsync(): not in sync: resp=0×00 avrdude: stk500_disable(): protocol error, expect=0×14, resp=0×51.
Ciò può dipendere da errori di connessione risolvibili controllando la corretta porta dove è collegato l’Arduino (Tools->Serial Port) o scollegando e ricollegando il cavo usb.
Se il problema persiste questo può allora dipendere all’autoreset dell’Arduino UNO. Per risolverlo è sufficiente modificare lo schema elettrico aggiungendo una resistenza da 120 Ohm e un condensatore da 10microF che hanno il compito di disabilitare l’autoreset. Ecco lo schema:
Ultimati i collegamenti eseguiamo nuovamente la procedura per il caricamento del bootloader.
Ora che il nuovo chip è dotato di bootloader possiamo montarlo sulla board Arduino Uno per programmarlo con gli sketch di esempio e verificare che tutto funziona regolarmente.
Fonte: logicaprogrammabile.it