Blinking LED with ATmega32 AVR Microcontroller

Blinking LED is the first step you would like to take to get started with electronics. In this tutorial we are going to connect an LED with ATmega32, which is an AVR series microcontroller. We are going to blink the LED at half a second rate.


Components Required


ATmega32A Microcontroller

Power supply (5v)

AVR-ISP Programmer

100uF Capacitor


220Ω Resistor



Atmel studio 6.1

Progisp or flash magic


Circuit and Working Explanation

ATmega32A LED Blinking Circuit Diagram

As shown in circuit, there is no need to connect an external crystal here. Because the ATMEGA works on internal 1MHz Resistor-Capacitor oscillator on default. Only when the accuracy of clock is needed, as application of high precision counting, external crystal is attaches. When the controller is first bought, it is fused to work on internal crystal by default.  


The resistor is connected here to limit the current drawing from the LED. Remember, the controller can not provide more than 30mA at the terminals.


Programming Explanation

#include <avr/io.h> //header to enable data flow control over pins

#define F_CPU 1000000 //telling controller crystal frequency

#include <util/delay.h> //header to enable delay function in program


int main(void)


                       DDRD = 0xFF; // ( or 0b1111 1111) In AVRSTUDIO for  telling the controlling to use a certain bit of a port as input we use “ZERO”, for telling it to use a certain bit as output we use “ONE”. Since we put eight “ONE’s”, all the pins of PORTD are enabled as output. If we put a zero as “0b1111 0111”, now all the pins 0,1,2,4,5,6,7 are enabled as inputs and PIN 3 is Enabled as input.

    while(1)     // loop goes on forever and the LED will be blinking forever


        PORTD = 0xFF; // all pins of PORTD are said to provide 5v output or told to pull high (LED ON)

                                _delay_ms(220); //delay for 200ms

                                _delay_ms(220); ); //delay for 200ms

                                PORTD = 0x00; // all pins of PORTD are said to provide ground at output or pull down

                                _delay_ms(220); ); //delay for 200ms

                                _delay_ms(220); ); //delay for 200ms




 * C Program to Blink an LED with ATmega32 Microcontroller
 *  Author: DILIP RAJA

#include <avr/io.h>
#define F_CPU 1000000
#include <util/delay.h>

int main(void)
    DDRD = 0xFF;
        PORTD = 0xFF;
        PORTD = 0x00;


Leave a comment