HD44780 отображает неправильно черный на синем вместо белого на синем

У меня есть стандартный ЖК-дисплей 16x2, совместимый с HD44780, с уже припаянным модулем PCF8574. Подсветка у него синяя, а символы должны быть белыми (на синем).

Он подключен к универсальному модулю ESP8266 "Lolin", который работает нормально и, надеюсь, не связан с проблемой.

Используя библиотеку LiquidCrystal_I2C, доступную по адресу https://github.com/lucasmaziero/LiquidCrystal_I2C, я загрузил простое сообщение "Здравствуйте! Скетч "Мир" предоставлен, и он работает. Использовались самые последние библиотеки и среда разработки Arduino IDE по состоянию на 20 марта 2019 г.

Однако текст отображается очень тусклым черным на синем, а не ярким белым на синем.

Я понятия не имею, почему это происходит и как это исправить (и это мой вопрос).

Что я знаю, так это то, что если я каким-то образом "глючу" на дисплее (например, отключая и снова подключая кабель питания), он иногда будет отображать тарабарщину, но очень четкое белое на синем , поэтому я знаю, что оборудование ЖК-дисплея само по себе не неисправно.

Я также попробовал несколько других библиотек с тем же эффектом: LiquidCrystal_PCF8574 и LiquidCrystal_I2C (версия доступна непосредственно в среде разработки Arduino, источник по адресу https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library)

Ниже приведен пример скетча, использованного для создания проблемы. Имейте в виду, что это для первой библиотеки LiquidCrystal_I2C, о которой я упоминал выше, но с изменениями она работает с другими, которые я пробовал.

#include <LiquidCrystal_I2C.h>

// Установите адрес ЖК-дисплея на 0x27 для 16-символьного и 2-строчного дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
  // инициализируем ЖК-дисплей
  lcd.begin(); // Инициализация с выводом по умолчанию ESP8266 или ARDUINO
  // lcd.begin(0, 2); //ESP8266-01 I2C с выводом 0-SDA 2-SCL
  // Включаем черный свет и печатаем сообщение.
  lcd.backlight();
  lcd.setCursor(0, 0);

#if defined(ESP8266)
  lcd.print("ESP8266");
#else
  lcd.print("ARDUINO");
#endif

  lcd.setCursor(0, 1);
  lcd.print("Hello, world!");
}

void loop()
{
  // Здесь ничего не делаем...
}

И фото аномального дисплея. Поворот потенциометра контраста не помогает.

аномальное отображение

, 👍-1

Обсуждение

какое рабочее напряжение на этом устройстве? Как ты подключил к нему питание?, @Jaromanda X

Рабочее напряжение вроде бы 3,3В. Если я подключаю линию VCC дисплея к Vin ESP8266 (в моем случае 5V), ничего не работает, ничего не отображается., @Flyingfenix

Только что попробовал подключить интерфейс i2c через преобразователь уровней (сторона дисплея 5 В, ESP82 66 3,3 В), и он не включается. Однако, если я подключаю обе стороны преобразователя уровня к шине 3,3 В, он работает «неправильно» (таким образом, нет плохого преобразователя или неправильных соединений)., @Flyingfenix

У меня была аналогичная проблема. В моем случае это были настройки контрастности. Некоторым из этих дисплеев требуется отрицательное напряжение для управления выводом контраста (особенно при питании от 3,3 В). Поскольку этот контакт не потребляет много тока, будет достаточно простых 2 диодов и 2 конденсаторов, питаемых прямоугольной волной (может быть сгенерирована от вашего Arduino или 555)., @smajli

@smajli, не могли бы вы рассказать кое-что о том, как вы этого добились? Бесплатные GPIO в моем проекте в большом почете, но попробовать стоит!, @Flyingfenix


3 ответа


Лучший ответ:

0

Возможно, этому ЖК-дисплею потребуется отрицательное напряжение на контрастном выводе. Ниже представлена простая схема. Вам нужно будет предоставить импульсы в ветке «Pulse in». Используйте ветвь отрицательного напряжения и потенциометр для питания контрастного штифта.

,

Это настолько просто, что стоит попробовать. Выложу результат как можно скорее., @Flyingfenix

Это сработало хорошо. Однако не очень практично. Почему? Поскольку модуль I2C припаян к ЖК-модулю, и для подачи отрицательного напряжения на контакт контраста мне нужно было бы разрезать его соединение с платой PCF8574, а затем припаять внешнее соединение к генератору отрицательного напряжения. В любом случае, проблема решена, спасибо большое., @Flyingfenix


1

Этот ответ просто дополняет ответы @smajli, опубликованные (и принятые) ранее.

Проблема заключается в том, что на контакт контраста нужно подавать отрицательное напряжение, когда модуль питается от источника питания 3,3 В, чтобы иметь возможность отображать текст в правильной настройке белого на синем, а не на бледном черном фоне. -синий.

@smajli правильно показал, как отрицательное напряжение может генерироваться из нормального положительного питания и генератора импульсов. Однако в моем сценарии генератор импульсов был подключен к шине +3,3 В вместо +5 В, и импульсы генерировались с помощью функции ШИМ ESP8266. Используя рабочий цикл 50%, он генерирует около -2 В. Однако я не буду воспроизводить его схему здесь, но ниже представлена фотография в собранном виде и в действии.

Обновленный код точно такой же, только в функцию setup() добавлена генерация ШИМ:

  pinMode(D8, OUTPUT);
  analogWrite(D8, 512);   // 10-bit!

И наконец, фотография ниже иллюстрирует окончательный результат.

Еще раз спасибо @smajli за предыдущую информацию и ответ.

PS: Внимательные читатели заметят, что используемый сейчас модуль отличается от того, который использовался, когда я изначально задавал вопрос. Это еще один универсальный модуль HD44870, но без интерфейса I2C, работающий в 4-битном режиме. Однако точно такая же проблема (черный текст на синем) возникает, когда для контрастного контакта установлено любое значение между +3,3 В и GND, и быстро решается при использовании отрицательного напряжения.

,

Приятно видеть ваше объяснение. Хорошая работа и хороший эффект., @smajli


0

У меня есть аналогичный ЖК-дисплей (я предполагаю, что он практически идентичен, трудно подтвердить). В моем случае при подаче на дисплей VCC (а также SCK и SDA) напряжения 3,3 В было то же самое поведение, которое вы описали (тусклый черный текст на синем фоне), но установка VCC на 5 В дала мне правильное отображение белого на синем (даже при SCK и SDA по-прежнему работают при напряжении 3,3 В, так как это выходы микроконтроллера, который я использовал).

Любопытно, что установка VCC на 5 В в вашем случае не сработала.

,