Indice
Shield ISP per Arduino
Finalità
Realizzare uno shield Arduino per programmare i microcontrollori ATmega328P “vergini”, cioè privi di bootloader.
Il problema da risolvere
Il bootloader è necessario per poter utilizzare i microcontrollori con le schede Arduino. I microcontrollori acquistati separatamente - cioè non montati su una scheda Arduino - non contengono un bootloader e per essere utilizzati devono essere programmati con un programmatore (ad esempio l'AVRIPS della Atmel) e un software di sviluppo dedicato (ad esempio Atmel Studio). Per utilizzare gli ATmega328P vergini sulle schede Arduino e per poterli programmare con il suo ambiente di sviluppo è necessario scrivere il bootloader Arduino sul microcontrollore. Questa operazione, chiamata anche flash del bootloader, si può fare in più modi:
- usando un programmatore
- usando due schede Arduino (una come programmatore una come target)
- usando una scheda ARduino come programmatore e una breadboard con il microcontrollore da programmare
- usando una scheda ARduino come programmatore e uno shield che ospita il microcontrollore da programmare
L'ultima soluzione è l'obiettivo di questo progetto.
Una volta scritto il bootloader si può montare il microcontrollore sullo zoccolo di una scheda Arduino e utilizzarlo normalmente (o utilizzare la scheda solo per caricare un programma sul microcontrollore e poi spostarlo un una scheda elettronica custom).
Cosa fa il bootloader
Il bootloader è un programma - o meglio un firmware - contenuto nella memoria del microcontrollore che viene eseguito ogni volta che si alimenta o resetta il microcontrollore. Il bootloader:
- controlla se si sta cercando di programmare il microcontrollore attraverso la porta seriale
- in caso affermativo carica il nuovo programma in memoria e resetta il microcontrollore
- altrimenti esegue il programma già contenuto in memoria
Lo shield ISP
Lo shield si basa sullo schema del tutorial ufficiale ma al posto della breadboard si vuole usare uno shield apposito.
E' sufficiente replicare i collegamenti conoscendo il pinout della scheda Arduino e dell'ATmega328 (mostrato in figura).
In particolare occorre collegare:
- l'alimentazione 5V ai pin 7 e 20 dello zoccolo
- la massa GND ai pin 8 e 22 dello zoccolo
- i due terminali del quarzo ai pin 9 e 10 e a massa
- collegare la resistenza di pull-up al pin 1 dello zoccolo e all'alimentazione 5V
- pin D10 al pin 1 dello zoccolo
- pin D11, D12, D13 ai pin 17, 18 e 19 dello zoccolo
Layout
In figura un primo tentativo di layout monofaccia.
Si vede che manca un collegamento (ratsnest gialla da GND superiore a inferiore), ma il collegamento è comunque presente sulla scheda Arduino Uno su cui lo shield va montato. Senza questo accorgimento bisogna ricorrere a una scheda a doppia faccia.
Bill of materials
- zoccolo SDIP28
- quarzo da 16Mhz
- 2 condensatori da 22 pF
- resistenza di pull-up da 10 kΩ
- connettori strip maschio-maschio
Come utilizzare lo shield
Inserire il chip ATmega328P vergine nello zoccolo e montare lo shield sulla scheda Arduino.
Utilizzando il software Arduino:
- caricare nella scheda Arduino utilizzata come programmatore lo sketch ArduinoISP contenuto nella cartella Esempi
- selezionare la porta seriale (COM) collegata alla scheda Arduino
- selezionare il tipo di scheda da programmare (Arduino Uno), cioè il tipo di bootloader Arduino che si desidera caricare nel microcontrollore
- selezionare il programmatore (Arduino as ISP nel menu Strumenti|Programmatore)
- scrivere il bootloader sul microcontrollore montato nello shield selezionando Burn bootloader
- selezionare nuovamente il programmatore “standard” (AVR ISP mkII) per utilizzare il software Arduino normalmente
Problemi/TODO
- serve ancora il condensatore da 10 μF tra reset e GND nella scheda Arduino Uno usata come programmatore? (non serve nelle Arduino 2009, pare che non serva dall'IDE 1.0.x in poi, c'è una soluzione alternativa al limite)
Riferimenti
riferimenti:
Definizioni:
- ISP in-system programmer
- bootloader
- flash
Navigazione
Torna all'indice.