Дисплей для Ардуино: подключение экрана LCD1602 по I2C

Вопросы и ответы

Для подключения LCD экрана нам понадобятся такие компоненты

  • Любой Arduino (в нашем случае Arduino UNO)
  • ЖК-дисплей на базе HD44780
  • Разделочная доска
  • Соединительные кабели
  • Потенциометр (опция)

компоненты, необходимые для подключения ЖК-экрана к Arduino

Другие полезные функции библиотеки 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 к шинам питания макета, как показано на фотографии. (Поскольку мы будем многократно использовать питание и «землю», то удобнее подключаться к дорожкам, и в целом нужно привыкнуть к такому подключению)

правильное подключение жк-экрана к 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 вам понадобятся две библиотеки:

  1. Библиотеки Wire.h — стандартная библиотека для работы с устройствами Arduino по протоколу I2C, уже есть в Arduino IDE;
  2. Библиотека LiquidCrystal.h также доступна в Arduino IDE и используется при подключении Arduino напрямую к LCD 1602 (без модуля I2C) ;
  3. Библиотека LiquidCrystal_I2C.h, которая предоставляет все необходимые функции для работы с LCD 1602. Вы можете скачать ее в конце статьи.

Схема подключения LCD модуля 1602 к Arduino при помощи модуля I2C

Схема подключения модуля LCD 1602 к Arduino с использованием модуля I2C

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

Скетч для вывода текста на LCD экран по шине I2C

Давайте откроем пример: LiquidCrystal_I2C CustomChars Samples File и немного его перепишем. Показываем сообщение, в конце которого появится мигающий символ. Все нюансы скетча прокомментированы в комментариях к коду.

Кстати, символы, написанные командой lcd.createChar (); остаются в памяти дисплея, даже после выключения они записываются в ПЗУ дисплея 1602.

Подключение ЖК экрана к Ардуино по I2C

Для подключения понадобится такая же плата Arduino, дисплей, макет, соединительные кабели и потенциометр.

Если вы используете отдельный специальный адаптер i2c, вы должны сначала припаять его к модулю дисплея. Ошибиться там сложно, можно руководствоваться такой схемой.

ЖК-экран I2c и адаптер Arduino

ЖК-монитор, совместимый с i2c, подключается к плате четырьмя проводами: два для данных, два для питания.

  • Контакт GND подключается к GND на плате.
  • Вывод VCC составляет 5 В.
  • SCL подключен к выводу A5.
  • SDA подключается к выводу A.

I2c ЖК-дисплей и подключение адаптера arduino

Вот и все! Никакой паутины ниток, за которую очень легко попасться. При этом мы можем просто доверить библиотекам всю сложность реализации протокола 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
    Схема подключения ЖК-дисплея к Arduino по протоколу I2C

    Прозрачная макетная плата на 830 точек (breadboard)

    Доска разделочная прозрачная 830 точек
    Программирование

  • Для просмотра текста из Arduino воспользуемся библиотекой Liquid Crystal, о которой мы говорили выше.Чтобы датчик работал на Arduino, необходимо загрузить и установить библиотеку DHT11 .Вы можете скачать библиотеку здесь .После скачивания необходимой библиотеки нам необходимо правильно ее установить, скачанные файлы нужно переместить по следующему пути :

    После того, как все будет сделано, перейдем к самому важному этапу — программированию.

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

    Практика

    А теперь перейдем к интересному. Давайте проверим ЖК-дисплей. Сначала подключите контакты 5V и GND от Arduino Uno к шинам питания макета. Затем подключите ЖК-дисплей 1602. Этот ЖК-дисплей имеет две отдельные линии питания:

    1. Контакты 1 и 2 для питания одного и того же ЖК-дисплея 1602
    2. Контакты 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
    Управление ЖК-экраном с помощью Arduino по шине I2C

    Читайте ткакже: Схема подключения джойстика KY-023 к Arduino — MicroPi

Оцените статью
Блог про Arduino