Доброго времени суток!
Вопрос мучает уже третий день, не могу понять что не так.
У меня есть atmega16, сервомашинка HX12K, использую восьмибитный таймер(0), внешний кварц на 12Мгц.
В CVAVR выбрал свой контроллер, выставил частоту вн. кварца, выбрал таймер 0, делитель - 1(12 000 кГц), по переполнению.
Итого выходит 1/12*256 = 21.33333333333333 мкс (частота 1 прерывания таймера)
Чтобы управлять серво нужно ждать 20 мс и затем от 0.8 до 2.3 можно давать импульс
0.0213333333333333 мс = 21.33333333333333 мкс
20 мс / 0.0213333333333333 мс = 937.5000000000015 (это число прерываний таймера отсчитывающее 20 мс)
К примеру я хочу подождать 1.55 мс и поставить серво по центру.
1.55 мс / = 0.0213333333333333 мс = 72.65625000000011
Итак получается программа:
...
volatile unsigned int cnt=0;
volatile unsigned char state=0;
ISR(TIMER0_OVF_vect)
{
	if ((state == 0) && (cnt > 937))//ждем 20мс
	{
		cnt=0;
		state=1;
		PORTB=0xFF;
	}
	if ((state == 1) && (cnt > 72))//импульс 1.55 мс
	{	
		cnt=0;
		state=0;
                PORTB=0;
	}
	cnt++;
}
...
	PORTB=0;//изначально 0
	DDRB=0xFF;//на выход
	TCCR0=0x01;
	TCNT0=0x00;
	OCR0=0x00;
	TIMSK=0x01;
	sei();
	while(!0)
	{
	}
...
В итоге, если серво машинка отключена до запуска МК, то после ее подключение к работающему МК она дергается в одну из сторон и замолкает. Если же МК запускается уже с подключенной серво то никакой реакции у сервы нет.
Подскажите, что я не так считаю?
			
		



 посмотрите какие импульсы у вас в PROTEUS или в реале если осциллограф есть или примерно через звуковой вход ПК.
   посмотрите какие импульсы у вас в PROTEUS или в реале если осциллограф есть или примерно через звуковой вход ПК.
