elchupanibrei (elchupanibrei) wrote,
elchupanibrei
elchupanibrei

Category:

Универсальная библиотека LiquidCrystal_I2C на базе расширителя портов PCF8574

Плод месячного курения манула на Hitachi HD44780U и ему подобным клонам. А их судя по всему не мало - S6A0069, KS0066U, NT3881D, LC7985, ST7066, SPLC780, WH160xB, AIP31066. И это далеко не полный список. Библиотека без проблем работает с любыми китайскими модулями на PCF8574 и PCF8574A.


внешний вид стандартного китайского модуля


принципиальна схема стандартного китайского модуля


нумерация и описание портов Hitachi HD4478U

Моя писанина получилась компактнее и немного быстрее многочисленной копипасты с GitHub-а. С 16МГц AVR-ом и частотой I2C шины 100КГц выдала 1096мкс, копипаста из менеджера закачек 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

Я постарался привести как можно больше примеров в библиотеке. Написал сумбурно, но пока так. Будет время добавлю про плюшки подробнее.

Забирать библиотеку тут.

UDP1: Оказывается у дисплея есть тестовый режим. Если подключить только питание, на исправном экране должны появиться прямоугольники. Только в первой строке - дисплей не инициализирован. Если в двух/четырех — инициализация прошла, но слишком большая контрастность.

тестовый режим HD44780


UDP2: В качества ликбеза очень полезная статья про подтяжку линий SDA и SCL.
UDP3: Исправил мелкие баги, чуть-чуть уменьшил код, добавил поддержку Arduino STM32.
UDP4: Похоже многие свалились с луны и не знают, что для нормальной работы I2C шины линии SDA и SCL должны быть подтянуты к питанию. Почему, читаем тут и тут.
UDP5: Just for fun писал в дисплей на больших скоростях - мой экземпляр спокойно переварил 600КГц.
Tags: #arduino, #товарыизкитая, arduino
Subscribe

  • Бета версия часов доступна на Github

    За MatrixClock уже почти не стыдно. Тем кот хочет пощупать, прошу под cut. Пока нету будильников и не работает ночная-дневная подсветка. Третий…

  • Что XM25QH32B хоршо, то EN25Q32B не очень

    В своих поделках на ESP8266 в Arduino давно не использую стадартыне настройки в Boards Manager для плат Wemos D1 mini и им подобных. Ребята из…

  • Продолжаем ковырять VS1053 Audio Codec

    Потихоньку пилю вебморду к VS1053 и ловлю баги в драйвере. Пока все получается и даже играет не хуже KaRadio. После прикручивания сервера пришлось…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 51 comments

  • Бета версия часов доступна на Github

    За MatrixClock уже почти не стыдно. Тем кот хочет пощупать, прошу под cut. Пока нету будильников и не работает ночная-дневная подсветка. Третий…

  • Что XM25QH32B хоршо, то EN25Q32B не очень

    В своих поделках на ESP8266 в Arduino давно не использую стадартыне настройки в Boards Manager для плат Wemos D1 mini и им подобных. Ребята из…

  • Продолжаем ковырять VS1053 Audio Codec

    Потихоньку пилю вебморду к VS1053 и ловлю баги в драйвере. Пока все получается и даже играет не хуже KaRadio. После прикручивания сервера пришлось…