Blog‎ > ‎

Caricare il bootloader Arduino

pubblicato 11 dic 2011, 11:35 da Massimiliano D'Ambrosio
Su questo argomento in rete ci sono diversi sito che tratto il caricamento del booloader Arduino sui micro AVR vergini. Però dopo che in questi giorni sono stato contattato da un appassionato di Arduino che aveva difficoltà e urgenza di programmare il bootloader su un certo quantitativo di ATMega328P per un lavoro che doveva consegnare.
Mi limiterò nel scrivere questa piccola guida con alcuni alcuni consigli come fatto con il collega, per gli approfondimento mi  indicando dei link.

Premessa
Il bootloader è quel piccolo software di pochi byte caricato su micro ATMEL usato con Arduino il cui compito è  quello di permette di caricare il software che noi sviluppiamo sul micro tramite USB. Ogni volta che la board Arduino viene accesa o resettata, il bootloader  ascolta per beve tempo (in millisecondi) se IDE deve essere caricato il software  compilato. Nell'ultime board è prevista la funzione di autoreset, dove viene attivata tramite un piccolo condensatore sulla linea seriale DTR e ogni volta che il nostro IDE  è pronto per inviare i dati viene resettata la nostra scheda Arduino, rendendola pronta per ricevere il software. Ricordatevi che ATMEGA ha una seriale e viene collegato al PC tramite un chip ch fa da convertitore USB/Seriale. Ne

Come si programma il bootloader.

Come detto precedentemente in rete si trovano diversi argomenti su questo argomento e vi consiglio di partire proprio dal sito di ufficiale di Arduino sull'argomento Arduino board come AVR ISP (in-system programmer).
ArduinoISP, così è stata chiamata, permette di usare la nostra board Arduino come programmatore per altri micro AVR.
Come avete letto al link indicato possiamo usare due board Arduino oppure con una board e con un piccolo semplice circuito.
In entrambi i casi la realizzazione è semplice.
In linea generale il tutto funziona senza problemi, ma può succedere che le cose non vadano come noi pensiamo. Il più diffuso problema in cui possiamo imbatterci è il fatto che non riusciamo a programmare il micro per un problema causato dal autoreset.
Di solito per risolvere il problemi si ricorre nel bloccare questa funzione, tramite un circuito composta da una resistenza da 120ohm e da un condensatore da 10microF oppure usando il condensatore o la resistenza. Qui entrano in gioco le tolleranza dei componenti ed altri fattori che posso dare questi problemi. Alcune guide per risolvere questi problemi li trovate qui:


Tornando al collega in questione aveva usato una board 2009 con il circuito classico di programmazione seguendo questa guida imbattendosi in alcuni problemi bloccanti come l'autoreset. Aveva provato anche con il circuito RC per il blocco del autoreset ma con esiti negativi. Successivamente sono stato contatto via email per il problema. Dopo alcune email di scambio con alcuni consigli dove contro avevamo dei tempi stretti. Non potendomi recare da lui per per controllare il suo circuito e fare delle prove, ho predisposto due board Arduino UNO già pronte e fatte avere a destinazione tramite il collega om Germano iw3spi. Il problema della programmazione dei micro vergini è stato risolto con la procedura di cui sotto. Rimane il rammarico di non aver potuto verificare il problema di persona per trovare una soluzione sul circuito originale.

"Soluzione:"

Partiamo dal semplice schema di cui sotto:

Ci sono due board che chiamiamo B1 (nell'immagine qui sopra è alla nostra sinistra, 1) e B2 (a destra, 2).
La board B1 viene programmata con il firmware ArduinoISP (ne parliamo più tadi), mentre nello zoccolo a 28 pin della B2 trova alloggia il chip ATMEGA328P vergine in cui caricare il bootloader oppure con un micro il cui bootloader è da aggiornare o ricaricare. Nella B2 va tolto il micro ATMEGA328P originale perché viene usato il suo zoccolo per la programmazione dei altri micro.
Il computer va collegata tramite il cavo USB solo sulla B1.
Il cablaggio è molto semplice come avete visto nell'immagine sopra
  • la B1 viene alimentata dalla USB che a sua volta alimenta a 5V anche la B2 tramite un filo (rosso) che collega i due pin a 5V presente nelle delle schede.
  • ovviamente il filo nero è il negativo
  • i tre fili di colore verde, arancio e blu collegano  i pin 13, 12, 11 della B1 con i rispettivi 13,12,11 della B2, quindi abbiamo semplicemente un collegamento pin to pin.
  • il filo giallo collegato al pin 10 della B1 serve per eseguire un reset sulla B2. Infatti è collegato al pin di RESET della B2 in cui inseriamo il micro in cui va caricato il bootloader. In caso di problemi del autoreset si può rimuove o inserire una resistenza e condensatore come indicato precedentemente.
Terminata la semplice fase di cablaggio, è il momento di passare all'ambiente Arduino IDE per procedere con la programmazione. Colleghiamo la nostra scheda Arduino contrassegnata come B1 alla porta USB del computer.

Per gli utenti Windows che collegano per la prima volta un board Arduino UNO ricordo di seguire questa semplice procedura per caricare i driver. Ricordo anche che dalla UNO non viene più usato il chip USB/Serial della FTDI, ma un Atmega8U2 (Atmega16U2 nella REV3 della board Arduino). Per chi usa Linux come il sottoscritto il problema non si pone :-)

Eseguiamo il nostro IDE (sto usando la versione 1.0 sotto Linux e le immagini si riferiscono a questa versione). Come prima cosa dobbiamo dirgli che tipo di scheda Arduino stiamo usando, nel nostro caso è la UNO, e la porta seriale come /dev/ttyACM2 sotto Linux o COM1 per Windows (questo lo dovete vedere voi). Dal menu del IDE selezioniamo
  • Tools > Board > Arduino  UNO
  • Tools > Serial Port > (vi viene proposto un elenco da scegliere, a volte scelta in automatica)
Ora dobbiamo caricare sulla board B1 il software che "trasforma" le nostre due Arduino in un programmatore AVR ISP.
Questo software o firmware lo troviamo già pronto quando installiamo IDE nel PC, pertanto andiamo sotto il menu IDE
  • File > Examples > e selezioniamo ArduinoISP (come da immagine qui sotto)
  • viene caricato il sorgente del ArduinoISP
  • Senza fare modifiche al codice sorgente, tramite l'icona UPLOAD lo compiliamo e lo carichiamo sulla B1


Fatto questo abbiamo terminato la seconda fase. Questa procedura basta farla una sola volta. Una volta fatto la nostra B1 contiene già il software ArduinoISP e non serve riprogrammarlo per le volte successive almeno che non utilizzate la board per altri scopi.

Ora siamo giunti alla fase 3 e finalmente programmiamo il nostro micro AVR Atmel. Prima di inserire il micro da programmare nella B2 scolleghiamo il cavo USB per togliere l'alimentazione evitando spiacevoli problemi. 

  1. Inseriamo il micro ATMEGA328 nella B2
  2. colleghiamo il cavo USB scollegato prima alla B1
  3. dal menu TOOLS > PROGRAMMER > ARDUINO as ISP (nell'immagine qui sotto punto 1)
  4. dal menu TOOLS > BURN BOOTLOADER (nell'immagine qui sotto punto 2)
    (con IDE 002x il punto 3 e 4 sono sotto il BURN BOOTLOADER > w/ ARDUINO as ISP)


Vedrete i led delle board lampeggiare e se tutto va bene dopo 20/30 secondi otteniamo il messaggio Done Burning Bootloader. Il nostro micro è stato programmato correttamente con il bootloader Arduino.
Nel caso ci siano problemi questi vengono segnalati nella parte sottostante del IDE. Se troviamo un 0x15 il problema dell'autoreset ha colpito. Quindi seguite le indicazioni con cuo abbiamo inziato questo semplice howto

Per finire

Per finire usare due board Arduino va più che bene in caso d'emergenza avendo disponibile due board come in questo caso in cui poi ho scritto queste righe oppure se  occasionalmente abbiamo la necessità di programmare dei bootloader. Nel caso abbiamo spesso questa necessità sprecare la seconda per uno zoccolo può essere un po costoso. In questo caso conviene usare un circuito come suggerito all'inizio oppure seguendo questa breve howto diy.




http://www.ladyada.net/library/arduino/arduinoisp.html
Comments