ATmega328 su breadboard: creare un Arduino standalone
In questa guida vedremo come utilizzare il microcontrollore ATmega328 fuori dalla scheda Arduino UNO, installarlo su breadboard, caricare il bootloader e programmare gli sketch per realizzare progetti Arduino completamente indipendenti.
🧠 Cos’è un Arduino standalone?
Una scheda Arduino UNO contiene diversi componenti che facilitano alimentazione, programmazione e collegamento al computer.
Il vero cuore della versione classica di Arduino UNO è però il microcontrollore ATmega328P.
Una volta programmato correttamente, questo microcontrollore può funzionare anche fuori dalla scheda Arduino, installato direttamente su una breadboard o su una basetta millefori.
Il microcontrollore ATmega328P utilizzato nelle classiche Arduino UNO.
🧰 Materiale necessario
Per realizzare la configurazione Arduino standalone con clock esterno utilizzeremo:
- Arduino UNO
- Microcontrollore ATmega328
- Breadboard
- 1 oscillatore al quarzo da 16 MHz
- 1 resistenza da 10 kΩ
- 2 condensatori ceramici da 18 o 22 pF
La configurazione classica di Arduino UNO utilizza un clock da 16 MHz. Il quarzo e i due condensatori permettono all’ATmega328 di funzionare con una temporizzazione compatibile con la configurazione standard Arduino UNO.
🔥 Caricare il bootloader sull’ATmega328
Se utilizziamo un ATmega328 nuovo e privo di bootloader, prima di poter caricare normalmente gli sketch dobbiamo programmare il bootloader Arduino.
Il bootloader è un piccolo programma memorizzato nel microcontrollore che permette successivamente di ricevere gli sketch attraverso la comunicazione seriale.
Se hai acquistato un ATmega328P con bootloader Arduino già precaricato puoi saltare questa procedura e passare direttamente al caricamento degli sketch.
1. Trasformare Arduino UNO in programmatore ISP
Collega Arduino UNO al computer tramite USB.
Nell’IDE Arduino apri:
File → Examples → 11.ArduinoISP → ArduinoISP
Seleziona la scheda Arduino UNO e la relativa porta, quindi carica lo sketch ArduinoISP.
Anche nelle versioni moderne di Arduino IDE questa rimane la procedura ufficiale: Arduino UNO può essere utilizzato come programmatore ISP per un altro microcontrollore AVR.
2. Realizzare il circuito per il bootloader
Costruisci il circuito esattamente come mostrato nello schema originale seguente.
Collegamento Arduino UNO → ATmega328 per programmare il bootloader.
Segui esattamente lo schema mostrato nell’immagine. Un collegamento errato dei pin ISP, dell’alimentazione o del RESET può impedire la programmazione.
3. Selezionare la scheda target
Nell’IDE Arduino seleziona:
Tools → Board → Arduino AVR Boards → Arduino Uno
Questa configurazione programma l’ATmega328P per lavorare come il microcontrollore di una Arduino UNO classica a 16 MHz.
4. Selezionare Arduino as ISP
Dal menu dell’IDE seleziona:
Tools → Programmer → Arduino as ISP
5. Scrivere il bootloader
A questo punto seleziona:
Tools → Burn Bootloader
L’IDE inizierà la programmazione del microcontrollore. Al termine dovrebbe comparire un messaggio che conferma il completamento dell’operazione.
Nelle versioni moderne dell’IDE normalmente l’operazione richiede meno di un minuto. Non è quindi necessario attendere diversi minuti come poteva accadere con vecchie versioni degli strumenti Arduino.
💻 Caricare uno sketch sull’ATmega328
Dopo aver installato il bootloader, possiamo iniziare a caricare normalmente gli sketch sul microcontrollore.
Possiamo sfruttare l’interfaccia USB-seriale presente sulla scheda Arduino UNO per comunicare con l’ATmega328 installato sulla breadboard.
In questa configurazione ricordati di rimuovere l’ATmega328 dalla scheda Arduino UNO, come previsto dallo schema originale.
Schema originale per utilizzare l’interfaccia seriale
della scheda Arduino UNO con l’ATmega328 sulla breadboard.
Sulle Arduino UNO R3 originali l’interfaccia USB-seriale è gestita normalmente da un ATmega16U2. In vecchie guide viene spesso indicata genericamente come “FTDI”, ma il principio rimane lo stesso: utilizzare il convertitore USB-seriale della scheda per comunicare con il microcontrollore esterno.
⚙️ Come funziona un ATmega328 standalone
Una volta programmato, il microcontrollore non ha più bisogno della scheda Arduino UNO per eseguire lo sketch.
La configurazione standard richiede essenzialmente:
- alimentazione;
- massa;
- RESET correttamente polarizzato;
- clock da 16 MHz;
- eventuali componenti utilizzati dal progetto.
Arduino UNO può quindi essere considerato una comoda piattaforma di sviluppo. Terminato il progetto, l’ATmega328 può essere trasferito su un circuito indipendente.
🕒 Utilizzare il clock interno dell’ATmega328
L’ATmega328 dispone anche di un oscillatore RC interno. Questo permette di realizzare configurazioni ancora più semplici eliminando il quarzo esterno e i relativi condensatori.
L’ATmega328P supporta un oscillatore RC interno nominale da 8 MHz. La configurazione di fabbrica, tuttavia, utilizza anche il divisore CKDIV8 e quindi un chip completamente vergine può partire effettivamente a 1 MHz finché i fuse non vengono configurati. :contentReference[oaicite:2]{index=2}
Le vecchie guide Arduino utilizzavano pacchetti chiamati Breadboard-1-6-x, Breadboard1-5-x e Breadboard1-0-x. Quel metodo appartiene alle vecchie versioni dell’IDE e oggi è poco pratico.
🔧 Metodo moderno: MiniCore
Per utilizzare oggi un ATmega328P standalone scegliendo facilmente clock interno, bootloader e fuse, una soluzione molto più moderna è MiniCore.
MiniCore supporta Arduino IDE 1.8 e Arduino IDE 2.x, ATmega328/328P e diverse frequenze di clock, compreso il clock interno a 8 MHz. :contentReference[oaicite:3]{index=3}
Installare MiniCore
1 Apri le preferenze dell’IDE
Apri le impostazioni di Arduino IDE e cerca il campo dedicato agli Additional Boards Manager URLs.
2 Aggiungi MiniCore
Inserisci l’URL ufficiale del package MiniCore:
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
3 Installa dal Boards Manager
Apri il gestore schede, cerca MiniCore e installa il pacchetto.
4 Seleziona ATmega328
Dal menu delle schede seleziona il microcontrollore ATmega328/328P e imposta il clock desiderato, ad esempio Internal 8 MHz.
5 Scrivi i fuse e il bootloader
Seleziona:
Tools → Programmer → Arduino as ISP
e successivamente:
Tools → Burn Bootloader
Con un core come MiniCore questa operazione non serve soltanto a installare il bootloader: imposta anche i fuse necessari affinché il microcontrollore utilizzi correttamente la frequenza e la sorgente di clock selezionate.
📷 Configurazione originale con clock interno
Le immagini seguenti mostrano la configurazione originariamente utilizzata per programmare l’ATmega328 con clock interno.
🔍 Clock esterno o clock interno?
| Configurazione | Vantaggi | Svantaggi |
|---|---|---|
| 16 MHz esterno | Compatibilità molto vicina ad Arduino UNO e temporizzazione più precisa. | Richiede quarzo e condensatori aggiuntivi. |
| 8 MHz interno | Circuito più semplice e meno componenti. | Frequenza inferiore e oscillatore interno meno preciso rispetto a un quarzo esterno. |
⚠️ Errori comuni
Errore durante Burn Bootloader
Controlla prima di tutto:
- pin RESET;
- collegamenti MOSI/COPI, MISO/CIPO e SCK;
- 5V e GND;
- scheda target selezionata;
- Arduino as ISP come programmatore.
Arduino indica proprio una selezione errata del programmatore o un collegamento RESET non corretto tra le cause comuni degli errori durante il caricamento del bootloader. :contentReference[oaicite:4]{index=4}
Il microcontrollore non parte dopo aver rimosso il quarzo
Se il chip è stato configurato per utilizzare un clock esterno da 16 MHz, semplicemente togliere il quarzo non lo farà automaticamente passare al clock interno.
È necessario modificare correttamente i fuse del microcontrollore tramite una nuova programmazione ISP.
Lo sketch non viene caricato
Verifica che:
- il bootloader sia presente;
- il clock selezionato corrisponda alla configurazione reale;
- TX e RX siano collegati correttamente;
- GND sia comune;
- il reset venga gestito correttamente durante l’upload.
✅ In breve
- l’ATmega328P può funzionare senza la scheda Arduino UNO;
- Arduino UNO può essere utilizzato come programmatore ISP;
- un chip vergine deve essere configurato prima dell’uso;
- con clock esterno puoi replicare il comportamento classico di Arduino UNO a 16 MHz;
- con il clock interno puoi ridurre ulteriormente il numero di componenti;
- per configurazioni moderne con clock interno MiniCore è molto più pratico delle vecchie definizioni Breadboard.
Una volta programmato correttamente, l’ATmega328 può essere installato definitivamente su breadboard, millefori o su una scheda progettata appositamente per il tuo progetto, funzionando come un vero Arduino standalone.

