Тепличный контроллер простоял зиму на полке, и в марте я повесил его обратно — экран встретил меня синим свечением и полным молчанием: подсветка есть, текста нет. За вечер я успел прогреть плату феном, перепаять переходник и трижды перепрошить контроллер, а наутро выяснилось, что при переезде выскользнул провод SDA. С тех пор молчащий экран я чиню не вслепую, а по алгоритму из шести шагов — от проверок ценой в десять секунд к тем, что требуют паяльника и прозвонки. Порядок шагов — половина успеха: девять из десяти молчащих панелей у меня лечатся на первых трёх.
Симптом у всех один, «экран не работает», но за ним прячется минимум пять разных поломок: от провода, вставленного мимо ряда макетки, до перепутанных адресов. Если экран молчит с самого первого включения и вы ещё не собирали ничего рабочего — начните с урока про подключение по I2C, там базовая схема и первый текст на экране. Здесь случай неприятнее: что-то раньше работало или выглядит рабочим, но печати нет. Родственный признак — чёрная строка квадратов вместо знаков — разобран отдельно в уроке про чёрную строку, повторять его я не буду.
План такой: шесть шагов по порядку с ценой каждого, сканер шины одним скетчем, грабля с длинными проводами шины, на которой я потерял неделю, и таблица «симптом — причина — лечение» для быстрого поиска. Стенд в симуляторе листает шаги кнопкой — шпаргалка, которую удобно держать открытой рядом с макеткой и сворачивать по мере того, как шаги отработаны. Половина шагов не требует вообще ничего, кроме глаз и отвёртки, — и это не случайность, а принцип алгоритма.
Шесть шагов по порядку
Шаг первый — подсветка горит? Светодиоды за стеклом питаются отдельной цепью, и их ровное свечение говорит только одно: на модуль приходят пять вольт и земля. Не горит — не трогайте скетч вообще: ищите обрыв по цепи 5В и GND, и по моему опыту почти все «мёртвые» экраны с тёмной подсветкой — это провод, вставленный на ряд дальше или наоборот раньше нужного. Мой рекорд — час поиска на панели, у которой земля уходила в макетную шину, рассыпанную от вибрации: горел бы индикатор на плате, я бы нашёл это за минуту. Горит — переходите к шагу два, и не пожалеете: он бесплатный и занимает десять секунд.
Шаг второй — контраст-пот. Классический портрет живого, но молчащего экрана: подсветка горит, а первый ряд абсолютно пуст, будто знаки смыли. На обратной стороне адаптера стоит синий подстроечник — крутите его отвёрткой из стороны в сторону: символы всплывают из ниоткуда. Перебор виден сразу — фон первой строки заливается квадратами; недобор — экран пуст; рабочая точка посередине, где знаки контрастные, а фон чистый. На платах без переходника контраст задаёт делитель на резисторе 10 кОм — механика та же, я разбирал её в уроке про контраст и потенциометр. Отдельный случай: первый ряд в чёрных прямоугольниках — это уже не контраст, а неинициализированный контроллер, про него шестой шаг.
Шаги три и четыре — адрес и провода шины. Большинство переходников отвечает на 0x27, заметная часть партий — на 0x3F, и угадывать бессмысленно: сканер из кода ниже печатает адрес за десять секунд, а механика обеих сеток разобрана в уроке про выбор между 0x27 и 0x3F. Провода проверяйте глазами: SDA — на A4, SCL — на A5 у Uno и Nano; при перепутанных местами линиях подсветка горит, а сканер молчит — шина физически не разговаривает. Какие ножки за что отвечают на других платах и почему именно эти две линии — в уроке про два провода шины.
Шаг пятый — пять вольт на VCC. Модуль с PCF8574 внешне оживает даже от 3,3 вольта: переходник моргает, шина пингуется, — но контроллеру HD44780 для честного контраста нужны все пять, и при пониженном питании экран жив, подсветка горит, а знаков нет. Выглядит это в точности как поломка дисплея, и половина «бракованных» панелей с маркетплейсов, по моим наблюдениям, просто питалась от 3,3-вольтовой линии. Питание меряйте мультиметром прямо на ножках модуля, а не на гнезде платы: полметра тонкого провода отнимают пару десятых вольта, и на грани — уже пустой экран.
Шаг шестой — begin до печати. У параллельного LiquidCrystal без lcd.begin(16, 2) в setup библиотека не сообщает контроллеру геометрию, и вся печать уходит в никуда; у I2C-версии ту же работу делает lcd.init(). Классический промах — печатать в setup раньше этих вызовов: строки молча теряются, а виноватым назначают экран, провода и наконец производителя. Дисциплина простая: init и backlight — первыми тремя строками setup, печать — строго после; тогда этот шаг из списка подозреваемых выпадает навсегда.
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C SKANER");} void loop() { int naideno = 0; for (int addr = 1; addr < 127; addr++) { Wire.beginTransmission(addr); if (Wire.endTransmission() == 0) { // кто-то ответил ACK Serial.print("Ustroistvo na 0x"); if (addr < 16) Serial.print("0"); Serial.println(addr, HEX); naideno++; } } if (naideno == 0) Serial.println("Bus pusta: provoda ili pitanie"); delay(3000);}Сканер — единственный честный способ узнать адрес, и логика у него прозрачная: beginTransmission открывает пакет на перебираемый адрес, endTransmission закрывает и возвращает ноль, только если кто-то ответил подтверждением. На шине с одним экраном печатается одна строка, с двумя — две. Если шина пуста при подключённом модуле, возвращайтесь к шагам один и четыре: без питания или с перепутанными SDA и SCL подтверждений не будет. По логам Serial в такие минуты удобно смотреть, что вообще происходит на шине, — методику такой отладки я разбирал в уроке про отладку через Serial.
После того как адрес найден, соберите контрольный скетч из четырёх строк — init, backlight, setCursor, print — и держите его отдельным файлом. Он отвечает на вопрос «экран жив вообще?», отсекая ваши меню, раскладки и глифы: заметная часть молчащих экранов — это не железо, а большой скетч, в котором печать ушла на чужую строку и затирается самим собой. Если и контрольный молчит при зелёных шести шагах — подставьте заведомо рабочий модуль с другой сборки или подключите панель напрямую четырьмя проводами, минуя переходник: схема и подводные камни в уроке про четырёхпроводное подключение.
Симптом — причина — лечение
Таблица ниже — то, что у меня теперь висит на стенде рядом с макеткой. Пользоваться ей стоит в одном порядке: сначала опишите, что видите, и только потом ищите причину. «Подсветка горит, первый ряд пуст» и «первый ряд в чёрных прямоугольниках» — разные поломки с разными шагами, хотя на фотографии обе выглядят как «экран не работает». И не доверяйте первому совпадению: устранив найденную причину, убедитесь, что симптом действительно ушёл, а не спрятался за другой.
Самая коварная пара строк — обе «адресные»: при перепутанных SDA и SCL и при неверном адресе в скетче картина одна, подсветка горит, печати нет. Развилка простая: сканер нашёл устройство — адрес в скетче неверный, сканер молчит — провода или питание. Весь разбор сеток обеих партий PCF8574 с битовой механикой я делал в уроке про 0x27 и 0x3F и здесь не дублирую. Мой порядок шагов можно оспорить: многие начинают со сканера, и в их руках он тоже работает. Я начинаю с контраста по одной причине — это десять секунд и ноль инструментов, а примерно треть молчащих экранов лечится именно там; дешёвые проверки вперёд дорогих, и прозвонка имеет смысл, когда визуальные шаги уже пройдены.
И про финал. Если все шесть шагов зелёные, а экран молчит, подозреваемых остаётся двое: панель и переходник. Разведите их — снимите адаптер и подключите стекло напрямую четырьмя проводами либо подставьте модуль с заведомо рабочей сборки. За несколько лет у меня сгорели один контроллер HD44780 и два переходника PCF8574, и статистика маленькая, а вывод твёрдый: запасной экран в ящике экономит вечер, а не деньги. Если ваш порядок шагов другой и он вас не подводит, не меняйте: важен алгоритм, а не последовательность — главное не прыгать между шагами по настроению.
| Симптом | Вероятная причина | Лечение |
|---|---|---|
| Подсветка горит, первый ряд пуст | Контраст на нуле | Крутить подстроечник: знаки всплывут |
| Первый ряд в чёрных квадратах | Контроллер не инициализирован | init() или begin(16,2) до первой печати |
| Подсветка не горит | Обрыв по 5В или GND | Прозвонить питание, пересадить провода |
| Свет есть, сканер шину молчит | Перепутаны SDA/SCL или нет 5В | SDA на A4, SCL на A5, промерить VCC |
- 1. Подсветка горит, а первый ряд абсолютно пуст. С чего начать?
- 2. Сканер шины молчит, хотя модуль подключён. Что проверять дальше?
- 3. Какие пины шины I2C на Uno и Nano?
- 4. Печать в setup идёт раньше lcd.init(). Что произойдёт?
- 5. Провода шины длиной 80 см ловят мусор на 100 кГц. Что сделать первым?
- Порядок диагностики: подсветка — контраст — адрес — SDA/SCL — 5 В — begin до печати; дешёвые проверки вперёд дорогих
- Пустой первый ряд при горящей подсветке — контраст; чёрные квадраты — неинициализированный контроллер
- Сканер шины печатает адрес за десять секунд: 0x27 у большинства модулей, 0x3F у партий PCF8574A
- SDA на A4, SCL на A5 у Uno: при перепутанных линиях подсветка горит, а шина молчит
- Провода шины длиннее полуметра ловят мусор: укорачивать, вести рядом с землёй, подтяжки 4,7 кОм
Частые вопросы по теме урока
- Подсветка горит, а первый ряд абсолютно пуст. С чего начать?
- Горящая подсветка при пустом первом ряду — портрет контраста на нуле: десять секунд отвёрткой решают то, на что уходит вечер перепрошивок. Крутить подстроечник контраста
- Сканер шины молчит, хотя модуль подключён. Что проверять дальше?
- Молчащий сканер означает, что никто не отвечает на шине: перепутанные линии или отсутствие питания. Адрес в скетче ни при чём — устройства на шине нет. SDA/SCL и питание 5 В
- Какие пины шины I2C на Uno и Nano?
- У Uno и Nano SDA — A4, SCL — A5. Перепутанные местами линии дают ровно тот симптом, что и обрыв: подсветка горит, шина молчит. SDA на A4, SCL на A5
- Печать в setup идёт раньше lcd.init(). Что произойдёт?
- До init() или begin(16,2) библиотека не сообщила контроллеру размеры и режим, и байты печати уходят в никуда. Инициализация — первыми строками setup. Строки молча потеряются: геометрия ещё не сообщена контроллеру
- Провода шины длиной 80 см ловят мусор на 100 кГц. Что сделать первым?
- Длинная шина лечится укорачиванием, прокладкой рядом с землёй и подтяжками 4,7 кОм. Повышение скорости сделает только хуже. Укоротить шину и пустить линии рядом с землёй