#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/sleep.h>
unsigned int pwm;
SIGNAL (SIG_OVERFLOW1)
{
switch(PINA & 0b00001111){
case 0x01 :
pwm = 256;
break;
case 0x02 :
pwm = 512;
break;
case 0x04 :
pwm = 768;
break;
case 0x08 :
pwm = 1023;
break;
default :
break;
}
OCR1A = pwm;
}
void ioinit (void)
{
DDRA = 0x00;
PORTA = 0xFF;
TCCR1A = _BV (WGM10) | _BV (WGM11) | _BV (COM1A1);
TCCR1B = _BV (CS10);
OCR1A = 0;
DDRD = _BV (PD5);
TIMSK = _BV (TOIE1);
sei ();
}
int main (void)
{
ioinit ();
for (;;)
sleep_mode();
return (0);
}