In questo post vorrei mostrare come utilizzare Arduino in configurazione standalone, ovvero utlizzare l’Atmega328 (munito di bootloader) in circuito senza dover portarsi dietro tutta la nostra board Arduino Uno (o quella che avete).
Il concetto è questo: ho finito il mio progetto con Arduino (ad esempio una con LED RGB) e sono pronto per realizzare la versione definitiva da inscatolare in una lampada.
Potrei si usare la board Arduino, ma sarebbe sconveniente sia dal punto di vista del costo, che dal punto di vista delle dimensioni e dei consumi… In realtà quello che a noi serve è semplicemente il microcontroller dotato di bootloader e pochi altri componenti esterni.
Se il nostro Atmega non ha il bootloader, dobbiamo caricarglielo, ma andiamo con ordine… Poniamo che al momento abbiamo già il bootloader onboard.
Per poter fare l’upload degli sketch dobbiamo utlizzare i collegamenti come indicato in figura:
E’ importante rimuove il microcontroller dalla scheda con cui andiamo a programmare, altrimenti programmeremmo quello al posto del nostro Atmega standalone.
Come vedete lo schema è molto semplice, si collega l’alimentazione, i pin TX e RX dei rispettivi microcontroller e il pin RESET.
A questo punto dal nostro Arduino IDE possiamo andare a fare l’upload dello sketch, dopo aver selezionato ovviamente “Arduino Duemilanove or Nano w/ ATmega328” dal menu Tools –> Board. E’ il gioco è fatto.
Ovviamente lo stesso discorso varrebbe se l’Atmega fosse programmato per lavorare con l’oscillatore interno a 8mhz. Con la differenza che non ci sarebbero i due condensatori e il cristallo indicati in figura. Per utilizzare però l’oscillatore interno, va riprogrammato il bootloader (lo vedremo nel prossimo post).
Qualora avessimo a disposizione (e vi consiglio di prenderlo perchè è un’accessorio che costa poco ed è veramente utile) un convertitore USB/Seriale tipo lo Sparkfun FTDI Basic o l’Arduino USB-Serial Light il collegamento sarebbe tipo il seguente:
Non è niente di complicato, semplicemente i collegamenti sono quasi come prima: VCC, GND, RX, TX, mentre il reset è un po’ diverso perchè richiede un condensatore da 100nF tra il PIN DTR (o RTS – da non confondere con RST) e il PIN RST dell’Atmega.
Abbiamo quindi visto come programmare un Atmega328 in standalone con il bootloader già preinstallato; nel prossimo post vedremo come caricare il bootloader su un’Atmega328 vergine sia in versione con cristallo esterno a 16mhz, sia in versione con oscillatore interno a 8mhz.
Belle spiegazioni 😀 .. non ho capito una cosa se viene programmato nel secondo metodo con il convertitore oltre a eseguire i collegamenti che si vedono nella seconda immagine bisogna usare il quarzo i due condensatori e tutti gli altri collegamenti che ci sono nello schema uno ( la seconda immagine è solo un ingrandimento sullla connessione con il convertitore?? ) grazie..
Si Lorenzo, confermo che la seconda immagine devi vederla come un ingrandimento, quindi servono i quarzi e tutti il resto (se l’arduino ha il bootloader a 16Mhz ovviamente).
Se invece l’arduino ha il bootloader a 8mhz, i quarzi e condensatori non servono.
Ciao
Vedendo il tuo disegno mi sorge spontanea una domanda: per programmare il chip esterno vedo che è necessario rimuovere quello sulla scheda Arduino. Ma anziché utilizzare la board esterna non sarebbe più semplice sostituire il chip con quello da programmare e poi rimuoverlo?
Assolutamente si… Si può fare… il motivo per cui nel disegno è stato utilizzato questo metodo è semplicemente perchè al posto di una breadboard, potresti avere una scheda su cui è saldato il tutto… Entrambi i metodi sono comunque efficaci… vedi tu qual’è il sistema che più ti aggrada.
Saluti
Ciao. grazie mille le tue spiegazioni sono state molto utili. ma non ho capito una cosa… dopo aver caricato il programma sull’ Atmega328, lo stesso circuito lo posso prendere e portare le uscite direttamente (ad esempio) ad un led, oppure devo fare un’altro circuito esterno per poter far funzionare il tutto?
Ciao Davide,
le uscite tell’Atmega328 sono uscite in tutto e per tutto come quelle di Arduino: per pilotare piccolissimi carichi (come un LED) si possono usare direttamente, altrimenti va usato un circuito a transitor, mosfet o quant’altro.
A presto
Ciao Antonio, volevo chiederti una cosa che mi sta facendo impazzire letteralmente!!!
Ho realizzato una schedina standalone e mi ritrovo un problema per me insuperabile!
In pratica alimento con 12v e tramite un 7805 alimento il microcontrollore, fin qui tutto bene…ma come accendo un neon i lampeggi dello starter fanno resettare il microcontrollore…ho provato di tutto…a mettere i condensatori a valle, a monte e a valle, poi ho messo un diodo tra positivo e negativo e pare che qualcosa faccia.
Il difetto e’ totalmente casuale magari a prima accensione del neon o magari a terza o quarta volta.
Sembra esserci un ritorno di tensione che disturba…ho provato anche ad alimentare con una pila ma difetta ancora, ho messo a 5v il pin1 reset eliminando la r1000.
Mi sapresti consigliare qualcosa da fare????
Grazie mille….