/*
* ATtiny85 Blink
*/
#include <avr/io.h>
#include <util/delay.h>
#define ledPin PB0
#define delay_max 1024
#define delay_min 1
#if delay_max < 1 || delay_min < 1
# warning "Value of delay_max and delay_min shoud be > 1"
#endif
#if !(delay_max > delay_min)
# warning "Value of delay_max should be > delay_min"
#endif
int main(void) {
// put your setup code here, to run once:
uint16_t delay = delay_min;
uint8_t dir = 0;
// setup
DDRB |= (1<<ledPin);
PORTB &= !(1<<ledPin);
// loop
while (1) {
PORTB &= ~(_BV(ledPin)); // led off
_delay_loop_2(delay);
PORTB |= _BV(ledPin); // led on
_delay_loop_2(delay_max - delay);
if (dir){ // fade in
if (++delay >= (delay_max - 1)) dir = 0;
} else { // fade out
if (--delay <= delay_min) dir = 1;
}
}
}