ATMEGA328P CHIPS

10 APRIL 2025

This is a quick reference for wiring up ATmega328P ICs to run at 5V and 3.3V. While the 5V configuration is common, the 3.3V configuration can be useful in low-power applications and when interfacing with parts that themselves run at 3.3V. In this guide, the 5V setup is configured with a 16MHz crystal oscillator, while the 3.3V configuration makes use of an 8MHz crystal oscillator.

The steps that follow refer to the following pinout.

Pinout

Pinout

Circuit

Breadboard

5V-16MHz configuration

  1. Connect pin 1 to 5V via a 10kΩ resistor.
  2. Connect a 16MHz crystal oscillator across pins 9 and 10.
  3. Connect each pin of the crystal to ground via 22pF capacitors.
  4. Connect pins 7, 20, and 21 to 5V.
  5. Connect pins 8 and 22 to ground.

In addition to the the connections above, it’s a good idea to add 0.1μF decoupling capacitors between pins 7, 20, and 21 and ground. Here’s a sample Makefile for avr-gcc and avrdude.

3.3V-8MHz configuration

Standard ATmega328P chips are preconfigured to run at 5V. To run one at 3.3V, we must first modify its fuses (e.g., BOD level). If the chip contains a pre-installed bootloader that expects a 16MHz clock (such as the Arduino Uno bootloader), it must be replaced with one that is more amenable to an 8MHz clock.

In the following steps, we use an Arduino Uno as an in-system programmer to replace the embedded bootloader and modify the appropriate fuses.

  1. Upload the ‘ArduinoISP’ sketch to the Arduino Uno.
  2. Wire up the ATmega328P IC as described in the previous section, while replacing the 5V supply with a 3.3V supply and 16MHz crystal with an 8MHz crystal.
  3. Connect the SPI ports (SCK, MISO, and MOSI) of the two MCUs.
  4. Connect the Arduino Uno’s SS pin to the IC’s RESET pin (pin 1).
  5. Connect the IC’s VCC to a 5V supply (e.g., the Arduino Uno’s 5V pin).
  6. Burn the bootloader to the ATmega328P:
    • Select ‘ATmega328P (3.3V, 8MHz)’ from Tools > Processor.
    • Select ‘Arduino as ISP’ from Tools > Programmer.
    • Select Tools > Burn Bootloader.

The ATmega328P is now ready to run at 8MHz with a 3.3V power supply. You can upload programs to the ATmega328P as you normally would using avrdude. Here’s a sample Makefile with adjusted parameters (e.g., baud rate) for an 8MHz clock.

In both configurations, if you intend to use the ATmega328P’s analog-to-digital converter with the internal 1.1V or AVcc voltage as reference, do not connect AREF (pin 21) to Vcc. Refer to section 23.5.2 in the datasheet for more information.