Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "ESP8266 Arduino IDE", создана пользователем enjoynering, 23 май 2018.

  1. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    Без проблем работает с не стандартным модулями и экранами. Поддерживает Arduino AVR, Arduino ESP8266, Arduino SMT32. Получилась немного быстрее, чем у всей остальной копипасты из интернета. Все пины можно переназначать. Вот как это работает. Для этого поближе посмотрим на строку инициализации:

    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);

    В библиотеке уже забиты все возможные адреса для чипов 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

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

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    Народ протестировал скорость: моя 1096мкс, библиотека из менеджера закачке 1458мкс. Это на AVR 16МГц и скоростью i2c 100КГц. На ESP должна быть еще быстрее. Попробуйте поставить скоростью i2c 400КГц может прокатит. Вишенка тут не вскорости, она идет бонусом, а в полной УНИВЕРСАЛЬНОСТИ. У всех LiquidCrystal_I2C из инета куча параметров захардкодена. Моя же гибкая и все меняет на лету САМА.
     
    Последнее редактирование: 23 май 2018
  3. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    Нет. Да и зачем? С расширителем 2 пина, без него 7 пинов (для 4-х битного режима)!!! А скорости те же. Смысл? У ESP и так пинов раз два и обчелся.
     
  4. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    Добавил поддержку PROGMEM для AVR, ESP8266 и STM32. Теперь можно иконки сохранять во флеш и не держать их мертвым грузом в динамической памяти.

    Смотрите подробности в примере - CustomChars
     
    Последнее редактирование: 18 июн 2018
  5. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    недавно на официальном форуме Arduino один товарищ надавал мне по щам - мол не быстрая у меня либа. Пришлось слегка ее переписать теперь средняя скорость передачи символа - 1056 микросекунд на AVR 16MHz и I2C 100MHz. На стандартных настройках ESP8266 выдает около 800 микросекунд и STM32 ~900 микросекунд. Дает о себе знать разница в тактовой частое. Дальнее увеличение скорости выливается в больше расходы памяти и флеши :(. Поэтому я прекратил изыскания.

    Добавил скетч - SpeedTest.ino для любителей доверять но проверять.
     
    Последнее редактирование: 8 июл 2018
  6. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    char те 8 бит от 0 до 256
     
  7. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.651
    Симпатии:
    181
    А я всегда думал, что char от 0 до 255.
     
  8. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    53
    да ошибся. конечно до 255
     

Поделиться этой страницей