- Для подключения LCD экрана нам понадобятся такие компоненты
- Другие полезные функции библиотеки LiquidCrystal
- Шаг 4: Библиотека LiquidCrystal.h
- Эксперимент 2
- Необходимые комплектующие
- Схема соединений
- Подключение LCD экрана
- Описание протокола I2C
- Домашнее задание
- Шаг 3. Подключаем ЖК-дисплей
- Библиотека для работы с модулем LCD 1602
- Схема подключения LCD модуля 1602 к Arduino при помощи модуля I2C
- Скетч для вывода текста на LCD экран по шине I2C
- Подключение ЖК экрана к Ардуино по I2C
- Важная информация по дисплеям
- Пример вывода
- Распиновка 16х02 символов
- Свои символы
- Создание собственных символов для ЖК дисплея
- Схема подключения ЖК дисплея к Arduinoпо протоколу I2C
- Прозрачная макетная плата на 830 точек (breadboard)
- Практика
- Схема обхода
- Объяснение кода:
- Управление ЖК экраном по шине I2C
Для подключения LCD экрана нам понадобятся такие компоненты
- Любой Arduino (в нашем случае Arduino UNO)
- ЖК-дисплей на базе HD44780
- Разделочная доска
- Соединительные кабели
- Потенциометр (опция)
Другие полезные функции библиотеки LiquidCrystal
Есть несколько полезных функций, которые вы можете использовать с объектом LiquidCrystal. Некоторые из них перечислены ниже:
- Если вы просто хотите поместить курсор в левый верхний угол дисплея, не очищая его, используйте home().
- Есть много приложений, таких как turbo C ++ или notepad ++, в которых нажатие клавиши «ввод» на клавиатуре меняет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее с помощью blink () или lcd.Cursor().
- Функция blink () отображает мигающий блок размером 5 × 8 пикселей и lcd.Cursor () подчеркивание (линию) в том месте, где будет написан следующий символ.
- вы можете использовать функцию noblink (), чтобы отключить мигающий курсор на дисплее, и lcd.noCursor (), чтобы скрыть курсор.
- вы можете прокручивать отображаемое содержимое на один пробел вправо с помощью lcd.scrollDisplayRight () или на один пробел влево с помощью lcd.scrollDisplayLeft (). Если вы хотите непрерывно прокручивать текст, вы должны использовать эти функции внутри цикла for.
Шаг 4: Библиотека LiquidCrystal.h
Библиотеку LiquidCrystal.h можно скачать в разделе «Библиотеки» нашего сайта на этой странице или с официального ресурса arduino.cc. Но вы также можете скачать ссылки ниже:
Эксперимент 2
В этом эксперименте мы покажем значение счетчика из программы Arduino на ЖК-дисплее. Счетчик обратится в обратном направлении до 100 секунд, после чего дисплей очистится.
Необходимые комплектующие
В этом эксперименте используются те же компоненты, что и в первом эксперименте.
Схема соединений
Подключение LCD экрана
Подключить ЖК-экран к Arduino несложно даже для ребенка. Прикрепите экран к макету и подключите + 5 В и землю от Arduino к шинам питания макета, как показано на фотографии. (Поскольку мы будем многократно использовать питание и «землю», то удобнее подключаться к дорожкам, и в целом нужно привыкнуть к такому подключению)
Для полноценной работы Ардуино с дисплеем подключите 12 контактов:
- 1 — Vss, земля ⇨ GND
- 2 — Vdd, питание +5 В
- 3 — Vo, регулировка контрастности выходного напряжения потенциометра
- 4 — RS, выбор регистра 12 пина Arduino
- 5 — чтение / запись, чтение / запись ⇨ масса (режим записи)
- 6 — E, псевдоним Enable, гейт при спаде ⇨ вывод 11 Arduino
- 7-10 — DB0-DB3, младшие биты 8-битного интерфейса; Нет соединения
- 11-14 — DB4-DB7, бит интерфейса высокого порядка (пин 5-2 Arduino
- 15 — А, блок питания для подсветки ⇨ +5 В
- 16 — K, масса для подсветки ⇨ GND
Этот дисплей, как и другие на контроллере HD44780, поддерживает два параллельных варианта:
- 8 бит, вывод DB0-DB7, 1 байт (8 бит) передается за такт
- 4-битный, вывод DB4-DB7, полубайт (4 бита) передается за один такт
Нет смысла использовать 8-битную версию, потому что для нее требуется больше ножек, но прироста скорости все равно нет: частота обновления дисплея не превышает 10 раз в секунду, поэтому мы пока не сможем увидеть обновленные данные довольно часто. Поэтому выводы DB0-DB3 оставляем неподключенными.
Дисплей подключен и готов к приему данных. Осталось написать программу для Ардуино.
Описание протокола I2C
Прежде чем говорить о подключении дисплея к Arduino через адаптер i2c, давайте кратко поговорим о самом протоколе i2C.
I2C / IIC (Inter-Integrated Circuit) — это протокол, изначально созданный для обмена данными между интегральными схемами в электронном устройстве. Разработка принадлежит Philips. Протокол i2c основан на использовании 8-битной шины, необходимой для связи блоков в управляющей электронике, и системы адресации, благодаря которой можно обмениваться данными по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные на то или иное устройство, добавляя в пакеты данных необходимый идентификатор элемента.
Простейшая схема I2C может содержать ведущее устройство (чаще всего микроконтроллер Arduino) и несколько ведомых устройств (например, ЖК-дисплей). Каждое устройство имеет адрес в диапазоне от 7 до 127. Не должно быть двух устройств с одинаковым адресом в одной цепи.
Плата Arduino поддерживает i2c аппаратно. Вы можете использовать контакты A4 и A5 для подключения устройств, использующих этот протокол.
В работе I2C есть несколько преимуществ:
- Для работы необходимы только 2 линии: SDA (линия данных) и SCL (линия синхронизации).
- Подключение большого количества ведущих устройств.
- Сокращенное время разработки.
- для управления всем набором устройств нужен всего один микроконтроллер.
- Возможное количество подключаемых к шине микросхем ограничено только максимальной емкостью.
- Высокая степень защиты данных благодаря встроенному в схемы специальному фильтру для подавления скачков напряжения.
- Простая процедура диагностики возникающих неисправностей, быстрое устранение неисправностей.
- Шина уже интегрирована в саму Arduino, поэтому нет необходимости разрабатывать дополнительный интерфейс шины.
Недостатки:
- Емкостное ограничение линии составляет 400 пФ.
- Сложное программирование контроллера I2C, если на шине несколько разных устройств.
- При большом количестве устройств становится трудно обнаружить ошибку, если одно из них по ошибке устанавливает низкоуровневое состояние.
Домашнее задание
- Освойте библиотеку LiquidCrystal_I2C, попробуйте все функции из документации
- Создайте несколько символов и испустите их
- Оптимизируйте последний пример: не очищайте отображение и не показывайте метку при нажатии, просто измените значение
Шаг 3. Подключаем ЖК-дисплей
Перед тем, как подключить дисплей и передавать на него информацию, стоит проверить его работоспособность. Сначала подайте напряжение на контроллер VSS и VDD, включите подсветку (A, K), затем отрегулируйте контрастность.
Для таких настроек подойдет потенциометр на 10 кОм, его форма не важна. На внешние ножки подается питание + 5V и GND, а ножка в центре подключена к выводу VO.
При подаче питания на схему необходимо добиться требуемой контрастности, при неправильной настройке изображение на экране также не будет видно. Чтобы настроить контраст, вам придется поиграть с потенциометром. Когда узор собран правильно и контраст настроен правильно, верхний ряд экрана должен быть заполнен прямоугольниками.
Для работы дисплея используется специальная библиотека LiquidCrystal.h, встроенная в Arduino IDE, о которой я расскажу ниже. Может работать в 8- и 4-битном режиме. В первой версии используются только младшие и самые старшие биты (BB0-DB7), во второй только младшие биты (BB4-DB7).
Но использование 8-битного режима на этом дисплее — плохое решение, почти нет преимущества в скорости, так как его частота обновления всегда меньше 10 раз в секунду. Для просмотра текста необходимо подключить выводы DB7, DB6, DB5, DB4, E и RS к выводам контроллера. Разрешено подключать их к любому выводу Ардуино, главное выставить правильную последовательность в коде.
Если необходимого символа еще нет в памяти контроллера, его можно определить вручную (всего до семи символов). Ячейка на рассматриваемых дисплеях имеет расширение пять на восемь точек. Задача создания символа — написать битовую маску и разместить одну там, где точки должны светиться, а нули там, где нет. Схема подключения, описанная выше, не всегда хороша, поскольку на Arduino задействовано как минимум шесть цифровых выходов.
Библиотека для работы с модулем LCD 1602
Для подключения Arduino к LCD 1602 по протоколу I2C вам понадобятся две библиотеки:
- Библиотеки Wire.h — стандартная библиотека для работы с устройствами Arduino по протоколу I2C, уже есть в Arduino IDE;
- Библиотека LiquidCrystal.h также доступна в Arduino IDE и используется при подключении Arduino напрямую к LCD 1602 (без модуля I2C) ;
- Библиотека LiquidCrystal_I2C.h, которая предоставляет все необходимые функции для работы с LCD 1602. Вы можете скачать ее в конце статьи.
Схема подключения LCD модуля 1602 к Arduino при помощи модуля I2C
В этой схеме используется модуль I2C, который позволяет значительно сократить количество проводов. Для подключения нужно всего 4 провода, которые подключаются к модулю.
Скетч для вывода текста на LCD экран по шине I2C
Давайте откроем пример: LiquidCrystal_I2C CustomChars Samples File и немного его перепишем. Показываем сообщение, в конце которого появится мигающий символ. Все нюансы скетча прокомментированы в комментариях к коду.
Кстати, символы, написанные командой lcd.createChar (); остаются в памяти дисплея, даже после выключения они записываются в ПЗУ дисплея 1602.
Подключение ЖК экрана к Ардуино по I2C
Для подключения понадобится такая же плата Arduino, дисплей, макет, соединительные кабели и потенциометр.
Если вы используете отдельный специальный адаптер i2c, вы должны сначала припаять его к модулю дисплея. Ошибиться там сложно, можно руководствоваться такой схемой.
ЖК-монитор, совместимый с i2c, подключается к плате четырьмя проводами: два для данных, два для питания.
- Контакт GND подключается к GND на плате.
- Вывод VCC составляет 5 В.
- SCL подключен к выводу A5.
- SDA подключается к выводу A.
Вот и все! Никакой паутины ниток, за которую очень легко попасться. При этом мы можем просто доверить библиотекам всю сложность реализации протокола i2C.
Важная информация по дисплеям
Эта информация применима ко всем дисплеям.
- Просмотр данных на дисплее требует времени, поэтому вам нужно просмотреть их по таймеру или после изменения данных.
- Не всегда целесообразно полностью удалять отображение, иногда достаточно вывести новые значения над старыми или частично удалить их с «пробелами”.
Уроки с таймером:
- Функции времени
- Как написать набросок
- Видеоурок
Давайте посмотрим на два примера.
Отображаем значение с потенциометра
Генерация пользовательских символов для LCD
- Если вы находите шрифты на дисплее неподходящими и неинтересными, вы можете создать свои собственные шрифты (глифы) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.Как обсуждалось ранее в этом руководстве, символ на дисплее отображается в матрице 5×8 пикселей, поэтому вам необходимо определить свой собственный шрифт в этой матрице. Чтобы определить символ, вам нужно использовать функцию createChar () библиотеки LiquidCrystal.Чтобы использовать createChar (), вы должны сначала назначить 8-байтовый массив. Каждый байт (они насчитывают только 5 бит) в массиве определяет строку символов в массиве 5×8. А нули и единицы в байте указывают, какие пиксели в строке должны быть активными, а какие — выключенными.
Пример вывода
При первой работе с дисплеем необходимо настроить контрастность и определиться с адресом:
- Пример Flash «Демо”
- Если на дисплее отображаются черные прямоугольники или пустой экран, поверните контрастность
- Если кроме черных прямоугольников и пустого экрана ничего не видно, измените адрес в программе. Их всего два: 0x27 и 0x3F
- Давайте снова включим контраст, должно работать
- Если не работает, проверим соединение и повторим сначала
- Примечание: в набор должны входить дисплеи с адресом 0x27, но он может зависеть от партии!
Распиновка 16х02 символов
Прежде чем мы начнем создавать и кодировать, давайте сначала взглянем на распиновку ЖК-дисплея 1602.
- GND — должен быть подключен к земле Arduino.
- VCC — это вывод питания ЖК-дисплея, к которому мы подключаем вывод 5V Arduino.
- Vo (контрастность ЖК-дисплея) — выходной сигнал регулирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно настроить контраст.
- RS (выбор регистра) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются ли команды или данные. Этот вывод в основном используется для отличия команд от данных. Например, когда вывод RS установлен на LOW, мы отправляем команды на ЖК-дисплей (например, помещаем курсор в определенное положение, очищаем дисплей, перемещаем дисплей вправо и т.д.). Когда вывод RS установлен на HIGH, мы отправляем данные / символы на ЖК-дисплей.
- R / W (чтение / запись) — вывод предназначен для управления тем, что необходимо сделать — прочитать данные или передать их на ЖК-дисплей. Поскольку мы используем этот ЖК-дисплей только в качестве устройства вывода, достаточно применить ВЫСОКИЙ уровень к этому выводу, после чего мы войдем в режим записи.
- EN (Enable) — выход используется для включения дисплея. Это означает, что когда этот вывод установлен в LOW, ЖК-дисплей не будет реагировать на то, что происходит с линиями R / W, RS и шины данных. Когда этот вывод ВЫСОКИЙ, ЖК-дисплей обрабатывает входящие данные.
- D0-D7 (шина данных) — это контакты, передающие 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем 0100 0001 на ЖК-дисплей (согласно таблице ASCII) .
- АК (анод и катод) используются для управления подсветкой ЖК-дисплея.
Свои символы
Библиотека поддерживает создание дополнительных «кастомных» символов 5х7 точек, вы можете воспользоваться онлайн-генератором кода символа — ссылка. Для компактности рекомендую перейти на HEX. Вот как будет выглядеть «символ» креста: byte myX = {0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00};
Дисплей имеет 8 ячеек для сторонних символов, они добавляются с помощью createChar (число, массив), где число от 0 до 7, а массив — это имя массива данных, который мы создали для символа. Символы печатаются с использованием сценария (числа).
Важный момент: после вызова createChar позиция вывода текста сбрасывается, нужно вызвать setCursor!
Создание собственных символов для ЖК дисплея
Рассмотрим подробнее проблему создания собственных символов для ЖК-экранов. Каждый символ на экране состоит из 35 точек: 5 в ширину и 7 в высоту (+1 зарезервированное подчеркивание). В строке 6 скетча выше мы устанавливаем массив из 7 чисел: {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0}. Преобразуйте шестнадцатеричные числа в двоичные: {00000, 01010, 11111, 11111, 01110, 00100, 00000}. Эти числа представляют собой не что иное, как битовые маски для каждой из 7 строк символа, где «0» означает светлое пятно, а «1» — темное. Например, символ сердца, заданный как битовая маска, появится на экране, как показано.
Создание собственного символа ЖК-экранаСхема подключения ЖК дисплея к Arduinoпо протоколу I2C
Модуль подключается к Arduino стандартно для шины I2C: вывод SDA модуля подключается к аналоговому порту A4, вывод SCL подключается к аналоговому порту A5 Arduino. Модуль питается от + 5В от Arduino. Сам модуль соединяется контактами 1… 16 с соответствующими контактами 1… 16 на ЖК-дисплее.
Схема подключения ЖК-дисплея к Arduino по протоколу I2CПрозрачная макетная плата на 830 точек (breadboard)
Программирование - Для просмотра текста из Arduino воспользуемся библиотекой Liquid Crystal, о которой мы говорили выше.Чтобы датчик работал на Arduino, необходимо загрузить и установить библиотеку DHT11 .Вы можете скачать библиотеку здесь .После скачивания необходимой библиотеки нам необходимо правильно ее установить, скачанные файлы нужно переместить по следующему пути :
После того, как все будет сделано, перейдем к самому важному этапу — программированию.
Это то, что у вас должно получиться, это самый простой набросок, он содержит всего 4 основные линии, но вы можете понять его и по этому принципу создать то, что вам нужно!Практика
А теперь перейдем к интересному. Давайте проверим ЖК-дисплей. Сначала подключите контакты 5V и GND от Arduino Uno к шинам питания макета. Затем подключите ЖК-дисплей 1602. Этот ЖК-дисплей имеет две отдельные линии питания:
- Контакты 1 и 2 для питания одного и того же ЖК-дисплея 1602
- Контакты 15 и 16 для подсветки ЖК-дисплея 1602
Подключите контакты 1 и 16 ЖК-дисплея к минусу источника питания, а контакты 2 и 15 — к + 5В.
Далее нужно подключить контакт 3, отвечающий за контрастность и яркость дисплея. Для точной настройки контрастности подключите крайние клеммы потенциометра с сопротивлением 10 кОм при 5 В и GND, а центральный контакт (ползунок) потенциометра к контакту 3 ЖК-дисплея.
Регулировка контрастности ЖК-дисплея с помощью потенциометра
Теперь включите Arduino, и вы увидите подсветку. Когда вы поворачиваете ручку потенциометра, вы должны заметить первую линию прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.
Схема обхода
Давайте рассмотрим вариант, как обойти это, и обойдемся всего двумя. Нам нужен дополнительный модуль преобразователя ЖК-дисплея в IIC / I2C. Как он припаян к дисплею и подключен к Arduino, можно увидеть на изображениях ниже.
Но этот вариант подключения работает только со специальной библиотекой LiquidCrystal_I2C1602V1, которую, однако, несложно найти в сети и установить, после чего можно без проблем пользоваться.
Объяснение кода:
- Скетч начинается с подключения библиотеки LiquidCrystal. Как упоминалось ранее в этом руководстве, в сообществе Arduino есть библиотека LiquidCrystal, которая упрощает использование ЖК-дисплеев. Вы можете узнать больше о библиотеке LiquidCrystal на официальном сайте Arduino .// подключаем библиотеку LiquidCrystal: #include
- Далее нам нужно создать объект LiquidCrystal. Этот объект использует 6 параметров и указывает, какие выводы Arduino подключены к RS, EN и выводам данных: d4, d5, d6 и d7.// Создаем ЖК-объект. Выводы: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd (12, 11, 5, 4, 3, 2);Теперь, когда мы объявили объект LiquidCrystal, мы можем получить доступ к специальным методам (или функциям), специфичным для ЖК-дисплея.Мы будем использовать две функции в функции setup (): первая — это функция begin (). Указывает размер дисплея, например количество столбцов и строк. При использовании ЖК-дисплея 16 × 2 укажите параметры 16 и 2, при использовании ЖК-дисплея 20 × 4 укажите параметры 20 и 4.
Вторая функция clear () очищает экран и перемещает курсор в верхний левый угол.
// устанавливаем количество столбцов и строк на дисплее: lcd.begin (16, 2); // Очистить ЖК-дисплей lcd.clear();
В функции loop () мы используем функцию print (), которая печатает сообщение, которое мы видим, в первой строке экрана.
// Распечатать сообщение на ЖК-дисплее lcd.print («Hello world!»);
Затем мы перемещаем курсор во вторую строку, вызывая функцию setCursor (). Положение курсора указывает, где вы хотите, чтобы новый текст отображался на дисплее. Левый верхний угол считается col = 0, row = 0.
lcd.setCursor (0, 1); lcd.print («Учебник по ЖК-дисплею»);
Управление ЖК экраном по шине I2C
Загрузите скетч в Arduino. На экране появится указанный нами текст с мигающим курсором в конце.
Управление ЖК-экраном с помощью Arduino по шине I2CЧитайте ткакже: Схема подключения джойстика KY-023 к Arduino — MicroPi