Vishwas Vaidya
Прерывания по фронту в микропроцессорных устройствах удобны для обработки асинхронных событий, таких как срабатывание переключателей, изменение уровней сигналов и возникновение импульсов. Однако, в простых микроконтроллерах, как правило, ресурсов для обработки подобных прерываний немного.
С помощью неиспользуемого канала UART микроконтроллера (если таковой найдется) можно сделать детектор фронтов. Это позволит избежать перехода к более дорогому контроллеру в ситуации, когда все прочие средства генерации прерываний по фронту исчерпаны, а приложению потребовался еще один вход внешнего прерывания.
В предлагаемой схеме вывод Rx асинхронного приемника выполняет функцию входа прерывания по фронту. Когда на вывод Rx приходит отрицательный перепад напряжения, UART интерпретирует его как появление стартового бита.
Тактируемый импульсами внутренней синхронизации UART, продолжая выборку входного сигнала, считывает значение 0x00 при установленном бите «break error». Ошибка обусловлена тем, что к моменту ожидаемого появления стоп-бита на входе продолжает сохраняться низкий логический уровень.
Процедура обработки прерывания детектирует состояние «нулевой байт с ошибкой разрыва» и сигнализирует программе об обнаружении перепада во входном сигнале. Для минимизации времени реакции на появление фронта скорость обмена UART должна быть установлена достаточно высокой, но, в то же время, достаточно низкой для того, чтобы отфильтровывать дребезг и шумовые ошибки.
![]() |
||
Рисунок 1. | Отрицательный перепад напряжения UART воспринимает как начало стартового импульса. Если положительный перепад будет принят раньше стопового бита (красная линия), это будет интерпретировано как помеха, а байт проигнорирован. |
При правильном выборе скорости обмена, в случае, когда ложные выбросы вызывают прерывание контроллера, вход возвращается в высокое логическое состояние раньше, чем завершается выборка байта (Рисунок 1). Процедура обработки прерываний детектирует теперь «нулевой байт» без каких-либо ошибок. Прикладная программа (Рисунок 2) распознает эту ситуацию как помеху и игнорирует ее.
|
||
Рисунок 2. | Блок схема алгоритма показывает, как работает основанный на UART детектор фронта. Если в позициях b0…b7 будут приняты нули, и бит «break error» установлен, алгоритм распознает фронт импульса. |
Если необходимо детектировать положительный перепад напряжения, просто добавьте транзисторный инвертор перед входом микроконтроллера.