Цифровая схема не знает «истины» и «лжи» — она знает напряжение. Логическая единица это уровень выше порога, ноль — ниже.
Пороги зависят от семейства:
3.3 В CMOS (ESP32, STM32): вход выше 0.7 × 3.3 = 2.31 В — единица, ниже 0.3 × 3.3 = 0.99 В — ноль.
5 В TTL (74LS, старые): выше 2.0 В — единица, ниже 0.8 В — ноль.
5 В CMOS (74HC): выше 3.5 В — единица, ниже 1.5 В — ноль.
Между порогами — запрещённая зона: вход не знает, что это, и может вести себя непредсказуемо. Именно поэтому нельзя оставлять вход «в воздухе» — он попадёт в эту зону и начнёт ловить наводки.
Выход даёт не идеальные уровни: у 3.3-вольтовой схемы «единица» может быть 3.2 В под нагрузкой и 2.8 В при токе 10 мА. Отсюда запас: разработчик смотрит, что вход следующего чипа надёжно понимает выход предыдущего. 3.3 В выход → 3.3 В вход — всегда работает. 3.3 В выход → 5 В TTL-вход — работает (2.31 > 2.0), но с малым запасом. 5 В выход → 3.3 В вход — не работает, нужно согласование.
Ещё два параметра: ток втекает/вытекает (обычно 4–20 мА на вывод) и ёмкость входа (единицы пикофарад). На высоких частотах ёмкость начинает ограничивать: чем больше нагрузка, тем медленнее фронт.
На практике: если схема «иногда работает», первым делом смотри уровни осциллографом. 1.7 В на цифровом входе — это не ноль и не единица, это проблема.
Без порогов нельзя понять, почему 3.3 В не видит 5-вольтовую логику и почему «висит в воздухе» — это плохо.
Найди в даташите ESP32 таблицу DC Characteristics и выпиши Vih и Vil. Сравни с порогами 74HC при 5 В — увидишь, почему прямое соединение не работает.
Проверь себя
Вход 3.3 В микроконтроллера, на нём 1.7 В. Что покажет программа?
Ничего предсказуемого: уровень в запрещённой зоне, чтение может давать то 0, то 1, дребезг и нагрев. Нужна подтяжка к питанию или земле.
-
Wikipedia: Logic gate
логические уровни
-
Espressif: ESP32 Datasheet
пороги 3.3 В