Sostituire Arduino con un ATMEGA328P-PU: Come programmarlo

L’Arduino è il compagno ideale per chi vuole sperimentare con l’elettronica, tuttavia arriva il momento in cui si desidera realizzare un prototipo definitivo, un prodotto finito da non assemblare-disassemblare più. In questi casi, lasciare che il prototipo includa una board Arduino – originale o compatibile che sia – può essere poco conveniente, sia da punto di vista economico, sia dal punto di vista dello spazio occupato.

Una soluzione ben più economica è quella di programmare un microcontrollore Atmel ATMEGA328P-PU e poi includerlo in un circuito stampato.

Se ho già annotato in questo blog le operazioni necessarie alla realizzazione di un circuito stampato nella maniera più semplice, veloce ed economica, non ho ancora trattato la tematica dei microcontrollori.

Cos’è un microcontrollore? È essenzialmente un piccolo processore programmabile che gestisce gli input e gli output sotto forma di forze elettromotrici (voltaggi).

Componenti Arduino Uno

In particolare l’Atmel ATMEGA328P-PU è il cuore dell’Arduino. A dire il vero tutte le operazioni svolte dall’Arduino sono in realtà svolte da tale microcontrollore, compreso il salvataggio e l’esecuzione degli sketch, mentre gli altri componenti servono “solo” a semplificare il suo utilizzo, ad esempio permettendo la comunicazione con il pc (la porta USB), o proteggendolo da tensioni troppo elevate.

ATMEGA3280P/Aruino Uno pinout

Inoltre esiste anche una diretta corrispondenza tra i pin dell’Arduino Uno e quelli dell’ATMEGA328P, come indicato in figura. In sintesi si può pensare all’ATMEGA328P come ad un Arduino Uno in miniatura e dal costo irrisorio €3-4.

L’unica contropartita è la difficoltà legata alla sua programmazione dovuta alla mancanza di una porta USB/Seriale. Per ovviare a questo problema esistono in commercio dei programmatori per microcontrollori con interfaccia USB, ma anche il nostro Arduino può essere usato come programmatore!

Prima di tutto occorre caricare sul microcontroller il bootloader dell’Arduino. Successivamente si può programmare l’ATMEGA328P sostituendolo al micocontroller originale dell’Arduino. Data la pericolosità di questa operazione (si rischia di danneggiare l’Arduino) consiglio un altro metodo: ovvero caricare lo sketch sul microcontroller sovrascrivendo il bootloader (che bisognerà comunque caricare prima almeno una volta), con gli ulteriori vantaggi di avere più spazio a disposizione sulla rom (lo spazio prima occupato dal bootloader) e di essere più veloce nell’avvio.

Attenzione

La guida è stata scritta per la versione 1.0.5 l’Arduino IDE. Potrebbe non funzionare con le versioni più recenti.

Preparare la breadboard

Schema dei collegamenti

Propongo qui un estratto della guida di Michele Menniti, testata e funzionante al 100%.

  • Il pin 1 del chip (è SEMPRE segnato da un tondino posto alla sinistra della tacca di riferimento del chip, a forma di mezzaluna) va collegato, mediante un filo, al pin 10 di Arduino. Sempre da questo pin parte una resistenza da 10 KΩ che va a finire sui +5V.

  • I pin 7 e 22 del chip, vanno collegati ai +5V.

  • I pin 8 e 22 del chip vanno collegati sulla linea di massa GND della breadboard.

  • I pin 9 e 10 del chip vanno collegati ai due piedini del quarzo a 16MHz; su ognuno di questi due pin va inoltre collegato un condensatore ceramico da 22pF che con l’altro capo va a massa.

  • Il pin 17 del chip va collegato al pin 11 di Arduino.

  • Il pin 18 del chip va collegato al pin 12 di Arduino.

  • Il pin 19 del chip va collegato al pin 13 di Arduino.

  • Opzionale: se vogliamo replicare il led 13 di Arduino sul chip colleghiamo al pin 19 del chip una resistenza da 1 KΩ, il cui altro capo va in un punto libero della breadboard, qui collegheremo anche il pin lungo del led, il cui pin corto va sulla linea GND.

  • A questo punto si può collegare uno dei 3 pin GND di Arduino alla linea GND della breadboard; infine si collegail +5V di Arduino alla linea +5V della breadboard.

Fase software

Caricare il bootloader

Anche qui propongo un ulteriore estratto della guida di Michele Menniti.

  • Settare la board usata come Programmatore (es. Arduino UNO) e la relativa Porta seriale.

Tipo di Arduino: Arduino Uno

  • Settare Strumenti → Programmatore → “Arduino as ISP”.

Programmatore: Arduino as ISP

  • Caricare lo sketch ArduinoISP presente negli esempi ed inviarlo all’Arduino UNO

Carica

  • Settare ora la board di cui si vuole caricare il bootloader nel micro da programmare (p.es. Arduino UNO, 2009, ecc.).
  • Eseguire il comando Strumenti → Scrivi il bootloader.

Scrivi il bootloader

Nota

In alcuni casi l’operazione potrebbe restituire errori. Dopo aver verificato i collegamenti, è possibile rimediare ponendo un condensatore da 10 μF tra il pin Reset e il pin 3.3V dell’Arduino.

Configurazione con il condensatore tra Reset e 3.3 V

Caricare lo sketch

Aggiungere al file /usr/share/arduino/hardware/arduino/boards.txt le seguenti righe:

############################################
 atmega3216.name=ATmega328P 16MHz
 atmega3216.upload.protocol=arduino
 atmega3216.upload.maximum_size=32768
 atmega3216.upload.speed=115200
 atmega3216.bootloader.low_fuses=0xff
 atmega3216.bootloader.high_fuses=0xdf
 atmega3216.bootloader.extended_fuses=0x07
 atmega3216.bootloader.path=optiboot
 atmega3216.bootloader.file=optiboot_atmega328.hex
 atmega3216.bootloader.unlock_bits=0x3F
 atmega3216.bootloader.lock_bits=0x0F
 atmega3216.build.mcu=atmega328p
 atmega3216.build.f_cpu=16000000L
 atmega3216.build.core=arduino
 atmega3216.build.variant=standard
 ############################################
  • Settare la board usata come Programmatore (es. Arduino UNO) e la relativa Porta seriale.
  • Settare Strumenti → Programmatore → “Arduino as ISP”.
  • Caricare lo sketch ArduinoISP presente negli esempi ed inviarlo all’Arduino UNO.
  • Caricare lo sketch da inviare al micro da programmare.
  • Settare ora la board virtuale creata per caricare lo sketch nel micro da programmare.
  • Eseguire il comando File → Carica con un programmatore.

Carica con un programmatore

Se abbiamo caricato lo sketch Blink, vedremo il led sulla breadboard accendersi e spegnersi, anche dopo aver scollegato il ponticello che collega il pin 13 dell’Arduino alla breadboard.

Articoli della serie ATMEGA328P-PU:

Commenti