Skip to content

9. Embedded programming

This week I worked on programing the Micro Controller that I have build in Electronics Design Week


Individual assignment: - Read a microcontroller data sheet - Program your board to do something, with as many different programming languages and programming environments as possible.

Group assignment: - Compare the performance and development workflows for other architecture. in the Group Page you can find more details.


In order to complete this assignment you need the following:

  • Custom made board with micro controller
  • Arduino IDE software
  • Jumper wires
  • USB cable
  • FTDI Cable
  • Arduino UNO


In order to use any electronics component you need to read and understand the datasheet.

ATmega328P Datasheet

From the datasheet here are some of main features of ATmega328P

  • 32K bytes of in-system self-programmable flash program memory
  • 1Kbytes EEPROM
  • Six PWM channels
  • 8-channel 10-bit ADC
  • Programmable serial USART
  • Master/slave SPI serial interface
  • Byte-oriented 2-wire serial interface (Phillips I2C compatible)
  • Interrupt and wake-up on pin change
  • Six sleep modes: Idle, ADC noise reduction, power-save, power-down, standby, and extended standby
  • 23 programmable I/O lines
  • Operating voltage: 2.7V to 5.5V
  • Temperature range: –40°C to +125°C

  • It’s very important to know each pin and the functions of it.

Arduino IDE

  • Download and install Arduino IDE from Arduino IDE

  • Start Arduino IDE


In order to program ATMEGA328P we need to burn the Bootloader to the ATMEGA328P. I follow this documentation Arduino as ISP and Arduino Bootloaders in order to burn the bootloader in ATMEGA328P.

  • In Arduino IDE Select “ArduinoISP” from File >> Examples >> ArduinoISP

  • Select “Arduino UNO” from Tools >> Board

  • Select Arduino COM# Port from Tools >> Port
    To check the Port Number Connect the USB cable to Arduino UNO and Go to Device Manager of the PC

  • Select “Arduino as ISP” from Tools >> Programmer
  • Upload ArduinoISP Sketch to Arduino UNO
  • Wire Arduino UNO board with ISP header of the New board
Arduino UNO Pin # New Board ISP Port
12 1-MISO
5V 2-VCC
13 3-SCK
11 4-MOSI
10 5-RST

- Go to Tools >> Burn Bootloader and wait until “Done burning bootloader”

  • Now you ready to program the new ATMEGA328P board


There are two ways to program ATMEGA328P. Either by ISP programmer or by FTDI cable.

ISP Programmer

For ISP programing I follow this Arduino as ISP Tutorial
- Create new programing sketch in in Arduino IDE and wire the following code.

   int pinLED = 3;
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin  as an output.
  pinMode(pinLED, OUTPUT);

// the loop function runs over and over again forever
void loop() {
  digitalWrite(pinLED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(pinLED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

- Go to Sketch and clink on Upload Using Programmer - Wait for Done Uploading message and check the board

FTDI Cable

  • I have tried uploading the sketch with FTDI Cable but I got the following Error

  • After long research about this error I found that “Uploading sketch via the programmer will wipe the bootloader”.

  • I have burned the Bootloader again and I have successfully able to upload the sketch with FTDI cable

C programming

One of the most common Embedded programming language is C and it’s very powerful programming language.

First of all I started with watching this tutorial Learning AVR-C Episode 2: Setup and BlinkLED which is very useful for beginner in embedded C programming.

After reading this diagram will use PORT PIN instead of ARDUINO PIN

  • C programming can be done by using Arduino IDE

  • Here is the C code for LED Blink

  • Upload the code with FTDI cable and check the board after you got Done uploading message

This is my first code in C and I’m so happy to see it working.

Final Result

Here is the video for the final result

It was very exciting moment when I sea the LED start blinking.

Source code

Last update: October 14, 2021