Цитата(MosVit @ Nov 12 2008, 23:05)

...
Может кто подскажет как можно уменьшить ошибку до 1 МЦ?
Мне приходит в голову использование устройства захвата таймера, но для этого нужно выполнить как минимум 1 "аппаратное условие" - завести сигнал на пин icp (вроде 1).
Далее мне видится такое решение (опишу псевдоалгоритмом ибо в С не силен)
Код
запретить прерывания при переполнении таймера;
настроить тактирование таймера (без предделителя);
настроить устройство захвата по фронту импульса;
flag=0
izmerenie_provedeno=0
ovfl=0
main ()
{
if (izmerenie_provedeno)
{
T_imp=t_end + ovfl*0x10000 - t_start;
izmerenie_provedeno=0;
ovfl=0;
}
Прерывание от устройства захвата
{
if (flag)
{
t_end=icr1w; // вожможно не так называется в общем я имею ввиду пару ICR1H:ICR1L
flag=0;
izmerenie_provedeno=1;
настроить устройство захвата по фронту импульса;
запретить прерывания по переполнению таймера;
}
else
{
t_start=icr1w;
flag=1;
настроить устройство захвата по спаду импульса;
разрешить прерывания по переполнению таймера;
}
}
прерывание по переполнению таймера
{
ovfl++;
}
конечно это не отлаженый код, поэтому дополню описанием на словах:
0)нужно сначала настроить устройство захвата по фронту имульса (естественно если мы измеряем имульс начиная от перехода из 0 в 1 и заканчивая переходом из 1 в 0) и запустить таймер, не разрешая при этом прерывания по переполнению;
1)по прерыванию от устройства захвата в регистре icr1 появится текущее значение таймера ("тайм стамп") соответствующее началу (фронту) импульса, в это время мы перенастраиваем устройство сравнения на спад импульса, разрешаем прерывания по переполнению таймера и запоминаем icr1 в t_start (ветка else);
2)по след прерыванию от устройства сравнения в регистре icr1 появится новое значение соответствующее концу (спаду) импульса, в это время мы перенастраиваем устройство на фронт импульса, запрещаем прерывания по переполнению таймера и запоминаем icr1 в t_end (ветка if(fag));
3) по окончанию измерения вычисляем длительность импульса в тиках таймера1 (при делителе 1 как раз будет равна МЦ).
З. Ы. Прошу прощения за кривость оформления и изложения, также надо подумать о граничном условии (если захват и переполнение произойдут одновременно, то что будет?)
З. З. Ы. По моему на этом форуме пользователем
=GM= (прошу извинить если неправильно привел ник) предлагалось использование устройства захвата при измерении частоты. Нужно поискать по форуму - тема заметная была, т. е. я никаких претензий на оригинальность не имею.