Programming ATmega328P with Arduino

Krishna Ojha
4 min readApr 17, 2020

--

In this article I’ll be covering a step by step guide of programming an ATmega328P IC (The same micro-controller present on Arduino UNO) using Arduino IDE and an Arduino UNO as a programmer to make yourself a custom Arduino, to make your projects more scalable and cost-effective.

ATmega328P Microcontroller

Most of the time while programming a ATmega328, you’ll be using a external 16MHz crystal, but in cases when you want to have low power applications you should use an external 8MHz crystal. The IC has an inbuilt internal 8MHz oscillator but the internal clock has a higher drift compared to a quartz crystal, so it is better to use and external crystal oscillator.

ATmega328 Pinout

Step 1: COMPONENTS REQUIRED

You’ll need

1) ATmega328P IC………………x1

2) 8MHz Crystal Oscillator……..x1

3) Capacitor — 22pF…………….x2

4) Resistor — 10K…………….….x1

5) Resistor — 220 Ohm……..…..x1

6) LED……………………..…….x1

7) Arduino Uno……………….…x1

some connecting wires, and you are good to go.

Step 2: INITIAL CONNECTIONS

Initial connections on breadboard

This basic setup will power up your IC and you’ll be ready for bootloading.

Pin 1 — Vcc via 10K resistor

Pin 7 and Pin 20 — Vcc

Pin 8 and Pin 22 — Gnd

Pin 9 and Pin 10 — Crystal Oscillator

Pin 9 and Pin10 — Gnd via 22pF Capacitors each

Pin 19 — Gnd Via a series combination of 220 Ohm resistor and LED

Step 3: BOOTLOADING

Circuit for Bootloading the microcontroller

Microcontrollers are usually programmed through a programmer unless you have a piece of firmware in your microcontroller that allows installing new firmware without the need of an external programmer. This is called a bootloader.

IMPORTANT — This will be a one time process.

To upload the bootloader, we’ll make some extra connections to the basic power connections.

Atmega — Arduino UNO

Pin 1 — D10 (RESET)

Pin 17 — D11 (MOSI)

Pin 18 — D12 (MISO)

Pin 19 — D13 (SCK)

Now open Arduino IDE

1) Go to File > Examples > ArduinoISP

2) Go to Tools > Board > Arduino UNO

3) Select port from the Tools > Port

4) Upload the ArudinoISP sketch to your board

5) After succeful uploading of the code go to Tools > Board > and select Arduino Pro or Pro Mini

6) Go to Tools > Processor > and select ATmega328P (3.3V, 8MHz)

7) Go to Tools > Programmer > and select Arduino as ISP (Not ArduinoISP)

8) Go to Tools > Burn Bootloader

This may take a while, and you’ll be shown Done burning bootloader.

At this moment the LED on your breadboard and the default Arduino UNO LED will start blinking in sync.

Step 4: PROGRAMMING THE IC

Circuit for programming ATmega328P using Arduino IDE

You are now ready to Program your ATmega328P IC just like your arduino.

IMPORTANT — After bootloading, remove the ATmega chip form the Arduino UNO because now we will be using the Arduino board just as an ISP Programmer (In System Programmer).

Now remove all the 4 connections made in the bootloading process and do the following connections

ATmega — Arduino

Pin 1 — RESET

Pin 2 — D0 (Rx)

Pin 3 — D1 (Tx)

Now, go to Tools > Programmer > and select AVRISP mkll

Go to File > Examples > Basic > Blink

Upload change the delays as you wish and upload the Sketch

You are now ready with your Minimal Arduino, you can now integrate whatever you want with your Microcontroller and make Custom Arudinos and reduce the size and cost of your projects.

  • Also, while uploading sketches remeber to use Arduino Pro or Pro Mini as the Board with Processor as ATmega328P (3.3V, 8Mhz) rather than Arduino UNO as we have used Pro Mini’s bootloader because we have connected a 8MHz crystal.

You can check my GitHub repo for a bit more technical insight to ATmega328 IC and you can also find there the traditional procedure of programming ATmega328P using a 16MHz crystal.

--

--

Krishna Ojha

Web Development is love, Artificial Intelligence my craze and Hardware is my passion. A complete tech enthusiast!