протестировал в протеусе, всё считывается адекватно. Собрал в железе, для теста дома подключил к устройству для шим регулирования яркости лампочки (диммеру). Подключаю это всё дело к блоку питания компа - всё считывается верно. Длина импульса равна той, что я вижу на осцилограмме. То есть длина верна на 100%. Иду в машину, подключаюсь к форсунке, и всё - какая то абракадабра начинается. Счётчик то переполняется, то сбрасывается. Я ввёл ограничение по длине импульса в 25мс. Всё равно на машине это очень много. Ну так вот на экране я вижу постоянное утыкание в это ограничение. Подключаюсь осцилографом к точке которая уже идёт на ножку МК, - так импульс есть и он чёткий и хороший. После этого вообще уже даже мыслей нет что такое может быть. В протеусе работает, на столе от лампы от шим регулятора (изменяя длину импульса от 10 до 25 мс) всё чётко работает, на машине длину импульса которая должна на холостом показывать 2-3 мс, не показывает в упор...
Таймер работает с частотой 1МГц. То есть минимальная длина измеряемого импульса может быть явно меньше 1 мс.
код измерения длины импульса
Код: Выделить всё
// измерение длительности импульса
if(PINB.0) //если на входе захвата 1 (передний фронт импульса)
{
rising = (unsigned int)ICR1L+((unsigned int)ICR1H << 8); //запоминаем значениие счётчика
TCCR1B &= ~(1<<ICES1); //устанавливаем прерывание по спадающему фронту импульса
OVF_counter = 0; //обнул¤ем количество переполнений счЄтчика
}
else //если на входе захвата 0 (задний фронт импульса)
{
falling = (unsigned int)ICR1L+((unsigned int)ICR1H << 8); //запоминаем значение счЄтчика
TCCR1B |= (1<<ICES1); //устанавливаем прерывание по нарастающему фронту импульса
t = (unsigned long)falling - (unsigned long)rising + ((unsigned long)OVF_counter << 16);//вычисл¤ем длительность импульса
}
if(t>25000)
{
t=25000;
}
Код: Выделить всё
/ Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
OVF_counter++; // Увеличиваем счетчик переполнений
}Посоветуйте куда копать.. а то уже совсем руки опускаются..



