Подключение символьного lcd-дисплея 16х2 (hd44780)

Содержание

Подключение дисплея LCD 1602 к arduino по i2c / IIC

LCD дисплей – частый гость в проектах ардуино. Но в сложных схемах у нас может возникнуть проблема недостатка портов Arduino из-за необходимости подключить экран, у которого очень очень много контактов. Выходом в этой ситуации может стать I2C /IIC переходник, который подключает практически стандартный для Arduino экран 1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов. В этой статье мы посмотрим, как можно подключить LCD экран с интерфейсом I2C, какие можно использовать библиотеки, напишем короткий скетч-пример и разберем типовые ошибки.

ЖК дисплей Arduino LCD 1602

Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино. Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano. Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.

Краткое описание пинов LCD 1602

Давайте посмотрим на выводы LCD1602 повнимательней:

Каждый из выводов имеет свое назначение:

  1. Земля GND;
  2. Питание 5 В;
  3. Установка контрастности монитора;
  4. Команда, данные;
  5. Записывание и чтение данных;
  6. Enable;

7-14. Линии данных;

Технические характеристики дисплея:

  • Символьный тип отображения, есть возможность загрузки символов;
  • Светодиодная подсветка;
  • Контроллер HD44780;
  • Напряжение питания 5В;
  • Формат 16х2 символов;
  • Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
  • Угол обзора 180 градусов.

Схема подключения LCD к плате Ардуино без i2C

Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.

Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.

Где купить LCD экраны и шилды для ардуино

LCD экран 1602 (и вариант 2004) довольно популярен, поэтому вы без проблем сможете найти его как в отечественных интернет-магазинах, так и на зарубежных площадках. Приведем несколько ссылок на наиболее доступные варианты:

Описание протокола I2C

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

I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips. В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.

Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.

Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.

В работе I2C можно выделить несколько преимуществ:

  • Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
  • Подключение большого количества ведущих приборов.
  • Уменьшение времени разработки.
  • Для управления всем набором устройств требуется только один микроконтроллер.
  • Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
  • Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
  • Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
  • Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.
  • Существует емкостное ограничение на линии – 400 пФ.
  • Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
  • При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.

Модуль i2c для LCD 1602 Arduino

Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево. А вот разнообразных стандартных экранов выпущено уже огромное количество. Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:

С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.

Для подключения к плате ардуино используются i2c выходы. Если нужно, подключаем внешнее питание для подстветки. С помощью встроенного подстроечного резистора мы можем настроить настраиваемые значения контрастности J

На рынке можно встретить LCD 1602 модули с уже припаянными переходниками, их использование максимально упощено. Если вы купили отдельный переходник, нужно будет предварительно припаять его к модулю.

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

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

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

Жидкокристаллический монитор с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания.

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

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

Библиотеки для работы с i2c LCD дисплеем

Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:

  • Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
  • Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h

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

Описание функций и методов библиотеки LiquidCrystal_I2C:

  • home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
  • write(ch) – позволяет вывести одиночный символ ch на экран.
  • cursor() и noCursor() – показывает/скрывает курсор на экране.
  • blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
  • display() и noDisplay() – позволяет подключить/отключить дисплей.
  • scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
  • autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
  • leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
  • createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.

Альтернативная библиотека для работы с i2c дисплеем

В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.

Читайте также:  Расчёт фотоэлектрической системы

Скачать библиотеку можно на нашем сайте. Библиотека также встроена в последние версии Arduino IDE.

Проблемы подключения i2c lcd дисплея

Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия.

Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.

Если это не помогло, то проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.

Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F. У разных производителей могут быть зашиты разные адреса по умолчанию. Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Пример скетча i2c сканера.

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

Заключение

В этой статье мы рассмотрели основные вопросы использования LCD экрана в сложных проектах ардуино, когда нам нужно экономить свободные пины на плате. Простой и недорогой переходник i2c позволит подключить LCD экран 1602, занимая всего 2 аналоговых пина. Во многих ситуациях это может быть очень важным. Плата за удобство – необходимость в использовании дополнительного модуля – конвертера и библиотеки. На наш взгляд, совсем не высокая цена за удобство и мы крайне рекомендуем использовать эту возможность в проектах.

Подключение дисплеев LCD1602, LCD2402 и LCD1602 I2C к arduino

Сегодня мы рассмотрим подключение LCD дисплея LCD1602 на базе контроллера HD44780 к плате Arduino, работу с дисплеем LCD1602 и LCD2402 с помощью библиотеки LiquidCrystal, подключим дисплей LCD1602 по I2C шине, а также подключим 2 и 3 LCD дисплея одновременно.

дисплей LCD1602 ( вид спереди)

дисплей LCD1602 (верхнее фото с модулем I2C)

Основные характеристики LCD дисплея LCD1602

  • Тип отображения символьный с возможностью загрузки символов;
  • Формат отображения 16×2 символов;
  • ТехнологияSTN, Transflective, Positive;
  • Контроллер HD44780;
  • Интерфейс 8-bit Parallel Interface;
  • Подсветка светодиодная;
  • Угол обзора 180;
  • Напряжение питания 5 В;
  • VLCD подстройка контраста 5.0 V (Vop.);
  • Рабочая температура от -20 °С до +70 °С;
  • Температура хранения от -30 °С до +80 °С.

Контакты LCD дисплея LCD1602

Дисплей LCD1602 имеет 16 выводов, назначение каждого приведено ниже:

  • 1 – VSS – GND (земля);
  • 2 – VDD – (+5В питание);
  • 3 – VO установка контросности;
  • 4 – RS (команды, данные);
  • 5 – RW (четние, запись);
  • 6 – E (Enable);
  • 7-14 – (DB0…DB7) линия данных;
  • 15 – A (плюс подстветки);
  • 16 – K (минус подсветки).

Где купить LCD дисплей LCD1602 (ссылка):

Подключение LCD дисплея LCD1602 к плате Arduino

Схема подключения LCD дисплея к Arduino UNO

Для подключения LCD дисплея к плате Arduino UNO нам потребуется переменный или подстроечный резистор на 10 кОм, подключаем все как на фото выше и при подключении к плате питания мы должны увидеть следующую картинку.

Потом в Arduino IDE 1.6.11 выбираем из примеров папку с библиотекой LiquidCrystal, а в ней тестовый скетч HelloWorld

И потом загружаем в нашу плату, на экране в первой строке должна отобразится надпись “hello, world!, а во второй – время с начала запуска скетча в секундах. Смотрите на фото примеры отображений надписи на фото…

Слишком мало контраста – отрегулируйте подстроечным резистором

Слишком много контраста – отрегулируйте подстроечным резистором

Правильное отображение надписи

Нестандартное подключение дисплея LCD1602

Иногда бывают случаи когда у нас используются ноги (пины) в плате ардуино, которые нам нужны при обычном подключении дисплея LCD1602, о котором я рассказывал раньше. Для выхода из этой ситуации, ми просто подключаем пины дисплея на нужные нам контакты в ардуино, и в скетче в строке

Arduino и символьный LCD-дисплей

Как подружить плату Ардуино с символьным дисплеем? Довольно просто! Все ниже по порядку и с подробностями.

Если есть желание получать информацию от Ардуино без подключения к компьютеру и вывода на серийный порт, можно использовать символьный дисплей. Сделать это не так сложно. Полученное удобство от общения неоценимо.
Для работы я использовал символьный LCD-дисплей J204A на базе чипа HD44780, на eBay часто встречается как LCD2004. 4 строки по 20 символов, инвертированный. Куплен с кучей других на eBay, за сущие копейки, от 60 до 100 рублей за штуку. Русский язык не поддерживается по-умолчанию, но это решаемая проблема, об этом как нибудь в следующий раз. И еще коннекторы на схеме не распаяны, придется поработать паяльником.
Для работы с дисплеями используется библиотека LiquidCrystal.h входящая в дефолтную постаку Arduino IDE.

Сам экран.

А результат мы получим вот такой!

На снимке ниже вся работа с паяльником уже выполнена. Гребенка припаяна так специально, с ориентацией подключения с верхней стороны, там же где и экран. Тут видно насколько удобно в таком случае подключать дисплей. Хотя, возможно, кому-то будет удобнее сразу втыкать дисплей в макетную плату, тогда лучше припаять контакты наоборот.

И с другой стороны.

Подключение контактов и использование устройства подробно описано в даташите.

Информация по микроконтроллеру дисплея HD44780-datasheet .

А вот даташита по дисплею LCD2004 я не нашел, но зато в интернетах полным полно таблиц по дисплею LCD1602. Но они практически не отличаются друг от друга. По управлению и подключению полностью идентичны. Отличие только в количестве строк/символов на дисплее. Но это абсолютно не повлияет если у вас 1602.

Читать PDF с техническими данными не обязательно. Ниже я все объясню в деталях, но если нужны подробности, то все можно найти в даташите.

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

#КонтактыДля чего используетсяПримечание
1VSS (VSS)GND. Земля. Питание микроконтроллера дисплея.0V
2VDD (VCC)Питающее напряжение для микроконтроллера дисплея.+5V
3V0 (VEE)Контраст символов на дисплее. Подключать лучше через потенциометр.от 0v до +5V
4RS (RS)Выбор регистра.
5RW (R/W)Переключение режима чтения/записи. Утянем на землю, нам нужно только передавать информацию на дисплей.0-запись +5V-чтение
6EТактирование
7D0 (DB0)Передача данных. (Не будем использовать)Данные
8D1 (DB1)Передача данных. (Не будем использовать)Данные
9D2 (DB2)Передача данных. (Не будем использовать)Данные
10D3 (DB3)Передача данных. (Не будем использовать)Данные
11D4 (DB4)Передача данных. (Задействуется)Данные
12D5 (DB5)Передача данных. (Задействуется)Данные
13D6 (DB6)Передача данных. (Задействуется)Данные
14D7 (DB7)Передача данных. (Задействуется)Данные
15A (LED+)+5V Напряжение, подсветка дисплея, через потенциометр можно регулировать яркость дисплея.+5V
16K (LED-)GND Земля, подсветка дисплея0V

Передача данных к дисплею возможна в двух вариантах: по 8 и по 4 бит за такт. Т.к. Ардуино имеет мало контактов, мы будем использовать 4 — этого с лихвой хватает, чтоб обновлять информацию на дисплее с запредельной для восприятия скоростью.

Вот так все это дело у меня подключено. Возможно кажется что это хаос, но тут есть система. Можно выделить красные, зеленые, желтые и оранжевые провода. Красные всегда идут на +5V, зеленые — GND, а желтые и оранжевые — это провода для подключения к Ардуино, по которым идут данные.

Самая важная часть — физическое подключение дисплея. По клику открывается в большом разрешении, где все хорошо видно.
R1 — Резистор 200OM. Сопротивление ограничивающее ток, проходящий через подсветку дисплея.
R2 — Потенциометр с сопротивлением до 10kOM. Кутим ручку, подбираем контраст символов.

И крайне простой скетч, для вывода на экран пары строк.
Скачать.

Результат. Если знать, как все это подключается и как написать код, то время на все работы 5 минут.

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

  • Скролить текст;
  • Мигать позицией курсора;
  • Включаться/выключаться.

Обо всех функциях дисплея можно подробнее узнать тут: http://arduino.cc/en/Reference/LiquidCrystal

А теперь бонус!
Подсветка дисплея тратит энергию, которую, при питании от батареи, например, хотелось бы экономить. Я сделал для себя такой вариант — при нажатии на кнопку, включается подсветка дисплея на 5 секунд.

Дисплей подключен почти тем же способом. Осталось только добавить кнопку с вызовом прерывания.
Как сделать такую кнопку подробно описано вот тут: http://compblog.vlukyanov.com/?p=435
Кнопка подключена по этой схеме также ко второму контакту.

Нужно внести небольшие изменения в подключение.
1) Все провода дисплея остаются на местах кроме «А», он был подключен к +5V, теперь подключаем к четвертому пину Ардуино.
2) Добавить кнопку как показано на схеме к контакту 2. Если не понятно, как это сделать, еще раз говорю идем сюда и читаем статью: http://compblog.vlukyanov.com/?p=435

И результат:

Взаимодействие LCD 1602 с Ардуино. Описание, распиновка, подключение

Хотите, чтобы в ваших проектах Arduino отображались пользовательские сообщения или показания датчиков? Тогда для этих целей можно рекомендовать дисплей LCD 1602. Подобные дисплеи чрезвычайно распространены и представляют собой быстрый способ добавить читаемый интерфейс в какой-либо проект.

Читайте также:  Стабилизированный адаптер из нестабилизированного

Эта статья охватит все, что необходимо знать, чтобы начать работу с LCD 1602. Да и не только с 1602 (16×2), но и любыми другими символьными ЖК-дисплеями (например, 16×4, 16×1, 20×4 и т. д.), основанными на контроллере параллельного интерфейса HD44780 от Hitachi.

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

Обзор LCD 1602

Эти ЖК-дисплеи идеально подходят для отображения только текста/символов, отсюда у них есть и другое название — «символьные ЖК-дисплеи». Дисплей имеет светодиодную подсветку и может отображать 32 символа в кодировке ASCII в двух рядах по 16 символов в каждом ряду.

Если вы посмотрите внимательно, вы можете увидеть маленькие прямоугольники для каждого символа на дисплее и пиксели, которые составляют символ. Каждый из этих прямоугольников представляет собой сетку 5 × 8 пикселей.

Хотя такие дисплеи отображают только текст, они бывают разных размеров и цветов: например, 16×1, 16×4, 20×4, с белым текстом на синем фоне, с черным текстом на зеленом и другие.

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

Распиновка 16х02 символов

Перед тем, приступить к сборке и написанию кода, давайте сначала взглянем на распиновку LCD 1602.

  • GND должен быть подключен к земле Arduino.
  • VCC — это вывод питание для ЖК-дисплея, к которому мы подключаем 5-вольтовый контакт Arduino.
  • Vo (LCD Contrast) — вывод контролирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно отрегулировать контрастность.
  • RS (Register Select) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются команды или данные. В основном этот вывод используется для дифференциации команд от данных. Например, когда на выводе RS установлено значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.). Когда вывод RS установлено значение HIGH, мы отправляем данные/символы на ЖК-дисплей.
  • R/W (Read/Write) — вывод предназначен для контроля того, что необходимо сделать — считать данные или передать их на ЖК-дисплй. Поскольку мы просто используем этот ЖК-дисплей в качестве устройства вывода, то достаточно на этот вывод подать HIGH уровень, тем самым мы перейдем в режим записи.
  • EN (Enable) вывод используется для включения дисплея. Это означает, что когда на этом выводе установлено значение LOW ЖК-дисплей не реагирует на то, что происходит с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей обрабатывает входящие данные.
  • D0-D7 (Data Bus) — это выводы, по которым передаются 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем на LCD дисплей 0100 0001 (в соответствии с таблицей ASCII) .
  • AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.

Практика

Теперь мы переходим к интересным вещам. Давайте проверим ЖК-дисплей. Сначала подключим контакты 5В и GND от Arduino Uno к шинам электропитания макетной платы. Затем подключим LCD 1602. Данный LCD имеет две отдельные линии питания:

  1. Контакт 1 и контакт 2 для питания самого LCD 1602
  2. Контакт 15 и контакт 16 для подсветки LCD 1602

Подсоедините контакты 1 и 16 LCD на минус питания, а контакты 2 и 15 к + 5В.

Далее необходимо подключить контакт 3, который отвечает за контрастность и яркость дисплея. Для точной настройки контрастности необходимо подключить крайние выводы потенциометра сопротивлением 10 кОм к 5В и GND, а центральный контакт (бегунок) потенциометра к контакту 3 на LCD дисплея.

Регулировка контрастности ЖК-дисплея с помощью потенциометра

Теперь включите Arduino и вы увидите подсветку. Поворачивая ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.

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

Прежде чем мы приступим к загрузке скетча и отправке данных на дисплей, давайте подключим LCD 1602 к Arduino.

LCD дисплей имеет много контактов (16 контактов). Но, хорошая новость заключается в том, что не все эти контакты необходимы для нас, чтобы подключиться к Arduino.

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

Разница между 4-битным и 8-битным режимом

8-битный режим быстрее, чем 4-битный. Это связано с тем, что что в 8-битном режиме мы передаем данные за один раз. Однако в 4-битном режиме мы должны разделить байт на 2 части, сдвинуть один из них на 4 бита вправо и выполнить 2 операции записи.

Итак, 4-битный режим часто используется для экономии выводов микроконтроллера, а 8-битный режим лучше всего использовать, когда требуется высокая скорость в приложении и при этом доступно как минимум 10 выводов ввода/вывода микроконтроллера.

Итак, что мы будем работать с LCD дисплеем, используя 4-битный режим, и, следовательно, нам нужно только 6 контактов: RS, EN, D7, D6, D5 и D4.

Теперь давайте подключим ЖК-дисплей к Arduino. Четыре контакта данных (D4-D7) дисплея подключаем к цифровым контактам Arduino #4, #5, #6, #7. Вывод EN подключим к Arduino вывод #2, а вывод RS к выводу #1.

Подключение 16-символьного ЖК-дисплея к Arduino UNO

Скетч

Следующий тестовый скетч напечатает сообщение «Hello World!». Далее разберем его работу по подробнее.

Объяснение кода:

Скетч начинается с подключения библиотеки LiquidCrystal. Как упоминалось ранее в этом руководстве, в сообществе Arduino есть библиотека LiquidCrystal, которая облегчает использование LCD дисплеев. Вы можете узнать больше о библиотеке LiquidCrystal на официальном сайте Arduino .

Далее мы должны создать объект LiquidCrystal. Этот объект использует 6 параметров и указывает, какие выводы Arduino подключены к выводам RS, EN и выводам данных: d4, d5, d6 и d7.

Теперь, когда мы объявили объект LiquidCrystal, мы можем получить доступ к специальным методам (или функциям), специфичным для ЖК-дисплея.

В функции setup() мы будем использовать две функции: первая функция begin(). В ней указываются размер дисплея, т.е. количества столбцов и строк. Если вы используете 16 × 2 символьный ЖК-дисплей, укажите параметры 16 и 2, если вы используете ЖК-дисплей 20 × 4, укажите параметры 20 и 4.

Вторая функция clear() очищает экран и перемещает курсор в верхний левый угол.

В функции loop() мы используем функцию print(), выводящая сообщение, которое мы видим в первой строке экрана.

После этого мы переводим курсор на вторую строку, вызвав функцию setCursor(). Позиция курсора указывает место, где вам нужно отобразить новый текст на дисплее. Верхний левый угол считается col = 0, row = 0.

Другие полезные функции библиотеки LiquidCrystal

Есть несколько полезных функций, которые вы можете использовать с объектом LiquidCrystal. Немногие из них перечислены ниже:

  • Если вы просто хотите расположить курсор в верхнем левом углу дисплея без очистки дисплея, используйте home().
  • Существует много приложений, таких как turbo C++ или notepad ++, в которых нажатие клавиши «insert» на клавиатуре меняет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее с помощью blink() или lcd.Cursor().
  • Функция blink() отображает мигающий блок размером 5 × 8 пикселей, а lcd.Cursor() подчеркивание (линия) на позиции, в которую будет записан следующий символ.
  • Вы можете использовать функцию noblink(), чтобы отключить мигающий курсор на дисплее и lcd.noCursor() чтобы скрыть курсор.
  • Вы можете прокрутить содержимое дисплея на один пробел вправо, используя lcd.scrollDisplayRight() или один пробел влево используя lcd.scrollDisplayLeft(). Если вы хотите непрерывно прокручивать текст, вам нужно использовать эти функции внутри цикла for.

Генерация пользовательских символов для LCD

Если вы находите символы на дисплее неподходящими и неинтересными, вы можете создать свои собственные символы (глиф) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны в том случае, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.

Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

Для использования createChar() сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

Генератор символов LCD

Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

Читайте также:  Четыре схемы на к157уд2

Единственным ограничением является то, что библиотека LiquidCrystal поддерживает только восемь пользовательских символов.

Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

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

В настройках мы должны создать пользовательский символ, используя функцию createChar(). Эта функция принимает два параметра. Первый — это число от 0 до 7, чтобы зарезервировать один из 8 поддерживаемых пользовательских символов. Второй параметр — это имя массива байтов.

Далее в цикле для отображения пользовательского символа мы используем функцию write(), а в качестве параметра мы используем номер символа, который мы зарезервировали.

Обзор LCD-дисплея 1602A (LCD1602A)

Автор: Сергей · Опубликовано 23.09.2016 · Обновлено 13.04.2020

Жидкокристаллический дисплей (Liquid Crystal Display) сокращенно LCD построен на технологии жидких кристаллов. При проектировании электронные устройства, нам нужно недорогое устройство для отображения информации и второй не менее важный фактор наличии готовых библиотек для Arduino. Из всех доступных LCD дисплеев на рынке, наиболее часто используемой является LCD 1602A, который может отображать ASCII символа в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей. В этой статье рассмотрим основы подключения дисплея к Arduino.

Технические параметры

Описание дисплея

LCD 1602A представляет собой электронный модуль основанный на драйвере HD44780 от Hitachi. LCD1602 имеет 16 контактов и может работать в 4-битном режиме (с использованием только 4 линии данных) или 8-битном режиме (с использованием всех 8 строк данных), так же можно использовать интерфейс I2C. В этой статье я расскажу о подключении в 4-битном режиме.

Назначение контактов:
► VSS: «-» питание модуля
► VDD: «+» питание модуля
► VO: Вывод управления контрастом
► RS: Выбор регистра
► RW: Выбор режима записи или чтения (при подключении к земле, устанавливается режим записи)
► E: Строб по спаду
► DB0-DB3: Биты интерфейса
► DB4-DB7: Биты интерфейса
► A: «+» питание подсветки
► K: «-» питание подсветки

На лицевой части модуля располагается LCD дисплей и группа контактов.

На задней части модуля расположено два чипа в «капельном» исполнении (ST7066U и ST7065S) и электрическая обвязка, рисовать принципиальную схему не вижу смысла, только расскажу о резисторе R8 (100 Ом), который служит ограничительным резистором для светодиодной подсветки, так что можно подключить 5В напрямую к контакту A. Немного попозже напишу статью в которой расскажу как можно менять подсветку LCD дисплея с помощью ШИП и транзистора.

Подключение LCD 1602A к Arduino (4-битном режиме)

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.
► Потенциометр 10 кОм x 1 шт.
► Разъем PLS-16 x 1 шт.
► Макетная плата MB-102 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
Для подключения будем использовать макетную плату, схема и таблица подключение LCD1602a к Arduino в 4-битном режиме можно посмотреть на рисунке ниже.

Подключение дисплея к макетной плате будет осуществляться через штыревые контакты PLS-16 (их необходимо припаять к дисплею). Установим модуль дисплея в плату breadboard и подключим питание VDD (2-й контакт) к 5В (Arduino) и VSS (1-й контакт) к GND (Arduino), далее RS (4-й контакт) подключаем к цифровому контакту 8 (Arduino). RW (5-й контакт) заземляем, подключив его к GND (Arduino), затем подключить вывод E к контакту 8 (Arduino). Для 4-разрядного подключения необходимо четыре контакта (DB4 до DB7). Подключаем контакты DB4 (11-й контакт), DB5 (12-й контакт), DB6 (13-й контакт) и DB7 (14-й контакт) с цифровыми выводами Arduino 4, 5, 6 и 7. Потенциометр 10K используется для регулировки контрастности дисплея, схема подключения LCD дисплея 1602а, показана ниже

Библиотека уже входит в среду разработки IDE Arduino и нет необходимости ее устанавливать. Скопируйте и вставьте этот пример кода в окно программы IDE Arduino и загрузите в контроллер.

Подключение символьного lcd-дисплея 16х2 (hd44780)

Гость

Группа: Cоучастник
Сообщений: 128
Пользователь №: 61060
Регистрация: 8-February 10

В общем решил замутить проект на AVR. Раньше с AVR не работал, но писал несложные программы для pic-ов.
В общем мне понадобилось подключить ЖКИ 16*2 с контроллером HD44780. Но я не хочу использовать чужие разработки и библиотеки. Решил все сделать сам. Я перерыл кучу инфы в нете и на мой взгляд теория подключения ЖКИ лучше всего описана у этого товарища
Пользуясь его блок схемой я набросал следующий порядок действий инициализации дисплея и выдачи цифры “1” по четырехбитному интерфейсу.

Вот порядок действий:

1) жду 15 мс
2) 0011 – необходимая инициализация (D7,D6,D5,D4) RS=0
3)жду 5 мс
4) 0011 – необходимая инициализация (D7,D6,D5,D4) RS=0
5)жду 5 мс
6) 0011 – необходимая инициализация (D7,D6,D5,D4) RS=0
——установка 4-битного интерфейса с двумя строками
7) 0010 – становка 4-битного интерфейса (D7,D6,D5,D4) RS=0
8) 0010 – становка 4-битного интерфейса (D7,D6,D5,D4) RS=0
9) 1000 – две строки, шрифт 5*8 (D7,D6,D5,D4) RS=0
——включение дисплея——-
10) 0000 – (D7,D6,D5,D4) RS=0
11) 1100 – включить дисплей (D7,D6,D5,D4) RS=0
——очистка дисплея——-
12) 0000 – (D7,D6,D5,D4) RS=0
13) 0001 – очистить дислей (D7,D6,D5,D4) RS=0
——установки сдвига ——-
14) 0000 – (D7,D6,D5,D4) RS=0
15) 0110 – сдвиг (D7,D6,D5,D4) RS=0
——выдача символа “1” ——-
16) 0011 – (D7,D6,D5,D4) RS=1
17) 0001 – (D7,D6,D5,D4) RS=1

Алгоритм я проверил на эмуляторе. Все отлично работает. Далее написал программу которая этот алгоритм повторяет. И при отладке наблюдал что порт А принимает ровно те значения что необходимо.

Но в протеусе ничего не работает. Может кто сможет подсказать где я совершил ошибку?!

Текст программы прикрепляю.

Присоединённый файл ( Кол-во скачиваний: 633 )
LCD_OPTIMIZE.asm

Дедушка

Группа: Автор
Сообщений: 7442
Пользователь №: 35582
Регистрация: 3-August 08
Место жительства: Украина, Харьков

Дедушка

Группа: Автор
Сообщений: 7442
Пользователь №: 35582
Регистрация: 3-August 08
Место жительства: Украина, Харьков

Вот такая у меня инициализация для 4 битного режима.

CODE
void Lcd_Write(unsigned char Data)
<
PORTB = Data;
PORTB.LCD_E = 1;
PORTB.LCD_E = 0;
>

void lcd_init(void)
<
Lcd_Write(0b00110000); // 8 Бит
delay_us(40);

Lcd_Write(0b00110000); // 8 Бит
delay_us(40);

Lcd_Write(0b00110000); // 8 Бит
delay_us(40);

Lcd_Write(0b00100000); // 4 Бит
delay_us(40);

Lcd_Write(0b00100000); // 4 Бит, Две строки, размер символа 5×7
Lcd_Write(0b10000000);
delay_us(40);

Lcd_Write(0b00000000); // Increment Counter
Lcd_Write(0b01100000);
delay_us(40);

Lcd_Write(0b00000000); // Display On
Lcd_Write(0b11000000);
delay_us(40);

Lcd_Write(0b00000000); // Display Clear
Lcd_Write(0b00010000);
delay_us(1800);

Могу и на асме написать, если нужно. Я вообще стараюсь не использовать 4 битный режим, потому что не всегда всё работает, да и размер кода увеличивается из за передачи этих ниблов. Обычно во всех проектах подключаю дисплей через микросхему 74HC595. В итоге работа с дисплеем сильно упрощается. И ножки МК экономим. Всего 4 ножки нужно для полноценного управления дисплеем.

Это сообщение отредактировал vitalik_b – Oct 22 2012, 06:52 PM

Гость

Группа: Cоучастник
Сообщений: 128
Пользователь №: 61060
Регистрация: 8-February 10

QUOTE (vitalik_b @ Oct 22 2012, 07:47 PM)
Вот такая у меня инициализация для 4 битного режима.
Могу и на асме написать, если нужно.

Спасибо! Переписывать не нужно. “С” я знаю в принципе, правда на контроллерах не использовал, тут дело привычки.
Инициализация отличается от моей только временем задержки.

QUOTE (vitalik_b @ Oct 22 2012, 07:47 PM)
Я вообще стараюсь не использовать 4 битный режим, потому что не всегда всё работает, да и размер кода увеличивается из за передачи этих ниблов.

Согласен. Но я решил сэкономить ноги на всякий пожарный. Проект обещает сильно разрастись и дисплей тут всего лишь промежуточный этап на котором я к сожалению застрял.

QUOTE (vitalik_b @ Oct 22 2012, 07:47 PM)
Обычно во всех проектах подключаю дисплей через микросхему 74HC595. В итоге работа с дисплеем сильно упрощается. И ножки МК экономим. Всего 4 ножки нужно для полноценного управления дисплеем.

Дедушка

Группа: Автор
Сообщений: 7442
Пользователь №: 35582
Регистрация: 3-August 08
Место жительства: Украина, Харьков

QUOTE (Jebo @ Oct 22 2012, 07:07 PM)
QUOTE (vitalik_b @ Oct 22 2012, 07:47 PM)
Обычно во всех проектах подключаю дисплей через микросхему 74HC595. В итоге работа с дисплеем сильно упрощается. И ножки МК экономим. Всего 4 ножки нужно для полноценного управления дисплеем.

У меня такой микросхемы нет. Не знаю будет ли в нашем городе. Надо будет зайти посмотреть.
Спасибо за идею!

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

Это сообщение отредактировал vitalik_b – Oct 22 2012, 07:13 PM

Гость

Группа: Cоучастник
Сообщений: 128
Пользователь №: 61060
Регистрация: 8-February 10

QUOTE (vitalik_b @ Oct 22 2012, 08:11 PM)
У нас такая микросхема стоит буквально копейки. Это обычная логика. Если идея заинтересует то могу выложить код, правда он на асме, так как свои проекты часто пишу на асме.

Дедушка

Группа: Автор
Сообщений: 12592
Пользователь №: 55667
Регистрация: 10-November 09
Место жительства: BY

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector