Плод месячного курения манула на
Hitachi HD44780U и ему подобным клонам. А их не мало - S6A0069, KS0066U, NT3881D, LC7985, ST7066, SPLC780, WH160xB, AIP31066... Библиотека работает с любыми модулями на PCF8574 и PCF8574A.
внешний вид китайского модуля на PCF8574
схема китайского модуля на PCF8574
нумерация и описание портов Hitachi HD4478U
Моя писанина получилась компактнее и
на 25% быстрее многочисленной копипасты с GitHub-а. С AVR-ом на 16МГц и частотой I2C шины 100КГц выдает 1088мкс. Копипаста из менеджера закачек только 1458мкс. Еще одно достоинство универсальность - можно переназначать контакты, если у вас нестандартный модуль или экран.
Рассмотрим строку инициализации поближе:
LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 4, 5, 6, 16, 11, 12, 13, 14, POSITIVE);
Запись означает:
- 4-й пин LCD подключен к поту P0 (4 ноге) PCF8574
- 5-й пин LCD подключен к поту P1 (5 ноге) PCF8574
- 6-й пин LCD подключен к поту P2 (6 ноге) PCF8574
- 16-й пин LCD подключен к поту P3 (7 ноге) PCF8574
- и тд ...
Теперь представим, что на вашем модуле перепутаны два контакта:
- 14-й пин LCD подключен к поту P0 (4 ноге) PCF8574
‐ 4-й пин LCD подключен к поту P7 (12 ноге) PCF8574
Тогда строка инициализации модуля будет выглядеть так:
LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 14, 5, 6, 16, 11, 12, 13, 4, POSITIVE);
Переменная "POSITIVE" означает, что транзистор Q1 типа NPN и для включения подсветки нужен положительный потенциал. Если не зажглась, то скорее всего у вас PNP транзистор и нужно заменить переменную "POSITIVE" на "NEGATIVE".
В библиотеке забиты все возможные адреса для чипов PCF8574 и PCF8574A:
PCF8574_ADDR_A21_A11_A01
PCF8574_ADDR_A21_A11_A00
PCF8574_ADDR_A21_A10_A01
PCF8574_ADDR_A21_A10_A00
PCF8574_ADDR_A20_A11_A01
PCF8574_ADDR_A20_A11_A00
PCF8574_ADDR_A20_A10_A01
PCF8574_ADDR_A20_A10_A00
PCF8574A_ADDR_A21_A11_A01
PCF8574A_ADDR_A21_A11_A00
....
....
....
PCF8574A_ADDR_A20_A10_A00
Разберем, что это значит. В правом нижнем углу модуля есть 3-и контактные площадки A0, A1, A2. Теперь глянем на схему модуля, по умолчанию эти контакты подтянуты к питанию через резисторы R4, R5, R6. Это соответствует логической единице на всех трех пинах - A0=1, A1=1, A2=1. Для такой конфигурации текущий адрес будет:
PCF8574_ADDR_A21_A11_A01
Если соединить верхнюю и нижнюю контактную площадки A2, то мы закоротим ее на землю и получаем логический ноль. Состояние на всех трех контактах - A0=1, A1=1, A2=0. Текущий адрес:
PCF8574_ADDR_A20_A11_A01
Написал сумбурно, но пока так. Будет время добавлю про плюшки подробнее. Больше примеров в библиотеке. Забирать
тут.
UDP: Оказывается у дисплея есть тестовый режим. Если подключить только питание, на исправном экране должны появиться прямоугольники. Только в первой строке - дисплей не инициализирован. Если в двух/четырех - инициализация прошла, но слишком большая контрастность.
тестовый режим HD44780
UDP: В качества ликбеза очень
полезная статья про подтяжку линий SDA и SCL.
UDP: Исправил мелкие баги, чуть-чуть уменьшил код, добавил поддержку
Arduino STM32.
UDP: Похоже многие свалились с луны и не знают, что для нормальной работы I2C шины линии SDA и SCL должны быть подтянуты к питанию. Почему, читаем
тут и
тут.
UDP: Just for fun писал в дисплей на больших скоростях. Мой экземпляр спокойно переварил 600КГц.
UDP: Библиотека умеет регулировать яркость подсветки с помощью ШИМ-а. Что куда подключать смотри
тут.