PROGRAMMING ATMEGA328P CHIPS

10 APRIL 2025

This post is a step-by-step guide for wiring up ATmega328P ICs to run at 5V with a 16MHz crystal and 3.3V with an 8MHz crystal. While the 5V configuration is common, the 3.3V configuration can be advantageous in low-power applications and when interfacing with parts that run at 3.3V.

5V-16MHz configuration

The steps that follow refer to the following pinout.

Pinout

Pinout

Circuit

Breadboard

  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 connections described 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

The following steps use Arduino Uno as an ISP and Arduino utilities to program ATmega328P’s bootloader and the fuses (e.g., BOD level) for a 3.3V supply.

  1. Upload the ‘ArduinoISP’ sketch to the Uno.
  2. Wire up the ATmega328P as described in the previous section. Replace the 5V supply with a 3.3V supply and use an 8MHz crystal instead of the 16MHz crystal.
  3. Connect the SPI ports (SCK, MISO, and MOSI) of the two MCUs.
  4. Connect Uno’s SS pin to the IC’s pin 1 (RESET).
  5. The IC can be powered by 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 usually 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 ADC Voltage Reference in the datasheet for more information.