Arduino

ArduinoISP: programmiamo ATmega e ATtiny

Come utilizzare una scheda Arduino per programmare microcontrollori ATMEL

All’interno del software Arduino sono presenti molti sketch di esempio, ma alcuni di essi sono estremamente utili come nel caso del codice ArduinoISP. Esso, infatti, trasforma la nostra scheda Arduino (UNO o Mega) in un vero e proprio programmatore per microcontrollori AVR (ex Atmel, oggi Microchip) della famiglia ATmega e ATtiny. Ovviamente si tratta di un programmatore limitato nelle sue funzioni, ma nel campo hobbystico e diy è più che sufficiente.

Collegamenti tra Arduino e microcontrollore

In rete si trovano tante shield o PCB dedicate per questo processo, ma nulla vieta di gestire la programmazione tramite una banalissima breadboard. I pin utilizzati dallo sketch sono i seguenti (tra parentesi i pin equivalenti dell’Arduino Mega):

  • pin 11 (Mega: 51) –> MOSI
  • pin 12 (Mega: 50) –> MISO
  • pin 13 (Mega: 52) –> SCK
  • pin 10 (anche sul Mega) –> RESET
  • GND   –> GND
  • +5V    –> +5V

In alternativa MOSI, MISO e SCK si possono prelevare dall’header ICSP a 6 pin, che ha la stessa disposizione su tutte le schede Arduino: le versioni recenti dello sketch ArduinoISP usano proprio i pin SPI hardware dell’header ICSP.

Se vogliamo quindi programmare un microcontrollore su breadboard dovremmo portare il pin11 di Arduino al pin MOSI del microcontrollore interessato, il pin12 al pin MISO, il pin 13 al pin SCK e così via. Quindi, per fare un esempio, se volessimo programmare un ATtiny2313, basandosi sul suo pinout dovremo procedere al seguente collegamento:

PINOUT ATtiny2313Pinout dell'ATtiny2313 con i pin MOSI, MISO, SCK e RESET

Schema connessioni breadboardCollegamento su breadboard tra Arduino UNO come ISP e ATtiny2313

Se invece prendiamo in esame un ATtiny25/ATtiny45/ATtiny85 la connessione risulterà la seguente:Collegamento tra Arduino UNO come ISP e ATtiny25/45/85

Riepilogo dei collegamenti per i microcontrollori più comuni (numeri di pin del package DIP):

Arduino UNO Segnale ATtiny25/45/85 ATtiny2313 ATmega328P
pin 11 MOSI 5 (PB0) 17 (PB5) 17 (PB3)
pin 12 MISO 6 (PB1) 18 (PB6) 18 (PB4)
pin 13 SCK 7 (PB2) 19 (PB7) 19 (PB5)
pin 10 RESET 1 (PB5) 1 1
+5V VCC 8 20 7 e 20 (AVCC)
GND GND 4 10 8 e 22

Se l’ATmega328P è (o verrà) configurato per il quarzo esterno, come nel bootloader di Arduino UNO, servono anche il quarzo da 16 MHz tra i pin 9 e 10 con i due condensatori da 22 pF verso massa.

Caricare lo sketch ArduinoISP

Una volta realizzato lo schema su breadboard ci basterà aprire l’IDE di Arduino e seguire:

File > Esempi > 11. ArduinoISP > ArduinoISP

Per poi effettuare l’upload sulla nostra scheda Arduino, trasformandola di fatto in un programmatore.

Dopo aver caricato lo sketch, sull’Arduino UNO conviene collegare un condensatore elettrolitico da 10 µF tra RESET e GND (negativo verso GND): impedisce l’autoreset della scheda all’apertura della porta seriale, che altrimenti interromperebbe la programmazione. Il condensatore va rimosso quando si vuole caricare un nuovo sketch sull’Arduino stesso.

Impostare l’IDE e scrivere il bootloader

Andiamo ora ad impostare l’IDE per effettuare gli upload dei futuri firmware tramite ArduinoISP seguendo:

Strumenti > Programmatore > Arduino as ISP

Attenzione a non scegliere la voce “ArduinoISP”, che corrisponde a un programmatore hardware diverso e fa fallire l’upload.

E selezioniamo la scheda/microcontrollore che vogliamo programmare:

Strumenti > Scheda > Scheda….

Al primo utilizzo di un microcontrollore, dopo aver scelto scheda e frequenza di clock, eseguiamo Strumenti > Scrivi il bootloader: questa operazione programma i fuse (sorgente e frequenza del clock, ad esempio 8 MHz con oscillatore interno per un ATtiny) e, per le schede che lo prevedono, il bootloader. Senza questo passaggio il microcontrollore continua a lavorare con il clock di fabbrica e i tempi dello sketch risultano errati.

Attenzione ai fuse del clock: se scegliamo una configurazione con quarzo esterno (ad esempio 16 MHz esterno), il quarzo con i suoi condensatori deve essere già montato prima di eseguire “Scrivi il bootloader”. Dopo la scrittura dei fuse, infatti, il microcontrollore funziona e si programma solo se riceve quel clock: senza quarzo non risponde più al programmatore finché non gli viene fornito un clock esterno. Per l’ATtiny, se non serve una frequenza precisa, conviene usare l’oscillatore interno a 8 MHz.

Se vogliamo programmare microcontrollori ATtiny ci basterà seguire la seguente guida:

Guida: Arduino IDE e microcontrollori ATMEL ATtiny

Caricare uno sketch tramite programmatore

NB. da ora, per effettuare l’upload dello sketch, sarà necessario applicarlo da 

Sketch > Carica tramite programmatore (Ctrl/Cmd+Maiusc+U)

altrimenti andremo a sovrascrivere il microcontrollore della nostra scheda Arduino.

Per approfondire: USBtinyISP, programmatore Atmel fatto in casa e ripristino del firmware e del bootloader di ATmega16u2 e ATmega328P.

Admin | MST-Tutorial

Appassionato di elettronica, elettrotecnica e programmazione. Fondatore di MST-Tutorial, condivido con entusiasmo conoscenze, esperienze e progetti legati all’innovazione tecnologica, con l’obiettivo di rendere accessibili concetti tecnici complessi attraverso tutorial chiari e pratici.

Articoli Correlati

Check Also
Chiudi
Pulsante per tornare all'inizio