|
TCNT1 - 16 бит.
unsigned int impulsetimer_start,impulsetimer_stop;
а что там будет неправильно?
как ни странно заработало все следующим образом:
#pragma vector=INT0_vect
__interrupt void ext_int0_isr(){
impulsetimer_start=impulsetimer_stop;
impulsetimer_stop=TCNT1;
dt+=(unsigned int)(impulsetimer_stop-impulsetimer_start);
impulsecounter+=1;
}
#pragma vector=ANA_COMP_vect
__interrupt void ana_comp_isr(){
enginefreq_=(((unsigned long)impulsecounter*16666667)/dt);
}
но опять же частоты больше 20 гц начинает мерить с ошибкой, но она уже постоянная, т.е. он постоянно вместо 250000 выдает 248333
но это я только в proteus'e проверил. может для него 15КГц много?
может мне объяснит кто-нибудь чем принципиально это отличается от того что было?
E-mail: info@telesys.ru