Leonardo Miliani
Usare l'Arduino UNO come programmatore ISP
Tutorials -
Martedì 19 Aprile 2011 22:37
Scritto da Leonardo Miliani

Uno dei più sentiti problemi di chi acquistava la scheda Arduino UNO era quello di non poterla usare come programmatore ISP. A differenza della precedente 2009, la UNO si era rivelata non compatibile con i metodi usati per trasformare la scheda precedente in un programmatore capace di scrivere bootloader e sketch su un microcontrollore Atmega standalone.

Dopo mesi di prove, qualcuno sul forum internazionale di Arduino ha scoperto che usando un condensatore elettrolitico da 10 uF come ponte fra i pin RESET e GND della UNO si disabilitava la funzione di auto-reset, ed era perciò possibile, caricando lo sketch "ArduinoISP", utilizzare la scheda come programmatore ISP. Questo metodo è stato usato, ad esempio, per programmare i micro Attiny85 (vedi relativo articolo).

Occorreva adesso capire come poter fare per programmare un Atmega328, il microcontrollore usato nelle schede Arduino UNO, usando la comodità dell'IDE di Arduino, senza usare direttamente il terminale. Ho trovato la soluzione percorrendo la stessa strada illustrata per rendere compatibile l'Attiny85, e cioè modificando il file che l'IDE usa per impostare i parametri per avrdude in base al tipo di scheda e microcontrollore che sta trattando.

 

Modifiche all'IDE

La prima cosa da fare è modificare il file /arduino-00xx/hardware/arduino/boards.txt aggiungendo il seguente testo:

##############################################################

atmega.name=Atmega (w/ Arduino as ISP)
atmega.upload.protocol=stk500
atmega.upload.maximum_size=32256
atmega.upload.speed=115200
atmega.upload.using=arduino:arduinoisp
atmega.bootloader.low_fuses=0xff
atmega.bootloader.high_fuses=0xde
atmega.bootloader.extended_fuses=0x05
atmega.bootloader.path=optiboot
atmega.bootloader.file=optiboot_atmega328.hex
atmega.bootloader.unlock_bits=0x3F
atmega.bootloader.lock_bits=0x0F
atmega.build.mcu=atmega328p
atmega.build.f_cpu=16000000L
atmega.build.core=arduino

Questo testo può essere messo in qualsiasi punto di quel file, ad esempio in fondo. Si provvede poi a salvare il file. Riaprendo l'IDE ed andando in "Tools/Boards" si avrà una nuova voce denominata "Atmega (w/ Arduino as ISP)": grazie ad essa si può ora programmare un Atmega standalone!

 

Come programmare uno sketch su un Atmega standalone

Ecco i punti da seguire:

  1. prendere una Arduino UNO, avviare l'IDE, scegliere come board"Arduino Uno"
  2. caricare lo sketch "ArduinoISP" (si trova in "Files/Examples")
  3. chiudere l'IDE e staccare l'Arduino dal PC
  4. prendere una breadboard e prepare un circuito tipo Arduino standalone come quello a lato (basato sul circuito descritto nel tutorial ArduinoISP presente sul sito ufficiale di Arduino). Lo schema da usare prevede 1 Atmega328, 1 quarzo da 16 MHz, 2 condensatori ceramici da 22 pF, 1 resistenza da 10 kOhm
  5. collegare i cavi per programmare l'Atmega sempre come indicato in quella figura, ossia i pin 13/12/11 di Arduino ai pin 19/18/17 dell'Atmega ed il pin 10 di Arduino al pin 1 dell'Atmega. Collegare poi uno dei pin GND dell'Arduino alla linea GND della breadboard, ma NON collegare per ora i +5V
  6. collegare l'Arduino al PC col cavetto USB
  7. aprire l'IDE
  8. adesso mettere il condensatore fra il pin RESET ed uno dei pin GND di Arduino
  9. collegare il pin +5V alla linea +5V della breadboard
  10. caricare nell'IDE uno sketch, va bene anche "Blink" (si trova in "Files/Examples/Basic")
  11. scegliere da "Tools/Board" la scheda "Atmega (w/ Arduino as ISP)"
  12. fare l'upload dello sketch

Dopo pochi secondi vedrete che l'IDE dirà che è andato tutto a buon fine e che il LED sull'Arduino inizierà a lampeggiare! Non vi preoccupare, non è stato programmato l'Atmega dell'Arduino ma l'Atmega standalone! Il LED lampeggia perché il pin 13 è collegato ancora al pin 19 dell'Atmega standalone. Per riprova, scollegate tutto, smontate il micro dell'Arduino e scambiatelo col micro standalone oppure togliete i cavetti di collegamento tra Arduino e breadboard, lasciando solo GND e +5V, posizionate un LED (con relativa resistenza) sul pin 19 dell'Atmega standalone e ricollegate tutto. Vedrete che il LED integrato sull'Arduino oppure quello sulla breadboard, a seconda della vostra scelta, lampeggerà ancora a riprova dell'avvenuta ricezione dello sketch :-)

 

Con questo metodo è inoltre possibile programmare contemporaneamente i fuse del micro: basta modificare i parametri del testo da inserire nel file boards.txt.

Consiglio comunque di eseguire questa operazione solo a chi sa esattamente cosa sono i fuse, a cosa servono e cosa fanno quando si modificano.

Arduino UNO come programmatore ISP

 



 

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi