Уважаемые форумчане, помогите разобраться... ATmega8 работает с кварцем 8 Мгц. На вход встроенного компаратора подаю синусоиду 4 кГц от стабильного генератора. По положительному перепаду на выходе компаратора происходит захват значения в Timer/Counter1. Возникает прерывание, вычисляется разность между последним захваченным значением и предыдущим захваченным значением. По идее, эта разность должна быть равна 2000, т.к. 8МГц/4кГц=2000.
Но на самом деле получается 1000. Почему?
Это значение (1000) я могу наблюдать в виде последовательного кода на выходе PORTC.1 с помощью осциллографа.
Фрагмент программы, прерывание по захвату Таймера1:
i
Код
nterrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
b=ICR1;
if (b>a) {
e=b-a;
};
a=b;
for(i=0; i < 16; i++)
{
if(0x0001 & (e>>(15-i)))
PORTC.1=1; //если бит-единица, то и выставляем единицу
else PORTC.1=0; //иначе - выставляем ноль
}
PORTC.1=0;
}
Сообщение отредактировал IgorKossak - Mar 5 2016, 10:40
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!