---
title: ATmega328P at 3.3V and 5V
date: 2025-06-10
layout: post
---
Quick reference for wiring ATmega328P ICs at 5V and 3.3V. 5V uses 16MHz
crystal, 3.3V uses 8MHz.
Pinout
|
Breadboard
|
## 5V-16MHz
Standard setup. How Arduino Uno boards are wired.
Connections: Pin 1 → 5V via 10kΩ resistor. Pins 9/10 → 16MHz crystal via 22pF
capacitors to ground. Pins 7/20/21 → 5V supply. Pins 8/22 → ground. Add 0.1μF
decoupling caps between pins 7/20/21 and ground.
Sample Makefile: [Makefile](Makefile)
## 3.3V-8MHz
Electrical connections identical to 5V circuit. Replace 5V with 3.3V supply,
16MHz crystal with 8MHz.
Problem: ATmega328P ships configured for 5V. Must modify fuses (BOD level,
etc.) and replace bootloader. Standard Arduino bootloader expects 16MHz—needs
8MHz version.
Solution: Use Arduino Uno as ISP. Upload 'ArduinoISP' sketch from Arduino IDE.
Connect SPI pins (ATmega328P ↔ Uno), Uno's SS pin → ATmega328P RESET pin. Power
ATmega328P from Uno's 5V pin during programming.
Arduino IDE: Select 'ATmega328P (3.3V, 8MHz)' processor, 'Arduino as ISP'
programmer. Burn bootloader via tools menu.
Sample Makefile (8MHz): [Makefile.3v3](3v3.Makefile)
## Remarks
Don't connect AREF (pin 21) to Vcc if using ADC with internal 1.1V
or AVcc reference. See datasheet section 23.5.2.