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
Hardware:
ATmega32A Microcontroller
Power supply (5v)
AVR-ISP Programmer
100uF Capacitor
LED
220Ω Resistor
Software
Atmel studio 6.1
Progisp or flash magic
Circuit and Working Explanation
As shown in the above circuit diagram for interfacing LED with AVR microcontroller, 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
The program for ATmega32 microcontroller to blink an LED is shown below. The comments in the code explains the purpose of the individual line of the code.
#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;
while(1)
{
PORTD = 0xFF;
_delay_ms(220);
_delay_ms(220);
PORTD = 0x00;
_delay_ms(220);
_delay_ms(220);
}
}