Monday 2 April 2012

LED Dimmer using Atmega16


Before you dim a led, go through this PWM tutorial and the page 83 of Atmega16 datasheet









Code:




#include <avr/io.h>
#include <util/delay.h>

void init_pwm()
{
  TCCR0|=(1<<WGM00)|(1<<WGM01) //fast pwm
  |(1<<COM01)                  //Clear OC0 on compare match, set OC0 at BOTTOM
  |(1<<CS00);       //fcu/(No prescaling)

   //Set OC0 PIN as output. It is  PB3 on ATmega16
   DDRB|=(1<<PB3);
}

int main()
{
   uint8_t i=0;     // variable i is to control the brightness of led
   init_pwm();      //Initialize PWM Channel 0
   while(1)
   {
      // increasing brightness
      for(i=0;i<255;i++)
      {
         //Now Set The Brighness using PWM
        OCR0=i;
        //Now Wait For Some Time
         _delay_ms(10);
      }
      // decreasing brightness
      for(i=255;i>0;i--)
      {
         //Now Set The Brighness using PWM
         OCR0=i;
         //Now Wait For Some Time
         _delay_ms(10);
      }
   }

return (0);
}






If you connect a LED to PB3 you will notice the brightness of the led is increasing and decreasing gradually. there's my video:



1 comment: