#define F_CPU 32768

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

volatile uint8_t doTick = 0;
volatile uint16_t miniTick = 4;
uint16_t seed = 31415;
uint8_t tickOrTack = 1;

//-------------------------------------
int main(void) {
//-------------------------------------
	cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF

	DDRB = (1<<PINB1)|(1<<PINB2);

	sei(); // Turn on interrupts
	
	// Set prescaler to 128 to give 1Hz interrupts
	// 32 prescaler x 256 timer bits / 32768 clock = 4 interrupts in 1 second
	cbi(TCCR1, CS10);
	sbi(TCCR1, CS11);
	sbi(TCCR1, CS12);
	cbi(TCCR1, CS13);
	
	// Enable timer 1 overflow interrupt
	sbi(TIMSK, TOIE1); 

	while(1) {
		if (doTick) {
			sbi(PORTB, tickOrTack);
			_delay_ms(75);
			cbi(PORTB, tickOrTack);
			tickOrTack = 3-tickOrTack; // 1->2; 2->1
			doTick = 0;
		}

		set_sleep_mode(SLEEP_MODE_IDLE); // Set sleep mode as idle
		sleep_mode(); // System sleeps here		
	}
	return 0;
}

ISR(TIMER1_OVF_vect) {
	if(--miniTick==0) {
		doTick = 1;
		miniTick = 4;
	}
}

