#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 16000000
volatile uint8_t brightness = 0;
void timer0_init(void)
{
DDRD |= (1 << PD6);
TCCR0A |= (1 << COM0A1) | (1 << WGM01) | (1 << WGM00); //fast pwm
//TCCR0A |= (1 << COM0A1) | (1 << WGM00); //phase correct pwm
TCCR0B |= (1 << CS00);
TIMSK0 |= (1 << TOIE0);
sei();
}
// void timer1_init(void)
// {
// DDRB |= (1 << PB1);
// TCCR1A |= (1 << COM1A1) | (1 << WGM11) | (1 << WGM10) | (1 << COM1A0);
// TCCR1B |= (1 << WGM12) | (1 << CS12);
// }
// void brightness0(uint8_t bright)
// {
// OCR0A = bright;
// }
// void brightness1(uint16_t bright)
// {
// OCR1A = 1023 - bright;
// }
int main(void)
{
timer0_init();
//timer1_init();
while(1)
{
// _delay_ms(2);
// brightness++;
// if(brightness > 255)
// {
// brightness = 0;
// _delay_ms(20);
// }
// for(uint8_t i=0;i<255;i++)
// {
// brightness0(i);
// _delay_ms(5);
// }
// for(uint8_t i=255;i>0;i--)
// {
// brightness0(i);
// _delay_ms(5);
// }
// for(uint8_t i=0;i<1023;i+=2)
// {
// brightness1(i);
// _delay_ms(6);
// }
// for(uint8_t i=1023;i>0;i-=2)
// {
// brightness1(i);
// _delay_ms(6);
// }
}
return 0;
}
ISR(TIMER0_OVF_vect)
{
while(1)
{
_delay_ms(6);
brightness++;
OCR0A = brightness;
if(brightness > 255)
{
brightness = 0;
_delay_ms(10);
}
}
}