да.
в прерывании вы только определяете интервалы...
можете этот таймер что будет капчить запустить считать не до переполнения а до 5 мСек. Тем самым получить еще одно прерывание в котором будете организовывать обработку 5 мСек интервалов, причем там можно просто флаг выставлять, а обрабатывать в главной петле.
Только в таком режиме трудно на границе таймера отсчитывать интервалы, при переполнении 32 битного таймера, разница двух показаний как беззнаковых всегда будет давать интервал между ними. Причем это верно даже если будет переполнение и перекрут таймера. Если же таймер считает до 5 мСек, то тут придется переполнение обрабатывать чуть сложнее...
Цитата
По фронту импульса уходим в прерывание, запоминаем значение
так можно реализовать и без капчи ноги. Капча сама запишет значение таймера именно в момент когда будет импульс, и не будет влиять время входа в прерывание. В прерывании вы просто извлекаете это значение, считаете разницу с прошлым, и запоминаете как прошлое.
я бы сделал массив из 20 элементов чтобы наверняка,
каждое прерывание полученный интервал клал бы в очередную ячейку.
а когда получал бы 5 мСек прерывание ставил бы флаг, на обработку этого массива и его сброс
А может быть я положил бы простенький фильтр который усреднял бы интервалы на каждое получение, и вообще отказался бы от 5 мСек интервалов. Обычная экспонента
y = Xold - (Xold - Xnew)/2, дает неплохую фильтрацию и реализуется сдвигом. Вместо 2 могут быть и другие константы, которые можно рассчитать и заменить на умножение. Можно работать в целых числах и сдвигах. Вариантов много...
Цитата
всего на одну ножку таймера в режиме input capture
с 2 таймерами и 2 ножками можно еще повысить или обеспечить такую же точность не нагружая контроллер доп усреднением, как было предложено по ссылке в начале темы, но это вам уже наверное не нужно, да и к тому же там просто перенос сложной обработки на конец интервала и есть сложности с режимом когда импульсов вообще не будет...