ICP — инпут каптуре пин, ну или что-то типа «фотографии» входного сигнала.
Аппаратно захватывает сигнал за один тик процессора и фиксирует количество тиков до следующего захвата; далее по тикам получаем период за крошечный минимум накладных расходов на измерение.
------------------------------------------------------------------------------------------
-добавил усреднение
------------------------------------------------------------------------------------------
- заменил усреднение на период времени наполнения
Важно - нано желательно не использовать у них плохие кварцы стоят а вот уно промини там хорошие стоят.
Забирает таймер 1, забирает пин 8.
Так же блокирует прерывание на момент захвата, если что.
— Можно включить подтягивающий резистор, чтобы пин не болтался.
— Можно включить аппаратное шумоподавление.
— Выбрать фронт импульса регистрации замеров.
— Выбрать диапазон частот измерения.
— Выбрать усреднение. 1,0
— Выбрать период опроса. 1,1
Усреднение уменьшает ошибку квантования на один шаг: если поставить 10, то ошибка шага станет 0,1; если для больших частот поставить 10 000, то 0,0001.
Шумоподавление — крошечное, всего 4 тика проца.
Производит 4 выборки сигнала на входе.
Сигнал проходит, только если все 4 выборки одинаковы.
Отфильтровывает короткие помехи (< 250 нс при 16 МГц).
Добавляет задержку 4 такта (250 нс).
Работает на аппаратном уровне, не задействуя ЦПУ.
Но пусть и такое будет.
Захват по переднему фронту.
Захват по заднему фронту.
Для измерения частоты достаточно одного фронта
(переднего или заднего — не важно, результат будет одинаковый).
Но пусть будет.
Выбор предделителя позволяет избежать переполнения счетчика.
Чем меньше предделитель, тем выше точность измерения, то есть нужно начинать всегда с малого выбора.
| Предделитель | Дискретизация | Мин. частота | Макс. частота |
|---|---|---|---|
| 1 | 0.0625 мкс | 244 Гц | ~100 кГц |
| 8 | 0.5 мкс | 30.5 Гц | ~100 кГц |
| 64 | 4 мкс | 3.8 Гц | ~100 кГц |
| 256 | 16 мкс | 0.95 Гц | ~30 кГц |
| 1024 | 64 мкс | 0.24 Гц | ~7.8 кГц |
_______________________________________________________________________________________________________
Можно сказать, у нас есть штатный блок — скоростной счётчик, и он делает то же самое, да ещё два пина на выбор, и таймер свободен.
Только вот название у этого счётчика бутафорское, и делает это он на костылях, и по большей части программно. Кстати, встречаются моменты, где Сергей упорно игнорирует аппаратные возможности, но с усердием эмулирует их через костыли; но на костылях ходить можно, но не побегаешь.
Чтобы померить низкочастотный сигнал, нам нужен получается скоростной счётчик, а чтобы померить высокочастотный сигнал, нужен уже другой подход. И мой блок тоже не мерит высокочастотный сигнал, но он колоссально разгружает код, делая его быстрее и оставляет пины прерывания на другие действия.