Arduino mega - 6 датчиков на прерыванияx. Потянет?

progman
Offline
Зарегистрирован: 26.01.2019

Госопда, такой вопрос - Arduino Mega с подключенными к ней 6-ю датчиками через прерывания ( INT0-INT6 ). Каждый датчик генерит импульсы максимум 500-600 герц.

Будут ли тормоза и потери импульсов при обработке такого потока поступающих одновременно данных?  Может ли arduino одновременно обрабатывать разные прерывания?

Или оптимальнее по одной Arduino Uno вешать на каждый датчик ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

progman пишет:

Будут ли тормоза и потери импульсов 

Это смотря кто и как собирается это программировать.

progman пишет:

Может ли arduino одновременно обрабатывать разные прерывания?

А что Вы понимаете под "одновременно"? Если совсем одновременно, то нет, конечно, и никто не может, у кого нет аппаратного разделения потоков по разным ядрам или что там ещё есть.

progman пишет:

Или оптимальнее по одной Arduino Uno вешать на каждый датчик ?

Этого никто, кроме Вас не знает, т.к. только Вы знаете конечныую задачу.

 

progman
Offline
Зарегистрирован: 26.01.2019

ЕвгенийП пишет:

А что Вы понимаете под "одновременно"?

импульсы от датчиков поступают на разные входы одновременно. Вызывая разные прерывания. которые в силу однопоточности не могут быть обработаны одновременно. Документация говорит что данные потеряны не будут - прерывания вызовутся по очереди.

Но как я понимаю возможны потери в тот момент когда прерывание 1 обрабатывается и в эту микросекунду приходит еще один импульс

void loop() 
{
    sei();
        impulseCounter = 0;        
        delay ( 1000 );    
        sendData();
    cli();
}

void count() 
{
  impulseCounter ++;
}
 

или пока в loop идет обработка и отправка данных в сервер.

sadman41
Offline
Зарегистрирован: 19.10.2016

Возможны потери, когда во время обработки одного канала второй еще 100 раз состояние поменял. "Второе" прерывание сто раз не будет вызвано после выхода из isr() первого. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, что такое одновременно, Вы так и не ответили, ну да ладно, судя по дальнейшёму под одновременно Вы понимаете "плюс-минус два вершка"

progman пишет:

и в эту микросекунду 

Микросекунда для прерывания - достаточно много, так что всё упирается в то, о чём я писал

ЕвгенийП пишет:

смотря кто и как собирается это программировать.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Как вариант, каждое прерывание может только взводить флаги и все. А обработка всех дачиков идет последовательно в основном потоке, минуя те датчики у которых флаги не взведены. 

И да обработчики прерывания это отдельные функции и с loop они не связаны ну никак.

ВН
Offline
Зарегистрирован: 25.02.2016

если грубо, 500 Гц это  2 мс на обработку всех 6-ти прерываний + еще какое-то время на работу основновного цикла.

т.е. чем меьше время обработки прерываний, тем лучше. 

 

Гриша
Offline
Зарегистрирован: 27.04.2014

есть такой костыль, если импульсы короткие и пропускать их никак нельзя, а посчитать нужно все - ставить счетчик на каждый канал, а потом опрашивать все по очереди и прерывания вообще не нужны. А вот если есть приоритеты и реакция должна быть незамедлительная по приоритетам - тут все от вас зависит, читайте и считайте циклы выполнения каждой команды МК.