Сгенерировать программируемый импульс внутри ISR
У меня есть приложение, требующее генерации выходного импульса, ширина которого рассчитывается в основном цикле. Импульс должен быть вызван прерыванием, и я понимаю, что «задержка» не будет работать внутри обработчика прерываний. Я не могу использовать метод опроса, поскольку в основном цикле требуется последовательная запись.
Мы будем признательны за любые идеи и предложения. Спасибо
@WallyWest, 👍0
Обсуждение2 ответа
Вы можете использовать delayMicroseconds() внутри ISR, если это действительно необходимо. Обычно задержка внутри ISR не является лучшим решением, и, возможно, существует более простой способ добиться желаемого результата, но без понимания того, что представляет собой сигнал и для чего он используется, этот вариант — лучший.
Если ваши требования ко времени не очень строгие, вы можете установить флаг (переменную типа 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})
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- avrdude ser_open() can't set com-state
- Как подключиться к Arduino с помощью WiFi?
- Mac OSX Yosemite не отображает последовательные порты для Uno R3
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
Это одиночный импульс или сигнал типа ШИМ (повторяющийся)?, @Chad G
Оптимальный вариант будет зависеть от ваших требований. Каков возможный диапазон длительности импульсов? Насколько точной должна быть эта длительность? Есть ли в программе какие-либо другие процессы, зависящие от времени?, @Edgar Bonet