Arduino mega - 6 датчиков на прерыванияx. Потянет?
- Войдите на сайт для отправки комментариев
Вс, 03/02/2019 - 12:57
Госопда, такой вопрос - Arduino Mega с подключенными к ней 6-ю датчиками через прерывания ( INT0-INT6 ). Каждый датчик генерит импульсы максимум 500-600 герц.
Будут ли тормоза и потери импульсов при обработке такого потока поступающих одновременно данных? Может ли arduino одновременно обрабатывать разные прерывания?
Или оптимальнее по одной Arduino Uno вешать на каждый датчик ?
Будут ли тормоза и потери импульсов
Это смотря кто и как собирается это программировать.
Может ли arduino одновременно обрабатывать разные прерывания?
А что Вы понимаете под "одновременно"? Если совсем одновременно, то нет, конечно, и никто не может, у кого нет аппаратного разделения потоков по разным ядрам или что там ещё есть.
Или оптимальнее по одной Arduino Uno вешать на каждый датчик ?
Этого никто, кроме Вас не знает, т.к. только Вы знаете конечныую задачу.
А что Вы понимаете под "одновременно"?
импульсы от датчиков поступают на разные входы одновременно. Вызывая разные прерывания. которые в силу однопоточности не могут быть обработаны одновременно. Документация говорит что данные потеряны не будут - прерывания вызовутся по очереди.
Но как я понимаю возможны потери в тот момент когда прерывание 1 обрабатывается и в эту микросекунду приходит еще один импульс
или пока в loop идет обработка и отправка данных в сервер.
Возможны потери, когда во время обработки одного канала второй еще 100 раз состояние поменял. "Второе" прерывание сто раз не будет вызвано после выхода из isr() первого.
Ну, что такое одновременно, Вы так и не ответили, ну да ладно, судя по дальнейшёму под одновременно Вы понимаете "плюс-минус два вершка"
и в эту микросекунду
Микросекунда для прерывания - достаточно много, так что всё упирается в то, о чём я писал
смотря кто и как собирается это программировать.
Как вариант, каждое прерывание может только взводить флаги и все. А обработка всех дачиков идет последовательно в основном потоке, минуя те датчики у которых флаги не взведены.
И да обработчики прерывания это отдельные функции и с loop они не связаны ну никак.
если грубо, 500 Гц это 2 мс на обработку всех 6-ти прерываний + еще какое-то время на работу основновного цикла.
т.е. чем меьше время обработки прерываний, тем лучше.
есть такой костыль, если импульсы короткие и пропускать их никак нельзя, а посчитать нужно все - ставить счетчик на каждый канал, а потом опрашивать все по очереди и прерывания вообще не нужны. А вот если есть приоритеты и реакция должна быть незамедлительная по приоритетам - тут все от вас зависит, читайте и считайте циклы выполнения каждой команды МК.