Документы по использованию i2C LCD с библиотекой Newliquidcrystal_1.3.5

Я купил ЖК-монитор I2C 20 x 4 в компании OddWires. (https://www.oddwires.com/20x4-lcd-display-with-i2c- interface/) Он поставляется без спецификаций или документации. После некоторого выдергивания волос я смог выяснить, как заставить его работать. (пришлось использовать команды

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Установите адрес ЖК-дисплея I2C и назначение контактов, включая контакт подсветки и полярность


и

  lcd.begin(20,4);               // инициализируем ЖК-дисплей до 20 символов, 4 строки

Для того, чтобы ЖК-дисплей работал (сложность заключалась в том, чтобы выяснить назначение контактов. Они не задокументированы.)

Я предполагаю, что этот ЖК-монитор очень похож на все остальные.

Он работает, и если найти основные команды для очистки экрана, установки курсора и печати текста.

Я также нашел команды lcd.cursor() и lcd.noCursor(), которые позволяют отображать/скрывать курсор.

Я хотел бы знать, могу ли я делать такие вещи, как мигание символов между нормальным и инверсным, подчеркивание текста и т. д., используя стандартную библиотеку LCD (я видел код, который загружает пользовательские карты символов, поэтому я предполагаю, что могу загрузить альтернативный подчеркнутый набор символов, но это звучит как МНОГО работы для чего-то, что, как я надеюсь, встроено в библиотеку.)

Может ли кто-нибудь указать мне документацию по полному набору команд, обычно доступных для этих ЖК-дисплеев в библиотеке Arduino Newliquidcrystal_1.3.5?

(Извините за неточности в характеристиках моего ЖК-модуля. Я не получил спецификаций от поставщика, поэтому мне пришлось догадываться, как его использовать.)

Я использую ЖК-библиотеку I2C NewLiquidCrystal LCD. (https://github.com/fmalpartida/New-LiquidCrystal)

, 👍0

Обсуждение

https://www.sparkfun.com/datasheets/LCD/HD44780.pdf ..... ссылка, которую вы разместили, показывает, что микросхема контроллера - HD44780, @jsotola

Так оно и есть. (Мимоходом.) Я пропустил это. Спасибо. Однако я не понимаю, как получить доступ к функциям HD44780 через рюкзак I2C., @Duncan C

@jsotola Так и есть (между прочим). Я пропустил это. Спасибо. Это спецификация драйвера LCD. Мне непонятно, что я могу сделать из «рюкзака» I2C на моем ЖК-модуле., @Duncan C

Что-то может быть не так с вашим примером кода . Код [LiquidCrystal_I2C](https://github.com/johnrickman/LiquidCrystal_I2C/blob/master/LiquidCrystal_I2C.cpp) на github ясно показывает конструктор только с 3 аргументами (i2c_address, столбцы, строки). Вы можете это объяснить?, @st2000

@st2000, Да, есть как минимум 3 разные версии конструктора. Тот, у которого всего 3 аргумента, предполагает назначение контактов по умолчанию и не работает. Мне пришлось использовать длинную форму, которая включала все различные назначения контактов, чтобы заставить ее работать., @Duncan C

Возможно, я не понимаю. В ссылке в моем комментарии выше приведен код Джона Рикмана на github.com для LiquidCrystal_I2C, который, я полагаю, вы используете. Единственное определение конструктора находится в строке 47. Я не вижу, где это перегруженный конструктор, как вы указываете. Поэтому трудно помочь, так как мы не знаем значения аргументов, которые вы используете при создании экземпляра LiquidCrystal_I2C., @st2000

Как я уже сказал в заголовке своего вопроса, я использую библиотеку Newliquidcrystal_1.3.5, которая (я думаю) является усовершенствованием LiquidCrystal_I2C. (https://github.com/fmalpartida/New-LiquidCrystal), @Duncan C

На таких сайтах, как github и bitbucket, есть множество драйверов Arduino LCD. Тот, на который я указал, является одним из наиболее часто используемых. Пожалуйста, отредактируйте исходный вопрос, чтобы включить эту важную ссылку. (У меня сейчас не хватило времени - я думаю, вам нужна ссылка на часто используемые спецификации ЖК-чипов и, возможно, объяснение того, чего ожидать. Если никто не ответит, я попытаюсь сформировать ответ позже. когда у меня будет больше времени), @st2000


1 ответ


1

Часто при разработке программного обеспечения код является документацией. Достоинства этого обсуждаются до отвращения в других местах.

Поскольку вы предоставили ссылку на репозиторий GitHub используемой вами библиотеки, у вас есть все, что вам нужно, хотя предоставленный путь utility/docs не полностью документирует интерфейс I2C.

Прототип функции (то есть функция, тип возвращаемого значения и параметры, но без фактического кода) находится в заголовочных файлах, которые обычно имеют .h суффикс.

Поскольку у вас ЖК-дисплей с интерфейсом I2C, вы можете посмотреть в репозитории GitHub файл LiquidCrystal_I2C.h

В этом файле видно, что класс определен с именем LiquidCrystal_I2C и имеет несколько конструкторов, каждый из которых имеет свой список параметров. Конкретный используемый конструктор класса — это тот, который соответствует количеству и типу, указанным в вашем объявлении объекта этого класса.

Код в заголовочном файле хорошо документирован. Первый из перечисленных прототипов включает в себя хорошие комментарии:

/*!
@метод
@abstract Конструктор класса.
@discussion Инициализирует переменные класса и определяет I2C-адрес
ЖК. Конструктор не инициализирует LCD.

@param lcd_Addr[in] I2C-адрес модуля расширения ввода-вывода. Для I2CLCDextraIO,
адрес можно настроить с помощью перемычек на плате.
*/
   LiquidCrystal_I2C (uint8_t lcd_Addr);
   // Конструктор с управлением подсветкой
   LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);

В этом блоке показаны первые 2 параметра конструктора: с типом uint8_t, который определяет адрес I2C модуля расширения ввода-вывода (это то, чем являются многие «ЖК-рюкзаки» — это или регистры сдвига) и один с адресом I2C, выводом подсветки и полярностью подсветки.

Двигаясь вниз, мы находим параметр с 10 параметрами, который вы в итоге и использовали:

 /*!
@метод
@abstract Конструктор класса.
@discussion Инициализирует переменные класса и определяет I2C-адрес
ЖК. Конструктор не инициализирует LCD.

@param lcd_Addr[in] I2C-адрес модуля расширения ввода-вывода. Для I2CLCDextraIO,
адрес можно настроить с помощью перемычек на плате.
@param En[in] LCD En (Enable) контакт, подключенный к модулю расширения ввода-вывода
@param Rw[in] LCD Rw (чтение/запись) вывод, подключенный к модулю расширения ввода-вывода
@param Rs[in] ЖК-вывод Rs (сброс), подключенный к модулю расширения ввода-вывода
@param d4[in] LCD data 0 pin map on module extension IO
@param d5[in] LCD data 1 pin map on module extension IO
@param d6[in] 2-контактная карта данных ЖК-дисплея на модуле расширения ввода-вывода
@param d7[in] 3-контактная карта данных ЖК-дисплея на модуле расширения ввода-вывода
*/
   LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
                     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
   // Конструктор с управлением подсветкой
   LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
                     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
                     uint8_t backlighPin, t_backlighPol pol);

Последний конструктор используется для переопределения сопоставления контактов по умолчанию от расширителя ввода-вывода до ЖК-дисплея. Это сложно — на чем основывались сопоставления? Расширитель ввода-вывода — это, по сути, способ доступа к нескольким контактам на внешнем чипе через один двухпроводной интерфейс (I2C). Способ подключения ЖК-дисплея зависит от того, какие контакты расширителя ввода-вывода подключены к каким контактам ЖК-дисплея. Формального стандарта не существует, хотя могут существовать соглашения.

Читая страницу GitHub, вы видите, что это

Клон новой библиотеки жидких кристаллов из: https://bitbucket.org/fmalpartida/new-liquidcrystal

По этой ссылке мы попадаем в какую-то документацию, отмечая, что один из типов подключения:

Плата расширения шины ввода-вывода I2C со специализированной микросхемой расширения ввода-вывода I2C PCF8574*, такой как ЖК-дисплей I2C дополнительные операции ввода-вывода.

Ссылка на это оборудование очень кстати! Мы можем перейти по ссылке, чтобы увидеть, что аппаратное обеспечение снято с производства, но полезно задокументировано с некоторыми схемами и макетами печатных плат, которые говорят нам, какие контакты расширителя ввода-вывода подключены к каким контактам ЖК-дисплея:

P0 — это контакт 0 модуля расширения ввода-вывода. В верхнем ряду расположены контакты модуля расширения ввода-вывода. Vo, RS, R/W и т. д. – это контакты ЖК-дисплея.

LCD Pin  |  I/O Expander Pin
     En  |  P4
    R/W  |  P5
E (rst)  |  P6
     D4  |  P0
     D5  |  P1
     D6  |  P2
     D7  |  P3

(Подсветка — это сквозной контакт, а не на расширителе ввода-вывода. Похоже, что определение контакта подсветки и полярность относятся к контактам расширителя ввода-вывода.)

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

Ваш "рабочий" экземпляр вызывается как (с аннотациями к вызываемому конструктору)

LiquidCrystal_I2C lcd(
  0x27,       // lcd_Addr
  2,          // En (включить контакт)
  1,          // Rw (вывод чтения/записи)
  0,          // Rs (контакт сброса)
  4,          // d4 (данные)
  5,          // d5 (данные)
  6,          // d6 (данные)
  7,          // d7 (данные)
  3,          // подсветка
  POSITIVE    // полярность подсветки
);

Это указывает на то, что расширитель ввода-вывода на вашем ЖК-дисплее не имеет те же соединения контактов, что и у того, для которого была написана библиотека, поэтому вы добились успеха только при переназначении их в конструкторе. .

Все это только для того, чтобы еще раз повторить, что вам пришлось дергать за волосы!

Фактические доступные функции отмечены:

Эта библиотека предоставляет тот же интерфейс для приложений, что и библиотека LiquidCrystal, входящая в состав Arduino SDK.

Но для верности их прототипы также можно увидеть в заголовочном файле: https: //github.com/fmalpartida/New-LiquidCrystal/blob/master/LCD.h

Он обеспечивает прокрутку, мигание, включение/отключение и т. д.

,