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

Любые вопросы начального уровня, не можете разобраться в чём-то, не знаете с чего начать - мы дружно постараемся вам помочь!
Ответить
Vaffanculo
У нас в гостях
У нас в гостях
Сообщения: 7
Зарегистрирован: 11 фев 2020, 20:01

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

Сообщение Vaffanculo »

Привет всем!

Имеется МК 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?

Спасибо.

Ответить

Вернуться в «Вопросы от начинающих»