Из-за чего LCD перестанет работать после 5-секундного подключения к Arduino?
Я использовал ЖК-дисплей 20x4, подключенный к Arduino Uno через обычная плата адаптера I2C. Все работало отлично, включая ЖК-дисплей. У меня так пару дней работало без проблем.
Следующим моим шагом было подключение ЖК-дисплея к Nano, чтобы уменьшить размер упаковки. Точно такой же код из Uno был загружен в Nano, и я точно так же подключил провода. Основное отличие здесь заключалось в том, что я припаял провода к Nano, потому что не хотел использовать разъемы. Я сделал тест непрерывности для коротких замыканий, и соединения, казалось, были в порядке. Между платой адаптера Arduino и ЖК-дисплея всего 4 провода: 5В, земля, SDA и SCL.
Nano включается нормально, ЖК-дисплей включается нормально, но сразу же на ЖК-дисплее отображается следующее:
Этого никогда не случалось, когда я подключал ЖК-дисплей к UNO.
После этого ЖК-дисплей полностью перестает работать, даже когда я возвращаю его обратно в UNO. Он просто постоянно отображает эти 2 строки. (При регулировке контрастности поля появляются или исчезают).
После того, как первый ЖК-дисплей показался мне постоянно сломанным, я проверил его на втором совершенно новом ЖК-дисплее. Сначала я подключил его к тому же Uno с тем же кодом, и все работало отлично. Я снова загрузил тот же код в Nano, просто чтобы убедиться, что все синхронизировано. Затем при подключении второго ЖК-дисплея к Nano он сразу же отобразил эти две строки. Я отключил его сразу (в течение 5 секунд), и попытался поставить его обратно на Uno, но все равно дисплей испорчен. Я пробовал другие скетчи, но оба этих дисплея кажутся сломанными и никогда не отображают ничего, кроме этих двух строк.
Даже если я просто подключу 5 В и заземлю ЖК-дисплей, независимо от источника, он просто постоянно отображает эти 2 линии.
Есть идеи, что может так быстро "сломать" ЖК-дисплей и возможно ли это исправить?
Изменить: По предложению Гербена я снял рюкзак I2C и подключил ЖК-дисплей напрямую. Это был второй, который я сломал, тот, в котором я больше уверен во всей его (короткой) истории. Я закончил с точно таким же результатом. Регулировка горшка только заставляет ящики появляться или исчезать. Я попытался полностью пропустить Arduino и подать на него питание 5 В от адаптера, и результат тот же.
@Jerry, 👍2
Обсуждение1 ответ
Маловероятно, что вы убили устройство, поскольку это довольно сложно сделать из интерфейса данных, а ваша картинка типична для ЖК-дисплея, не прошедшего последовательность инициализации. Неработающий драйвер ЖК-дисплея обычно ничего не отображает, и на вашем изображении видно, что сам контроллер ЖК-дисплея работает. Если что-то не работает, я бы заподозрил интерфейсную плату I2C, поскольку это даст тот же результат, который вы видите. Также может случиться так, что синхронизация интерфейса I2C находится на грани, что может объяснить, почему работает установка с длинным кабелем.
Обратите внимание, что если инициализация не выполнена, никакие другие команды работать не будут. Также обратите внимание, что время инициализации и последовательность событий АБСОЛЮТНО КРИТИЧЕСКИ ВАЖНЫ, и отсутствие любого отдельного шага или временного требования приведет к результату, который вы показываете.
Начиная с 10-й страницы этого инструкции в формате PDF, я предпочитаю его и являюсь основой для моего драйвера. которым я пользуюсь с 80-х годов.
Драйвер, который я использую, работает на всех дисплеях, которые я когда-либо подключал к нему, независимо от изменений тактовой частоты процессора конкретного проекта, потому что я уделял пристальное внимание требованиям по времени для наихудшего случая. Если синхронизация интерфейса I2C нарушает один ЖК-дисплей, она может не нарушать другой, т. е. один дисплей может терпеть плохую синхронизацию, а другой — нет. Существуют также проблемы, если драйвер ЖК-дисплея использует флаг занятости или нет: слепая передача данных без считывания состояния занятости ЖК-дисплея будет работать, если ЖК-дисплей достаточно быстрый, а драйвер достаточно медленный, в противном случае «No bueno!» плюс интерфейс не собирается работать на максимальной скорости. При использовании флага занятости (бит 7 интерфейса) происходит твердое квитирование, которое подтверждает (вместо «доверяет»), что ЖК-дисплей готов к следующему циклу и разрешает работу вплоть до предела производительности.
Я бы посоветовал вам поместить интерфейс на логический анализатор и убедиться, что синхронизация не нарушается.
Временные допуски и различия между деталями подобны гайкам на автомобиле... Если у вашего автомобиля 5 гаек на колесе, он, вероятно, будет работать с 3 или даже 2, но НЕ ПРИ ВСЕХ УСЛОВИЯХ. НЕКОТОРЫЕ ЖК-дисплеи будут довольны плохим временем, но ВСЕ ЖК-дисплеи НИКОГДА не будут.
Спасибо! Это какая-то удивительная информация. Мне нужно больше узнать об этом, а позже я проведу несколько экспериментов, но мне было интересно, может ли кто-нибудь ответить на эти вопросы: почему инициализация ЖК-дисплея может испортиться с Nano, но не с Uno? Кроме того, почему он запутался с ЖК-дисплеем 20x4, но не с ЖК-дисплеем 16x2 (который отлично работает с одним и тем же кодом как на Uno, так и на Nano, но, очевидно, отсутствуют последние несколько символов и 2 строки). Кстати, когда я искал «Инициализация ЖК-дисплея Arduino», я нашел несколько сообщений в SE и на форуме Arduino о той же проблеме., @Jerry
Спасибо за отличную дополнительную информацию. Я приму это как ответ, когда у меня будет больше времени, чтобы поэкспериментировать и полностью понять его. Кажется, что эта информация может быть актуальна для многих людей, у которых есть эта проблема. Мне также интересно увидеть/изучить решение для Arduino, например более надежную библиотеку или модификацию существующих популярных библиотек., @Jerry
- ЖК-дисплей 20x4 будет писать, но не будет обновляться
- Конфликт I2C с двумя ардуино
- Ошибка компиляции для Arduino Nano 33 BLE с библиотекой LiquidCrystal
- Как изменить созданный байт?
- переменная 'LiquidCrystal_I2C lcd' имеет инициализатор, но неполный тип
- Почему мои высокие и низкие значения не обновляются корректно во время последовательных циклов
- Проблемы с добавлением обратного отсчета к фрагменту кода
- Пытаюсь добавить обратный отсчет в код Arduino, но он делает 0 дней, 04:09:36 вместо того, чтобы начинать с 7 дней
Это на конце ваших длинных проводов в другом вопросе?, @Majenko
Первый LCD был, а вот для 2-го LCD тестил с короткими 6" перемычками. 2-ой LCD (который тоже сразу сломался) на конец длинных проводов я так и не поставил., @Jerry
Также у меня есть ЖК-дисплей 16x2 (меньшего размера), подключенный к Nano через тот же адаптер I2C, с более сложным кодом и на конце 10-футового кабеля, и он отлично работает уже несколько недель., @Jerry
Попробуйте снять рюкзак и подключить ЖК-дисплей напрямую к Arduino. Таким образом, вы узнаете, сломан ли рюкзак или ЖК-дисплей., @Gerben
Я просто попытался снять рюкзак и подключить его напрямую, и в итоге получил тот же результат. Добавил новую информацию в конец поста., @Jerry
Получаете ли вы одинаковые результаты как в 8-битном, так и в 4-битном режиме?, @James Waldby - jwpat7
Мне потребовалось некоторое время, чтобы понять, как использовать 8-битный режим (следовал этим инструкциям: https://electrosome.com/interfacing-lcd-arduino-uno/, где кажется, что неиспользуемые контакты просто притянуты к земле) , и я получил тот же результат. Я хочу отметить, что прямоугольники появляются на ЖК-дисплее сразу же при подаче питания, будь то от Arduino или от адаптера 5 В, еще до того, как ЖК-дисплей успевает прочитать что-либо с Arduino., @Jerry
У меня точно такая же проблема. Я заказал новый ЖК-дисплей (выглядит так же, как ваш), и он работал с первого раза, а затем начал отображать эти строки. Вам удалось это решить?, @BugHunterUK
Попробуйте в своем коде lcd(0x27,16,2); вместо lcd(0x3f,16,2);, @Sebas Gomez Pereira