Dopo lo sviluppo di uno sketch con l’IDE di Arduino, possiamo compilarlo e caricarlo sulla scheda Arduino collegata al nostro PC con un click sul pulsante upload:
Il programma viene memorizzato nella memoria flash del microcontrollore (per una scheda Arduino Uno questo è l’ATmega328p).
E’ possibile caricare il nostro programma sul microcontrollore senza necessità di un programmatore esterno grazie alla esecuzione, sul microcontrollore stesso, di un piccolo programma chiamato bootloader.
Il bootloader è un programma, già caricato su ogni microcontrollore delle schede Arduino, che viene eseguito ad ogni reset. La prima operazione compiuta dal bootloader è verificare se via seriale/USB arriva la richiesta di caricare un nuovo programma. In tal caso è il bootloader che dialoga con l’IDE di Arduino, riceve il nuovo programma e lo memorizza nella memoria flash:
Il bootloader attualmente utilizzato sulle schede Arduino Uno si chiama optiboot.
Se acquistiamo un chip ATmega328p e vogliamo utilizzarlo con l’IDE di Arduino per eseguire i nostri sketch, dobbiamo per prima cosa caricare sul chip il bootloader. La programmazione di un chip avviene normalmente tramite un programmatore dedicato. I chip ATmega supportano una modalità di programmazione detta In System Programming (ISP), pensata per programmare il chip direttamente sulla scheda che lo ospita.
Tale modalità richiede il collegamento di 6 pins del chip con il programmatore:
[checklist]
- 5V e massa
- reset
- MISO, MOSI e SCK
[/checklist]
Ogni scheda Arduino Uno ad esempio ha un apposito connettore che consente di riprogrammare il chip ATmega328p senza toglierlo:
In rete si trovano diversi programmatori per chip ATmega (es questo di Adafruit); molto interessante è però la possibilità di utilizzare un Arduino come programmatore, grazie al lavoro di Randall Bohn.
Per prima cosa dobbiamo caricare su Arduino lo sketch ArduinoISP, che troviamo tra gli esempi disponibili nell’IDE:
quindi dobbiamo predisporre – ad esempio su una breadboard – un circuito minimale che comprende il chip da programmare, un quarzo da 16MHz e due condensatori da 22pF:
colleghiamo tramite jumpers il nostro Arduino Uno al chip ATMega328p da programmare. I collegamenti da effettuare sono:
- 5V -> pin 7 e 20
- Massa -> pin 8, 22 e i due condensatori
- pin 10 di Arduino o RESET del connettore ICSP -> pin 1
- pin 11 di Arduino o MOSI del connettore ICSP -> pin 17
- pin 12 di Arduino o MISO del connettore ICSP -> pin 18
- pin 13 di Arduino o CLK del connettore ICSP -> pin 19
Indichiamo all’IDE che vogliamo utilizzare Arduino come programmatore:
quindi programmiamo il bootloader:
dopo qualche istante, l’IDE dovrebbe indicare che la programmazione è andata a buon fine:
Shield
In vendita su diversi store online si trova uno shield per Arduino che semplifica la programmazione dei chip ATmega, chiamato AVR ISP Shield e prodotto da “OPEN-SMART”:
Questo shield ospita uno zoccolo ZIF (Zero Insertion Force) in cui va inserito il chip da programmare, alcuni connettori per collegarlo a schede esterne e un buzzer che segnala con due beep l’avvenuta programmazione.
Ho trovato su Internet un archivio contenente la documentazione relativa a questo shield e lo sketch da utilizzare. E’ comunque possibile utilizzare anche lo sketch fornito con l’IDE, semplicemente non verrà attivato il buzzer al termine della programmazione.
Se avete la necessità di programmare diversi chip ATmega328p (ad esempio se state realizzando vostre schede Arduino-compatibili) l’uso di questo shield rende l’operazione sicuramente più veloce!
Grazie sei stato molto chiaro,