Hd44780 подключение: AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780

Содержание

Подключение HD44780 Работа с алфавитно-цифровым ЖКИ инициализация

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

Такие индикаторы часто используются при проектировании цифровых устройств, поэтому с ним необходимо уметь работать.
Рассмотрим типовое внутреннее строение знакосинтезирующего ЖКИ:

Внутренняя структура HD44780


В основе ЖКИ лежит матрица из жидких кристаллов, подавая напряжение на элемент которой мы можем «зажечь» точку на экране.

В нашем случае матрица состоит из знакомест (чаще всего 8х5 пикселей), сгруппированых в несколько рядков. Этим всем управляет встроенный контроллер HD44780. У контроллера есть однобайтные ячейки памяти (DDRAM), содержимое которых собственно отображается на экране согласно таблице записанной в CGRAM. Ячеек памяти обычно больше чем знакомест в ЖКИ, поэтому адресацию знакомест нужно смотреть в даташите. То есть нам необходимо только в нужную позицию записать код нужного знака, а все остальное HD44780 сделает сам.

Для выбора позиции существует виртуальный курсор (номер текущей ячейки памяти, АС), которым можно управлять посредством команд, курсор можно сделать видимым. По умолчанию при записи символа в ячейку, курсор сдвигаеться вперед на одну позицию. Коды символов для ЖКИ поддерживающего кириллицу можно увидеть в таблице:


Старшая тетрада кода будет равна ряду выбранного символа, а младшая – строке. Можно создать свою таблицу символов, записав ее в CGRAM. На каждый символ требуется 5 байт, где единицы отвечают за «зажженные» пиксели. Например, цифра «8» кодируется последовательностью 0x6c,0x92,0x92,0x92,0x6c.
Коды команд приведены в таблице.

Таблица символов HD44780


Значения флагов:

Остается открытым вопрос: «как записать в нужную позицию код требуемого символа»? Для этого рассмотрим за что отвечают выводы ЖКИ. Выводы DB0-DB7 отвечают за входящие/исходящие данные. Высокий уровень на выводе RS дает индикатору понять, что сигнал на выводах DB0-DB7 является данными, а низкий – командой. Вывод W/R отвечает за направление данных, пишутся ли данные в память или читаются из нее (обычно чтение из ЖКИ не используется, можем смело на него подать низкий уровень). Импульс на выводе

Е (длительностью не менее 500 нс) используется как сигнал для записи/чтения данных с выводов DB0-DB7, RS и W/R.

Вывод V0 используется для задания контраста изображения, вывода А,К – для питания подсветки (если она есть в вашей модели ЖКИ). Оставшиеся 2 вывода – собственно питание ЖКИ. То есть, для управления ЖКИ потребуется 8+1+1=10 выводов. Но можно работать в режиме 4-х битного интерфейса. При этом, сперва будет передавать старшая тетрада команды/данных на выводах DB4-DB7, а после – младшая. Выводы при DB0-DB3 при этом не используются. Итого для управления требуется 6 выводов микроконтроллера.
Теперь рассмотрим живой пример. Напишем программу для вывода текста «avrlab.com» на имеющийся у меня в наличии Wh2602А (2 строки по 16 символов).

Для других ЖКИ следует сверить соответствие ячеек

DDRAM знакоместам. Схема подключения ЖКИ к контроллеру выглядит так.

Схема подключения к микроконтроллеру AVR


Резистор R3 — 17 Ом ограничивает ток через подсветку, а переменный VR1 задает контраст (если все правильно подключено и запрограммировано, но индикатор молчит, покрутите VR1, чтобы изображения стало видимым). Также не в коем случае не следует путать полярность ЖКИ, питать его выше 5,5В, со своего опыта могу сказать, что горят они моментально. Назначение всех остальных деталей такое же как в макетной платы для ATtiny2313.
Теперь перейдем к написанию программы. Для контроля индикатора напишем программу с несколькими ключевыми функциями работы с ЖКИ: lcd_dat(unsigned char x) – для записи данных х, lcd_com(unsigned char x) – для записи команды х, lcd_init(void) – для начальной инициализации индикатора:

  1. #include <avr/io.h> //библиотека ввода/вывода

  2.  

  3. #define RS 2 //RS=PD2 - сигнал управления ЖКИ

  4. #define E 3 //E=PD3 - сигнал управления ЖКИ

  5.  

  6. #define TIME 10 //Константа временной задержки для ЖКИ

  7. //Частота тактирование МК - 4Мгц

  8.  

  9. //Программа формирвоания задержки

  10. void pause (unsigned int a)

  11. { unsigned int i;

  12.  

  13. for (i=a;i>0;i--);

  14. }

  15.  

  16. //Программа передачи команд в ЖКИ

  17. void lcd_com (unsigned char lcd)

  18. { unsigned char temp;

  19.  

  20. temp=(lcd&~(1<<RS))|(1<<E); //RS=0 – это команда

  21. PORTD=temp; //Выводим на portD старшую тетраду команды, сигналы RS, E

  22. asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  23. PORTD=temp&~(1<<E); //Сигнал записи команды

  24.  

  25. temp=((lcd*16)&~(1<<RS))|(1<<E); //RS=0 – это команда

  26. PORTD=temp; //Выводим на portD младшую тетраду команды, сигналы RS, E

  27. asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  28. PORTD=temp&~(1<<E); //Сигнал записи команды

  29.  

  30. pause (10*TIME); //Пауза для выполнения команды

  31. }

  32.  

  33. //Программа записи данных в ЖКИ

  34. void lcd_dat (unsigned char lcd)

  35. { unsigned char temp;

  36.  

  37. temp=(lcd|(1<<RS))|(1<<E); //RS=1 – это данные

  38. PORTD=temp; //Выводим на portD старшую тетраду данных, сигналы RS, E

  39. asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  40. PORTD=temp&~(1<<E); //Сигнал записи данных

  41.  

  42. temp=((lcd*16)|(1<<RS))|(1<<E); //RS=1 – это данные

  43. PORTD=temp; //Выводим на portD младшую тетраду данных, сигналы RS, E

  44. asm("nop"); //Небольшая задержка в 1 такт МК, для стабилизации

  45. PORTD=temp&~(1<<E); //Сигнал записи данных

  46.  

  47. pause(TIME); //Пауза для вывода данных

  48. }

  49.  

  50. //Программа иниализации ЖКИ

  51. void lcd_init (void)

  52. {

  53. lcd_com(0x2c); //4-проводный интерфейс, 5x8 размер символа

  54. pause(100*TIME);

  55. lcd_com(0x0c); //Показать изображение, курсор не показывать

  56. pause(100*TIME);

  57. lcd_com(0x01); //Очистить DDRAM и установить курсор на 0x00

  58. pause (100*TIME);

  59. }

  60.  

  61. //Основная программа

  62. int main(void)

  63. {

  64. DDRD=0xfc; //Инициализация portD

  65. PORTD=0x00;

  66.  

  67. pause(1000); //Задержка, чтобы ЖКИ успел включиться

  68. lcd_init(); //Инициализация ЖКИ

  69.  

  70.  

  71. lcd_dat('w'); //Вывод "www.avrlab.com"

  72. lcd_dat('w');

  73. lcd_dat('w');

  74. lcd_dat('.');

  75. lcd_dat('a');

  76. lcd_dat('v');

  77. lcd_dat('r');

  78. lcd_dat('l');

  79. lcd_dat('a');

  80. lcd_dat('b');

  81. lcd_dat('.');

  82. lcd_dat('c');

  83. lcd_dat('o');

  84. lcd_dat('m');

  85.  

  86. lcd_com(0xc0); //Ставим курсор на начало 2-й строки ЖКИ

  87.  

  88. lcd_dat('I'); //Записываем "It's so easy"

  89. lcd_dat('t');

  90. lcd_dat('"');

  91. lcd_dat('s');

  92. lcd_dat(' ');

  93. lcd_dat('s');

  94. lcd_dat('o');

  95. lcd_dat(' ');

  96. lcd_dat('e');

  97. lcd_dat('a');

  98. lcd_dat('s');

  99. lcd_dat('y');

  100.  

  101.  

  102. while(1) //бесконечный цикл

  103. ;

  104.  

  105. return 1;

  106. }

Программа очень проста, разобраться в ней не составит труда любому, кто хоть немного владеет C для AVR. Для латиницы и цифр ASCII коды совпадают с зашитыми в знакогенератор ЖКИ, поэтому позволительно использовать lcd_dat(‘A’). Можно создать свою библиотеку для работы с ЖКИ, выделив функции lcd_dat(unsigned char x), lcd_com(unsigned char x), lcd_init(void) в отдельный модуль

LCD.h и подключать его за надобностью.

Эта затея очень экономит время, стоит только один раз написать нужные функции, а потом все время их только использовать. Также можно подметить, что неудобно выводить длинную фразу по одной букве, для этого можно нашу выводимую строку запихнуть в массив из unsigned char и выводить с помощью цикла:

  1. int main(void)

  2. { unsigned char data [14]= {'w','w','w','.','a','v','r','l','a','b','.','c','o','m'};

  3. unsigned char i;

  4. DDRD=0xfc; //Инициализация portD

  5. PORTD=0x00;

  6.  

  7. pause(1000); //Задержка, чтобы ЖКИ успел включиться

  8. lcd_init(); //Инициализация ЖКИ

  9.  

  10. for (i=0;i<14;i++) //Вывод записи побуквенно

  11. lcd_dat(data[i]);

Только не стоит забывать, что нумерация массивов в С начинается с нуля. Существующую программу можно без существенных изменений использовать совместно с контроллером

ATtiny2313, подключив ЖКИ к PORTB, та как PORTD у ATtiny2313 имеет всего 7 выводов, а не 8, как у ATmega8.

Также советую подключать ЖКИ с помощью разъемных соединений. Очень удобно при отладке программы, когда нужно вывести некоторые промежуточные данные. Подсоединил один разъем и всего дела. В продолжение этой заметки в ближайшее время рассмотрю ввод с матричной клавиатуры 4х4 и отображение считанной информации на ЖКИ.
Всем хорошего дня 😉

Скачать исходный код библиотеки HD44780 под AVR Studio

Скачать исходный код библиотеки HD44780 и модели для Proteus

Универсальная схема подключения ЖК-дисплея HD44780 – Радиодед

Предложена простая схема, которая позволяет подключать любые ЖК-индикаторы на базе контроллера HD44780 с параллельной шиной управления в 4- и 8-битовых режимах. Семисегментные и знакосинтезирующие производства ООО “МЭЛТ” и любые зарубежные LCD160x подключаются одинаково. Вместо чтения сигнала готовности используется временная задержка для выполнения индикатором операции записи во внутренние регистры.

Технические решения, положенные в основу разработки, защищены патентами РФ №2390048, №2547217 на изобретение, они будут рассмотрены подробно. Подразумевается, что читатель представляет себе принципы управления ЖКИ и последовательной передачи данных.

Выбор команды или данных при записи в регистр индикатора осуществляется логическим уровнем, подаваемым на сигнальный вход A0. При «0» информационное слово на шине данных интерпретируется контроллером как команда, при «1» — как данные. В предлагаемой схеме этот выбор производится установкой/сбросом линии последовательных данных SD интерфейса сразу после окончания записи в сдвиговый регистр. Этим завершается подготовка на шине индикатора управляющего слова.

Остается, согласно техдокументации на прибор, подать импульс на вход разрешения записи (E), который формирует цепь VD1, R2, C2. Любой импульс на линии CLK заряжает конденсатор C2. Таким образом, с началом записи в сдвиговый регистр, устанавливается высокий уровень на входе разрешения индикатора (в согласии с документацией) и поддерживается в течение всего цикла. По завершению последнего тактового импульса, в текущем обращении, конденсатор начинает разряжаться через R2. При достижении напряжением половины напряжения питания, информация защелкивается в регистре драйвера индикатора (не соответствует документации на индикатор, но в согласии с физикой работы полупроводниковых приборов). Маленький нюанс…

Этот алгоритм надежно работает, когда высокий уровень на входе разрешения установлен до начала изменения данных на шине индикатора. Поэтому логика программы формирует тактовых импульсов на один больше, чем требуется (только для знакосинтезирующих дисплеев). Самый первый из них информационно пуст, но именно он “взводит” разрешение. Учитывая минимальное время выполнения операции логикой индикатора с контроллером HD44780 (40мкС), время разряда конденсатора до порогового уровня (~14-20мкС) не сильно уменьшает общее быстродействие.

Для примера, время опроса 4-х кнопок и записи байта в 8-и битовом режиме, при тактовой частоте МК 8МГц, составляет всего 34мкС. Байт, в 4-битовом режиме, пишется за 88мкС. Это время включает и сканирование. Для семисегментных MT-10T7/8/9 программная часть чуть проще, сканирование кнопок и вывод 10-и знаков на индикатор занимает около 600uS (тактовая частота МК 8МГц).

Предлагаемое решение имеет существенный недостаток. Поскольку временной интервал записи в регистры ЖКИ формируется с помощью (аналоговой) цепи (R2, C2), схема становится критичной к частоте тактирования управляющего контроллера. Компенсация этой зависимости предусмотрена для индикаторов типа MT-10. В программе необходимо выбрать константу Dly_wr, соответствующую диапазону частоты.

Работоспособность схемы не проверялась на частотах ниже 4-х и выше 20MHz, однако на низких частотах, теоретически, не существует ограничений. Знакосинтезирующие индикаторы MT проверялись на частоте микроконтроллера 8МГц. Другие частоты потребуют коррекции программных задержек. Все испытания проводились с микроконтроллерами ATTINY (13, 24, 25, 261).

Кроме управления индикаторным модулем, описываемое схемное решение позволяет генерировать звуковые сигналы, правда с некоторыми ограничениями. Канал звука содержит n-канальный MOSFET транзистор и пьезоизлучатель. Обновление данных в индикаторе и звуковые сигналы близки по спектру, поэтому для каждого конкретного устройства, где планируется применить это решение, требуется выбрать номинал конденсатора C4 для максимального подавления сигнала с частотой передачи данных по шине, но слабые щелчки в моменты обращения к индикатору все же слышны. Учитывая небольшие затраты на канал звука и преимущества, которые он предоставляет в информационном плане, с этими недостатками можно мириться.

В состав модуля дополнительно включена схема сканирования матрицы кнопок. Подпрограмма опроса организует “бегущую единицу” на выходах регистра сдвига, которая поочередно открывает ключи аналогового коммутатора, к которым, в свою очередь, подключены кнопки. Состояние шины SD интерфейса, во время логической “1” на шине CLK, считывается микроконтроллером. Емкость шины SD, заряженная до 5В при подготовке опроса, разряжается, если кнопка нажата. Нажимать можно по одной и группами, логика программы формирует позиционный код независимо для каждой кнопки. Демонстрационная программа для индикаторов МТ-10 выводит скан-код в первую позицию, сопровождая любое нажатие коротким звуковым сигналом. При необходимости, количество кнопок можно удвоить, если добавить второй коммутатор.

Еще одним недостатком является необходимость обновления индикатора при сканировании кнопок. Завершение опроса формирует импульс записи в индикатор и может испортить записанные ранее данные. Хотя этот вопрос до конца пока не исследован (неизвестно, как ведет себя адресный счетчик МТ-10 при переполнении), все же рекомендуется так строить программу, чтобы обойти этот момент. В демонстрационной программе период опроса и обновления содержимого памяти индикатора выбран порядка 300 мС и неудобств в пользовании кнопками нет.

Демонстрационные программы для семисегментных индикаторов MT-10T7/8/9 и знакосинтезирующих MT-XX при работе в 4-х и 8-и битовых режимах написаны на языке ассемблера для микроконтроллеров фирмы ATMEL серии TINY и компилировались конкретно для tiny2313. Демки демонстрируют только возможности управления индикаторами, сервис кнопок и звукового канала по последовательному двухпроводному интерфейсу. Автор предпочитает называть его DDI – The interface of distant devices (интерфейс удаленных устройств).

Исходный текст легко перекомпилировать на любой микроконтроллер ATMEL, т.к. таймеры, прерывания и специальные возможности не используются. Достаточно “голого” микроконтроллера, к двум портам которого подключена схема сопряжения. Объем кода, отвечающий непосредственно за обслуживание индикатора получился чрезвычайно компактным и не будет помехой даже при реализации на МК с малой памятью. Вот, что записано в комментариях к самой первой рабочей программе для знакосинтезирующих (она была, сами понимаете, без излишеств): init+service+dly  (24+38+14)=76byte. С тех пор код маленько вырос, но в две сотни байт, даже со звуком, уложится. Прошивка демы “тянет” 250 байт для MT-10Tx, а там перекодировка, в отличие от MT-16. Правда, у последних свои особенности.

Несколько комментарий к осцилограммам. Первая осциллограмма иллюстрирует процесс с ЖКИ MT-10T. Первые четыре фронта CLK это запись 1 в младший разряд сдвигового регистра (“бегущая 1”). Следующие четыре импульса CLK это сдвиг единицы и чтение состояния кнопок. Обратите внимание на спад вершин импульсов шины SD, они скошены. Это порт микроконтроллера переключен на вход. Кнопки отпущены, читается их инверсное значение. Код нажатия 0000. Потом переход к программе записи информации и занесение нулевого адреса в адресный регистр (SD=A0). Далее (CLK=0) формируется спадающий фронт разрешения записи. Центральная вертикальная линия на половине напряжения питания. Момент фиксации. Следом идет запись первого полубайта в регистр данных индикатора.

На второй картинке полный цикл обновления данных. 20 полубайт с SD=1 (A0). Состояние кнопок в регистре (sc_key), индикатор обновлен.

Третья относится к знакосинтезирующим индикаторам в байтовом режиме. Вес нажатой кнопки 4. Выводится код символа, по завершению устанавливается SD. Полубайтовый режим не имеет отличий в осцилограммах, поэтому не приводится.

Интересное наблюдение (см. последняя осциллограмма)… Разрешение записи на индикатор подано, на A0 (SD) и шине данных изменяется информация, т.к. идет непрерывная запись в сдвиговый регистр, а на экран будет выведен нужный символ, код которого содержится в последних 8 битах, записанных в регистр. Это указывает, что драйвер индикатора не имеет в составе счетчика бит. Информация в индикаторе сохранится только та, которая находится на шине индикатора в момент спада импульса разрешения. Такая организация контроллера ЖКИ позволяет делать то, что описано в данной статье, напоминая нам известную притчу про гланды. Кстати, это было рабочее название статьи, а пациент жив и доволен.

Скачать исходник и прошивку

Литература:

  1. Радиолоцман №12, 2016
  2. http://vbb.su/?p=66

Автор: Бабанин Валерий Борисович, Красноярский край, [email protected]

Просмотров всего: 5 668, сегодня: 1

Подключение hd44780

Рассмотрим взаимодействие пользователя и устройства на базе микроконтроллера. Очень часто пользователю нужно чем-то вводить информацию, и с чего-то ее считывать. Для этих целей очень хорошо подходит клавиатура и дисплей заметка про считывание клавиши. В этой заметке рассмотрим поподробнее отображение информации на символьном ЖКИ со знакосинтезирующим контроллером HD


Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Урок 3. По микроконтроллерам(AVR) (от КАС) — подключение ЖК дисплея HD44780 + atmega8

Подключение LCD на базе HD44780 к ATmega16 (LM016L LCD 16×2)


Уважаемые посетители, Вы просматриваете страницу на которой собраны. Множество полезных статей. Сделай сам сборник полезных статей Главная Регистрация Правила. О сайте. В большинстве случаев все сразу упирается в вывод информации, можно на скорую руку подключить семи сегментный индикатор, можно устроить вывод на ПК.

Первый вариант прост с точки зрения программирования, но для меня в нём есть два значительных минуса: большое потребление и маленькая информативность. Во втором случае устройство оказывается привязано к ПК, в своих устройствах компьютер я использую редко, поэтому для меня на данный момент самым оптимальным является символьный ЖК индикатор, например, Winstar WH Именно об этом пойдет речь в статье, как подружить stm32f4 с символьным lcd.

Схема подключения индикатора к отладочной плате, используется 4-х битный интерфейс, для экономии ног и для простоты подключения. Вернуться 3 0.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем. Комментарии: Оставить комментарий. Главная страница Регистрация Новое на сайте Статистика. Беспроводное управление освещением в доме Кратко про логику работы. В каждом выключателе находится микроконтроллер который управляет передатчиком, все это дело питается от литиевой батарейки 3В, при любом изменении состояния контактов выключателя микроконтроллер просыпается, определяет положение.

Восстановление удалённых файлов Начнем с того что эта проблема решаема, конечно не во всех случаях. Вероятность восстановления файлов зависит от многих составляющих: где хранились данные, сколько времени прошло с момента удаления, какого рода данные и т. Серверный процессор intel Xeon в домашнем компьютере Здравствуйте! В интернете огромное количество статей и всевозможных обзоров про то как на домашнем компьютер на базе сокета LGA запустить серверный процессор intel xeon.

LCD дисплей для Arduino На сегодняшний день создавая интерфейс взаимодействия человека с устройством, разработчики все чаще предпочитают использовать цветные LCD дисплеи вместо символьных дисплеев и монохромных графических. Думаю, причины развития такой тенденции всем очевидны. Валкодер из шагового двигателя Валкодер из шагового двигателя Я думаю многие согласятся, что применение валкодера при регулировании в последнее время приобретает большую популярность.

Достоинств использования валкодера вместо кнопок на мой взгляд гораздо больше чем недостатков,.


Подключение HD44780 Работа с алфавитно-цифровым ЖКИ инициализация

Уважаемые посетители, Вы просматриваете страницу на которой собраны. Множество полезных статей. Сделай сам сборник полезных статей Главная Регистрация Правила. О сайте. В большинстве случаев все сразу упирается в вывод информации, можно на скорую руку подключить семи сегментный индикатор, можно устроить вывод на ПК. Первый вариант прост с точки зрения программирования, но для меня в нём есть два значительных минуса: большое потребление и маленькая информативность. Во втором случае устройство оказывается привязано к ПК, в своих устройствах компьютер я использую редко, поэтому для меня на данный момент самым оптимальным является символьный ЖК индикатор, например, Winstar WH

В общем решил замутить проект на AVR. Раньше с AVR не работал, но писал несложные программы для pic-ов. В общем мне.

Подключение LCD 1602 (HD44780) к Arduino

Можно поставить переменный резистор, включенный потенциометром и крутить в свое удовольствие. Порт на выход Вывести в порт код команды Пауза Е0 Пли! Порт на вход, на всякий случай. Включение в данную схему ЖКИ-модуля, рассчитанного на расширенный диапазон температур, не приведет к успеху, так как из-за особенностей применяемых в них ЖК-материалов, эти ЖКИ требуют повышенного напряжения питания возобновляемая энергетика: слова и их значение и при питании напряжением 5 В изображение либо будет отсутствовать совсем, либо будет слабоконтрастным. Отзывы о хостинга. Каждый символ занимает 1 байт. В любом случае, для получения достоверной информации необходимо воспользоваться соответствующей справочной литературой изготовителя модуля. Дрыгом напряжения на этой линии мы даем понять дисплею зрители не могут отличить нативную картинку 4K от интерполяции что нужно. Что эти линии ведут на входы питания, lCD, поэтому, впаяв резисторы, можно. Управление, lCD-дисплеем, hD по одному проводу.

Текстовый экран 16×2

В зависимости от модели бывает два типа питания дисплея: 3,3В и 5В. Выгружаем наш проект в среду Workbench. Скачиваем, распаковываем, видим две папки src и inc. Содержимое этих папок нам необходимо скопировать в одноименные папки нашего проекта.

ЖК-дисплеи отлично подходят для вывода показаний датчиков, обычных сообщений, а также материалов из Интернета, таких как твиты.

Подключение LCD(HD44780) к микроконтроллерам AVR

Авторизация Зарегистрироваться Логин или эл. Напомнить пароль Пароль. Войти Запомнить меня. При работе с Arduino иногда возникает необходимость вывести какие-либо данные на дисплей, но передавать для этого данные на ПК имеет смысл только если устройство будет использоваться в связке с ПК. А как же быть с автономными устройствами?

Подключение LCD дисплея hd44780 к Arduino

Re: пассики для проигрывателей винила Re: Динамическая индикация на LCD дисплее Re: Пассик на пленочный магнитофон Re: Продам набор SMD конденсаторов в корпусе Re: ШИМ-регулятор на Attiny13

К сожалению, стандартная схема подключения ЖК-дисплеев на контроллере HD не всегда удобна, т. к. занимает как минимум 6 цифровых.

Подключение MSP430g2xxx к 5V HD44780

LCD дисплей — частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов. В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.

Зачастую контроллеру приходится сообщать пользователю какие-либо данные, и далеко не всегда можно обойтись одними лишь цифрами. Для отображения текстовой информации как правило применяют LCD индикаторы на базе контроллера HD Не смотря на то, что подобный дисплеев очень много все они управляются одинаково так как контроллер в них стоит один и соответственно система команд у них одна, так же они имеют одинаковый набор ног. В этой статье мы попробуем подключить такой дисплей к контроллеру установленному на STM32vl Discovery.

Сейчас этот форум просматривают: Alexey u и 16 гостей.

Команды управления и данные будут пересылаться последовательно в сдвиговый регистр 74HC 8-разрядный сдвиговый регистр с защелкой на выходе , а параллельные выходные данные с регистра поступают на LCD. Микросхема 74HC содержит 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий. На картинке ниже показано расположение выводов микросхемы 74HC

Последовательный порт UART. Для вывода текстовой информации различного содержания удобно применять символьные дисплеи в виду их распространённости и простоты использования. В основе большинства таких дисплеев лежит контроллер HD, который позволяет подключаться к дисплею по 4 или 8 линейной шины данных и 3-х линий управления.


Проекты на микроконтроллерах AVR — Работа с дисплеем 16×2 на контроллере HD44780 в Bascom-AVR

 

 Работа с дисплеем 16×2 на контроллере HD44780 в Bascom-AVR

 

 Жидкокристаллические дисплеи на контроллере HD44780 (а также совместимом с ним KS0066) очень распространены благодаря простому методу работы с ними, а так же небольшой цене. В зависимости от исполнения дисплея, они позволяют выводить от 8-и до 40-ка символов в каждой строке, строк может быть одна, две или четыре. Чаще всего встречаются 8*2 (восемь символов*две строки), 16*2 и 20*4.  

 

 

 Для примера рассмотрим распиновку индикатора 16*2 (у всех дисплеев на контроллере HD44780 она похожа)

 

 

У каждого дисплея на контроллере HD44780 для подключения имеется 14 выводов + 2 вывода для подсветки (если она имеется):

 

  1. Земля, GND
  2. Напряжение питания, Vcc (+5V)
  3. Настройка контрастности, Vo
  4. Выбор регистра, R/S
  5. Чтение/запись, R/W
  6. Сигнал разрешения чтения/записи, E
  7. Bit 0, D0 
  8. Bit 1, D1
  9. Bit 2, D2
  10. Bit 3, D3
  11. Bit 4, D4 
  12. Bit 5, D5
  13. Bit 6, D6
  14. Bit 7, D7 
  15. Питание подсветки для дисплеев с подсветкой, LED +
  16. Питание подсветки для дисплеев с подсветкой, LED —

 

Данные в дисплей загружаются по шине данных (D0-D7), при этом контроллер поддерживает как 8-и, так и 4-х битное подключение. 4-х битное подключение экономит ножки микроконтроллера и чаще всего достаточно для многих задач (при 8и битном подключении можно быстрее загружать данные в контроллер дисплея, но нам пока это ни к чему, поэтому не будем его рассматривать). Для 4-х битного подключения используются 4 последних бита шины (D4-D7).

 

В качестве примера будем использовать дисплей 20х4, подключенный к микроконтроллеру ATmega8 по 4х битному интерфейсу по схеме ниже

 

 

 Дисплей требует для питания 5 вольт, делителем на резисторе R1 настраивается контрастность отображаемых символов, вывод R/W подключается к земле (т.е. выбрана постоянная запись в дисплей). Подключать оставшиеся выводы можно к любым свободным ножкам микроконтроллера. Конфигурация ножек для подключения дисплея у микроконтроллера ATmega8 будет выглядеть следующим образом:

 

$regfile = «m8def.dat»                        ‘выбранный тип микроконтроллера
$crystal = 1000000                            ‘частота работы 1 МГц

Config Lcd = 20 * 4                           ‘указываем какой у нас дисплей

‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=PortB.3, Db5=PortB.2, Db6=PortB.1, Db7=PortB.0,E=PortB.4,Rs=PortB.5

 

 

А дальше уже можно выводить информацию на дисплей: буквы, цифры, специальные символы, а если извернуться и псевдографику. Для вывода данных на дисплей нужно знать несколько команд: 

CLS — очистка дисплея

LCD — вывести данные на дисплей (пример: Lcd «Hello world» выведет надпись Hello world)

Locate — установка места на индикаторе с которого начнется выводится текст (пример: Locate 1,5 установит курсор на 5-е знакоместо первой строчки и текст выводимый командой LCD будет начинаться отсюда)

CURSOR ON / OFF / BLINK / NOBLINK — включает или отключает отображение и мигание курсора, по умолчанию он включен (пример: отключим курсор командой Cursor Off)

 

А теперь напишем вот такую небольшую программку, которая выведет надпись на дисплей:

 

$regfile = «m8def.dat»      ‘выбранный тип микроконтроллера
$crystal = 1000000          ‘частота работы 1 МГц

Config Lcd = 20 * 4         ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                  ‘выключим отображение курсора
Cls                         ‘очистим дисплей

Lcd «LCD 20*4 HD44780»      ‘выводим текст в первой строке
Locate 2 , 8                ‘переводим курсор на вторую строку, восьмое знакоместо
Lcd «AVRproject.ru»         ‘выводим текст

End

 

 

в результате на дисплее получим следующее:

 

 

 

 

 

 Также в Bascom-AVR есть еще несколько дополнительных команд для работы с дисплеями:

 

UPPERLINE — возвращает курсор на самую верхнюю строчку дисплея.

LOWERLINE — перевод курсора на вторую строку

THIRDLINE — перевод курсора на третью строку

FOURTHLINE — перевод курсора на четвертую строку 

HOME — также возвращает курсор на верхнюю строчку, но в отличии от команды UPPERLINE эта команда может принимать дополнительные значения: если после нее поставить букву L, T или F то курсор переместится в начало строчки, название которой начинается с соответствующей буквы (пример:  для того чтобы переместить курсор в начало третьей строки, нужно написать команду HOME T )

 

 

пример кода для вывода информации на дисплей с использованием этих команд:

 

$regfile = «m8def.dat»      ‘выбранный тип микроконтроллера
$crystal = 1000000          ‘частота работы 1 МГц

Config Lcd = 20 * 4         ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                  ‘выключим отображение курсора
Cls                         ‘очистим дисплей

Lcd «*** HD44780  LCD ***»  ‘выводим текст в первой строке
Lowerline                   ‘переходим на вторую строку
Lcd «Line number 2»         ‘выводим текст
Thirdline                   ‘переходим на третью строку
Lcd «AaBbCcDdEeFfGgHfIiJj»  ‘выводим на третьей строке
Fourthline                  ‘переходим на четвертую строку
Lcd «1234567890»            ‘печатаем на четвертой строчке

End                         ‘конец программы

 

 

 

 

 

 

SHIFTLCD LEFT / RIGHT — сдвигает текст в строке на которой находится курсор на одну позицию влево или вправо. 

SHIFTCURSOR LEFT / RIGHT — сдвигает курсор на одну позицию влево или вправо 

 

и пример того как использовать сдвиг текста:

 

$regfile = «m8def.dat»    ‘выбранный тип микроконтроллера
$crystal = 1000000        ‘частота работы 1 МГц

Dim A As Byte             ‘переменная для организации цикла

Config Lcd = 20 * 4       ‘указываем какой у нас дисплей
‘и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                ‘выключим отображение курсора
Cls                       ‘очистим дисплей

Locate 1 , 11             ‘устанавливаем курсор на первой строке, десятом знакоместе
Lcd «Bascom-AVR»          ‘выведем текст

‘цикл сдвига влево
For A = 1 To 10           ‘повторяем этот цикл пока переменная А не достигнет значения 10
 Shiftlcd Left            ‘сдвинем текст влево
 Waitms 300               ‘задержка 300 миллисекунд
Next A                    ‘увеличиваем значение переменной А на 1

‘цикл сдвига вправо
For A = 1 To 10           ‘повторяем цикл пока переменная А не достигнет значения 10
 Shiftlcd Right           ‘теперь сдвинем текст вправо
 Waitms 300               ‘задержка 300 миллисекунд
Next A                    ‘увеличиваем значение переменной А на 1

‘продолжаем выполнение  программы
Wait 1                    ‘задержка 1 секунда

Home F                    ‘устанавливаем курсор на нижнюю строчку

Lcd «END PROGRAM»         ‘и выводим надпись

End                       ‘конец программы

 

 

 

 

 

 

Подключение ЖК-дисплея HD44780 к Raspberry PI

Недорогие экраны на микросхеме Hitachi HD44780 завоевали рынок недорогих устройств отображения информации. В 90-е годы на их базе выпускалось огромное количество моделей, начиная с 8х1 (восемь символов в одной строке) и заканчивая 40х4. Они нашли широкое применение в принтерах, копирах, сетевом оборудовании.

Типовой интерфейс дисплея

Расшифровка выводов

VSS Земля, общий провод, GND
VDD Напряжение питания, Vcc (+5V)
VO Настройка контрастности
RS Выбор регистра (R/S для HD44780, A0 для KS0066)
RW Чтение/запись
E Строб по спаду (Enable)
DO Bit 0 (младший для 8-битного интерфейса)
D1 Bit 1
D2 Bit 2
D3 Bit 3
D4 Bit 4 (младший для 4-битного интерфейса)
D5 Bit 5
D6 Bit 6
D7 Bit 7 (старший для 8-(4-)битного интерфейса)
A Питание подсветки для дисплеев с подсветкой (анод)
K Питание подсветки для дисплеев с подсветкой (катод)

Дисплей может работать в 4- или 8-битном режимах. В 4-битном режиме ножки с седьмой по десятую не используются, а данные передаются через 11-14 ножки, по четыре бита за такт.
ПЗУ контроллера позволяет хранить 240 символов.

Подсветка питается от 5 вольт. При подключении необходимо использовать токоограничительный резистор (50-100 Ом).

Схема подключения экрана к Raspberry PI через макетную плату

Создаем файл, например lcd, и вставляем следующий код:


#!/usr/bin

import RPi.GPIO as GPIO
from time import sleep
from subprocess import *
from time import sleep, strftime
from datetime import datetime

cmd = «ip addr show wlan0 | grep inet | awk ‘{print $2}’ | cut -d/ -f1″

def run_cmd(cmd):
p = Popen(cmd, shell=True, stdout=PIPE)
output = p.communicate()[0]
return output

class HD44780:

def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):

self.pin_rs=pin_rs
self.pin_e=pin_e
self.pins_db=pins_db

GPIO.setmode(GPIO.BCM)
GPIO.setup(self.pin_e, GPIO.OUT)
GPIO.setup(self.pin_rs, GPIO.OUT)
for pin in self.pins_db:
GPIO.setup(pin, GPIO.OUT)

self.clear()

def clear(self):
«»» Blank / Reset LCD «»»

self.cmd(0x33) # $33 8-bit mode 
self.cmd(0x32) # $32 8-bit mode 
self.cmd(0x28) # $28 8-bit mode 
self.cmd(0x0C) # $0C 8-bit mode 
self.cmd(0x06) # $06 8-bit mode 
self.cmd(0x01) # $01 8-bit mode

def cmd(self, bits, char_mode=False):
«»» Send command to LCD «»»

sleep(0.001)
bits=bin(bits)[2:].zfill(8)

GPIO.output(self.pin_rs, char_mode)

for pin in self.pins_db:
GPIO.output(pin, False)

for i in range(4):
if bits[i] == «1»:
GPIO.output(self.pins_db[::-1][i], True)

GPIO.output(self.pin_e, True)
GPIO.output(self.pin_e, False)

for pin in self.pins_db:
GPIO.output(pin, False)

for i in range(4,8):
if bits[i] == «1»:
GPIO.output(self.pins_db[::-1][i-4], True)

GPIO.output(self.pin_e, True)
GPIO.output(self.pin_e, False)

def message(self, text):
«»» Send string to LCD. Newline wraps to second line»»»

for char in text:
if char == ‘n‘:
self.cmd(0xC0) # next line 
else:
self.cmd(ord(char),True)

if __name__ == ‘__main__’:

lcd = HD44780()
ipaddr = run_cmd(cmd)
lcd.message(datetime.now().strftime(‘%b %d %H:%M:%Sn‘))
lcd.message(‘IP %s’% (ipaddr))
sleep(2)
GPIO.cleanup()
«»»lcd.message(«Raspberry Pin Take a byte!») «»»

Запускаем файла на исполнение осуществляется с командной строки. Для этого набираем команду


root# sudo python lcd

На экране мы должны увидеть системное время и IP адрес устройства.

Как подключить ЖК-дисплей на базе HD44780?

I²C

Подключить его довольно просто. Контрастный вывод (V O ) отдельных дисплеев, которые я использую, должен быть заземлен. Обычно вы подключаете его к потенциометру, чтобы установить напряжение между V SS и V CC

Мои дисплеи не имеют подсветки, поэтому я не подключил их для уменьшения помех на схеме. Если у вас есть подсветка, вы должны, конечно, подключить ее обычным способом

Вы можете подключить до 3 дисплеев параллельно к каждому порту MCP23017. Единственное отличие заключается в том, что вывод активации каждого дисплея должен быть подключен к отдельному выводу (GPB1-GPB3).

#!/usr/bin/env python
"""World Clock Demo
   It should be fairly obvious how to change this code to work for other timezones"""
import time

class LCD_23017(object):
    # Timing constants
    E_PULSE = 0.00005
    E_DELAY = 0.00005
    def __init__(self, bus, addr, port, rs, en):
        self.bus = bus
        self.addr = addr
        self.rs = rs
        self.en = en

        self.DIRECTION = 0x00 if port == 'A' else 0x01
        self.DATA = 0x12 if port == 'A' else 0x13

        self.bus.write_byte_data(addr, self.DIRECTION, 0x00)

    def lcd_byte(self, data, rs):
        rs <<= self.rs
        en = 1 << self.en
        for nybble in (data&0xf0, data<<4):
            self.bus.write_byte_data(self.addr, self.DATA, nybble | rs)
            time.sleep(self.E_DELAY)
            self.bus.write_byte_data(self.addr, self.DATA, nybble | rs | en)
            time.sleep(self.E_PULSE)
            self.bus.write_byte_data(self.addr, self.DATA, nybble | rs)


class HD47780(object):
    LCD_CHR = True
    LCD_CMD = False
    # Base addresses for lines on a 20x4 display
    LCD_BASE = 0x80, 0xC0, 0x94, 0xD4

    def __init__(self, driver, rows=2, width=16):
        self.rows = rows
        self.width = width
        self.driver = driver
        self.lcd_init()

    def lcd_init(self):
        # Initialise display
        lcd_byte = self.driver.lcd_byte
        for i in 0x33, 0x32, 0x28, 0x0C, 0x06, 0x01:
            lcd_byte(i, self.LCD_CMD)

    def lcd_string(self, message, line=0):
        # Send string to display
        lcd_byte = self.driver.lcd_byte
        lcd_byte(self.LCD_BASE[line], self.LCD_CMD)
        for i in bytearray(message.ljust(self.width)):
            lcd_byte(i, self.LCD_CHR)


def test_i2c():
    from datetime import datetime
    import pytz
    import smbus

    ## For Rev1.0 Raspberry Pi
    driver1 = LCD_23017(bus=smbus.SMBus(0), addr=0x27, port='B', rs=0, en=1)
    driver2 = LCD_23017(bus=smbus.SMBus(0), addr=0x27, port='B', rs=0, en=2)
    driver3 = LCD_23017(bus=smbus.SMBus(0), addr=0x27, port='B', rs=0, en=3)

    ## For Rev2.0 Raspberry Pi
    #driver1 = LCD_23017(bus=smbus.SMBus(1), addr=0x27, port='B', rs=0, en=1)
    #driver2 = LCD_23017(bus=smbus.SMBus(1), addr=0x27, port='B', rs=0, en=2)
    #driver3 = LCD_23017(bus=smbus.SMBus(1), addr=0x27, port='B', rs=0, en=3)


    lcd1 = HD47780(driver=driver1, rows=2, width=16)
    lcd2 = HD47780(driver=driver2, rows=2, width=16)
    lcd3 = HD47780(driver=driver3, rows=2, width=16)
    lcd1.lcd_string("    New York")
    lcd2.lcd_string("     London")
    lcd3.lcd_string("    Melbourne")
    new_york_tz = pytz.timezone("America/New_York")
    london_tz = pytz.timezone("Europe/London")
    melbourne_tz = pytz.timezone("Australia/Melbourne")
    while True:
        time.sleep(1-time.time()%1)  # Wait until the next second
        lcd1.lcd_string(datetime.now(new_york_tz).ctime()[3:], line=1)
        lcd2.lcd_string(datetime.now(london_tz).ctime()[3:], line=1)
        lcd3.lcd_string(datetime.now(melbourne_tz).ctime()[3:], line=1)

def main():
    test_i2c()

if __name__ == "__main__":
    main()

Подключение ЖК дисплея 20×4 к Raspberry Pi: схема и программа

ЖК (жидкокристаллические) дисплеи в настоящее время являются одними из самых популярных типов дисплеев, используемых в современной электронике. В большинстве своем они используют для работы драйвер Hitachi HD44780. В данной статье мы рассмотрим подключение алфавитно-цифрового ЖК дисплея 20×4, работающего на основе драйвера Hitachi HD44780 к плате Raspberry Pi 4, и попробуем выводить на экран данного дисплея строки символов, производить скроллинг текста, создавать новые пользовательские символы и многое другое.

В проекте мы будем использовать библиотеку RPLCD from PyPI. С ее помощью можно создавать собственные пользовательские функции для работы с ЖК дисплеем: скроллинг текста, создание новых символов и т.п.

Необходимые компоненты

  1. Плата Raspberry Pi 4 (или другая подходящая модель платы) (купить на AliExpress).
  2. ЖК дисплей 20×4 (купить на AliExpress).
  3. Соединительные провода.

ЖК дисплей 20×4

«Сердцем» данного ЖК дисплея является схема драйвера HD44780. Даташит на нее можно посмотреть по следующей ссылке. Данный дисплей можно подключить к плате Raspberry Pi двумя способами: по интерфейсу I2C или с помощью непосредственного подключения контактов. Однако второй способ потребует использования 14 контактов платы Raspberry Pi, также он займет и контакты SPI порта платы если мы будем использовать 8-битный способ передачи. Поэтому в данной статье мы будем использовать интерфейс I2C для подключения дисплея к плате Raspberry Pi.

Если у вас нет модуля I2C, то тогда можно использовать следующую схему подключения дисплея к плате:

Контакт ЖК дисплея Контакт Raspberry Pi
RS 15
RW 18
E 16
Data 4 21
Data 5 22
Data 6 23
Data 7 24

Другие альтернативные способы подключения ЖК дисплея 20×4 к плате Raspberry Pi вы можете посмотреть в документации RPLCD.

Модуль расширения I2C PCF8574

Данный модуль позволяет преобразовать параллельные контакты общего назначения в стандартную двунаправленную двухпроводную шину интерфейса I2C (линии SCL и SDA). Модуль имеет очень низкое потребление тока (2.5uA) что делает его пригодным для применения в мобильных приложениях. Диапазон питающих напряжения для модуля: от 2.5 V до 6V. Может обеспечивать Latched-выходы для непосредственного управления светодиодами.

Схема проекта

Схема подключения ЖК дисплея 20×4 к плате Raspberry Pi по интерфейсу I2C представлена на следующем рисунке.

Как видите, использование интерфейса I2C, значительно упрощает подключения ЖК дисплея к плате Raspberry Pi.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

На следующем рисунке показана способ формирования блоков для отображения символов на экране ЖК дисплея 20×4. Из рисунка видно, что для отображения одного символа на экране дисплея используется блок (матрица) 8×5 пикселов.

Установка необходимых библиотек для работы с ЖК дисплеем 20×4

В данном проекте для работы с дисплеем мы будем использовать библиотеку RPLCD from PyPI. Ее можно установить в плату Raspberry Pi с помощью команды:

Если вы используете I2C модуль для подключения дисплея, то в этом случае вам необходимо будет установить и библиотеку Python-SMBUS. Ее можно установить с помощью следующей команды:

sudo apt install python-smbus

sudo apt install python-smbus

или с помощью команды:

Библиотека RPLCD будет автоматически использовать необходимые функции из библиотеки smbus. После установки библиотек вы увидите запрос на установку адреса I2C. В случае использования I2C модуля PCF8574 (вместо него можно также использовать модули MCP2308 или MCP23017) у него будет I2C адрес равный 0x27. Подробнее о том, как определить I2C адрес устройства, подключенного к плате Raspberry Pi, можно прочитать в этой статье.

В нашем проекте мы используем ЖК дисплей в 4-битном режиме – интерфейс I2C будет работать только в этом режиме, в 8-битном режиме он уже работать не будет.

Код программы для вывода строки на ЖК дисплей 20×4

Попробуем вывести строку символов ‘Hello world’ на экран ЖК дисплея. Для этого создадим новый python файл, его имя вы можете выбрать по своему желанию. Вначале этой программы подключим (импортируем) необходимые библиотеки и создадим объект для работы с ЖК дисплеем.

from RPLCD import * from time import sleep from RPLCD.i2c import CharLCD lcd = CharLCD(‘PCF8574’, 0x27)

from RPLCD import *

from time import sleep

from RPLCD.i2c import CharLCD

lcd = CharLCD(‘PCF8574’, 0x27)

Библиотека RPLCD содержит файл i2c.py и импортируя его мы получаем доступ к всем методам (функциям), содержащимся в «i2c.py». При создании объекта для работы с ЖК дисплеем с помощью функции CharLCD(), нам необходимо указать I2C имя устройства (у нас это PCF8574) и I2C адрес устройства (в нашем случае 0x27).

Далее вывести строку символов на экран дисплея можно с помощью функции lcd.write_string(). Позицию курсора для вывода начала этой строки можно изменить с помощью функции cursor_pos(m,n). Для ЖК дисплея 20×4 номер строки m может принимать значения от 0 до 3, а номер столбца n – значения от 0 до 19.

Но помните о том, что с помощью функции lcd.write_string() на экран дисплея можно вывести только строку, но нельзя вывести значение целого типа (integer). Чтобы вывести значение целого типа на экран дисплея его предварительно необходимо конвертировать в строку. С помощью функции lcd.write_string() можно вывести строку на двух строках дисплея если отключена опция auto_linebreak().

lcd.cursor_pos = (0, 0) lcd.write_string(‘Hello World’)

lcd.cursor_pos = (0, 0)

lcd.write_string(‘Hello World’)

Код программы для скроллинга текста на экране дисплея

Поскольку у нас нет в распоряжении никакой готовой функции для вывода длинного текста в одной строке или для скроллинга текста, то попробуем запрограммировать ее самостоятельно.

framebuffer = [ », », ] def write_to_lcd(lcd, framebuffer, num_cols): «»»Write the framebuffer out to the specified LCD.»»» lcd.home() for row in framebuffer: lcd.write_string(row.ljust(num_cols)[:num_cols]) lcd.write_string(‘\r\n’) def long_text(text): if len(text)<20: lcd.write_string(text) for i in range(len(text) — 20 + 1): framebuffer[1] = text[i:i+20] write_to_lcd(lcd, framebuffer, 20) sleep(0.2)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

framebuffer = [

        »,

        »,

        ]

def write_to_lcd(lcd, framebuffer, num_cols):

        «»»Write the framebuffer out to the specified LCD.»»»

        lcd.home()

        for row in framebuffer:

            lcd.write_string(row.ljust(num_cols)[:num_cols])

            lcd.write_string(‘\r\n’)

def long_text(text):

        if len(text)<20:

            lcd.write_string(text)      

        for i in range(len(text) — 20 + 1):

            framebuffer[1] = text[i:i+20]

            write_to_lcd(lcd, framebuffer, 20)

            sleep(0.2)

В представленном фрагменте кода мы используем способ буферизации кадров для отображения длинных строк. Также мы используем двухмерный массив, содержащий строки и столбцы, для вывода информации на экран ЖК дисплея 20×4.

После этого для вывода длинного текста с помощью скроллинга мы используем функцию:

lcd.cursor_pos = (1, 0) long_text(‘This is a long Scrolling text’)

lcd.cursor_pos = (1, 0)

long_text(‘This is a long Scrolling text’)

Эта команда выведет скроллинг текста во второй строке ЖК дисплея как показано на следующем рисунке:

Код программы для создания нового символа

Мы можем создавать свои собственные символы для вывода на экран ЖК дисплея с помощью функции create_char(location,bitmap_tuple).

Переменная location в этой функции – это местоположение символа в памяти, а bitmap_tuple – двухмерный массив данных размером 5х8 элементов (пикселов). Массива 5х8 пикселов достаточно для представления всех символов английского алфавита.

Используемый нами ЖК дисплей содержит память для хранения 8 новых пользовательских символов. Каждый из них может храниться по любому адресу в диапазоне от x00 до x07. Обращаясь по нужному адресу, мы можем “вызвать” нужный нам символ.

Создадим массивы растровых данных для хранения символов “locked” и “unlock”.

Locked = ( 0b00000, 0b01110, 0b10001, 0b10001, 0b11111, 0b11111, 0b11011, 0b11111 ) Un_Locked = ( 0b00000, 0b01110, 0b00001, 0b00001, 0b11111, 0b11111, 0b11011, 0b11111 )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Locked = (

  0b00000,

  0b01110,

  0b10001,

  0b10001,

  0b11111,

  0b11111,

  0b11011,

  0b11111

)

Un_Locked = (

  0b00000,

  0b01110,

  0b00001,

  0b00001,

  0b11111,

  0b11111,

  0b11011,

  0b11111

)

Разместим символ “Locked” по адресу 0.

lcd.create_char(0, Locked)

lcd.create_char(0, Locked)

Выведем на экран наш символ “Locked” на позиции (2,4).

lcd.cursor_pos = (2, 4) lcd.write_string(‘\x00’)

lcd.cursor_pos = (2, 4)

lcd.write_string(‘\x00’)

Аналогичным образом вы можете создавать свои любые символы для их последующего вывода на экран ЖК дисплея 20×4.

Код программы для индикации заряда батареи

Сначала создадим битовые массивы для необходимых нам символов.

battery_EMP = ( 0b00000, 0b01110, 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111 ) battery_HLF = ( 0b00000, 0b01110, 0b11111, 0b10001, 0b10001, 0b11111, 0b11111, 0b11111 ) battery_FULL = ( 0b00000, 0b01110, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

battery_EMP = (

  0b00000,

  0b01110,

  0b11111,

  0b10001,

  0b10001,

  0b10001,

  0b10001,

  0b11111

)

battery_HLF = (

  0b00000,

  0b01110,

  0b11111,

  0b10001,

  0b10001,

  0b11111,

  0b11111,

  0b11111

)

battery_FULL = (

  0b00000,

  0b01110,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111

)

После этого мы будем по очереди выводить их на экран дисплея на одной и той же позиции курсора.

lcd.create_char(2, battery_EMP) lcd.create_char(3, battery_HLF) lcd.create_char(4, battery_FULL) while 1: lcd.cursor_pos = (0, 0) lcd.write_string(‘Battery Charging’) lcd.cursor_pos = (0, 19) lcd.write_string(‘\x02’) sleep(.4) lcd.cursor_pos = (0, 19) lcd.write_string(‘\x03’) sleep(.4) lcd.cursor_pos = (0, 19) lcd.write_string(‘\x04’) sleep(.6)

lcd.create_char(2, battery_EMP)

lcd.create_char(3, battery_HLF)

lcd.create_char(4, battery_FULL)

while 1:

    lcd.cursor_pos = (0, 0)

    lcd.write_string(‘Battery Charging’)  

    lcd.cursor_pos = (0, 19)

    lcd.write_string(‘\x02’)

    sleep(.4)

    lcd.cursor_pos = (0, 19)

    lcd.write_string(‘\x03’)

    sleep(.4)

    lcd.cursor_pos = (0, 19)

    lcd.write_string(‘\x04’)

    sleep(.6)

Код программы для создания нескольких символов

Мы создадим 4 символа таким образом, чтобы размещенные вместе они формировали улыбающееся лицо человека. Массивы для создания этих символов назовем face_LB, face_LT, face_RT и face_RB. Для создания этих символов можно использовать любой растровый редактор, даже размещенный на каком-нибудь сайте в сети.

face_LB=( 0b10000, 0b10100, 0b10011, 0b10000, 0b11100, 0b11111, 0b01111, 0b00111 ) face_LT=( 0b10111, 0b10111, 0b01000, 0b01000, 0b10000, 0b10001, 0b10001, 0b10000 ) face_RT=( 0b10101, 0b11101, 0b00010, 0b00010, 0b00001, 0b10001, 0b10001, 0b00001 ) face_RB=( 0b00001, 0b00101, 0b11001, 0b00001, 0b01111, 0b11111, 0b11110, 0b11100 ) lcd.create_char(4, face_LT) lcd.create_char(5, face_RT) lcd.create_char(6, face_LB) lcd.create_char(7, face_RB) lcd.cursor_pos = (0, 0) lcd.write_string(‘Our Custom Character’) lcd.cursor_pos = (2, 4) lcd.write_string(‘\x04’) lcd.cursor_pos = (2, 5) lcd.write_string(‘\x05’) lcd.cursor_pos = (3, 4) lcd.write_string(‘\x06’) lcd.cursor_pos = (3, 5) lcd.write_string(‘\x07’)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

face_LB=(

  0b10000,

  0b10100,

  0b10011,

  0b10000,

  0b11100,

  0b11111,

  0b01111,

  0b00111

)

face_LT=(

  0b10111,

  0b10111,

  0b01000,

  0b01000,

  0b10000,

  0b10001,

  0b10001,

  0b10000

)

face_RT=(

  0b10101,

  0b11101,

  0b00010,

  0b00010,

  0b00001,

  0b10001,

  0b10001,

  0b00001

)

face_RB=(

  0b00001,

  0b00101,

  0b11001,

  0b00001,

  0b01111,

  0b11111,

  0b11110,

  0b11100

)

lcd.create_char(4, face_LT)

lcd.create_char(5, face_RT)

lcd.create_char(6, face_LB)

lcd.create_char(7, face_RB)

lcd.cursor_pos = (0, 0)

lcd.write_string(‘Our Custom Character’)

lcd.cursor_pos = (2, 4)

lcd.write_string(‘\x04’)

lcd.cursor_pos = (2, 5)

lcd.write_string(‘\x05’)

lcd.cursor_pos = (3, 4)

lcd.write_string(‘\x06’)

lcd.cursor_pos = (3, 5)

lcd.write_string(‘\x07’)

Внешний вид получившегося у нас символа, составленного из 4-х созданных нами символов, показан на следующем рисунке.

Исходный код программы на Python

#Try RPLCD Liberary # from RPLCD-master import * # from RPLCD import RPLCD from RPLCD import * from time import sleep from RPLCD.i2c import CharLCD lcd = CharLCD(‘PCF8574’, 0x27) lcd.cursor_pos = (0, 5) lcd.write_string(‘Wlcomme to’) lcd.cursor_pos = (1, 3) lcd.write_string(‘Circuit Digest’) sleep(2) framebuffer = [ », », ] def write_to_lcd(lcd, framebuffer, num_cols): «»»Write the framebuffer out to the specified LCD.»»» lcd.home() for row in framebuffer: lcd.write_string(row.ljust(num_cols)[:num_cols]) lcd.write_string(‘\r\n’) def long_text(text): if len(text)<20: lcd.write_string(text) for i in range(len(text) — 20 + 1): framebuffer[1] = text[i:i+20] write_to_lcd(lcd, framebuffer, 20) sleep(0.2) face_LB=( 0b10000, 0b10100, 0b10011, 0b10000, 0b11100, 0b11111, 0b01111, 0b00111 ) face_LT=( 0b10111, 0b10111, 0b01000, 0b01000, 0b10000, 0b10001, 0b10001, 0b10000 ) face_RT=( 0b10101, 0b11101, 0b00010, 0b00010, 0b00001, 0b10001, 0b10001, 0b00001 ) face_RB=( 0b00001, 0b00101, 0b11001, 0b00001, 0b01111, 0b11111, 0b11110, 0b11100 ) battery_EMP = ( 0b00000, 0b01110, 0b11111, 0b10001, 0b10001, 0b10001, 0b10001, 0b11111 ) battery_HLF = ( 0b00000, 0b01110, 0b11111, 0b10001, 0b10001, 0b11111, 0b11111, 0b11111 ) battery_FULL = ( 0b00000, 0b01110, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 ) Locked = ( 0b00000, 0b01110, 0b10001, 0b10001, 0b11111, 0b11111, 0b11011, 0b11111 ) Un_Locked = ( 0b00000, 0b01110, 0b00001, 0b00001, 0b11111, 0b11111, 0b11011, 0b11111 ) lcd.create_char(0, battery_EMP) lcd.create_char(1, battery_HLF) lcd.create_char(2, battery_FULL) lcd.create_char(3, Locked) # lcd.create_char(4, Un_Locked) lcd.create_char(4, face_LT) lcd.create_char(5, face_RT) lcd.create_char(6, face_LB) lcd.create_char(7, face_RB) # U_L_Ch=’\x04’ L_Ch=’\x03’ B_F_Ch=’\x02’ B_H_Ch=’\x01’ B_E_Ch=’\x00’ while 1: lcd.clear() lcd.cursor_pos = (0, 0) lcd.write_string(‘Chargerging’) lcd.cursor_pos = (0, 19) lcd.write_string(B_E_Ch) sleep(.4) lcd.cursor_pos = (0, 19) lcd.write_string(B_H_Ch) sleep(.4) lcd.cursor_pos = (0, 19) lcd.write_string(B_F_Ch) sleep(1) lcd.cursor_pos = (1, 0) long_text(‘This is a Scrolling text’) # lcd.cursor_pos = (3, 19) # lcd.write_string(U_L_Ch) # sleep(.6) lcd.cursor_pos = (2, 4) lcd.write_string(‘\x04’) lcd.cursor_pos = (2, 5) lcd.write_string(‘\x05’) lcd.cursor_pos = (3, 4) lcd.write_string(‘\x06’) lcd.cursor_pos = (3, 5) lcd.write_string(‘\x07’) # sleep(2) lcd.cursor_pos = (3, 19) lcd.write_string(L_Ch) sleep(2)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

#Try RPLCD Liberary

# from RPLCD-master import *

# from RPLCD import RPLCD

from RPLCD import *

from time import sleep

from RPLCD.i2c import CharLCD

lcd = CharLCD(‘PCF8574’, 0x27)

lcd.cursor_pos = (0, 5)

lcd.write_string(‘Wlcomme to’)

lcd.cursor_pos = (1, 3)

lcd.write_string(‘Circuit Digest’)

sleep(2)

framebuffer = [

        »,

        »,

        ]

def write_to_lcd(lcd, framebuffer, num_cols):

        «»»Write the framebuffer out to the specified LCD.»»»

        lcd.home()

        for row in framebuffer:

            lcd.write_string(row.ljust(num_cols)[:num_cols])

            lcd.write_string(‘\r\n’)

def long_text(text):

        if len(text)<20:

            lcd.write_string(text)            

        for i in range(len(text) — 20 + 1):

            framebuffer[1] = text[i:i+20]

            write_to_lcd(lcd, framebuffer, 20)

            sleep(0.2)            

face_LB=(

  0b10000,

  0b10100,

  0b10011,

  0b10000,

  0b11100,

  0b11111,

  0b01111,

  0b00111

    )

face_LT=(

  0b10111,

  0b10111,

  0b01000,

  0b01000,

  0b10000,

  0b10001,

  0b10001,

  0b10000

)

face_RT=(

  0b10101,

  0b11101,

  0b00010,

  0b00010,

  0b00001,

  0b10001,

  0b10001,

  0b00001

)

face_RB=(

  0b00001,

  0b00101,

  0b11001,

  0b00001,

  0b01111,

  0b11111,

  0b11110,

  0b11100

)

battery_EMP = (

  0b00000,

  0b01110,

  0b11111,

  0b10001,

  0b10001,

  0b10001,

  0b10001,

  0b11111

)

battery_HLF = (

  0b00000,

  0b01110,

  0b11111,

  0b10001,

  0b10001,

  0b11111,

  0b11111,

  0b11111

)

battery_FULL = (

  0b00000,

  0b01110,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

  0b11111

)

Locked = (

  0b00000,

  0b01110,

  0b10001,

  0b10001,

  0b11111,

  0b11111,

  0b11011,

  0b11111

)

Un_Locked = (

  0b00000,

  0b01110,

  0b00001,

  0b00001,

  0b11111,

  0b11111,

  0b11011,

  0b11111

)

lcd.create_char(0, battery_EMP)

lcd.create_char(1, battery_HLF)

lcd.create_char(2, battery_FULL)

lcd.create_char(3, Locked)

# lcd.create_char(4, Un_Locked)

lcd.create_char(4, face_LT)

lcd.create_char(5, face_RT)

lcd.create_char(6, face_LB)

lcd.create_char(7, face_RB)

# U_L_Ch=’\x04′

L_Ch=’\x03′

B_F_Ch=’\x02′

B_H_Ch=’\x01′

B_E_Ch=’\x00′

while 1:

    lcd.clear()

    lcd.cursor_pos = (0, 0)

    lcd.write_string(‘Chargerging’)    

    lcd.cursor_pos = (0, 19)

    lcd.write_string(B_E_Ch)

    sleep(.4)

    lcd.cursor_pos = (0, 19)

    lcd.write_string(B_H_Ch)

    sleep(.4)

    lcd.cursor_pos = (0, 19)

    lcd.write_string(B_F_Ch)

    sleep(1)    

    lcd.cursor_pos = (1, 0)

    long_text(‘This is a Scrolling text’)  

#     lcd.cursor_pos = (3, 19)

#     lcd.write_string(U_L_Ch)

#     sleep(.6)

    lcd.cursor_pos = (2, 4)

    lcd.write_string(‘\x04’)

    lcd.cursor_pos = (2, 5)

    lcd.write_string(‘\x05’)

    lcd.cursor_pos = (3, 4)

    lcd.write_string(‘\x06’)

    lcd.cursor_pos = (3, 5)

    lcd.write_string(‘\x07’)

#     sleep(2)  

    lcd.cursor_pos = (3, 19)

    lcd.write_string(L_Ch)

    sleep(2)

Видео, демонстрирующее работу проекта

Источник статьи

Загрузка… 23 просмотров

HD44780 LCD, расширители ввода-вывода, интерфейс I2C и т. д.

Вот моя заметка об изучении символьного ЖК-дисплея HD44780 и вариантов его подключения к устройствам управления.

ЖК-дисплей HD44780

  • Символьный ЖК-дисплей в отличие от графического ЖК-дисплея
  • идеально подходит для отображения текста
  • поставляется в различных размерах, но наиболее популярными являются 16×2 и 20×4

Согласно Википедии:

Контроллер ЖК-дисплея Hitachi HD44780 представляет собой буквенно-цифровой контроллер жидкокристаллического дисплея (ЖК-дисплея) с точечной матрицей, разработанный Hitachi в 1980-х годах.Набор символов контроллера включает символы ASCII, японские символы кана и некоторые символы в двух строках по 28 символов.

HD44780 — один из самых популярных символьных ЖК-дисплеев, когда-либо созданных. Многие сторонние дисплеи используют его 16-контактный интерфейс и набор инструкций для совместимости.


Нужна ли нам пайка?

У нас есть возможность приобрести:

Для отдельных ЖК-дисплеев некоторые продукты поставляются с припаянными штыревыми контактами:

Для ЖК-дисплея с интерфейсным модулем I2C некоторые продукты предварительно собраны:

Для системы SparkFun Qwiic Connect большинство продуктов поставляются с разъемами Qwiic:

ЖК-контакты

ЖК-дисплей HD44780 обычно имеет 16 контактов, но некоторые продукты добавляют дополнительные контакты для подсветки RGB.

Лично я разделяю в уме контакты LCD на четыре группы, чтобы они были понятны мне:

  • Питание и контрастность (контакты 1-3)
  • Специальные штифты (штыри 4-6)
  • Контакты данных (контакты 11-14)
  • Контакты подсветки (дополнительно; контакты 15-16 или 15-18)

Википедия и Adafruit Инструкции по подключению символьного ЖК-дисплея могут быть полезны, чтобы увидеть общую картину. Для получения дополнительной информации я нашел полезными следующие ссылки:

Мощность и контрастность (контакты 1-3)

Контакт ЖК-дисплея # Имя контакта ЖК-дисплея
1 Земля
2 ВКЦ +3.от 3 до +5 В (тип.)
3 Контраст от +3,3 до +5 В (тип.)

Специальные контакты (контакты 4-6)

Контакт ЖК-дисплея # Имя контакта ЖК-дисплея
4 Выбор регистра (RS) 0: Инструкция, 1: Данные
5 Чтение/запись (чтение/запись) 0: запись, 1: чтение; скорее всего всегда 0
6 Включить (EN) Начинает чтение/запись

В частности, важны бит выбора регистра и бит разрешения.Register Select переключается между режимом инструкций и режимом данных, когда мы взаимодействуем с дисплеем. Бит чтения/записи не нужен, если мы только записываем данные на дисплей. Скорее всего, мы подключим контакт чтения/записи к земле, чтобы он всегда был низким.

Контакты данных (контакты 11-14)

Контакт ЖК-дисплея # Имя контакта ЖК-дисплея
7-10 Бит данных 0-3 (DB0-3) Не используется в 4-битной операции
11-14 Бит данных 4-7 (DB4-7) Передает инструкцию или данные

ЖК-дисплей HD44780 имеет 4-битный режим и 8-битный режим.4-битный режим позволяет нам разделить байт данных (8-битный) на четыре старших бита и четыре младших бита, а затем отправить их по отдельности. Таким образом, мы можем вдвое уменьшить количество необходимых контактов ввода-вывода. Похоже, что обычно большинство людей используют только 4-битный режим.

Байт, который мы отправляем на дисплей, может быть либо инструкцией, либо данными, в зависимости от бита выбора регистра.

Контакты подсветки (дополнительно; контакты 15-16 или 15-18)

Контакт ЖК-дисплея # Имя контакта ЖК-дисплея
15 Анод подсветки Если применимо
16 Катод подсветки или красный Если применимо
17 Катод подсветки зеленый Если применимо
18 Подсветка Катод синий Если применимо

Подсветка не имеет прямого отношения к управлению ЖК-дисплеем.Это можно сделать самостоятельно.

Исходный ЖК-дисплей HD44780 имеет только одноцветную светодиодную подсветку с использованием контактов 15-16. Некоторые новые ЖК-дисплеи, совместимые с HD44780, имеют подсветку RGB с использованием контактов 15–18.

Мы должны заранее спланировать, что мы хотим сделать с подсветкой. Многие модули I2C не поддерживают подсветку RGB. Если дисплей имеет подсветку RGB и мы используем только контакты 15-16, подсветка будет фиксированной на красный цвет, что не идеально.

Благодаря подсветке RGB можно легко получить желтый, розовый и голубой цвета, просто включив или выключив красный, зеленый и синий.Это просто сочетание красного, зеленого и синего.

Если мы хотим управлять 24-битным RGB для более точных цветов между красным, зеленым и синим, нам понадобится широтно-импульсная модуляция (ШИМ), чтобы мы могли регулировать яркость для каждого цвета.

Инструкции для ЖК-дисплеев Adafruit RGB Backlit

могут оказаться полезными.

Пользовательский шрифт

ЖК-дисплей HD44780 позволяет нам регистрировать пользовательские символы; однако лично я бы не беспокоился, потому что не считаю эту функцию полезной.Согласно Википедии:

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

Расширители ввода/вывода

  • Последовательно-параллельный преобразователь.
  • Позволяет нам добавлять дополнительные порты GPIO.
  • Уменьшает количество портов GPIO на нашем контроллере, которые используются для ЖК-дисплея.

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

Нам нужно 6-7 контактов из восьми для управления ЖК-дисплеем, поэтому в 8-битном расширителе ввода-вывода не хватает контактов для подсветки RGB. Мы можем включать/выключать один светодиод.

Модуль I2C/SPI

В разных продуктах используются разные расширители ввода-вывода, поэтому помните, какой расширитель ввода-вывода вы используете, если используете что-то вроде рюкзака I2C/SPI.Также важно назначение контактов между ЖК-дисплеем и модулем расширения ввода/вывода.

Модуль I2C на базе PCF8574

Насколько я знаю, модули I2C на базе PCF8574 самые популярные и недорогие. Предварительно собранный ЖК-дисплей 16×2 с модулем I2C обычно стоит менее 10 долларов США. Handson Technology I2C Serial Interface 1602 LCD Module User Guide обобщает типичные характеристики модуля I2C на базе PCF8574.

Рюкзак Adafruit i2c / SPI с ЖК-дисплеем

Рюкзак Adafruit i2c/SPI с жидкокристаллическим дисплеем поддерживает интерфейсы I2C и SPI.На момент написания он использует MCP23008 для I2C и SN74HC595 для SPI.

Следующие проводки работали нормально:

Рюкзак с ЖК-дисплеем Малиновый Пи — I2C Малиновый Пи — SPI
Часы (CLK) Последовательные часы (SCLK) Последовательные часы (SCLK)
Данные (дата) Серийные данные (SDA) Контроллер Выход Периферийный Вход (COPI)
Защелка (LAT) Выбор чипа (CS)

Система SparkFun Qwiic Connect

Я никогда раньше не пользовался системой Qwiic Connect, но она кажется хорошим вариантом, когда нам нужно подключить несколько устройств к шине I2C.

Это кажется многообещающим, но, поскольку это относительно новое, я обеспокоен тем, что на момент написания статьи доступно не так много информации.

Скоро попробую.

Adafruit STEMMA QT

Аналогичен системе SparkFun Qwiic Connect.

USB-интерфейс

Также имеется интерфейс USB. Интересно, когда эта опция может быть полезна, потому что, например, у Raspberry Pi не так много USB-портов.

Заключение

  • Перед использованием ЖК-дисплея желательно примерно понять, как он работает.
  • В разных продуктах используются разные расширители ввода-вывода.
  • Важное значение имеет назначение контактов между ЖК-дисплеем и модулем расширения ввода-вывода.
  • Модуль I2C на базе PCF8574 — хорошее и недорогое решение.
  • Система SparkFun Qwiic Connect кажется многообещающей, но, поскольку она относительно новая, на момент написания статьи доступно не так много информации.

Я не использовал систему SparkFun Qwiic Connect или интерфейс USB, но мне интересно узнать об этом.Я опробую их в ближайшее время и продолжу обновлять содержимое по мере того, как узнаю больше.

lcdproc/hd44780.md на главном устройстве · lcdproc/lcdproc · GitHub

Драйвер HD44780 HD44780 стал стандартом де-факто для буквенно-цифровых дисплеев. Хотя оригинальный Hitachi HD44780 давно снят с производства, его команда набор сохранился во множестве (полностью или почти) совместимых LCD, VFD и даже OLED-дисплеи, продаваемые широким кругом производителей по всему миру.Назовем лишь некоторые из них: KS0066, KS0070, KS0076, LC7985, NT3881, SED1278, ST7066… Набор команд этих дисплеев, которые иногда рекламируются как «совместимость с отраслевыми стандартами», таким образом, является рабочей лошадкой контроллеров для отображает от 8×1 до 20×4 или 40×2 символов. Есть даже дисплеи большего размера с двумя контроллерами, по одному на каждую половину дисплея. Драйвер HD44780 поддерживает различные способы подключения устройств HD44780. к вашей системе. Каждый из этих различных способов называется типом соединения. водителя.В зависимости от типа подключения и подключенного дисплея драйвер поддерживает различные специальные функции. Клавиши ввода Программно регулируемая яркость/подсветка Контрастность, регулируемая программным обеспечением несколько дисплеев / мультиконтроллерные дисплеи В следующей таблице перечислены доступные типы подключения, отсортированные по типу подключения (параллельный порт, последовательный порт, USB, I2C, SPI или другие). HD44780: типы подключения Тип соединения Тип проводки/дисплея Типы подключения параллельного порта: 4 бит 4-битная проводка.Это значение по умолчанию. 8 бит 8-битная проводка (стиль «lcdtime») винамп 8-битная проводка (стиль winamp) серийный Lpt Последовательная проводка LPT Типы последовательного (RS-232) соединения: picanlcd Последовательное устройство PIC-an-LCD «picanlcd» ЖК-сериализатор ЖК-сериализатор «lcdserializer» лос-панель ЖК-дисплей на серийной панели устройства «los-panel» () VDR-ЖК Серийный прибор VDR LCD «vdr-lcd» vdr-пробуждение Модуль VDR-Wakeup «vdr-пробуждение» Типы USB-подключения: пертелиан ЖК-дисплей Pertelian X2040 () lis2 LIS2 от VLSystem() играть MPPlay Blast от VLSystem () usblcd Адаптер USBLCD от Adams IT Services () bwctusb USB-устройство BWCT «bwctusb» () жк2usb LCD2USB Тилля Харбаума () usbtiny USBtiny Дика Стрифленда () uss720 Мост USB-to-IEEE 1284 Belkin USS-720 (Belkin F5U002) USB-4-все Плата контроллера USB-4-all от Sprut() ftdi Дисплей подключен к FTDI RS2232 (двухканальный) или FTDI RS232 (одноканальный) USB-чип Типы подключения I2C: i2c ЖК-дисплей, управляемый PCF8574(A)/PCA9554(A), подключенный через I2C пилат Adafruit RGB Positive 16×2 ЖК-дисплей + клавиатура для Raspberry Pi SPI (последовательный периферийный интерфейс): спи Отображение с использованием KS0073 или аналогичного в последовательном режиме, доступ к которому осуществляется через устройство Linux SPI. пифаскад Управление и отображение PiFace для Raspberry Pi Другие типы подключения: этлкд Дисплей подключен через TCP к устройству ethlcd с питанием от PoE () Raspberry Pi ЖК-дисплей, подключенный к разъему GPIO Raspberry Pi Если вы подозреваете, что приведенная выше таблица устарела, вы можете взглянуть на сервер/драйверы/hd44780-драйверы.h в LCDproc исходный каталог, который содержит фактический код перевода. Подключения Общие подключения для всех типов подключения Независимо от того, какой тип подключения вы выберете, вам всегда связи. Они объясняются здесь. Сила Во всех вариантах используется один и тот же метод получения энергии. т. е. для каждого ЖК: HD44780: подключение питания ЖК Сигнал имя приколоть ВЭЭ 1 GND (подключите к любому из контактов 18-25 вашего параллельного порта) ВКК 2 +5В VLC 3 (регулировка контраста) Всегда дважды проверяйте подключение к источнику питания, возможно, ваш дисплей не выдержит обратно подключенный источник питания! Есть несколько способов получить 5В: Подключиться к линии 5В, предназначенной для дисководов (красный провод — 5В, черный — это земля).Получите его от контактов VCC и GND разъема USB. Для типов подключения USB это делается автоматически, так как схемы используется там автоматическое питание ЖК-дисплея. Получите его от порта джойстика (контакты 1 и 9 — 5 В, 4, 5 и 12 — заземление). Кажется, что некоторые звуковые карты могут использовать эти линии для связи, поэтому, если вы хотите использовать его, сначала проверьте, действительно ли он дает «чистые» 5 В. Если у вас нет подсветки, иногда можно получить нужные мА. от самого LPT-порта.—‘ /|
| Влк

]]>

Клавиатура Вы можете подключить клавиатуру с большинством типов соединений. Максимально поддерживаемый количество ключей зависит от типа. Есть несколько способов подключения ключей на входные контакты. Прямые ключи Если вы подключите ключ, как показано ниже, вы сможете подключить только один ключ на входной контакт. Это простое решение, если вам нужно всего несколько ключей. HD44780: прямые клавиши О 5В | | - | | 10к | | - | +-----------о вход (X) | | о \ о | | === ЗАЗЕМЛЕНИЕ

]]>

По умолчанию следующие нажатия клавиш генерируются разными клавишами: HD44780: прямое сопоставление клавиш ключевой индекс сопоставленная строка Х1 А Х2 Б Х3 С Х4 Д Х5 Е

Вы можете изменить сопоставление с помощью KeyDirect_NUM параметр конфигурации, где ЧИСЛО является индексом X в таблице выше.

Матричные ключи Используя матрицу, мы можем соединить гораздо больше ключей. Чтобы упростить рисунок здесь, заменяем все переключатели на символ @: HD44780: один матричный ключ X линия | |

Линия Y —+——— | | | о | знак равно \ | | о | | | +—+ | |

]]>

Подключаем матрицу ключей так: HD44780: Полная матрица ключей Y1 о—|<[email protected]@[email protected] | | | Y2 о---|<[email protected]@[email protected] | | | Y3 о---|<[email protected]@[email protected] | | | Y4 о---|<[email protected]@[email protected] О 5В | | | | диоды | | | ___ | 1N4148 +----------| |—+ | | | ___ | | +——-| |—+ | | | ___ | | | +—-|___|—+ резисторы 22к | | | о о о Х1 Х2 Х3

]]>

Как видите, вам нужен 1 резистор на линию X и 1 диод на линию Y.По умолчанию lcdproc предполагает, что у вас есть клавиатура с раскладкой. как подключенный телефон, с линиями X и Y, подключенными, как показано. Чтобы быть более точным, он предполагает это отображение: HD44780: матричная раскладка клавиатуры Х1 Х2 Х3 Х4 Х5 Y1 1 2 3 А Е Y2 4 5 6 Б Ф Y3 7 8 9 С грамм Y4 * 0 # Д ЧАС Это отображение можно изменить с помощью KeyMatrix_X_Y вариант конфигурации, где X и Y — индексы соответствующих осей выше.Если вам нужно только, например. 10 ключей, оставьте остальные подальше. Вы должны изменить и перекомпилировать драйвер, чтобы получить другую раскладку клавиатуры. Вы можете купить массивы ключей, которые соединены таким образом в электронике. магазин. Обычно ее называют матричной клавиатурой. Чтобы подключить его к lcdproc, вы Осталось добавить резисторы и диоды. Если вы хотите использовать только одну линию возврата, например, с параметром serialLpt проводка, выглядит (полностью нарисовано) вот так: HD44780: одна линия возврата О 5В | .-. | | 4к7 или 22к диоды | | 1Н4148 '-' ___ |

Y1 о—|<---о о---+ ___ | Y2 о---|<---о о---+ ___ | Y3 о---|<---о о---+ ___ | Y4 o---|<---o o---+----o обратная линия

]]>

Если драйвер генерирует нажатия клавиш без фактического нажатия клавиши, может быть, что неподключенные входные линии поднимаются электромагнитные волны из воздуха. В этом случае подключите неподключенный входные линии (контакты 10, 11, 12, 13 и 15 LPT) на VCC = 5В.Подсветка Небольшое расширение позволяет включать подсветку дисплея. и выкл. На данный момент только 4bit и winamp типы подключения поддерживают это. Расширение использует один выходной контакт, вы не можете использовать этот контакт для других больше не работает. Проводка выглядит так: HD44780: подключение подсветки О 5В ___ | +---|___|---+

Разъем LPT Sub-D | 4к7 | | |е ___ | б |/ Штифт BL o————|___|—+———| 1к |
BC327 |с | ЖК-разъем | +———o 15 подсветка

  +--------o 16 GND подсветка
                                         |
                                        === ЗАЗЕМЛЕНИЕ
  

Примечание: 4k7 означает 4,7 кОм.Транзистор BC327 имеет следующие соединения:

  _____
| |
|BC327|
|_____|
 | | |
 | | |
 | | |
 с б е
  

]]>

Иногда подключения подсветки находятся не на «основном» разъеме, а на сторона. В этом случае обычно НЕТ РЕЗИСТОРА для ограничения ток через светодиоды. Поэтому вы должны затем добавить резистор после транзистор около 10 Ом (см. документацию на дисплей). Если вы хотите, чтобы подсветка немного загоралась, когда она «выключена», вы можете добавить резистор, шунтирующий транзистор от e до c, со значением, скажем 47 Ом или 22 Ом.(У моего 4×20 внутренний резистор 6 Ом, поэтому с 47 Ом Дополнительно он загорается только на 1/9. Мне это нравится. Джорис.) 4 бита Эта разводка изначально основана на «lcdtext» (автор Matthias Prinke). HD44780: 4-битные выводы (1) порт принтера <-> ЖК имя приколоть имя приколоть ЗАЗЕМЛЕНИЕ ВЭЭ 1 +5В ВКК 2 (регулировка контраста) VLC 3 Д4 6 РС 4 ЗАЗЕМЛЕНИЕ RW 5 Д6 8 RU 6 Д0 2 Д4 11 Д1 3 Д5 12 Д2 4 Д6 13 Д3 5 Д7 14 Линия RW (контакт 5) дисплея определяет, будет ли дисплей получать данные от Порт LPT или отправляет ли он данные на порт LPT: если он заземлен, он получает, если высокий или подключен вообще ни к чему он «посылает» (т.д., не будет работать так, как задумано). Итак, если вы не уверены, что вам это нужно в противном случае, затем подключите его к GND. Это, безусловно, применимо, если у вас есть только один дисплей. Теоретически эта проводка отправляет данные в два раза медленнее, чем проводки winamp или ext8bit, потому что он отправляет только 4 бита за раз. Тип подключения 4bit поддерживает более одного подключенного дисплея к тому же параллельному порту. Если вы хотите подключить более одного дисплея, подключите все дисплеи к параллельный порт по схеме выше за исключением EN (контакт 6) линия ЖК-дисплеев.Для второго и последующих дисплеев можно найти проводку для EN. (контакт 6) в таблице ниже. HD44780: 4-битные выводы (2) порт принтера <-> ЖК имя приколоть имя приколоть Д7 9 EN2 6 из 2-го дисплея Д5 7 EN3 6 из 3-го дисплея СИЛ 1 EN4 6 из 4-го дисплея НЧ 14 EN5 6 из 5-го дисплея В ЭТОМ 16 EN6 6 из 6-го дисплея ВЫБОР 17 EN7 6 из 7-го дисплея Дополнительную клавиатуру можно подключить следующим образом: HD44780: распиновка 4-битной клавиатуры порт принтера <-> клавиатура замечания имя приколоть приколоть Д0 2 Y1 Д1 3 Y2 Д2 4 Y3 Д3 5 Y4 Д4 6 Y5 Д5 7 Y6 Только если не используется для подсветки или 3-го контроллера.nSTRB 1 Y7 Только если не используется для дополнительных контроллеров. нЛФ 14 Y8 В ЭТОМ 16 Y9 nSEL 17 Y10 nACK 10 Х1 ЗАНЯТЫЙ 11 Х2 БУМАГА 12 Х3 СЕЛИН 13 Х4 nНЕИСПРАВНОСТЬ 15 Х5 Дополнительная проводка подсветки должна быть подключена к D5, контакт 7.8-битный «Винамп» Этот тип подключения должен работать с winamp. HD44780: проводка «Winamp» порт принтера <-> ЖК имя приколоть имя приколоть Д0 2 Д0 7 Д1 3 Д1 8 Д2 4 Д2 9 Д3 5 Д3 10 Д4 6 Д4 11 Д5 7 Д5 12 Д6 8 Д6 13 Д7 9 Д7 14 nSTRB 1 RU 6 нЛФ 14 RW 5 (EN3 6 — LCD 3) (дополнительно (*)) В ЭТОМ 16 РС 4 nSEL 17 EN2 (6 — ЖК-дисплей 2) (дополнительно) (*) в строке RW дисплея: эта строка определяет, будет ли дисплей получать данные от Порт LPT или отправляет ли он данные на порт LPT: если он заземлен, он получает, если высокий или подключен вообще ни к чему он «посылает» (т.д., не будет работать так, как задумано). Итак, если вы не уверены, что вам это нужно в противном случае, затем подключите его к GND. Это, безусловно, применимо, если у вас есть только один дисплей. Если вы хотите, чтобы дисплей работал с плагином Winamp, подключите nLF (пин 14) к RW вашего ЖК-дисплея. Затем вы можете использовать плагин в двунаправленном режиме (который гораздо быстрее). С 3-мя подключенными ЖК-дисплеями это невозможно. Примечание от Бенджамина: я не пробовал использовать Winamp с третьим ЖК-дисплеем. подключен к этой линии. Дополнительную клавиатуру можно подключить следующим образом: HD44780: Проводка «Winamp» — Клавиатура порт принтера <-> клавиатура имя приколоть приколоть Д0 2 Y1 Д1 3 Y2 Д2 4 Y3 Д3 5 Y4 Д4 6 Y5 Д5 7 Y6 Д6 8 Y7 Д7 9 Y8 nACK 10 Х1 ЗАНЯТЫЙ 11 Х2 БУМАГА 12 Х3 СЕЛИН 13 Х4 nНЕИСПРАВНОСТЬ 15 Х5 Дополнительная проводка подсветки должна быть подключена к nSEL, контакт 17.8-битное «lcdtime» Первоначально это основано на «lcdtime» (Бенджамин Це [email protected]) и позволяет комбинировать ЖК-дисплей со светодиодом гистограмма. ЖК-дисплей управляется LCDproc, а светодиоды — другой программой. например, порто. Дополнительную информацию можно получить по адресу: Соединения ЖК-дисплея: HD44780: проводка «lcdtime» порт принтера <-> ЖК имя приколоть имя приколоть Д0 2 Д0 7 Д1 3 Д1 8 Д2 4 Д2 9 Д3 5 Д3 10 Д4 6 Д4 11 Д5 7 Д5 12 Д6 8 Д6 13 Д7 9 Д7 14 nSEL 17 — nSTRB 1 РС 4 нЛФ 14 RW 5 (опционально — установите LCD RW на низкий уровень (*) В ЭТОМ 16 RU 6 (*) в строке RW дисплея: эта строка определяет, будет ли дисплей получать данные от Порт LPT или отправляет ли он данные на порт LPT: если он заземлен, он получает, если высокий или подключен вообще ни к чему он «посылает» (т.д., не будет работать так, как задумано). Итак, если вы не уверены, что вам это нужно в противном случае, затем подключите его к GND. Полную информацию о гистограмме см. в tar-ball lcdtime (выше). связи. Дополнительную клавиатуру можно подключить следующим образом: HD44780: подключение «lcdtime» к клавиатуре порт принтера <-> клавиатура имя приколоть приколоть Д0 2 Y1 Д1 3 Y2 Д2 4 Y3 Д3 5 Y4 Д4 6 Y5 Д5 7 Y6 Д6 8 Y7 Д7 9 Y8 nSTRB 1 Y9 nSEL 17 Y10 (только если не используется для подсветки) nACK 10 Х1 ЗАНЯТЫЙ 11 Х2 БУМАГА 12 Х3 СЕЛИН 13 Х4 nНЕИСПРАВНОСТЬ 15 Х5 Проводка подсветки должна быть подключена к nSEL, контакт 17.потому что портато программа (упомянутая выше) также использует этот контакт для управления гистограммой, вы нельзя использовать управление подсветкой вместе с гистограммой. Последовательный LPT Этот интерфейс использует несколько проводов для подключения к HD44780. Подходит для высоких шумов, длинных соединений. Разработано Эндрю МакМейкан [email protected] Я (Йорис) немного расширил этот драйвер и проводку. Теперь он поддерживает keys снова (у него раньше были поддерживаемые ключи, но какое-то время их не было).Далее я расширил драйвер и проводку, чтобы можно было запустить использование 2 вместо 3 выходных контактов. Это даже на одну булавку меньше! 🙂 Конечно, использование меньшего количества линий, чем другие проводки, не может оставаться без недостатков. В этом случае простота длинных питающих проводов компенсируется некоторым интеллектом в расшифровке данных. если ты опыта работы с паяльником нет, строить не рекомендую эта проводка. Итак, вот проводка. Первая из «простых» трехпроводных версий.IC1 это регистр сдвига, 4094. Не забудьте подключить 5V к контакту 16 и GND к контакту 8 микросхемы. HD44780: последовательное подключение LPT («простое») ИК1 ----------- | 4094 | 5В | сдвиг рег | отображать О | | ключи | 1| |4 +----|STR Q0|--------------------o 11 D4 Y1 | | |5 Данные | 2| Q1|--------------------o 12 D5 Y2

D3 5 о————————-|D |6 | | Q2|———————o 13 D6 Y3 | 3| |7 D4 6 o—————————————|CK Q3|—————— —o 14 D7 Y4 | | |14 | 15| Q4|———————о Y5 +—-|ОЕ |13 | Q5|———————o 4 RS Y6 | |12 | Q6|———————о Y7 | |11 | Q7|———————о Y8 | |9 | QS|— +—o 5 RW | __|10 | | QS|— === | | ————

D2 4 o—————————————————————————- ————о 6 EN

D7 9 o—————————————————————————- ————о 6 EN2 (2-й ЖК)

  5В O-----+---------+------------------------------- +-----о 2 ВКК
                | | |
                | | |
                |100n О 16 .-.
               --- IC1 | |<---o 3 Vlcd
               --- О 8 | |10к
                | | '-'
  

Земля | | | 18..25 о-----------+---------+---------+ -------+-----o 1 Земля | === ЗЕМЛЯ

]]>

Вторая возможная разводка - с 2 выходными линиями. Этот немного больше сложный. Если вы не понимаете схему, не стройте ее.HD44780: последовательное подключение LPT («сложное») ИК2 ----------- | 74HCT164 | | сдвиг рег | отображать | | ключи Данные 1| |3

D3 5 o-----------------------------------+---|D Q0|----------------- ---о 11 D4 Y1 | | |4 | 2| Q1|--------------------o 12 D5 Y2 +---|Д |5 | Q2|--------------------o 13 D6 Y3 | |6 | Q3|--------------------o 14 D7 Y4 | |10 Часы 8| Q4|--------------------о Y5 D4 6 о----------------------------------------|CK |11 | Q5|--------------------o 4 RS Y6 ___ 9|\ 8 9|_ |12 +--| |--+----| >o----|R Q6|--------------------o Y7 | 22к | |/ | |13 | --- IC1 | Q7|---+ +--o 5 ПВ | --- | | | 5В | | |100p ----------- | О === | | | | | === | .-. | | | |22k +----------------------------------------------------+ | | | '-' | ___ 11|\ 10 | 5|\ 6 +--| |--+----| >о-------------------||-----+----| >o--o 6 RU 22к | |/22п |/ --- IC1 IC1 --- |22р | IC1=74HCT14 (6 инверторов с триггером Шмитта) ===

  5В О--+-------+------+------+--------------------- --+-----о 2 ВКЦ
           | | | | 13|\ 12 |
           | | | +---| >о- |
           |100n О 14 О 14 |/ .-.
          --- IC1 IC2 | |<---o 3 Vlcd
          --- О 7 О 7 1|\ 2 3|\ 4 | |10к
           | | | +--| >о- +--| >о- '-'
  

Земля | | | | |/ | |/ | 18..25 о------+-------+------+-------+----------+---- -+-----+-----o 1 Земля | === ЗЕМЛЯ

]]>

Последовательная клавиатура LPT Чтобы понять эту часть документации по serialLpt, вам также необходимо прочитайте раздел клавиатуры в этом документе.Проводка serialLpt поддерживает клавиатуру. 3-проводная версия поддерживает 8 ключей, или если вы используете несколько обратных линий до 8 x 5 = 40 строк. 2-проводная версия поддерживает 7 ключей или несколько обратных линий 7 х 5 = 35 ключей. HD44780: Serial LPT — линии возврата клавиатуры порт принтера <-> клавиатура имя приколоть приколоть nACK 10 Х1 ЗАНЯТЫЙ 11 Х2 БУМАГА 12 Х3 СЕЛИН 13 Х4 nНЕИСПРАВНОСТЬ 15 Х5 На линиях длиннее, скажем, метра, вы должны буферизовать обратную линию (линии).Если у вас есть только 1 линия возврата, вы можете буферизовать ее двумя оставшимися буферы от 74HCT14: HD44780: Serial LPT — линии возврата клавиатуры буферизованы 1|\ 2 13|\ 12 ___

клавиатура o-----| >о------| >o---|___|---+---o входной контакт на порту LPT возврат |/ |/ 220E | IC1 IC1 --- --- 1нФ | ===

]]>

Подсветка серийного номера LPT Также поддерживается подсветка. Вам также понадобится порт от 74HCT14 для это.Выход BL ниже должен быть подключен к входу BL в секция подсветки HD44780: Serial LPT — дополнительная схема подсветки ___ 3|\ 4 Данные о-----|___|--+----| >o----o BL вывод

LPT-D3 470k | |/ --- IC1 --- |100 нФ | ===

]]>

спи Этот тип подключения управляет ЖК-дисплеем в последовательном режиме (поддерживается на Hitachi HD66712, Контроллеры Samsung KS0073 и KS0074 (и клоны), подключенные к некоторым Linux SPI-устройство.Этот тип подключения в настоящее время поддерживается только в Linux. Это сильно рекомендуется использовать реализацию SPI с аппаратной поддержкой, например. на Raspberry Pi. Поскольку связь SPI с дисплеем не может управлять переключателем подсветки, этот тип подключения имеет опцию BacklightDevice который может использовать вывод GPIO, открытый через sysfs (см. eLinux GPIO). USB-чип FTDI FT2232D "ftdi" Вы можете использовать двухканальный чип FTDI FT2232D USB <-> параллельный FIFO. для подключения дисплея по шине USB.Чип переведен в режим битбанг и управляет обоими каналами как выходами для управления дисплеем в 8-битном режиме. HD44780: 8-битный FTDI FTDI-чип <-> ЖК имя приколоть имя приколоть АДБУС0 24 Д0 7 АДБУС1 23 Д1 8 АДБУС2 22 Д2 9 АДБУС3 21 Д3 10 АДБУС4 20 Д4 11 АДБУС5 19 Д5 12 АДБУС6 18 Д6 13 АДБУС7 17 Д7 14 БДБУС0 40 РС 4 БДБУС1 39 RW 5 БДБУС2 38 RU 6 БДБУС3 37 БЛ Подсветка (опционально) Вы можете настроить идентификатор поставщика/продукта USB в LCDd.конф. Проводка линий управления может быть опционально переконфигурирована, пожалуйста, посмотрите на источник драйвера, если вам это действительно нужно.

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

hd44780/ftdi: подключение подсветки +--------o 16 GND подсветка | маленький резистор.-. 10 - 47 Ом | | в зависимости от | | отображать '-' | |с ___ б |/ Штифт BL o------------|___|-------------| 4k7 |\ BC547 |е | === ЗАЗЕМЛЕНИЕ

]]>

В качестве альтернативы вы можете использовать одноканальный FTDI FT245BM USB <-> параллельный FIFO и использовать дисплей в 4-битном режиме.HD44780: 4-битный FTDI FTDI-чип <-> ЖК имя приколоть имя приколоть Д0 25 Д4 11 Д1 24 Д5 12 Д2 23 Д6 13 Д3 22 Д7 14 Д4 21 RU 6 Д5 20 РС 4 Д6 19 RW 5 Д7 18 БЛ Подсветка (опционально) Для использования одного канальный чип FTDI FIFO: HD44780: конфигурация для FTDI 4bit USB-устройство LIS2 "lis2" LIS2 от VLSystem() представляет собой полнофункциональный модуль USB VFD с четырехканальным управлением вентилятором.К этому устройству можно получить доступ как к последовательному устройству с помощью ядра модуль ftdi_sio.ko, который сопоставляет порт USB с последовательным портом (например, /dev/ttyUSBx). USB-устройство MPlay Blast "mplay" MPPlay Blast от VLSystem () представляет собой полнофункциональный модуль USB VFD с двухканальным управлением вентилятором и двухканальные датчики температуры. К этому устройству можно получить доступ как к последовательному устройству с помощью ядра модуль ftdi_sio.ko, который сопоставляет порт USB с последовательным портом (например, /dev/ttyUSBx).ЖК-дисплей на устройстве с последовательной панелью "los-panel"

LoS-Panel — это самодельное устройство, созданное с использованием Atmel ATtiny2313 и поддерживает следующие функции: Управляет дисплеями с одним контроллером. Переключаемая подсветка. Одна матричная клавиатура 4x4 и 4 кнопки прямого доступа.

Клавиши прямого доступа сообщаются LCDd как пятый столбец матричной клавиатуры. Столбцы и строки сообщаются в обратном порядке (столбец 1 / строка 1 находится в нижнем правый угол) на LCDd, который ожидает, что (1/1) будет левым верхним углом.Это необходимо учитывать при настройке ключей. Видеть для получения дополнительной информации об этом устройстве. Последовательное ЖК-устройство VDR "vdr-lcd" …подлежит документальному оформлению… Пожалуйста, обращайтесь к Маттео Пиллону за дополнительной информацией. Модуль VDR-Wakeup "vdr-wakeup" Модуль VDR-Wake Фрэнка Джепсена представляет собой модуль расширения последовательного ввода-вывода для известный VDR на базе Linux, позволяющий подключить к нему ЖК-дисплей и поддерживающий LCDproc. Видеть (немецкий) для получения дополнительной информации о VDR-Wakeup.Pertelian X2040 "пертелиан" Pertelian X2040 включает в себя дисплей HD44780 с корпусом и портом USB. связь.

Для работы с LCDproc в Linux вам необходимо usbserial.ko и ftdi_sio.ko загружены модули ядра. После этого дисплей будет доступен на последовательный порт /dev/ttyUSBx.

См. Страница продукта X4020 для получения дополнительной информации. Последовательное устройство PIC-an-LCD "picanlcd" Также поддерживается модуль PIC-an-LCD. Не подключен к LPT порту а к последовательному порту, что избавляет вас от множества потенциальных проблем.Для его использования укажите устройство, к которому вы подключили модуль в config файл с настройкой устройства. По умолчанию это /dev/lcd. Он не поддерживает ни клавиатуру, ни переключение подсветки. По состоянию на 2012 год эти устройства больше не продаются. Поищите в интернет-архиве копия если нужно руководство. Устройство сериализатора LCD "lcdserializer" Подключение сериализатора LCD технически такое же, как PIC-an-LCD с теми же преимуществами, он использует последовательный порт, что делает вещи действительно простыми.В отличие от PIC-an-LCD ЖК-сериализатор не является коммерческим продуктом. это просто проект, найденный в сети и находящийся в свободном доступе. У вас есть все инструменты и код для самостоятельной сборки и настройки поведения устройства. Что вам нужно Немного электронных знаний и знакомство с паяльником PIC16F84 (я использовал PIC16F84A) или PIC16C54. Программатор ПОС JDM gputils и picprog, установленные на вашей машине GNU/Linux Запись PIC Во-первых, вам нужно загрузить исходный код ASM для вашего PIC, а затем сделать шестнадцатеричный код: $ gpasm lcd16f84_custom.как м Теперь бинарный файл готов к прошивке на PIC. Подключите программатор с установленным PIC и выполните следующую команду, чтобы увидеть, как он горит ;-): $ picprog --erase --burn --input lcd16f84.hex --pic /dev/ttyS0 Запуск lcdproc Пришло время построить операционную схему, помните, что этот драйвер использует скорость 9600 бод, поэтому JP2 должен быть закрыт. Теперь включите плату. Вы должны увидеть OK на ЖК-экране. В противном случае перепроверьте все соединения. Замените LCDd.conf, чтобы включить следующие операторы в раздел [hd44780] : ConnectionType=LCDSerializer Устройство=/dev/ttyS0 Наконец, запустите демон и расслабьтесь, наблюдая за работой lcdproc. ЖК-модуль BWCT USB "bwctusb" ЖК-модуль BWCT USB, продаваемый Bernd Walter Computing Technology. () это маленькая доска который можно подключить к дисплею HD44780 и подключить его к USB. Плата, управляемая типом соединения bwctusb , не поддерживает ни клавиатуру для ввода, ни более одного контроллера с одним контроллером дисплей, а также не позволяет настроить подсветку или яркость.Но вы можете настроить контрастность дисплея с помощью программного обеспечения. (см. параметр конфигурации Contrast). Особые параметры конфигурации Если к системе подключено более одного USB-модуля BWCT, параметр конфигурации SerialNumber позволяет выбор того, какой дисплей используется в LCDd. lcd2usb Тилля Харбаума LCD2USB это дешевый, но мощный самодельный интерфейс для подключения HD44780 дисплеи на основе USB, состоящие только из легкодоступных частей.Устройство поддерживает программную регулировку контрастности и подсветки. а также дисплеи с двумя контроллерами (требуются для 4*27 и 4*40). Он основан на процессоре Atmel AVR Mega8 с чистой программной реализацией. протокола USB для серии микроконтроллеров Atmel AVR. Весь интерфейс вкл. аппаратная компоновка находится под лицензией GPL. Это означает, что вы можете взять эти схемы и использовать их в качестве основы. для вашего собственного интерфейса, например. для графического LCD. К интерфейсной плате LCD2USB можно подключить два ключа.Они могут генерировать три ключевых события, которые можно сопоставить с именами клавиш, используя команды DirectKey_1 - DirectKey_3: один для каждой клавиши и третий, если клавиши нажаты одновременно. С этой 3-клавишной настройкой можно использовать меню (см. пример ниже). Этот драйвер поддерживает оригинальную интерфейсную плату LCD2USB, как описано выше. а также совместимые устройства, такие как продаваемые Lcdmod Kit или разработанные Malte Pöggel. Особые параметры конфигурации Помимо стандартных параметров конфигурации для дисплеев hd44780 , Тип подключения lcd2usb поддерживает три дополнительных варианта: Контрастность для настройки контрастности дисплея, Яркость для установки яркости дисплея при включенной подсветке и OffBrightness для установки яркости дисплея при выключенной подсветке.Все три варианта предполагают число в диапазоне от 0 до 1000. HD44780: Конфигурация для LCD2USB [hd44780] ConnectionType=lcd2usb Контраст=850 Яркость=800 OffBrightness=0 Клавиатура=да Подсветка=да Размер=20x2 KeyDirect_1=Ввод KeyDirect_2=Вниз KeyDirect_3=Выход ]]> Для того, чтобы тип подключения lcd2usb работал с 2-контроллерным дисплеем вам может потребоваться установить параметр конфигурации vSpan соответствующим образом. Дик Стрифленд "USBtiny" USBтини представляет собой программную реализацию низкоскоростного протокола USB для микроконтроллеры Atmel ATtiny.Это также имя ссылки схема» с использованием ATtiny2313. Эталонная схема оснащена ИК-приемником для пультов дистанционного управления и ЖК-дисплеем. Из-за аппаратных ограничений ATtiny2313 ЖК-дисплей не имеет переключаемого подсветка, регулируемая контрастность, любые клавиши, а также не поддерживает дисплеи с более одного контроллера. Если вам нужны эти функции и вам не требуется ИК-приемник рекомендуем посмотреть на LCD2USB устройство. LCDproc не использует ИК-приемник. Требуется стороннее программное обеспечение заставить его что-либо делать, т.грамм. ЛИРК. USS-720 Мост USB-to-IEEE 1284 (Belkin F5U002) "uss720" USS-720 USB-to-IEEE 1284 Bridge — это полнофункциональный USB-параллельный чип, который используется в большинстве (но не во всех) параллельных USB-адаптерах принтера Belkin F5U002. Поскольку эти адаптеры недорогие и легкодоступные на вторичном рынке, они представляют собой отличное решение для пользователей, которые хотят поэкспериментировать с параллельным портом, но имеют на своих компьютерах только порты USB. Поскольку микросхема действует как параллельный порт, драйвер поддерживает те же функции и разводку, что и 8-битный драйвер "winamp".Однако, поскольку в большинстве параллельных USB-адаптеров для принтеров используется Centronics разъем принтера, обязательно преобразовать нумерацию контактов параллельного порта в "winamp" подключение к нумерации контактов порта Centronics. Многие таблицы доступны в Интернете которые иллюстрируют, как нумерация контактов различается между ними. Особые параметры конфигурации Поскольку несколько производителей использовали микросхему USS720 в своих параллельных USB-адаптерах для принтеров, Параметры VendorID и ProductID настраиваются в ЖКд.конф файл. Не все параллельные USB-адаптеры для принтеров Belkin F5U002 используют микросхему USS720. Ищите темно-серый адаптеры со съемным кабелем USB для достижения наилучших результатов. I2C с расширителем портов Если у вас есть доступный порт I2C, который поддерживается вашим ядром (через /dev/i2c*) можно добавить I2C расширитель портов (в данном примере PCF8574P). HD44780: расширитель портов PCF8574P на шине I2C Конфигурация HD44780: конфигурация для I2C с расширителем портов Если ваш расширитель портов имеет другую проводку, вы можете переназначить контакты в файле конфигурации. HD44780: конфигурация для I2C с расширителем портов Альтернативная проводка HD44780: конфигурация для I2C с расширителем портов альтернативная конфигурация Параметр конфигурации устройства обозначает файл устройства вашей шины I2C (здесь /dev/i2c-0).Вы должны загрузить стандартный модуль ядра i2c-dev.ko и водитель автобуса, но нет I2C чип-модули (например, pcf8574.ko)! Параметр конфигурации порта содержит I2C адрес расширителя портов I2C (здесь 0x20, PCF8574 из приведенного выше примера, со всеми битами адреса, установленными на 0).

Бит 8 адреса (обычно 0 в адресах I2C) имеет особое значение: Он говорит драйверу рассматривать устройство как PCA9554 или подобное, устройство, которому нужна 2-байтовая команда, и оно будет зачищено с адреса.

HD44780: примеры адресов расширителей портов I2C Значение порта Имея в виду 0x20…0x27 PCF8574 с A[012]=0…7 0x38…0x3f PCF8574A с A[012]=0…7 0xa0…0xa7 PCA9554 с A[012]=0…7 0xa0…0xa7 PCA9554A с A[012]=0…7 Устройство ethlcd Устройство ethlcd() просто ЖК-дисплей, управляемый микроконтроллером ATmega, управляемый и питаемый от «домашнее» питание через Ethernet. | | | | | _________ ___________ ____________ | | | | | | | | | | | | | | | | | | | ЖК | | | СПИ | ENC28J60 | | Кабель UTP | | HD44780 |<--- | ATmega168 | <---> | Ethernet |<========+------> ПК работает | | | | | | контроллер | | | LCDproc | | | | | | | | | | | | | | | | | | | | | | | | | | | бипер | | | __________________________________________| | Адаптер переменного тока ethlcd

]]>

Устройство "видимо" для LCDproc, как и любое другое устройство HD44780.Разница это проводка - вместо того, чтобы подключать дисплей напрямую к ПК (через последовательный/параллельный/usb-порт), он подключен через Ethernet, а связь осуществляется через TCP-соединение. Основная особенность в том, что для питания и управления LCD нужен один кабель UTP. Чтобы использовать драйвер, укажите IP-адрес устройства или имя хоста, на котором установлено устройство ethlcd. доступен путем установки в конфигурационном файле значения Device. По умолчанию это ethlcd. USBLCD-адаптер Адаптер USBLCD от Adams IT Services () представляет собой небольшую интерфейсную плату, которая позволяет подключить буквенно-цифровой дисплей модуль на базе HD44780 или совместимый контроллер к USB.Дисплей будет питаться от USB. Он имеет переключаемую подсветку (вкл. или выкл.) и может использоваться с дисплеями 16x2, 16x4 или 20x4. Тип подключения usblcd взаимодействует с ядром драйвер с помощью файла устройства /dev/usb/lcdx. Драйвер ядра, обеспечивающий это устройство, в настоящее время существует только для ядер Linux. новее 2.4.20-pre7. С 2007 года эти устройства больше не продаются. Этот драйвер был портирован с lcdproc 0.4.5 для поддержки существующих пользователей. Контроллер USB-4-all Плата контроллера USB-4-all от Sprut() представляет собой небольшую интерфейсную плату, которая позволяет подключать различное оборудование к USB.Субдрайвер для LCDproc поддерживает два дисплея HD44780 и клавиатуру 4x4, а также программная регулировка контрастности и яркости (подсветки). HD44780: USB-4-all — подключение дисплея USB-4-все ЖК1 LCD2 имя приколоть имя имя РБ7 28 Д7 Д7 РБ6 27 Д6 Д6 РБ5 26 Д5 Д5 РБ4 25 Д4 Д4 РБ3 24 Ч/З Ч/З РБ2 23 РС РС РБ0 21 RU RC0 11 RU HD44780: USB-4-all — подключение клавиатуры USB-4-все клавиатура имя приколоть имя РА0 2 Х1 РА1 3 Х2 РА2 4 Х3 РА3 5 Х4 РА4 6 Y1 РА5 7 Y2 RC6 17 Y3 RC7 18 Y4 HD44780: USB-4-all — подключение яркости и контрастности USB-4-все Описание имя приколоть RC1 12 яркость RC2 13 контраст HD44780: управление яркостью через USB-4 LCD 15 (+ Подсветка)
  +---> LCD 16 (- Подсветка)
                      |
                     === ЗАЗЕМЛЕНИЕ
  

]]>

HD44780: управление контрастностью через USB-4 ЖК-дисплей 3 (контрастность) |c 680р | ___ б |/ |+ RC2 o------|___|------| НПН --- 10 мкФ 22k |\ --- |е | | | | | === === Земля ]]> Малина Пи

Этот тип подключения поддерживает ЖК-дисплей, подключенный к разъему GPIO P1 на малиновый пи.Поддерживаются дисплеи с одним или двумя контроллерами.

Поддерживает отключаемую подсветку, подключенную к контакту P1-11 по умолчанию. Использовать схема переключателя, как описано в .

Уровень сигнала на контактах GPIO составляет 3,3 В, и они, как говорят, не быть устойчивым к напряжению 5 В. Поэтому контакт R/W дисплея должен быть подключен к GND, чтобы предотвратить появление логики 5V на GPIO булавки. По той же причине не должна отключаться цепь подсветки. использовал. Питание ЖК-дисплея, использующего 5 В от контакта P1-02, будет работать.Питание ЖКИ от 3,3 В (пин Р1-01) будет работать только если он рассчитан на 3,3 В операция. HD44780: сопоставление контактов по умолчанию для Raspberry Pi Соединитель <-> ЖК Имя контакта Пин код Имя Приколоть GPIO18 Р1-12 Д7 14 GPIO23 Р1-16 Д6 13 GPIO24 Р1-18 Д5 12 GPIO25 Р1-22 Д4 11 GPIO08 Р1-24 RU 6 GPIO07 Р1-26 РС 4 ЗАЗЕМЛЕНИЕ П1-06 RW 5 GPIO22 Р1-15 EN2 Второй контроллер (опционально) GPIO17 Р1-11 БЛ Подсветка (опционально)

GPIO07 и GPIO08, используемые для сигналов RS и EN, также используются SPI автобус.Если вы загрузили драйвер SPI, вам нужно будет назначить их другому GPIO, например. GPIO04 и GPIO22.

При использовании дисплея с двумя контроллерами параметр vspan опция также должна быть настроена (например, vspan=2,2 для дисплей 40x4).

Особые параметры конфигурации Raspberry Pi

Этот драйвер подключения можно настроить для использования других контактов, а не один описан в таблице над. Использование булавки_ опция конфигурации, любой контакт ЖК-дисплея может быть назначен к любому контакту GPIO.

Значения для pin_ опция конфигурации - это числовая часть из Имя сигнала GPIO, а не номер контакта разъема заголовка! Найти какой сигнал направляется на какой контакт разъема относится к низкоуровневым периферийным устройствам RPi описание.

Драйвер подключения содержит проверку возможных имен сигналов. Ты получит сообщение об ошибке, если вы попытаетесь назначить вывод сигналу, который недоступно для разъема P1 или P5.

HD44780: альтернативная конфигурация контактов Raspberry Pi GPIO pin_D4=25 pin_D5=24 pin_D6=23 pin_D7=18 pin_EN=8 pin_RS=7 pin_BL=17

]]>

Тарелка Adafruit Pi Adafruit RGB Positive 16x2 LCD+Keypad для Raspberry Pi (он же Pi Plate, см. ()) комбинирует ЖК-дисплей 16x2 символов, до 3 контактов подсветки И 5 контактов клавиатуры, используя только два контакта I2C на Rasperry Pi.Обратите внимание, что этот тип подключения управляет всеми контактами RGB подсветки на в то же время, что приводит к белой подсветке. Вам нужно будет изменить исходный код, если вы хотите иметь другой цвет. HD44780: Пример конфигурации для типа соединения Pi Plate Клавиатура=да KeyDirect_1=Ввод KeyDirect_2=Вверх KeyDirect_3=Вниз KeyDirect_4=Влево KeyDirect_5=Вправо ]]> Управление и отображение PiFace Управление и дисплей PiFace для Raspberry Pi от OpenLX SP Ltd сочетает в себе символьный ЖК-дисплей 16x2 и кнопки навигации с использованием шина SPI на Rasperry Pi.PiFace Control and Display оснащен ИК-приемником, которого нет у LCDproc. использовать. Для этого вам нужно настроить и использовать LIRC. Видеть Настройка PiFace Control And Display для использования пульта дистанционного управления. HD44780: Пример конфигурации для типа подключения PiFace Control and Display Клавиатура=да KeyMatrix_1_1=Слева KeyMatrix_1_2=Вниз KeyMatrix_1_3=Вверх KeyMatrix_1_4=Право KeyMatrix_1_5=Выход KeyMatrix_1_6=Ввод KeyMatrix_1_7=Слева KeyMatrix_1_8=Право ]]> Компиляция Убедитесь, что файлы HD44780 созданы при запуске ./настроить. Это можно сделать, указав --enable-drivers=all или включив hd44780 в списке включенных драйверов (например, --enable-drivers=hd44780). Конфигурация в LCDd.conf [hd44780] Порт = ПОРТ Для параллельных подключений укажите адрес параллельного порта, к которому подключен ЖК-дисплей. Общие значения для PORT: 0x278, 0x378 и 0x3BC. Если не указано, по умолчанию используется 0x378. Для типов соединения I2C это устанавливает ведомое устройство. адрес.Устройство = УСТРОЙСТВО Если вы используете последовательное соединение или соединение I2C, вам нужно установить этот параметр для устройства, к которому подключен ваш ЖК-дисплей. Например, если дисплей подключен к первому последовательному порту, вы должны установить его в /dev/ttyS0. Значение по умолчанию — /dev/lcd. Тип соединения = { 4 бит | 8 бит | сериалLpt | винамп | ЖК-дисплей | ЖК-сериализатор | лос-панель | вдр-жк | vdr-пробуждение | пертелиан | лис2 | играть | usblcd | bwctusb | жк2usb | usbtiny | uss720 | usb4все | ftdi | i2c | пилат | спи | пифаскад | этлкд | Raspberry Pi } Выберите тип подключения проводки/дисплея.Смотрите также (). Скорость = БИТРАТ Для последовательного соединения установите битрейт последовательного порта. Использовать значение по умолчанию для выбранного интерфейса, просто установите на 0. CharMap = { hd44780_default | hd44780_евро | ea_ks0073 | sed12780f_0b | hd44780_koi8_r | hd44780_cp1251 | hd44780_8859_5 | upd16314 | weh001602a_1 | никто } Установите отображение символов в зависимости от вашего дисплея: Значение по умолчанию, hd44780_default, для "классического" Дисплеи HD44780.hd44780_euro для дисплеев с маской ПЗУ поддержка европейской кодировки (код ROM A02). ea_ks0073 — чармэп для Electronic Дисплеи сборки на базе KS0073. Эти устройства имеют более богатую набор символов, включая множество значков и многие другие символы ISO-8859-1, чем стандартные HD44780. sed12780f_0b предназначен для некоторых дисплеев SED 1278. Карта none не переводит никаких символов.Он отображает символы, которые на самом деле имеют контроллеры дисплея. вместо этого хранится в его CGROM для этой позиции. Этот параметр предназначен для отладки. Вам нужно только установить этот параметр, если у вас нестандартный Дисплей HD44780 или шармап. Если для LCDproc была настроена опция --enable-extra-charmaps, также доступны следующие сопоставления символов: hd44780_koi8_r отображает ввод от клиента в Российский KOI8-R для дисплеев с маской ПЗУ с поддержкой европейского кодировка (код ПЗУ A02).hd44780_cp1251 отображает ввод от клиента в Русский CP1251 (Windows-1251) для дисплеев с маской ПЗУ с поддержкой европейская кодировка (код ROM A02). hd44780_8859_5 сопоставляет ввод от клиента в Российский ISO 8859-5 для дисплеев с маской ПЗУ с поддержкой европейского кодировка (код ПЗУ A02). upd16314 предназначен для дисплеев с Nec uPD16314. контроллер вакуумного флуоресцентного дисплея (VFD) с кодом ПЗУ 002 набор символов.Если на вашем дисплее установлен код ПЗУ 001, вам вместо этого можно использовать шармап hd44780_euro. weh001602a_1 предназначен для таких дисплеев, как WINSTAR WEH001602A OLED-дисплей с банковским шрифтом 1 (Западная Европа I) выбрано. Клиенты должны использовать ISO 8859-1. См. server/drivers/hd44780-charset.h в исходном каталоге LCDproc для фактического сопоставления. Банк шрифтов = Для некоторых дисплеев, таких как WINSTAR WEH001602A, установите Банк шрифтов, который будет использоваться.Банки шрифтов следующие: 0: английский/японский 1: Западная Европа I 2: Английский/Русский 3: Западная Европа II Клавиатура = ¶meters.yesnodef; Сообщите, подключена ли у вас клавиатура. Вам также может понадобиться настроить раскладку клавиатуры далее в этом файле. Яркость = ЯРКОСТЬ Установить начальную яркость при включенной подсветке для типа подключения lcd2usb. Допустимые значения: 0–1000, с 800 по умолчанию.ВыклЯркость = ЯРКОСТЬ Установите начальную яркость выключения, т.е. яркость при выключенной подсветке, для типа подключения lcd2usb . Допустимый диапазон: 0–1000. Если не указано, по умолчанию 300. Контраст = КОНТРАСТ Установите начальную контрастность для bwctusb и lcd2usb типы подключения. Допустимые значения для КОНТРАСТА: 0 - 1000. Если не указано, по умолчанию используется значение 500, что может быть слишком низким или слишком высоким для выбранного типа соединения.Итак, если экран пустой или темный, попробуйте поиграть с контраст немного. Подсветка = ¶meters.yesnodef; Уточните, есть ли у вас отключаемая подсветка. OutputPort = ¶meters.yesnodef; Сообщите, есть ли у вас дополнительный выходной порт («гистограмма») и вы хотите иметь возможность управлять им с помощью команды lcdproc OUTPUT. Последняя строка = ¶meters.yesdefno; Указывает, является ли самая нижняя пиксельная строка символа адресуемой в пикселях. или если он управляет эффектом подчеркивания.Значение по умолчанию — «да», что означает адресуемую последнюю строку пикселей. Размер = ¶meters.size; Определяет размер ЖК-дисплея. По умолчанию: 20x4 В случае нескольких комбинированных дисплеев это должен быть общий размер. vРазмах = ВЫСОТА ,… «Вертикальный размах» при использовании драйвера с мультиконтроллерными дисплеями или с несколькими дисплеями, которые рассматриваются как один виртуальный дисплей. Это разделенный запятыми список высот каждого дисплея.В дисплеях с несколькими контроллерами отображается количество линий для каждого контроллера. Ответственный за. Например. vSpan=2,2,1 означает, что у вас есть три физических дисплея, первый два имеют две линии каждая, а третий имеет одну линию, которые вместе образуют виртуальный дисплей высотой 5 строк. Сумма ВЫСОТЫ должна совпадать с общей высотой дано в Size= . ExtendedMode = ¶meters.yesnodef; Если у вас есть KS0073 или другой «почти HD44780-совместимый», установите этот флаг, чтобы перейти в режим расширенной 4-строчной линейной адресации.Адрес линии = АДРЕС Если следующая строка вашего дисплея не начинается на 0x20 выше в DDRAM, вы можете переопределить значение по умолчанию для ExtendedMode с помощью этого параметра. ЗадержкаМульт = ЗАДЕРЖИВАТЬ Если ваш дисплей работает медленно и не справляется с потоком данных с LCDd, на LCDd может появиться мусор. Установите этот множитель задержки на 2 или 4, чтобы увеличить задержки. Значение по умолчанию равно 1 для неумноженной задержки. DelayBus = ¶meters.yesdefno; Вы можете уменьшить вставленные задержки, установив для этого параметра значение no.На быстрых ПК ваш ЖК-дисплей может реагировать неправильно. По умолчанию: да. KeepAliveDisplay = СЕКУНДЫ Некоторым дисплеям (например, vdr-wakeup ) требуется сообщение от драйвера для указать, что он еще жив. Если установлено значение больше 0, символ в верхний левый угол обновляется каждые SECONDS секунд. Значение по умолчанию 0 не вызывает никаких дополнительных обновлений. Обновить дисплей = СЕКУНДЫ Если вы сталкиваетесь со случайным мусором на вашем дисплее, вы можете использовать это вариант как обходной путь.Если установлено значение больше 0, принудительно полноэкранное обновление каждые SECONDS секунд. По умолчанию: 0. KeyDirect_NUM = КЛЮЧ KeyMatrix_X_Y = КЛЮЧ Если у вас есть клавиатура, вы можете назначить клавиши для клавиш. См. раздел клавиатуры для используемых терминов и раздел о конкретном типе подключения, как проволока это. Для сопоставления, например, непосредственно подключенного ключа 4 к строке Enter используйте KeyDirect_4=Enter .Для матричных ключей используйте X и Y координаты ключа; например KeyMatrix_1_3=Введите . ID поставщика = ПОСТАВЩИК Идентификатор поставщика USB для поиска в определенных типах USB-подключений. При использовании чипа FTDI с типом подключения ftdi значение по умолчанию равно 0x4003. При использовании чипа USS720 с типом подключения uss720 значение по умолчанию равно 0x1293. ID продукта = ИДАНТИФИКАЦИОННЫЙ НОМЕР ПРОДУКТА Идентификатор продукта USB для поиска в определенных типах USB-подключений.При использовании чипа FTDI с типом подключения ftdi значение по умолчанию равно 0x6001. При использовании чипа USS720 с типом подключения uss720 значение по умолчанию равно 0x0002. Серийный номер = СЕРИЙНЫЙ НОМЕР Серийный номер USB-устройства для поиска тип подключения bwctusb . Если он не указан, будет использоваться первый найденный USB-модуль BWCT. Разное Этот текст изначально был взят из сообщения Билла Фэрроу. бфарроу@стрелка.bsee.swin.edu.au. Обновлено в феврале 2000 г., Бенджамин Це [email protected] Обновлено в октябре 2001 г., Йорис Робейн [email protected] Преобразовано в Docbook, март 2002 г., Рене Вагнер [email protected] Обновлено в апреле 2002 г., Рене Вагнер [email protected] Обновлено и расширено с апреля 2006 г. по ноябрь 2007 г., Питер Маршалл [email protected]

%PDF-1.2 % 436 0 объект > эндообъект внешняя ссылка 436 81 0000000016 00000 н 0000001971 00000 н 0000003354 00000 н 0000003514 00000 н 0000003598 00000 н 0000003688 00000 н 0000003789 00000 н 0000003896 00000 н 0000003964 00000 н 0000004090 00000 н 0000004158 00000 н 0000004304 00000 н 0000004372 00000 н 0000004519 00000 н 0000004587 00000 н 0000004707 00000 н 0000004775 00000 н 0000004887 00000 н 0000004955 00000 н 0000005067 00000 н 0000005135 00000 н 0000005281 00000 н 0000005349 00000 н 0000005496 00000 н 0000005564 00000 н 0000005684 00000 н 0000005752 00000 н 0000005864 00000 н 0000005932 00000 н 0000006044 00000 н 0000006112 00000 н 0000006230 00000 н 0000006298 00000 н 0000006419 00000 н 0000006487 00000 н 0000006619 00000 н 0000006687 00000 н 0000006868 00000 н 0000006936 00000 н 0000007075 00000 н 0000007143 00000 н 0000007261 00000 н 0000007329 00000 н 0000007446 00000 н 0000007514 00000 н 0000007620 00000 н 0000007688 00000 н 0000007796 00000 н 0000007864 00000 н 0000007980 00000 н 0000008048 00000 н 0000008162 00000 н 0000008230 00000 н 0000008337 00000 н 0000008404 00000 н 0000008531 00000 н 0000008598 00000 н 0000008716 00000 н 0000008783 00000 н 0000008913 00000 н 0000008980 00000 н 0000009109 00000 н 0000009176 00000 н 0000009292 00000 н 0000009359 00000 н 0000009473 00000 н 0000009539 00000 н 0000009641 00000 н 0000009707 00000 н 0000009775 00000 н 0000009843 00000 н 0000010001 00000 н 0000012203 00000 н 0000012323 00000 н 0000012442 00000 н 0000012559 00000 н 0000012664 00000 н 0000012735 00000 н 0000012813 00000 н 0000002071 00000 н 0000003331 00000 н трейлер ] >> startxref 0 %%EOF 437 0 объект > эндообъект 515 0 объект > поток HU[PU>)E:L,8E_m{v!

LCD16x2 HD44780 Урок 1 — Базовая схема

LCD16x2 HD44780

LCD16x2 — популярный дисплейный модуль, широко используемый в различных устройствах.В этом уроке я объясню основные операции LCD16x2. LCD16x2, который я буду использовать, имеет микросхему контроллера Hitachi HD44780 (или совместимую). В этом уроке я не буду использовать какой-либо микроконтроллер для управления ЖК-дисплеем, а просто использую ряд переключателей, потому что будет полезно понять принцип работы чипа контроллера HD44780. Когда вы используете микроконтроллер для эффективного управления ЖК-дисплеем, этот эксперимент может быть полезным шагом, чтобы получить больше знаний о чипе HD44780, а не просто использовать существующую библиотеку.Вы можете получить техническое описание чипа HD44780 здесь.

LCD16x2 Цепь

Первый шаг этого эксперимента — создание схемы. Я сделаю эту схему на макетной плате. Это схема, которую я использую для этого эксперимента.

  • Контакты 1 и 2 — это контакты Vss и Vdd для этого ЖК-модуля. Вывод Vss должен быть подключен к источнику питания 0 В или к земле. Контакт Vdd должен быть подключен к положительному источнику питания (обычно +5 В, но он также работает с +3.3В).
  • Штифт 3 — контрастный (Vee) штифт. Этот вывод обычно подключается к переменному резистору, который создает схему делителя напряжения. чем больше напряжение на этом выводе, тем ниже контраст, в противном случае контраст выше. Если у вас нет переменного резистора, вы также можете подключить этот контакт к GND через резистор 10 кОм.
  • Контакт 4 — контакт выбора регистра (RS). Если на этом выводе низкий уровень, ЖК-дисплей будет принимать только команду, в противном случае, если на этом выводе высокий уровень, ЖК-дисплей будет принимать данные.
  • Контакт 5 предназначен для чтения/записи (R/W). Этот вывод должен иметь низкий уровень для записи командных или символьных данных в его регистр. Чтобы считать символьные данные из своего регистра, на этом выводе должен быть высокий уровень.
  • Контакт 6 — контакт включения (E). Этот контакт используется для инициирования фактической передачи команд или символьных данных между модулем и линиями данных. При записи в модуль данные передаются только при спаде этого сигнала. При чтении из модуля данные будут доступны после переднего фронта этого сигнала и останутся доступными до тех пор, пока этот сигнал снова не упадет до низкого уровня.
  • Контакты 7–14 — это линии шины данных (D0–D7). Данные могут передаваться либо в виде одного байта (8 бит), либо в виде двух полубайтов (4 бита). При использовании 4-битного режима используются только D4-D7. 4-битный режим полезен при использовании микроконтроллера, поскольку он использует меньше контактов GPIO.
  • Контакты 15 и 16 — это контакты Vcc и GND для подсветки ЖК-дисплея. Вы можете подключить эти контакты к питанию и земле через резистор 330 Ом.

Вот как я сделал эту схему на своей макетной плате.

Перейти ко второй части обучения.

Как использовать ЖК-дисплей I2C с Raspberry Pi Pico

ЖК-экраны

полезны и используются во многих сферах нашей жизни. На вокзале, парковочном автомате, торговых автоматах, передающих краткие сообщения о том, как мы взаимодействуем с автоматом, к которому они подключены. ЖК-экраны — это интересный способ передачи информации в проектах Raspberry Pi Pico и других проектах Raspberry Pi. У них есть большой яркий экран, который может отображать текст, цифры и символы на экране размером 16 x 2.16 относится к 16 символам на экране, а 2 представляет количество строк, которые у нас есть. Мы можем получить ЖК-экраны с 20x2, 20x4 и многими другими конфигурациями, но 16x2 является наиболее распространенным.

В этом руководстве мы узнаем, как подключить ЖК-экран HD44780 к Raspberry Pi Pico через интерфейс I2C с помощью прилагаемого рюкзака I2C, затем мы установим библиотеку MicroPython через редактор Thonny и узнаем, как использовать это для вывода текста на дисплей, управления курсором и подсветкой.

ЖК-экран использует протокол I2C для взаимодействия с Raspberry Pi Pico. Это означает, что мы только требуем.

Как подключить ЖК-экран I2C к Raspberry Pi Pico

(Изображение предоставлено Tom's Hardware)

1. Подключите GND экрана к любому GND на Pico (черный провод).

2. Подключите VDD/VCC к VBUS на Pico (красный провод). Предупреждение, что это контакт 5V.

3. Подключите SDA к I2C0 SDA (GP0, физический контакт 1, оранжевый провод).

4. Подключите SCK/SCL к I2C0 SCL (GP1, физический контакт 2, желтый провод).

5. Подключите Raspberry Pi Pico к компьютеру и откройте приложение Thonny.

Изображение 1 из 3

(Изображение предоставлено Tom's Hardware) Изображение 2 из 3

(Изображение предоставлено Tom's Hardware) Изображение 3 из 3

(Изображение предоставлено Tom's Hardware)

6. Нажмите STOP для подтверждения ваш Пико подключен.

7. Откройте эту ссылку и скопируйте текст со страницы.

8. Создайте пустой файл в Thonny и вставьте в него текст . Сохраните файл на Raspberry Pi Pico как lcd_api.py

9. Откройте эту ссылку и скопируйте текст со страницы .

10. Создайте пустой файл в Thonny и вставьте в него текст. Сохраните файл на Raspberry Pi Pico как pico_i2c_lcd.py

 Программирование ЖК-экрана I2C с помощью Raspberry Pi Pico

После установки библиотек мы можем приступить к написанию тестового сценария для демонстрации функций библиотеки.

1. Создайте новый пустой файл в Thonny.

2. Импорт четырех библиотек предварительно написанного кода. Первые два взяты из библиотеки Machine и позволяют нам использовать контакты I2C и GPIO. Затем мы импортируем функцию сна из Time, что позволит нам приостановить выполнение кода. Наконец, мы импортируем библиотеку I2C для взаимодействия с ЖК-экраном.

  от импорта машины I2C, Pin
из времени импортировать сон
from pico_i2c_lcd import I2cLcd  

3.   Создайте объект i2c для связи с ЖК-экраном по протоколу I2C.Здесь мы используем канал I2C 0, который сопоставляет SDA с GP0 и SCL с GP1.

  i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)  

4. Создайте переменную I2C_ADDR , которая будет хранить первые , Адрес I2C найден при сканировании шины. Поскольку у нас подключено только одно устройство I2C, нам нужно увидеть только первый [0] адрес, возвращенный при сканировании.

  I2C_ADDR = i2c.scan()[0]  

5.   Создайте объект lcd , чтобы настроить соединение I2C для библиотеки.Он сообщает библиотеке, какие контакты I2C мы используем, устанавливаем через объект i2c , адрес нашего экрана, устанавливаем через I2C_ADDR , и, наконец, он устанавливает, что у нас есть экран с двумя строками и 16 столбцами.

  lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)  

6.   Создайте цикл для непрерывного выполнения кода, первая строка в цикле напечатает адрес I2C нашего дисплея в Python Shell Тонни.

  пока верно:
    печать (I2C_ADDR)  

7. Включение и выключение курсора ЖК-дисплея (мигание), аналогично интерфейсу терминала старой школы.

  lcd.blink_cursor_on()  

8.   Выведите на экран две строки текста . Первый напечатает «Адрес I2C:», за которым следует адрес, хранящийся внутри объекта I2C_ADDR. Затем вставьте символ новой строки «\n» , а затем напишите еще одну строку с надписью «Tom’s Hardware» (или что-то еще, что вы хотите сказать). Сделайте паузу на две секунды, чтобы дать время прочитать текст.

  lcd.putstr("Адрес I2C:"+str(I2C_ADDR)+"\n")
    lcd.putstr("Оборудование Тома")
    sleep(2)  

9.   Очистите экран перед повторением предыдущего раздела кода, но на этот раз мы отображаем I2C-адрес ЖК-дисплея, используя его шестнадцатеричное значение. Микросхема PCF8574T, используемая в рюкзаке I2C, имеет два адреса: 0x20 и 0x27, и полезно знать, какой из них используется, особенно если мы используем несколько устройств I2C, поскольку они могут вызвать конфликт на шине.

  ЖК.очистить()
    lcd.putstr("Адрес I2C:"+str(hex(I2C_ADDR))+"\n")
    lcd.putstr("Оборудование Тома")
  

10.   Выключите мигающий курсор , затем очистите экран, чтобы вывести на экран еще одно сообщение «Тест подсветки».

  lcd.blink_cursor_off()
    ЖК.очистить()
    lcd.putstr("Тест подсветки")
  

11.  Чтобы мигать светодиодной подсветкой, используйте цикл for , который будет повторяться десять раз. Он включит подсветку на 0.2 секунды, затем выключите его на то же время. Текст «Тест подсветки» останется на экране даже при выключенной подсветке.

  для i в диапазоне (10):
        lcd.backlight_on()
        сон(0,2)
        lcd.backlight_off()
        сон(0,2)
  

12.   Включите подсветку , а затем скройте курсор . Иногда мигающий курсор может отвлекать внимание от информации, которую мы пытаемся передать.

  lcd.backlight_on()
    ЖК.скрыть_курсор()
  

13.   Создайте цикл for , который будет печатать числа от 0 до 19 на ЖК-экране. Обратите внимание, что существует задержка в 0,4 секунды, прежде чем мы удаляем значение и заменяем его следующим. Мы должны удалить текст, так как перезапись текста сделает его искаженным.

  для i в диапазоне (20):
        lcd.putstr(str(i))
        сон(0,4)
        ЖК.очистить()
  

Полный список кодов

  из машинного импорта I2C, Pin
из времени импортировать сон
из pico_i2c_lcd импортировать I2cLcd
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)

I2C_ADDR = i2c.сканирование () [0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
пока верно:
    печать (I2C_ADDR)
    lcd.blink_cursor_on()
    lcd.putstr("Адрес I2C:"+str(I2C_ADDR)+"\n")
    lcd.putstr("Оборудование Тома")
    спать(2)
    ЖК.очистить()
    lcd.putstr("Адрес I2C:"+str(hex(I2C_ADDR))+"\n")
    lcd.putstr("Оборудование Тома")
    спать(2)
    lcd.blink_cursor_off()
    ЖК.очистить()
    lcd.putstr("Тест подсветки")
    для я в диапазоне (10):
        lcd.backlight_on()
        сон(0,2)
        lcd.backlight_off()
        спать(0.2)
    lcd.backlight_on()
    lcd.hide_cursor()
    для я в диапазоне (20):
        lcd.putstr(str(i))
        сон(0,4)
        ЖК.очистить()
  

Сохраните и запустите ваш код. Как и в случае с любым скриптом Python в Thonny, Нажмите «Файл» >> «Сохранить » и сохраните файл на Raspberry Pi Pico. Мы рекомендуем назвать его i2c_lcd_test.py . Когда все будет готово, нажмите зеленую кнопку воспроизведения , чтобы запустить код и посмотреть, как тест выполняется на экране.

Обзор ЖК-дисплея

- Документация Great Cow BASIC

Введение:

Подпрограммы LCD в этом разделе позволяют программам Great Cow BASIC управлять буквенно-цифровые жидкокристаллические дисплеи на базе микросхемы HD44780 .Этот охватывает большинство ЖК-дисплеев 16 x 1, 16 x 2, 20 x 4 и 40 x 4.

Методы Great Cow BASIC позволяют подключать дисплеи к микроконтроллеру

Режимы подключения:

В таблице ниже показаны режимы подключения. Эти режимы поддерживают подключение к ЖК-дисплею различными способами.

Режим подключения Требуемые соединения

0

Этот метод не требует непосредственной настройки.Подпрограммы ЖК-дисплея должен быть снабжен другими подпрограммами, которые будут обрабатывать коммуникация. Это полезно для связи с ЖК-дисплеями, подключенными через RS232 или I2C.
Это усовершенствованный метод управления ЖК-дисплеем.

1

Использует комбинированную линию данных и синхронизации.Этот режим используется, когда ЖК-дисплей подключен через регистр сдвига 74HC595, как подробно описано в здесь .
Этот метод управления ЖК-дисплеем требует дополнительной интегральной схемы и других пассивных компонентов. Это не рекомендуется для новичков.

2

Использует отдельные линии данных и часы.Этот режим используется, когда ЖК-дисплей подключен через ИС регистра сдвига 74LS174, как подробно описано в здесь
Этот метод управления ЖК-дисплеем требует дополнительных интегральных схем. и другие пассивные компоненты. Это не рекомендуется для новичков.

3

DB , CB , EB подключены к микроконтроллеру как биты данных, часов и разрешения.
Это распространенный способ подключения микроконтроллера к ЖК-дисплею. Этот требует 3 порта данных на микроконтроллере.

4

R/W , RS , Включить и верхние 4 строки данных ( DB4 по DB7 ) подключен к микроконтроллеру.Использование линии R/W необязательно.
Это распространенный способ подключения микроконтроллера к ЖК-дисплею. Этот требует 7 (6) портов данных на микроконтроллере.

8

R/W , RS , Включить и все 8 линий данных.Все линии данных должны быть подключены к одному и тому же порту ввода-вывода в последовательном порядке. Например, DB0 на PORTB.0 , DB1 по PORTB.1 и т. д., с ‘DB7` идет на PORTB.7 .
Это распространенный способ подключения микроконтроллера к ЖК-дисплею. Этот требует 11 (10) портов данных на микроконтроллере.

10

ЖК-дисплей управляется через I2C.Адаптер LCD 12C типа 10. Установите LCD_IO на 10 для YwRobot LCD1602 IIC V1 или адаптера Sainsmart LCD_PIC I2C
Это распространенный метод, требующий наличия двух портов данных на микроконтроллере.

12

ЖК-дисплей управляется через I2C.Адаптер LCD 12C типа 12. Установите LCD_IO на `12` для адаптера Ywmjkdz I2C с потенциометром (переменное сопротивление), изогнутым поверх чипа.
Это распространенный метод, требующий наличия двух портов данных на микроконтроллере.

107

ЖК-дисплей управляется через последовательный порт.Установите LCD_IO на 107 или К107 .
Для K107 требуется один последовательный порт данных на микроконтроллере.

Поддерживаемые ЖК-дисплеи, сопоставленные с режимом подключения

Поддержка различных типов ЖК-дисплеев показана в следующей таблице.

Поддерживаемый тип ЖК-дисплея
количество символов x количество строк
Режим соединения

ЖК-дисплеи типа 16 x 1, 16 x 2, 20 x 2, 20 x 4,
, также известный как ЖК-дисплеи типа 1601, 1602, 2002, 2004.

0,1,2,4,8,10 и 12

ЖК-дисплеи 40 x 4,
, также известные как ЖК-дисплеи типа 4004.

4

ЖК-дисплеи 16 x 1 с нестандартной/непоследовательной картой памяти.

Этот подтип ЖК-дисплея поддерживается с помощью специальной константы.

Используйте #define LCD_VARIANT 1601a для использования этого подварианта.

Также известны как ЖК-дисплеи типа 1601.

Поддерживает любой режим LCD_IO.

Производительность связи

Возможно, потребуется изменить характеристики связи для определенного ЖК-дисплея, поскольку некоторые ЖК-дисплеи работают медленнее.Здорово Cow BASIC поддерживает изменение скорости передачи данных.

Чтобы изменить производительность (скорость связи) ЖК-дисплея, используйте #DEFINE LCD_SPEED . Этот метод позволяет оптимизировать время.

Пример

 #DEFINE LCD_SPEED FAST 
Определить Рабочие характеристики

LCD_SPEED

БЫСТРЫЙ — Скорость составляет приблизительно 20 000 циклов в секунду.
СРЕДНЯЯ — Скорость составляет примерно 15 000 циклов в секунду.
МЕДЛЕННО — скорость составляет приблизительно 10 000 циклов в секунду.
ОПТИМАЛЬНЫЙ - Скорость составляет примерно 30 000 циклов в секунду.

Если LCD_SPEED не определено, скорость по умолчанию равна SLOW

Использование LCD_Speed ​​OPTIMAL
.

Примечание

ОПТИМАЛЬНЫЙ отключает фиксированные задержки и позволяет ЖК-дисплею работать максимально быстро. В этом режиме флаг занятости опрашивается перед каждым байт отправляется на контроллер HD44780. Это не только оптимизирует скорость, но и гарантирует, что данные не отправляются на дисплей. контроллер, пока он не будет готов к приему данных.

Для большинства дисплеев это соответствует скорости около 30 000 символов в секунду.Для сравнения примерно в 10 раз быстрее, чем I2C с использованием расширителя PC8574 (см. LCD_IO 10 или см. LCD_IO 112)

ОПТИМАЛЬНЫЙ поддерживается только в LCD_IO 4,8 и только тогда, когда LCD_NO_RW не определен (режим RW). Когда определено #DEFINE LCD_NO_RW , чтение данных с HD44780 невозможно, так как это отключает режим чтения на контроллере. В этом случае проверка флага занятости недоступна, и подпрограмма GET недоступна.

Чтобы включить проверку флага занятости и, следовательно, использовать команду GET , должны выполняться следующие условия.

  1. Режим ввода-вывода ЖК-дисплея должен быть либо 4-проводным, либо 8-проводным
  2. #DEFINE LCD_NO_RW не определен
  3. Контакт ввода-вывода подключен между микроконтроллером и разъемом RW на ЖК-дисплее
  4. 'ОПРЕДЕЛИТЬ порт LCD_RW.вывод определен в исходном коде Great Cow BASIC.

Пример:

 #DEFINE LCD_IO 4
  #DEFINE LCD_SPEED ОПТИМАЛЬНАЯ

  #DEFINE LCD_DB7 PORTB.5
  #DEFINE LCD_DB6 PORTB.4
  #DEFINE LCD_DB7 PORTB.3
  #DEFINE LCD_DB6 PORTB.2

  #DEFINE LCD_RW PORTA.3 'Должен быть определен для режима RW
  #DEFINE LCD_RS PORTA,2
  #DEFINE LCD_ENABLE PORTA.1 

Изменение ширины ЖК-дисплея

Чтобы изменить характеристики ширины ЖК-дисплея, используйте #define LCD_WIDTH

Подробные сведения о каждом режиме подключения см. в отдельных разделах файла справки.

Для получения дополнительной справки см. LCD_IO 0, LCD_IO 1, LCD_IO 2, LCD_IO 3, LCD_IO_2 74xx164, LCD_IO_2 74xx174, LCD_IO 4, LCD_IO 8, LCD_IO 10 или LCD_IO 12

и,

LCD_Ширина, LCD_Скорость

ЖК-дисплей HD44780, расширители ввода-вывода, интерфейс I2C и т. д.

Вот моя исследовательская заметка о символьном ЖК-дисплее HD44780 и вариантах его подключения к устройствам управления.

HD44780 ЖК-дисплей

  • Символьный ЖК-дисплей в отличие от графического ЖК-дисплея
  • идеально подходит для отображения текста
  • поставляется в различных размерах, но наиболее популярными являются 16x2 и 20x4

Согласно Википедии:

Контроллер ЖК-дисплея Hitachi HD44780 представляет собой буквенно-цифровой контроллер жидкокристаллического дисплея (ЖК-дисплея) с точечной матрицей, разработанный Hitachi в 1980-х годах. Набор символов контроллера включает символы ASCII, японские символы кана и некоторые символы в двух строках по 28 символов.

HD44780 — один из самых популярных символьных ЖК-дисплеев, когда-либо созданных. Многие сторонние дисплеи используют его 16-контактный интерфейс и набор инструкций для совместимости.

Нужна ли нам пайка?

У нас есть возможность приобрести:

Для отдельных ЖК-дисплеев некоторые продукты поставляются с припаянными штыревыми контактами:

Для ЖК-дисплея с интерфейсным модулем I2C некоторые продукты предварительно собраны:

Для системы SparkFun Qwiic Connect большинство продуктов поставляются с разъемами Qwiic:

ЖК-контакты

ЖК-дисплей HD44780 обычно имеет 16 контактов, но некоторые продукты добавляют дополнительные контакты для подсветки RGB.

Лично я разделяю в уме контакты LCD на четыре группы, чтобы они были понятны мне:

  • Питание и контрастность (контакты 1-3)
  • Специальные штифты (штыри 4-6)
  • Контакты данных (контакты 11-14)
  • Контакты подсветки (дополнительно; контакты 15-16 или 15-18)

Википедия и Adafruit Инструкции по подключению символьного ЖК-дисплея могут быть полезны, чтобы увидеть общую картину. Для получения дополнительной информации я нашел полезными следующие ссылки:

Питание и контрастность (контакты 1-3)

ЖК-ПИН # ЖК-ПИН-ПИН-ПИН
1 MONEL
2 VCC +3.от 3 до +5 В (тип.)
3 Контраст от +3,3 до +5 В (тип.)

Специальные контакты (контакты 4-6)

ЖК-ПИН # ЖК-ПИН-ПИН
4 Регистрация Выбор (RS) 0: Инструкция, 1: Data
5 READ / WRITE (R / W ) 0: запись, 1: чтение; скорее всего, всегда 0
6 Разрешить (EN) Начать чтение/запись

В частности, важны бит выбора регистра и бит разрешения.Register Select переключается между режимом инструкций и режимом данных, когда мы взаимодействуем с дисплеем. Бит чтения/записи не нужен, если мы только записываем данные на дисплей. Скорее всего, мы подключим контакт чтения/записи к земле, чтобы он всегда был низким.

Контакты данных (контакты 11-14)

LCD PIN-код # ЖК-ПИН-ПИН-ПИН
70067
7-10 Бит данных 0-3 (DB0-3) Неиспользованный в 4-битной работе
11-14 Бит данных 4-7 (DB4-7) Передача инструкции или данных

ЖК-дисплей HD44780 имеет 4-битный и 8-битный режимы.4-битный режим позволяет нам разделить байт данных (8-битный) на четыре старших бита и четыре младших бита, а затем отправить их по отдельности. Таким образом, мы можем вдвое уменьшить количество необходимых контактов ввода-вывода. Похоже, что обычно большинство людей используют только 4-битный режим.

Байт, который мы отправляем на дисплей, может быть либо инструкцией, либо данными, в зависимости от бита выбора регистра.

Контакты подсветки (дополнительно; контакты 15-16 или 15-18)

ЖК-ПИН # ЖК-ПИН-ПИН-ПИН
15 Подсветка Если это применимо
16 Cathode Cathode Backlight или RED Если это применимо
17 Катод подсветки зеленый Если применимо
18 Катод подсветки синий Если применимо

Подсветка не имеет прямого отношения к управлению ЖК-дисплеем.Это можно сделать самостоятельно.

Исходный ЖК-дисплей HD44780 имеет только одноцветную светодиодную подсветку с использованием контактов 15-16. Некоторые новые ЖК-дисплеи, совместимые с HD44780, имеют подсветку RGB с использованием контактов 15–18.

Мы должны заранее спланировать, что мы хотим сделать с подсветкой. Многие модули I2C не поддерживают подсветку RGB. Если дисплей имеет подсветку RGB и мы используем только контакты 15-16, подсветка будет фиксированной на красный цвет, что не идеально.

Благодаря подсветке RGB можно легко получить желтый, розовый и голубой цвета, просто включив или выключив красный, зеленый и синий.Это просто сочетание красного, зеленого и синего.

Если мы хотим управлять 24-битным RGB для более точных цветов между красным, зеленым и синим, нам понадобится широтно-импульсная модуляция (ШИМ), чтобы мы могли регулировать яркость для каждого цвета.

Инструкции для ЖК-дисплеев Adafruit RGB Backlit

могут оказаться полезными.

Пользовательский шрифт

ЖК-дисплей HD44780 позволяет нам регистрировать пользовательские символы; однако лично я бы не беспокоился, потому что не считаю эту функцию полезной. Согласно Википедии:

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

Расширители ввода/вывода

  • Последовательно-параллельный преобразователь.
  • Позволяет нам добавлять дополнительные порты GPIO.
  • Уменьшает количество портов GPIO на нашем контроллере, которые используются для ЖК-дисплея.

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

Нам нужно 6-7 контактов из восьми для управления ЖК-дисплеем, поэтому в 8-битном расширителе ввода-вывода не хватает контактов для подсветки RGB.Мы можем включать/выключать один светодиод.

Модуль I2C/SPI

В разных продуктах используются разные расширители ввода-вывода, поэтому помните, какой расширитель ввода-вывода вы используете, если используете что-то вроде рюкзака I2C/SPI. Также важно назначение контактов между ЖК-дисплеем и модулем расширения ввода/вывода.

Модуль I2C на базе PCF8574

Насколько я знаю, модули I2C на базе PCF8574 самые популярные и недорогие. Предварительно собранный ЖК-дисплей 16x2 с модулем I2C обычно стоит менее 10 долларов США.Handson Technology I2C Serial Interface 1602 LCD Module User Guide обобщает типичные характеристики модуля I2C на базе PCF8574.

Рюкзак Adafruit i2c/SPI с ЖК-дисплеем

Рюкзак Adafruit i2c/SPI с жидкокристаллическим дисплеем поддерживает интерфейсы I2C и SPI. На момент написания он использует MCP23008 для I2C и SN74HC595 для SPI.

Следующие проводки работали нормально:

LCD Backpack Rapberry Pi - I2C Raspberry Pi - SPI
CLK (CLK) Serial Clock (SCLK) Последовательные часы (SCLK)
Data (DAT) Последовательные данные (SDA) контроллер периферийных данных в (COPI)
защелки (LAT) - Чип Выбрать (CS)

Spearffun Qwiic Connect System

Я никогда раньше не пользовался системой Qwiic Connect, но она кажется хорошим вариантом, когда нам нужно подключить несколько устройств к шине I2C.

Это кажется многообещающим, но, поскольку это относительно новое, я обеспокоен тем, что на момент написания статьи доступно не так много информации.

Скоро попробую.

Adafruit STEMMA QT

Аналогичен системе SparkFun Qwiic Connect.

Интерфейс USB

Также имеется интерфейс USB. Интересно, когда эта опция может быть полезна, потому что, например, у Raspberry Pi не так много USB-портов.

Заключение

  • Перед использованием ЖК-дисплея желательно примерно понять, как он работает.
  • В разных продуктах используются разные расширители ввода-вывода.
  • Важное значение имеет назначение контактов между ЖК-дисплеем и модулем расширения ввода-вывода.
  • Модуль I2C на базе PCF8574 — хорошее и недорогое решение.
  • Система SparkFun Qwiic Connect кажется многообещающей, но, поскольку она является относительно новой, на момент написания статьи доступно не так много информации.

Я не использовал систему SparkFun Qwiic Connect или интерфейс USB, но мне интересно узнать об этом.

Добавить комментарий

Ваш адрес email не будет опубликован.