Экран на переходнике, четыре провода, сканер бодро печатает «устройство на 0x27» — а на стекле ни одного пикселя. Дальше обычно начинается хаос: люди перепрошивают плату пять раз, переустанавливают библиотеку, меняют проводки по кругу и теряют вечер на модуле, у которого каждый чип жив-здоров. Противоречия тут нет: сканер разговаривал не с экраном, а с соседним чипом на той же плате. Понимание этого факта экономит больше времени, чем любая библиотека, — на типовом модуле I2C-экрана их два, и судьбы у них разные.
Этот урок вырос из коробки с десятком экранов, купленных в разные годы у разных продавцов. Половина из них отвечает на 0x27, треть — на 0x3F, один экземпляр после моей же пайки переехал на 0x24 и три недели считался бракованным. Ни один не был мёртв. Каждый раз спасителем оказывался один и тот же набор: сканер, вольтметр, ручка контраста и понимание, кто из двух чипов кому отвечает. Соберу этот набор в порядок проверки, который стоит распечатать и повесить над столом.
Разбираю здесь всю цепочку от переходника к стеклу: почему чип отвечает, а кристалл молчит, при каком питании они расходятся во мнениях, за что отвечает подстроечник и как перемычки A0–A2 двигают адрес. Базовую механику сканера показывал урок про поиск устройств — опираюсь на неё и не пересказываю.
На модуле два чипа: сканер видит только один
Экран 1602 с I2C-переходником — это стеклянный HD44780 с контроллером плюс восьмибитный расширитель PCF8574, который переводит два провода шины в восемь ножек экрана. Адрес 0x27 принадлежит переходнику: именно он подтверждает адресное слово, именно его видит сканер. Стекло шины не касается — оно слушает свой параллельный порт, и умеет ли оно показывать, по шине не проверишь никак. Пустой пакет с адресом 0x27 ACK-ает переходник даже тогда, когда кристалл мёртв, шлейф перекошен и подстроечник выкручен в ноль.
Отсюда первый рабочий вывод: сканер отвечает за половину диагностики. Он доказывает, что провода, земля и подтяжки в порядке — до переходника сигнал дошёл. Всё, что правее переходника, шиной не измеряется: контраст подстраивается аналоговой ручкой, питание стекла живёт на своей ножке, контакт шлейфа — механика. Зато у этой пары есть характерная развилка по напряжению: PCF8574 по даташиту работает от 2,5 до 6 В, а кристаллу HD44780 нужны полные 5 В. Сажаете модуль на 3,3 В — переходник честно ACK-ает, стекло честно пустое. Симптом «сканер видит, экран молчит» при питании от 3,3-вольтовой платы — почти всегда эта пара чисел.
| Симптом | Что уже доказано | Куда смотреть |
|---|---|---|
| 0x27 в сканере, стекло пустое | провода, земля, подтяжки, сам переходник | контраст подстроечником, питание 5 В, шлейф к стеклу |
| Сканер молчит на всей шине | ничего | подтяжки, земля, провода — физика, а не адрес |
| Сканер видит 0x3F вместо 0x27 | шина и модуль живы | на плате стоит PCF8574A — берите 0x3F |
| Модуль отвечает на новом адресе после пайки | перемычка сместила адрес | запишите новый номер на стикер |
#include <Wire.h>#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); int scanOne(int addr) { Wire.beginTransmission(addr); return Wire.endTransmission(); // 0 - переходник подтвердил адрес} void setup() { Wire.begin(); Serial.begin(9600); Serial.println("Проба: скан 0x27 и тест стекла"); int code = scanOne(0x27); if (code != 0) { Serial.println("Переходник молчит: питание, провода, подтяжки"); return; // до чипа не достучались - стекло ни при чём } Serial.println("Переходник отвечает, пробую стекло"); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("0x27 OK"); lcd.setCursor(0, 1); lcd.print("glass test");} void loop() {}Контраст и подсветка: аналоговый мир рядом
Подстроечник контраста на переходнике — единственная ручка, которую шина не крутит: это аналоговый делитель на 10 кОм, задающий напряжение на ножке VO кристалла. Выкрученный не туда, он даёт два характерных фокуса: в одну сторону экран полностью залит квадратами, в другую — абсолютно пуст, при том что контроллер прекрасно печатает. Между этими крайностями живёт узкая зона читаемости, и на холоде она сужается: зимой уличный экран приходилось подстраивать заново при каждом минусе. Проверка занимает десять секунд: питание есть, сканер видит 0x27 — крутите ручку медленно от упора до упора, стеклу хватит одного прохода, чтобы показать строку.
Подсветка — отдельная история с тем же выводом: она не влияет на ACK. На большинстве плат светодиодная лента питается через транзистор, которым управляет ножка PCF8574, поэтому lcd.backlight() переключает её программно; на части модулей стоит перемычка, замыкающая подсветку на плюс напрямую. Ток большой по меркам модуля — 20–30 мА у 1602 и до 120 мА у 2004 — и севший блок питания иногда тянет логику, но не подсветку: чип отвечает, стекло темнеет вполнакала. Если сканер молчит при подключённой подсветке и оживает без неё — вы уже знаете, куда смотреть: в источник тока, а не в шину.
Перемычки A0–A2: адрес, который двигается паяльником
PCF8574 держит три адресных ножки — A0, A1, A2 — и складывает адрес из базы и их весов: A0 добавляет единицу, A1 двойку, A2 четвёрку. База обычной версии 0x20: замкнули A0 — модуль переехал на 0x21, только A1 — на 0x22, A2 вместе с A1 — на 0x26. На типовых платах переходников это не пины, а контактные площадки под перемычку паяльником, и на дешёвых экземплярах третьей площадки нет — движутся только младшие четыре адреса. У версии PCF8574A база 0x38, и на стеклянных модулях она встречается чаще: заводская плата без единой перемычки отвечает на 0x3F. Половина историй про «экран молчит на 0x27» кончается прогоном сканера и находкой на 0x3F.
Про подтяжки — коротко, потому что симптомы другие: без них сканер молчит на всей шине, а не на одном адресе. Линии SDA и SCL должны куда-то подниматься: на переходниках и модулях часов резисторы обычно стоят на борту, чаще 4,7 кОм, у части плат 10 кОм, — урок про номиналы подтяжек считает токи и границы. Три модуля с бортовыми резисторами складываются параллельно до 1,5–3 кОм, и это по-прежнему живая шина. Если же у вас голые чипы без обвязки — читайте урок про подключение и подтяжки: там порядок сборки и прозвонка.
На живой макетке порядок проверки у меня жёсткий, от дешёвого к дорогому: питание на ножке модуля вольтметром — честные 5 В, а не просевшие 4,2, — контраст ручкой: на ножке VO при читаемой картинке обычно сидит меньше вольта, потом адрес сканером, и только потом библиотека и скетч. Меняется один фактор за прогон — иначе вы никогда не узнаете, что именно починило. Сканер в этой цепочке стоит посередине: он отделяет электрику от логики за тридцать секунд. Если 0x27 нашёлся, а стекло пустое, вы уже знаете, что искать справа от переходника: ручка контраста, 5 В на кристалле, шлейф. Первый текст на найденном модуле выводит урок про первый текст на LCD по I2C, обвязку и сборку модуля показывает урок про подключение экрана.
Отдельно про мониторы порта: если захотите завести адрес, найденный сканером, через ввод с клавиатуры — есть аккуратный приём с parseInt и проверкой буфера, его даёт урок про чтение чисел из Serial. Пустой ввод без проверки превращается в фиктивный ноль, и вы полчаса стучитесь на 0x00 — служебный адрес, куда сканер даже не заглядывает.
- 1. Сканер напечатал 0x27, стекло экрана пустое. С кем сканер на самом деле поговорил?
- 2. Питание модуля 3,3 В вместо 5. Что увидите?
- 3. На переходнике стоит PCF8574A вместо PCF8574. Где сканер найдёт модуль?
- 4. Замкнули перемычку A0 на переходнике с базой 0x20. Новый адрес?
- 5. Сканер молчит на всей шине, питание модулей есть. Что проверять первым?
- Адрес 0x27 принадлежит переходнику PCF8574, а не стеклу: сканер доказывает жизнь чипа и проводов, но не кристалла
- PCF8574 живёт от 2,5 В, HD44780 хочет 5 В: на 3,3-вольтовом питании сканер видит модуль, а стекло остаётся пустым
- Перемычки A0–A2 добавляют к базе вес 1/2/4: обычная версия 0x20–0x27, версия с буквой A — 0x38–0x3F
- Экран на 0x3F — это не брак, а PCF8574A на заводской плате без перемычек
- Без подтяжек шина молчит вся; бортовые резисторы 4,7–10 кОм у трёх модулей складываются до 1,5–3 кОм и живут
Частые вопросы по теме урока
- Сканер напечатал 0x27, стекло экрана пустое. С кем сканер на самом деле поговорил?
- На модуле два чипа: переходник и стекло. Пустой пакет подтверждает переходник даже при мёртвом кристалле — контраст и питание стекла шиной не проверяются. С переходником PCF8574 — стекло тут ни при чём
- Питание модуля 3,3 В вместо 5. Что увидите?
- PCF8574 по даташиту работает от 2,5 до 6 В, а HD44780 рассчитан на 5 В. Адрес от напряжения не зависит — смотрите питание. 0x27 в сканере и пустое стекло: чип живёт от 2,5 В, кристаллу нужны 5
- На переходнике стоит PCF8574A вместо PCF8574. Где сканер найдёт модуль?
- У версии с буквой A база 0x38 вместо 0x20: те же восемь перемычек, другой этаж. Отсюда половина историй про экран, который молчит на 0x27. В диапазоне 0x38–0x3F, чаще всего на 0x3F
- Замкнули перемычку A0 на переходнике с базой 0x20. Новый адрес?
- Вес перемычки A0 — единица: 0x20 плюс 1. A1 добавляет двойку, A2 — четвёрку. Сканер подтвердит: 0x21. 0x21
- Сканер молчит на всей шине, питание модулей есть. Что проверять первым?
- Пустая шина — это физика: подтяжки, земля, провода. Контраст не при чём — переходник отвечает и без него. Номиналы считал урок про подтяжки. Подтяжки SDA и SCL: без них шина молчит целиком