You Want Electronic Components for your project. 

For more information, contact us at: 

new1

ATmega328P Architecture and Pinout

The ATmega328P is an 8-bit AVR microcontroller manufactured by Microchip.

It contains:

• 8-bit AVR CPU
• Flash program memory
• SRAM
• EEPROM
• GPIO ports
• ADC
• Timers/counters
• PWM outputs
• USART
• SPI
• I²C-compatible TWI
• Interrupt system

Main memory

Memory Function
Flash Stores program
SRAM Stores temporary variables
EEPROM Stores data that must remain after power is removed

ATmega328P DIP-28 pinout

IMAGE

Building the Standalone ATmega328P

You can build the circuit on a breadboard without an Arduino board.

USBasp and ISP Programming

USBasp is an ISP programmer.

ISP = In-System Programming.

It allows you to program the ATmega328P directly.

USBasp → ATmega328P

USBasp ATmega328P
MOSI PB3 / Pin 17
MISO PB4 / Pin 18
SCK PB5 / Pin 19td>
RESET PC6 / Pin 1
VCC Pin 7
GND Pin 8/22

The programming path is:

Computer → USB → USBasp → ISP → ATmega328P

Installing AVR-GCC and AVRDude

You need two important tools.

AVR-GCC

Used to compile C source code.

main.c → avr-gcc → main.elf

AVR-Objcopy

Converts the ELF file into HEX.

main.elf → avr-objcopy → main.hex

AVRDude

Transfers the HEX file to the ATmega.

main.hex → avrdude → USBasp → ATmega328P

ATmega C Program

#include
#include

#define F_CPU 16000000UL

int main(void)
{
DDRB |= (1 << PB5);

while (1)
{
PORTB |= (1 << PB5);

_delay_ms(1000);

PORTB &= ~(1 << PB5);

_delay_ms(1000);
}

return 0;
}

This makes PB5 HIGH and LOW repeatedly.

LED Control

Program:

#include
#include

#define F_CPU 16000000UL

int main(void)
{
DDRB |= (1 << PB5);

while (1)
{
PORTB |= (1 << PB5);
_delay_ms(500);

PORTB &= ~(1 << PB5);
_delay_ms(500);
}
}

Push Button Input

Connect a button to PD2.

A convenient method is using the internal pull-up resistor.

#include
#include

#define F_CPU 16000000UL

int main(void)
{
DDRB |= (1 << PB5);

DDRD &= ~(1 << PD2);

PORTD |= (1 << PD2);

while (1)
{
if (!(PIND & (1 << PD2)))
{
PORTB |= (1 << PB5);
}
else
{
PORTB &= ~(1 << PB5);
}
}
}

7-Segment Display

program :

#define F_CPU 16000000UL

#include
#include

const unsigned char digit[10] =
{
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};

void display_digit(unsigned char number)
{
if (number <= 9)
{
PORTD = digit[number];
}
}

int main(void)
{
// PD0-PD6 as outputs
DDRD = 0x7F;

while (1)
{
display_digit(0);
_delay_ms(1000);

display_digit(1);
_delay_ms(1000);

display_digit(2);
_delay_ms(1000);

display_digit(3);
_delay_ms(1000);

display_digit(4);
_delay_ms(1000);

display_digit(5);
_delay_ms(1000);

display_digit(6);
_delay_ms(1000);

display_digit(7);
_delay_ms(1000);

display_digit(8);
_delay_ms(1000);

display_digit(9);
_delay_ms(1000);
}
}

USING ARDUINO UNO

// Arduino Uno + Common Cathode 7-Segment Display

// Segment pins
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;

void setup()
{
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}

void displayDigit(int number)
{
// Turn all segments OFF first
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);

if (number == 0)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
}

else if (number == 1)
{
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
}

else if (number == 2)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(g, HIGH);
digitalWrite(e, HIGH);
digitalWrite(d, HIGH);
}

else if (number == 3)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(g, HIGH);
}

else if (number == 4)
{
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
}

else if (number == 5)
{
digitalWrite(a, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
}

else if (number == 6)
{
digitalWrite(a, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(e, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
}

else if (number == 7)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
}

else if (number == 8)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}

else if (number == 9)
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}

void loop()
{
// Count from 0 to 9
for (int number = 0; number <= 9; number++)
{
displayDigit(number);
delay(1000);
}
}

MIGABO Emmanuel is an experienced Technical and Vocational Education and Training (TVET) instructor and engineering trainer with extensive experience in Electronics, Telecommunication, Computer Systems, Embedded Systems, and Information Technology. Since 2017, he has been delivering competency-based technical education and practical skills training in different educational institutions, preparing learners for careers in engineering and modern technology.

Throughout his teaching career, he has worked in various departments, including Computer Systems, Electronics and Telecommunication, Electrical Technology, and related engineering fields. He has taught learners from different academic levels using practical, project-based, and competency-based training approaches that combine theory with hands-on laboratory experience.

His teaching expertise covers a wide range of technical subjects, including:

C Programming
C++ Programming
Python Programming
Arduino IDE Programming
Embedded Systems Development
Microcontroller Programming
Electronics Fundamentals
Digital and Analog Electronics
Electrical Installation and Basic Electricity
Motherboard Design and Production
Electronic Equipment Repair and Maintenance
Enclosure Design and Production
PCB Design and Manufacturing
CCTV Camera System Installation and Configuration
Fire Detection and Alarm System Installation
Computer Hardware and Maintenance
Computer Networking Fundamentals
Sensors and Actuators
Internet of Things (IoT) Fundamentals
Technical Drawing and Engineering Documentation

In addition to classroom instruction, he has supervised numerous practical projects involving embedded systems, electronics prototyping, automation, hardware troubleshooting, and electronic product development. His training philosophy emphasizes innovation, critical thinking, problem-solving, teamwork, and industry-relevant practical skills.

He is proficient in various engineering and programming tools, including Arduino IDE, Proteus, KiCad, EasyEDA, SolidWorks, Fusion 360, and several C/C++ development environments. His interests include embedded system optimization, digital manufacturing, CAD/CAM technologies, Internet of Things (IoT), robotics, and industrial automation.

Committed to lifelong learning and professional excellence, MIGABO Emmanuel continues to develop modern training materials, competency-based curricula, and practical laboratory exercises that equip learners with the knowledge and technical skills required by today's rapidly evolving technology industry.