Новичок
Регистрация: 09.06.2010
Сообщений: 1
Репутация: 10
|
Пишу на CodeVisionAVR програму которая подсчитывает число статистически распределенных импульсов за единицу времени.
Импульсы подаются на счетный вход таймера1 (16-bit) и регистрируются по фронту.Максимальная частота следования импульсов 5 кГц.Минимальная пауза между импульсами 200 мкс.Подсчитываю интенсивность за 1 сек и пересчитываю ее в попугаи. Временной интервал в 1 сек. формируется таймером2 работающим от внешнего часового кварца (асинхронно). В подпрограмме прерывания, которое происходит 1 раз в сек. по переполнению таймера2 производится считывание счетного регистра таймера1 и производятся вычисления. Вот кусок кода (подпрограмма обработчика прерывания): // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // Reinitialize Timer 2 value TCNT2=0x80; // Place your code here if (POWER==0) goto exit; xren1=0; xren=0; Sn=TCNT1L; Sn=Sn+(TCNT1H<<8); S=S+Sn; t++; I=(float)(S/((t-tnach)-(dead_t*S))); Igamma=(float)(I/gamma_sens); Ibeta=(float)(((I*60)/7)/beta_sens); Ialfa=(float)(((I*60)/7)/alfa_sens); deltaS=sqrt(S); deltaI=(float)(deltaS/((t-tnach)-(dead_t*S))); if (I==0) { percent=100; goto x; } percent=(float)(100*(deltaI/I)); x: In=(float)Sn; del=labs(In-I); deltaSn=sqrt(Sn+1); if (I>90) {S=0; TCNT1H=0; TCNT1L=0; tnach=t; goto y;}; if ((del<(long)deltaI)||(del<(long)3*deltaSn)) {TCNT1H=0; TCNT1L=0;} else {S=0; TCNT1H=0; TCNT1L=0; tnach=t;} y: doza=doza+Igamma; doza1=(float)(doza/3600); doza2=(float)(doza/360000); if ((hour==23)&&(minute==59)&&(second==55)) jornal (); light_timer++; link_timer++; pclink(); if ((light_mode==3)&&(light_timer>=31)) LIGHT=0; exit: RTC (); conv_coplete=1; } Проблема в том, что если мега работает на частоте 8 Мгц, то все вычисляется правльно, если предделителем тактовой частоты снижаешь ее до 2 МГц ради экономии электричества то появляется ошибка.Результат вычесления становится меньше процентов на 10. В чем может быть проблема? |
||
Оценка
|
Новичок
Регистрация: 25.11.2008
Адрес: ДОНЕЦК
Сообщений: 313
Репутация: 58
|
параметры опроса вывода и синхронизации счетчика увязаны с внутренней тактовой частотой CPU, тем более сложно в случае работы с внутренним r-c генератором...
прийдется вставку на асме самому писать... |
||
Оценка
|
Обратная связь РадиоЛоцман Вверх |