Сгенерировать программируемый импульс внутри ISR

У меня есть приложение, требующее генерации выходного импульса, ширина которого рассчитывается в основном цикле. Импульс должен быть вызван прерыванием, и я понимаю, что «задержка» не будет работать внутри обработчика прерываний. Я не могу использовать метод опроса, поскольку в основном цикле требуется последовательная запись.

Мы будем признательны за любые идеи и предложения. Спасибо

, 👍0

Обсуждение

Это одиночный импульс или сигнал типа ШИМ (повторяющийся)?, @Chad G

Оптимальный вариант будет зависеть от ваших требований. Каков возможный диапазон длительности импульсов? Насколько точной должна быть эта длительность? Есть ли в программе какие-либо другие процессы, зависящие от времени?, @Edgar Bonet


2 ответа


1

Вы можете использовать delayMicroseconds() внутри ISR, если это действительно необходимо. Обычно задержка внутри ISR не является лучшим решением, и, возможно, существует более простой способ добиться желаемого результата, но без понимания того, что представляет собой сигнал и для чего он используется, этот вариант — лучший.

,

0

Если ваши требования ко времени не очень строгие, вы можете установить флаг (переменную типа bool) внутри функции ISR, а затем в разделе цикла спросить, установлен ли этот флаг.

Что-то вроде этого:

...import
...define...
...setup...

void isr_attention(){ 
  if(condition_for_rise_the_flag){
  flag_var = true);} 
    else {flag_var = false}  
}

loop
(if(flag_var==true{dosomethig})
,