В предыдущем посте я рассказал о реализации поддержки оборудования nooLite в программе FLProg. Моим упущение было не рассказать об одной очень удобной функции этого оборудования, которое позволяет подключить сразу несколько трансиверов к одному порту UART и обращаться с ними независимо. Я решил исправить это упущение.
Схема подключения нескольких трансиверов к одному порту UART (взято из документации на трансивер) выглядит так:
Особенностью такого включения заключается в использовании входов SE трансиверов. Если на этот вход подать 0 V то трансивер не будет реагировать на команды, передаваемые через UART, а если подать 3-5V, то команды будут исполняться.
В этом уроке мы будем включать, и выключать несколько нагрузок с помощью разных трансиверов.
Схема тестового стенда:
Создаём новый проект, и в нем конфигурируем входа – выхода контроллера.
Сначала создаём три входа для кнопок:
Поскольку у нас кнопки подключены между GND и входом включаем подтягивающие резисторы, ну и для четкого срабатывания включаем защиту от дребезга.
Затем создаём три выхода для управления трансиверами.
Затем создаём шесть переменных для команд управления.
Теперь перетаскиваем на схему первый вход, два блока R-триггера (Библиотека блоков – папка «Триггеры»), а так же две переменных – «Команда на включение нагрузки 1» и «Команда на отключение нагрузки 1». Затем соединяем их в соответствии со схемой:
Как она работает? Поскольку у нас кнопка включена между GND и входом, а так же включён подтягивающий резистор то при отпущенной кнопке на выходе блока входа будет 1, а при нажатой кнопке – 0. Верхний R-Тригер выделяет передний фронт (переход от 0 к 1) – то есть момент отпускания кнопки и создаёт в переменной «Команда на отключение нагрузки 1» короткий импульс на отключение нагрузки. Нижний R-Триггер в виду того что у него инвертирован вход производит выделение заднего фронта (переход от 1 к 0) – то есть момента нажатия кнопки. И так же формирует в этот момент короткий импульс в переменной «Команда на включение нагрузки 1».
Теперь повторим эту схему для остальных входов.
Назовём эту плату «Выделение фронтов» и создадим ещё одну. Сразу можно назвать её – «Управление трансиверами». Перетащим на неё переменные «Команда на включение нагрузки 1» и «Команда на отключение нагрузки 1», блок OR (Библиотека элементов – папка «Базовые элементы») и выход «Включение трансивера 1». Затем соединим их в соответствии со схемой:
Как она работает? При наличии 1 в переменной «Команда на включение нагрузки 1» ИЛИ в переменной «Команда на отключение нагрузки 1» на выходе «Включение трансивера 1» появится лог 1 (ТО есть трансивер 1 будет отрабатывать подаваемые на него команды). Повторим эту схему для остальных трансиверов.
Создадим новую плату «Отправка команд».
Для работы данной схемы важно, что бы управление трансиверами находилось, и отправка команд находились на разных платах, и плата управления была расположена выше, чем отправка команд. Это гарантирует, что сначала трансивер включится, а потом на него пойдет команда. Порядок выполнения команд в пределах одной платы не так однозначен и подчиняется более сложному алгоритму.
Перетащим на нижнюю плату все переменные команд включения, блок OR (Библиотека элементов – папка «Базовые элементы»), и блок управления трансивером nooLite (Библиотека элементов – папка «Разное»). Соединим их.
В соответствии со схемой при появлении в любой из переменных лог.1 будет происходит отправка команды на включение нагрузки. Настроим блок управления трансивером nooLite на передачу этой команды.
Повторим эту схему для отправки команды на выключение.
Настроим блок.
Ну, вот и всё. Спасибо за внимание.
Автор: FLProg