ATMEGA328P AT 3.3 V AND 5 V
10 JUNE 2025
Quick reference for wiring ATmega328P ICs at 5 V and 3.3 V. 5 V uses 16 MHz crystal, 3.3 V uses 8 MHz.
Pinout |
Breadboard |
5 V - 16 MHz
Standard setup. How Arduino Uno boards are wired.
Connections: Pin 1 → 5 V via 10 kΩ resistor. Pins 9/10 → 16 MHz crystal via 22 pF capacitors to ground. Pins 7/20/21 → 5 V supply. Pins 8/22 → ground. Add 0.1 μF decoupling caps between pins 7/20/21 and ground.
Sample Makefile: Makefile
3.3 V - 8 MHz
Electrical connections identical to 5 V circuit. Replace 5 V with 3.3 V supply, 16 MHz crystal with 8 MHz.
Problem: ATmega328P ships configured for 5 V. Must modify fuses (BOD level, etc.) and replace bootloader. Standard Arduino bootloader expects 16 MHz—needs 8 MHz 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.3 V, 8 MHz)’ processor, ‘Arduino as ISP’ programmer. Burn bootloader via tools menu.
Sample Makefile (8 MHz): Makefile.3v3
Remarks
Don’t connect AREF (pin 21) to Vcc if using ADC with internal 1.1 V or AVcc reference. See datasheet section 23.5.2.