//#include <avr/io.h>
//#include <avr/interrupt.h>
#include <util/atomic.h>
#include <util/delay.h>
	
void syncImp(void);

volatile char iTd = -50;

volatile unsigned int cSpeed = 0;
volatile unsigned char toothNum =  0;
volatile unsigned char toothSpark = 0;
volatile unsigned int lastImp = 0;


ISR(TIMER1_CAPT_vect)
{
	//PORTB = 0XFF;
	/*PORTB |= _BV(PORTB1);
	_delay_us(10);
	PORTB &= ~_BV(PORTB1); */
	//syncImp();
	
	unsigned int capture = ICR1;
	TCNT1 = 0x0000;	
	
	if (bit_is_clear(TIFR, TOV1))			// Если таймер не был переполнен, то продолжаем
	{
		if (TCCR1B == 0x00)
		{
			TCCR1B |= _BV(CS11);			// Включение таймера, если он был выключен
		}
		else
		{
			if (lastImp == 0)
			{
				lastImp = capture;			// если это первый импульс, то лишь сохраняем его длительность
			}
			else
			{
				/*
				if (capture > 1.5 * lastImp) 
				{ 
					toothNum = 0;			// синхроимпульс определяется по его периоду
					syncImp();
				}
				else
				{
					//syncImp();
					toothNum++;	
				} */
				toothNum++;
				if (capture > 1.5 * lastImp)
				{
					toothNum = 0;
					syncImp();
				}
			}
		}
	}
	else
	{
		TCCR1B = 0x00;						// Если таймер был переполнен,
		TIFR |= _BV(TOV1);				// то чистим флаг и показания таймера
	} 
	
}

void syncImp(void)
{
	PORTB |= _BV(PORTB1);
	_delay_us(1);
	PORTB &= ~_BV(PORTB1);
}

void init(void)
{
	cli();

	DDRB = 0b11111110;
	DDRC = 0xFF;
	DDRD = 0b11111110;

	PORTB = 0x00;
	PORTC = 0x00;
	PORTD = 0x00;
	
	//TCCR1B |= _BV(ICES1) | _BV(CS11);
	//TCCR1B |= _BV(CS11);
	TIMSK |= _BV(TICIE1);

	sei();
}

int main(void)
{

	init();

	for(;;)
	{
		
	}
	return 0;
}