Как организовать быструю обработку результата счета скоростного счетчика
Да, только скоростной счетчик работает на прерывании и там нет "классического" чтения с пина...
По идее должен считать.
Во имя счета, этого можно было и не делать. Скоростной счетчик работает по прерываниям. Все остальное ему особо не мешает. А вот сам счетчик, на больших частотах, может мешать основному циклу.
Я не особо вник в алгоритм, однако судя по описанию, что то здесь не так.
Да, насчитывает больше. Идет пересчет.
Вроде где-то на форуме встречал что до 130кГц скоростной счетчик работает нормально. Вот только как получить вовремя с него данные.
С устройства в произвольный момент времени начинает поступать сигнал в виде прямоугольных импульсов (с хорошими фронтами) амплитудой 5В с частотой до 300кГц. Задача: подсчитать поступившие импульсы и в заданный момент (когда предварительно заданное число будет равно поступившему числу импульсов) подать сигнал на выходной пин. В моем случае просто зажечь светодиод.Dryundel писал(а): ↑01.02.2022{, 00:19}Хотелось бы уточнить:
Вы считаете количество импульсов которое отослало некое устройство?
Есть ли уверенность, что данное устройство отослало именно нужное(точное) количество импульсов в пачке?
Или Вы считаете импульсы которые пришли до включения светодиода? "При условии >= заданному числу загорается светодиод..."
Вот я и боюсь что с этим ничего не поделаешь.
В этом и проблема - ведь любая обработка данных занимает время.
Это все медленно, только через аппаратный SPI.Bupper писал(а): ↑01.02.2022{, 11:19}Может такой вариант применить: например, одна ардуино работает только к режиме скоростного счетчика и передает значения счета параллельно на выходные пины. Т.е. например 10-12 бит параллельно передаются на вторую ардуино, которая просто опрашивает пины на совпадение бит.
По UART наверно медленнее будет?
Если число с которым сравнивают показания счетчика постоянно, можно ручками дописать в функцию обработчика прерывания сравнение. В IDE перед загрузкой. Но упадет верхний предел частоты.Bupper писал(а): ↑01.02.2022{, 11:19}Я пока не могу понять на сколько стабильный пересчет. Если он достаточно постоянный, можно заблаговременно отключать счет скоростного счетчика и попадать "примерно" в нужное значение. Допустим пересчет до 10 имп.
Может такой вариант применить: например, одна ардуино работает только к режиме скоростного счетчика и передает значения счета параллельно на выходные пины. Т.е. например 10-12 бит параллельно передаются на вторую ардуино, которая просто опрашивает пины на совпадение бит.
По UART наверно медленнее будет?
Ну вот с этого и надо было начинать. Как я и предполагал.
Это зависит от задачи выполняемой по прерыванию. С простым счётчиком ардуина 16мГц, с 500 кГц должна справляться.
Ну почему же, можно, но не штатными средствами. Вечерком постараюсь накидать блок под вашу задачу.
Да, согласен. Там тактовая частота 250Мгц.
Надо про это почитать, я не спец конечно
Эх, если бы я все это умел. Я в СИ никакой. Поэтому и занялся FLPROG. Число с которым сравниваю всегда разное, задается каждый раз вручную перед началом счета.
Спасибо! Очень надеюсь, что справиться.
Да. Можно использовать переменную. Ну и счетчик обнулить не забыть...
По коду, пока _gtv18 == 0, счетчик считает, а пока равно единице, не считает, но в прерывание заходит. Т.е. когда досчитал до ХХХ, _gtv18 делаем равной единице, а когда опять надо считать, где-то в программе меняем на ноль.
if (!(_gtv18)) - не равно единице: _gtv18 != 1. Равно единице (сравнение) _gtv18 == 1, присвоение _gtv18 = 1.
Берём аппаратный счетчик, при подготовке заносим нужное число в необходимое место, считаем по внешнему входу напрямую в счётчик.
Скрывает наверное. На Нобеля поди замахнулся.