#include <inttypes.h> //short forms for various integer types
#include <avr/io.h>
#define XTAL 16000000L
static void delay(uint16_t us)
{
while ( us ) us--;
}
int main(void)
{
uint8_t i = 0;
DDRB = 0xff; // use all pins on PortB for output
PORTB = 0x00; // set output high -> turn all LEDs off
// set OC1A pin as output, required for output toggling
DDRD |= _BV(PD5);
// enable 8 bit PWM, select inverted PWM
TCCR1A = _BV(WGM10) | _BV(COM1A1) | _BV(COM1A0);
// timer1 running on 1/8 MCU clock with clear timer/counter1 on Compare Match
// PWM frequency will be MCU clock / 8 / 512, e.g. with 4Mhz Crystal 977 Hz.
TCCR1B = _BV(CS11) | _BV(WGM12);
for (;;)
{
/* dimm LED on */
for (i=0; i<255; i++)
{
OCR1AL = i; //Note OCR1AL NOT OCR1A
PORTB=i; //for debugging
delay(XTAL/1600); //delay 10 ms just to slow things down
}
/* dimm LED off */
for( i=255; i>0; i--)
{
OCR1AL = i; //Note OCR1AL NOT OCR1A
PORTB=i; //for debugging
delay(XTAL/1600); //delay 10 ms just to slow things down
}
}
return 0;
}