Документы по использованию 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)
@Duncan C, 👍0
Обсуждение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
Он обеспечивает прокрутку, мигание, включение/отключение и т. д.
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Sainsmart LCD 2004 - проблема с библиотекой LiquidCrytal_I2C, не удается скомпилировать
- Что означают цифры позади lcd (0x27)?
- ATtiny85 I2C ЖК
- 16/2 arduino I2C ЖК-дисплей не загорается?
- ЖК-дисплеи размером более 20x04 и диагональю 5 дюймов
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