Страница 1 из 1

Условие выполнения платы (прерывание)

Добавлено: 30 сен 2020, 16:03
Ingwar
Попытка реализации "аппаратного" прерывания с большинства пинов AVR, для выполнения участка программы вне очереди.
Поддержка:

328
Interrupt Type Pins
External 2 3
Pin Change 2-13 and A0-A5

2560
Interrupt Type Pins
External 2 3 and 18-21
Pin Change 10-15 and A8-A15 and SS, SCK, MOSI, MISO

Leonardo
Interrupt Type Pins
External 0-3 and 7
Pin Change 8-11 and SCK, MOSI, MISO

1284, 644
Interrupt Type Pins
External 2 10 11
Pin Change 0-31 (aka: 0-23 and A0-A7)

Подробнее тут.
Для желающих реализовать дополнительные быстрые счетчики или регистраторы, информация по времени реакции тут
Делается просто, но в рамках старого редактора - или править ручками в IDE или неудобство по расположению в проекте, а к новому редактору еще "не подходил". Поэтому выкладывать не буду.
Что касается предложенного ПБ - позволяет выполнять часть программы, размещенной на последней плате, по одному из 4 вариантов прерывания. Такой аналог "выполнения платы по условию". Только без ожидания, когда до нее дойдет очередь. Блок располагать первым, выше всех.

Библиотека
EnableInterrupt-master.zip
Блок
начало_кода_прерывания_(CODE).ubi
Пример. Для проверки соединить пины 13 и 12.
тест_по_условию_прерывания.flp

Условие выполнения платы (прерывание)

Добавлено: 30 сен 2020, 20:37
ecoins
Подход интересен.
Несколько неясен код в секции loop()
----
}
void my_inter () {
----
Неясна место открывающейся фигурной скобки.
В 'этом коде надо дописывать обработчик прерывания?

Условие выполнения платы (прерывание)

Добавлено: 30 сен 2020, 21:45
AlexCrane
[ref]ecoins[/ref], Интересная фишка
----
} //Здесь закрываем принудительно цикл loop
void my_inter () { //Здесь открываем тело процедуры

сюда добавляется программа FLProg после блока

Ну и компилятор FlProg добавит сам окончание цикла loop и тем самым закроет процедуру my_inter

Этим и объясняется что этот блок должен находится на последней плате