Как подключить дисплей 2004а к arduino
В качестве примера подключим дисплей к управляющей плате Arduino Uno.
Подключение к Arduino
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Библиотека для Arduino «Liquid Crystal I²C». В ней вы найдёте примеры кода с подробными комментариями.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Кириллица
Существует способ вывода кириллицы на текстовые дисплеи с помощью таблицы знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.
Примеры работы для Espruino
В качестве примера подключим дисплей к управляющей плате Iskra JS.
Подключение к Iskra JS
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Кириллица
Вывод кириллицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Big Number Module
Для пользователей Espruino есть возможность выводить супер большие числа «Big Number Module» на текстовой дисплей 20×4.
Размер цифры в данном шрифте: 3 символа по столбцам и 4 по строкам.
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
Символьные ЖК-дисплеи LCD 1602 и LCD 2004 достаточно часто используются в Arduino проектах, благодаря большому размеру и относительно небольшой стоимости. Кроме этого с данными дисплеями достаточно просто работать. Сегодня в Arduino уроке рассмотрим основы работы с ЖК-дисплеями LCD 1602 и LCD 2004. Подключим lcd 1602 к Ардуино. И рассмотрим пару примеров скетчей, которые позволят вывести текстовую информацию на LCD 1602 и 2004.
Описание и классификация LCD 1602 и LCD 2004.
LCD 1602 дисплей еще называют символьным. Это связано с тем, что ЖК-дисплей разбит на области точек. На каждую такую область можно вывести 1 символ. В связи с чем дисплей данного типа подразделяется по количеству строчек и символов в строке. Например, 2 строки и 16 символов в каждой строке, данное значение указывается в названии дисплея 1602. По аналогии 20 символов и 4 строки это LCD 2004. Также есть и другое разрешение дисплея 0802, но у меня, к сожалению, нет таких маленьких дисплеев и продемонстрировать их я вам не смогу. Но работа с ними ничем не отличается от старших братьев.
Также можно выделить разный тип подсветки. Существуют дисплеи: синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. Я буду использовать, с синим фоном и белыми буквами.
Для урока понадобится:
LCD 1602 и LCD 2004 подключение к Ардуино.
Схема подключения LCD 1602 к Arduino UNO.
Чтобы уменьшить количество проводов для подключения LCD 1602, используется плата PCF8574, которая позволяет подключить дисплей по I2C. Что уменьшает количество проводов до 2. Сегодня в уроке будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C.
Схема подключения LCD 1602 к Arduino UNO по I2C с использованием PCF8574.
LCD 2004, LCD 1602 библиотека.
Для работы с дисплеем используется библиотека LiquidCrystal. Но в связи с тем, что мы будем использовать подключение LCD 1602 и LCD 2004 к Arduino по I2C. Библиотеку использовать будем другую LiquidCrystal_I2C. Которую можно скачать с GitHub. Или внизу статьи, в разделе «Файлы для скачивания».
После того как вы скачали архив с библиотекой. Заходим в Arduino IDE, открываем вкладку «Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку…»
В открывшемся окне выбираем скаченный архив. После чего вы увидите, что библиотека успешно установлена.
Сейчас можно посмотреть примеры, которые установились с библиотекой LiquidCrystal_I2C. Я же данные примеры немного изменю и подпишу, что означает каждая строка кода.
Описание библиотеки LiquidCrystal_I2C.
Перед тем как начать работать с дисплеем LCD 2004, LCD 1602 давайте рассмотрим библиотеку LiquidCrystal_I2C. Ниже приведены основные функции, которые необходимы для работы с дисплеем.
Пример кода вывода текста на LCD 1602 с использованием библиотеки LiquidCrystal.
Не смотря на то, что урок ориентирован на использование подключения дисплея по I2C. Рассмотрим пример подключения дисплея LCD 1602 подключённого по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить пятую строчку кода на lcd.begin(20, 4);
Пример вывода текста на LCD 2004, LCD 1602 с использованием библиотеки LiquidCrystal_I2C.
Не смотря на то, что в примере будем использовать подключение LCD 1602 по I2C и библиотеку LiquidCrystal_I2C. Код не сильно изменится. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C LCD (0x27,20,4);
Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C.
Если дисплей LCD 2004, LCD 1602 не отображает текст.
После того как вы всё сделали, подключили дисплей. Загрузили код. На дисплее могут не отображаться символы. Что может быть не так:
- Если дисплей показывает чёрные прямоугольники или пустой экран – нужно отрегулировать яркость дисплея, это синий квадратный регулятор на задней стороне платы.
- Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе. Их всего два: 0x27 и 0x3F.
- Если все равно не работает – проверяем подключение и повторяем сначала.
На этом урок про дисплеи LCD 2004, LCD 1602 заканчивается. В следующем уроке рассмотрим, какие символы есть в прошивке дисплея и как их вывести, а также создадим свои символы.
Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Долгая и муторная эпопея подключения arduino к lcd по i2c закончилась победой.
Небольшой мануал на тему "как это сделать", так как информации в интернете много, а в целом не всегда все сразу получается. Начнем.
Шаг 1.
Подключаем дисплей как указано на картинке:
А именно: SDA к A4, SCL к A5, vcc к vcc, gnd к gnd. Желательно, конечно, отдельно подавать питание на дисплей, но питания от ардуино в данном случае хватит.
Возможно у вас могут быть перепутаны ноги SDA\SCL или A5\A4 на вашей плате или перепутаны подписи к ним. С этим позже разберемся.
Шаг 2.
Надо найти адрес нашего монитора. Так как на i2c шине может быть подключено до 127 устройств параллельно, то у каждого устройства должен быть свой адрес. Для этого воспользуемся i2c сканером. В интернете их великое множество, я использовал такой:
Заливаем этот скетч в ардуино и запускаем. Ждем результата в консоли в виде
I2C Scanner
Scanning.
I2C device found at address 0x3F
Если все именно так и получилось в консоли, то значит все подключено правильно и ничего не перепутано. Записываем адрес монитора, в моем случае это 0x3F.
Если же у вас ошибки или сканирование просто повисло (более 5 секунд ничего не пишет), то скорее всего у вас перепутаны ноги SDA\SCL (ну или A5\A4), потому просто берем и меняем из местами либо на ардуино, либо на мониторе. Запускаем сканер еще раз!
Внимание! Будьте внимательны и убедитесь, что скетч заливается нормально, то есть arduino ide выдает "Загрузка завершена" без ошибок в консоли. Иначе пробуйте залить снова.
Теперь берем скетч, типа этого:
Крутим его в одну сторону до упора и в другую, настраивая таким образом яркость\контрастность дисплея. У меня он изначально был в самом крайнем положении (в 0) и я долго не мог понять, почему у меня не выводится текст.
В уроке поговорим о знакосинтезирующих жидкокристаллических индикаторах, о подключении их к плате Ардуино и управлении индикаторами с помощью библиотек LiquidCrystal и LiquidCrystalRus.
Светодиодные семисегментные индикаторы хотя и являются самым дешевым вариантом индикации для электронных устройств, но их применение ограничено двумя существенными недостатками.
- Практически сложно подключить к микроконтроллеру более 8ми разрядов светодиодных индикаторов. Требуется большое число выводов, значительные токи индикаторов, сложные ключи, низкая частота регенерации и т.п.
- Невозможно отображать на семисегментных индикаторах символьную информацию.
Для вывода текстовой информации или чисел размером более 4 разряда гораздо практичнее использовать жидкокристаллические знакосинтезирующие индикаторы (дисплеи). К их достоинствам следует отнести:
- удобный для подключения к микроконтроллерам интерфейс;
- малая потребляемая мощность;
- низкое напряжение питания;
- долговечность.
На рынке существует большое число разнообразных жидкокристаллических (LCD) индикаторов разных производителей. Практически все они аналогичны по параметрам, сигналам интерфейсов, командам управления. В данный момент наиболее распространенными ЖК индикаторами на российском рынке являются устройства производства компании Winstar, Тайвань. Я буду ссылаться на индикаторы этой фирмы. Но информация вполне применима и для символьных LCD дисплеев других производителей.
Общие сведения.
Знакосинтезирующие или символьные индикаторы отображают информацию в виде знакомест определенной разрядности. Одно знакоместо отображает один символ. Количество знакомест определяет разрядность индикатора. Информация на индикаторах может выводиться на нескольких строках, поэтому для индикаторов такого типа всегда указывается число символов в строке и число строк.
Отображение информации происходит на жидкокристаллической матрице со светодиодной подсветкой. Подсветка бывает самых разных цветов, что значительно оживляет монохромную текстовую информацию.
Для управления жидкокристаллической матрицей и организации интерфейса индикатора используется встроенный контроллер HD44780 или его полные аналоги. Этот контроллер определяет сигналы интерфейса индикатора и команды управления.
HD44780 стал де-факто стандартом для символьных жидкокристаллических (LCD) дисплеев. Техническую документацию по контроллеру HD44780 в формате PDF можно посмотреть по этой ссылке - HD44780.pdf. Может кому-то больше понравится документация одного из аналогов этого контроллера – SPLC780D. Ссылка в формате PDF – SPLC780.pdf.
Символьные LCD индикаторы фирмы Winstar.
Мне известны следующие варианты ЖК индикаторов этой фирмы.
Подключение LCD индикатора к микроконтроллеру.
Схемы подключения, временные диаграммы, параметры сигналов, команды управления, коды символов подробно расписаны в документации на контроллер HD44780. Я приведу только самые необходимые данные о подключении индикаторов к микроконтроллерам.
Как правило, LCD индикаторы имеют 16 выводов.
Номер вывода (первый столбец) приведен для наиболее распространенного варианта. Лучше проверьте, загрузив документацию на Ваш тип индикатора из таблицы предыдущего раздела.
Символьные ЖК дисплеи поддерживают два варианта подключения к микроконтроллеру:
- С использованием 8ми битной шины данных. Подключаются все сигналы шины DB0-DB7. За один цикл обмена передается байт информации.
- С применением 4х битной шины данных. Подключаются только 4 старшие разряда DB4-DB7. Информация передается по четыре бита за один такт шины.
Первый вариант обеспечивает передачу данных на дисплей с большей скоростью. Второй – требует для подключения индикатора на 4 вывода меньше. Несомненно, важнее сократить число выводов для подключения, чем увеличить скорость обмена. Тем более, что LCD индикаторы довольно медленные устройства со временем цикла регенерации 10-20 мс.
Подключение символьного ЖК (LCD) дисплея к плате Ардуино.
Я буду подключать индикатор WH2004A (4 строки по 20 символов) в четырех битном режиме обмена к плате Arduino UNO R3. Документацию на LCD дисплей WH2004 можете посмотреть по этой ссылке WH2004.pdf.
Схема выглядит так.
Резисторы R2 и R3 определяют контрастность индикатора. Можете подключить подстроечный резистор и установить необходимую четкость изображения. Я часто использую индикаторы WH2004, и в своих схемах выбираю такие номиналы резисторов.
Светодиоды подсветки индикатора я подключил к источнику питания 5 В через резистор R1 (30 Ом). Этим я задал ток порядка 25 мА. Тускло, но светится. В темноте видно хорошо. Хотя индикаторы WH2004 допускают ток подсветки до 580 мА.
Библиотека для управления LCD индикаторами в системе Ардуино LiquidCrystal.
Существует стандартная библиотека для управления ЖК индикаторами на базе контроллера HD44780. Подробно опишу ее методы.
LiquidCristal(…)
Конструктор класса. Может иметь разное число аргументов.
- LiquidCristal(rs, en, d4, d5, d6, d7) – четырех битный интерфейс, сигнал RW не используется (подключен к земле).
- LiquidCristal(rs,rw, en, d4, d5, d6, d7) – четырех битный интерфейс, сигнал RW используется.
- LiquidCristal(rs, en, d0, d1, d2, d3, d4, d5, d6, d7) – восьми битный интерфейс, сигнал RW не используется (подключен к земле).
- LiquidCristal(rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7) – восьми битный интерфейс, сигнал RW используется.
- rs – номер вывода сигнала RS;
- rw – номер вывода сигнала RW;
- en – номер вывода сигнала E;
- d0, d1, d2, d3, d4, d5, d6, d7 – номера выводов шины данных.
LiquidCrystal disp(6, 7, 2, 3, 4, 5);
void begin(cols, rows)
Инициализирует интерфейс индикатора. Задает размерность индикатора. Метод должен быть вызван первым, до использования других функций класса.
- cols – количество символов в строке;
- rows – число строк.
disp.begin(20, 4); // используем дисплей – 4 строки по 20 символов
void clear()
Очистка экрана, установка курсора в верхний левый угол.
disp.clear(); // сброс дисплея
void home()
Установка курсора в верхний левый угол.
disp.home(); // в начало экрана
void setCursor(col, row)
Устанавливает курсор в заданную позицию.
- col – координата X, нумерация с 0;
- row – координата Y, нумерация с 0.
setCursor(0,1); // курсор в начало второй строки
byte write(data)
Выводит символ на экран. Возвращает количество переданных байтов.
Следующий скетч выводит на экран данные с последовательного порта. Данные можно передать монитором порта Arduino IDE.
У меня индикатор большой – 4 строки по 20 символов. В нем установлены два контроллера HD44780. Поэтому последовательно передаваемые символы заполняют сначала первую строку, затем третью, дальше вторую и четвертую. Т.е. через строку. Надо учитывать это свойство для определенных типов индикаторов. В документации на каждый LCD индикатор указывается последовательность адресации символов.
byte print(data)
Выводит на экран текст. Возвращает количество переданных байтов.
Функция имеет различные формы вызова для разных форматов и типов данных.
Пример программы, печатающей на дисплее текстовую строку.
void cursor()
Включает режим отображения курсора. Позиция, куда будет выведен следующий символ, подчеркивается.
disp.cursor(); // разрешаем отображение курсора
void noCursor()
Запрещает отображение курсора.
disp.noCursor(); // запрещаем отображение курсора
void blink()
Включает режим мигающего курсора. Используется совместно с функцией cursor(). Результат зависит от конкретной модели индикатора.
disp.blink(); // разрешаем мигающий курсор
void noBlink()
Отключает режим мигающего курсора.
disp.noBlink(); // запрещаем мигающий курсор
void display()
Включает экран после того, как он был выключен функцией noDisplay(). На экране отобразится информация, которая была до выключения.
disp.display(); // включаем дисплей
void noDisplay()
Выключает экран. Информация сохраняется в памяти и появляется при включении дисплея.
disp.noDisplay(); // выключаем дисплей
void scrollDisplayLeft()
Прокручивает содержимое дисплея на один символ влево.
disp. scrollDisplayLeft(); // сдвигаем все влево
void scrollDisplayRight()
Прокручивает содержимое дисплея на один символ вправо.
disp. scrollDisplayRight(); // сдвигаем все вправо
void autoscroll()
Включение режима автоматической прокрутки текста. При выводе каждого символа, весь текст на экране будет сдвигаться на один символ. В какую сторону сдвигается информация определяют функции leftToRight() и rightToLeft().
disp. autoscroll()(); // включаем автопрокрутку
void noAutoscroll()
Выключение автоматической прокрутки текста.
disp. noAutoscroll()(); // запрещаем автопрокрутку
void leftToRight()
Задает режим вывода теста слева-направо. Новые символы будут появляться справа от предыдущих.
leftToRight(); // режим слева-направо
void rightToLeft()
Задает режим вывода теста справа-налево. Новые символы будут появляться слева от предыдущих.
rightToLeft(); // режим справа-налево
void createChar(num, data)
Метод для создания пользовательского символа. Контроллер допускает создание до 8 символов (0…7) размером 5x8 пикселей. Изображение символа задается массивом размерностью 8 байт. 5 младших битов каждого байта определяют состояние пикселей строки.
Для вывода пользовательского символа можно использовать функцию write() с номером символа.
byte smile[8] =
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
>;
void setup()
disp.createChar(0, smile); // создаем символ
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print("Smile ");
disp.write(byte(0)); // выводим символ
>
void loop()
На форуме сайта есть программа для создания кодов символов.
Отображение кириллицы.
Большинство LCD дисплеев на российском рынке поддерживают кириллические символы, но коды этих символов не соответствуют ASCII стандарту. Поэтому выводится полная белиберда.
Первый выход – задавать символы их правильными кодами в явном виде. Коды можно посмотреть в документации на контроллер HD44780.
Например коды символов:
- А- 41h;
- Б – a0h;
- В – 42h;
- Г – a1h.
Вот программа, которая выводит кириллические символы “АБВГ” таким способом.
Не очень удобно, но если символов немного, то вполне приемлемо. Есть программы, которые переводят кириллический текст в коды.
Библиотека с поддержкой кириллицы LiquidCrystalRus.
Практичный вариант для вывода текста на русском языке – использовать библиотеку LiquidCrystalRus. Загрузить ее можно по этой ссылке LiquidCrystalRus-1.6.0.zip.
Вот пример программы, выводящей на экран русский алфавит.
В моем индикаторе два контроллера HD44780. Поэтому отображение через строку и мне пришлось в программе нарушить последовательность вывода строк.
Как видите, работать с символьными LCD дисплеями намного проще, чем кажется.
Читайте также: