|
Нужно определить появление сигнала с частотой 16кГц, использую встроеный компаратор AVR, чатота прерываний таймера 20кГц делать больше не желательно.
char Counter_Sin;
char Counter_Cos;
char Cycle;
int __SIN;
#pragma vector = TIMER0_COMP_vect
__interrupt void timer0_comp(void)
{
int tmp = 0;
if(ACSR_Bit5)//если ACO установлен
{
tmp = 0x1000;
}
if((__SIN ^ tmp)>0)
{
Counter_Sin++;
}
else
{
Counter_Sin--;
}
if(((__SIN + 16384)^ tmp)>0) .......... Counter_Sin = 0;
E-mail:
info@telesys.ru
{
Counter_Cos++;
}
else
{
Counter_Cos--;
}
__SIN+=52429; //(16*65536/20 = 52429)
if(--Cycle == 0)TIMSK &=~(1<
Затем в основной программе
Counter_Сos = 0;
Cycle = 32;
TIMSK |=(1<
{
.......
if((TIMSK & (1<
if((abs(Counter_Сos)>8)||(abs(Counter_Sin)>8))
{
..типа принят сигнал
}
Counter_Sin = 0;
Counter_Сos = 0;
Cycle = 32;
TIMSK |=(1<
.......
}
все вроде правильно, но нифига не работает
Ответы