Posso sovrascrivere il bootloader?

La strada da percorrere era proprio quella di modificare, anzi creare, una nuova voce nel file boards.txt.
Come sai, quel file è usato dall'IDE per caricare non solo le librerie del core adatte ai singoli micro (un Atmega328 è diverso da un Attiny85 ecc...) ma anche per fornire la base su cui preparare i parametri per avrdude, che sarà poi usato per programmare il micro. In effetti, l'IDE funge un po' da frontend perché non è l'IDE che compila e prepara il file .hex ma avr-gcc, e non è l'IDE che spedisce il file generato, ma è avrdude.

Allora cosa ho fatto?
Ho preso il file /arduino-00xx/hardware/arduino/boards.txt ed ho aggiunto il seguente codice:

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

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

Puoi metterlo in qualsiasi punto di quel file, anche in fondo. Salvi il file e riapri l'IDE. Adesso in Tools/Boards avrai una nuova voce denominata "Atmega (w/ Arduino as ISP)": grazie ad essa puoi ora programmare un Atmega standalone!!!!

Come fare?
Ecco i punti:

  1. prendi una Arduino UNO, avvii l'IDE, scegli come board "Arduino Uno"
  2. ci carichi lo sketch "ArduinoISP"
  3. chiudi l'IDE e stacchi l'Arduino dal PC
  4. prendi una breadboard e prepari un circuito Arduino standalone come quello descritto qui nella foto in fondo alla pagina a DESTRA (usando quindi un quarzo esterno, 2 condensatori da 22 pF, ecc)
  5. colleghi 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 ed il pin 10 di Arduino al pin 1 dell'Atmega. Collega poi un pin GND alla linea GND della breadboard, ma NON collegare i +5V
  6. collega l'Arduino al PC col cavetto USB
  7. apri l'IDE
  8. adesso metti il condensatore fra i pin RESET ed un pin GND di Arduino
  9. adesso collega il pin +5V alla linea +5V della breadboard
  10. carica nell'IDE uno sketch, va bene anche "Blink"
  11. scegli la scheda "Atmega (w/ Arduino as ISP)"
  12. fai l'upload!

Dopo pochi secondi vedrai che l'IDE ti dirà che è andato tutto a buon fine e che il LED sull'Arduino lampeggerà!
Non ti 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, scollega tutto, smonta il micro dell'Arduino e scambialo col micro standalone. Ridai tensione e vedrai che il LED integrato sull'Arduino continua a lampeggiare :slight_smile:

Adesso preparo un tutorial :smiley: