/*
 * 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;
    }
  }
}