• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как задействовать одну ножку GPIO поочередно то на выход то на вход?

Vaffanculo

New member
Привет всем!

Имеется МК ESP32, который будет управлять трёхканальным мультиплексором 74HC4053, где все каналы имеют по две линии.
Из трёх каналов используются только два. Оба используемых канала должны переключаться синхронно.

ESP32 может выбрать либо одну из двух линий мультиплексора (при помощи ESP32::IO34), либо вообще может его выключить,
подав на ESP32::IO35 высокий уровень.

Ещё есть внешние устройства, состояние которых определяет какие линии мультиплексора разрешено задействовать
микроконтроллеру в настоящий момент. Это решается при помощи блока U3, который берет сигналы от внешних
устройств, а также уровень с ESP32::IO34, и вычисляет можно ли включить ту линию, которую просит микроконтроллер.
Если нет, то мультиплексор выключается путем подачи на его вход U2::E высокого уровня. По сути U3 реализует
логическое выражение от трех параметров.

Далее. То, хочет ли микроконтроллер задействовать мультиплексор (ESP32::IO35), и то, разрешено ли ему это
сделать (U3::pIN_5), соединяется через ИЛИ и попадает на вход U2::E мультиплексора.
Идея в том, чтобы аппаратно не дать ESP32 полезть туда, куда сейчас нельзя.
dual-purpose-gpio.png
Теперь о проблеме. Микроконтроллеру нужно будет знать, можно ли ему лезть туда, куда он хочет, или нет.
Для этого я хочу использовать ножку ESP32::IO35 поочередно на вход и на выход. Когда она настроена на выход,
то все должно быть так, как описано выше.
А когда она настроена на вход, то
1. Микроконтроллер читает то, что у него на ESP32::IO35, и получает значение U3::pIN_5. То есть сумеет узнать можно ему работать или нет.
2. Уровень на U2::E равен уровню U3::pIN_5. Это чтобы мультиплексор не включился когда это запрещено.

Как такое сделать не задействуя другие выводы ESP32?

Спасибо.
 

nikolz

Well-known member
Какой смысл один или два пина ESP заменять внешней жесткой логикой либо микроконтроллером?
По-моему Вы просто не умеете разрабатывать алгоритмы, но у вас есть какой-то древний опыт работы с жесткой логикой.
В итоге Вы хотите нагородить схему вместо того чтобы написать программу. Верно?
----------------
Решений у вас три
1) не мудрить, а использовать пин ESP
2) всю хрень слева заменить на микроконтроллер с необходимым числом GPIO и внутренним тактовым генератором.
Вариантов много цена будет такой же, схема будет проще, чем на жесткой логике.
3) Описать подробно логику работы устройства, возможно решение будет проще, так как Вы пытаетесь придумать какой-то интерфейс, вместо использования стандартного.
 

nikolz

Well-known member
Вы нарисовали двунаправленную двухканальную асинхронную шину.
И теперь хотите на жесткой логике сделать арбитра этой шины.
Может лучше почитать учебники по организации ввода-вывода в микроконтроллерах а не изобретать "гениальное" решение?
 

nikolz

Well-known member
само название темы уже звучит странно.
GPIO ESP двунаправленные.
Чтобы их задействовать надо записать в соответствующие регистры управления ESP надлежащий код - это называется программирование.
 

CodeNameHawk

Moderator
Команда форума
Как и в предыдущем вашем вопросе, все сводится к вопросу как определить, что вывод есп переключился на вход.
Но видя кол. доп. микросхем, все целесообразней использовать дополнительный проц и если надо аппаратную защиту на микросхеме от запрещенного состояния на выходе. Но в схеме со вторым процом, входные линии и так не смогут одновременно подключится к выходу.
 
Последнее редактирование:

esp340

Active member
Если честно, я так и не понял зачем отключать мультиплексор? Пусть себе молотит постоянно, чем он мешает? Вместо подачи сигнала с U3 на ногу Е заведите его на IO35 и вызывайте функцию чтения в зависимости от его уровня (или если читаете постоянно - то обработчик поступивших данных).
 
Сверху Снизу