Программы. Игры. Браузеры. Windows. Архиваторы
  • Главная
  • Фишки с ПК
  • Подключение жк экрана к ардуино. AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780. Альтернативная библиотека для работы с i2c дисплеем

Подключение жк экрана к ардуино. AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780. Альтернативная библиотека для работы с i2c дисплеем

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

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

В примере мы рассмотрим дисплей Winstar wh1602l1 – один из самых распространенных дисплеев на контроллере hd44780. Кроме того Вы можете подключать LCD 2004 и другие аналогичные.
Первые две цифры обозначают количество символов в строке, а вторые количество строк, таким образом, выбранный дисплей имеет 2 строки по 16 символов.
Данный способ подключения подразумевает занятие минимум 6 портов микроконтроллера Ардуино. В случае необходимости Вы можете подключить текстовый дисплей 1602 через I2C интерфейс (2 порта).

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

Выводы 15 и 16 на дисплее отвечают за подсветку, ее можно выключить или сделать автоматическую регулировку яркости при подключения фоторезистора к Arduino , как датчика яркости.

В нашем примере будем считывать данные из последовательного порта и выводить их на дисплей:

#include // Подключаем библиотеку работы с символьными дисплеями LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) подключаем выходы дисплея согласно последовательности, R/W – GND, так как мы будем записывать данные в дисплей, а не считывать void setup() { lcd.begin(16, 2); // Инициализируем LCD 1602 // lcd.begin(20, 4); // Инициализируем LCD 2004 Serial.begin(9600); // Запускаем последовательный порт } void loop() { if (Serial.available()) // Если из порта поступаю данные, то... { delay(100); lcd.clear(); // Полностью очищаем экран while (Serial.available() > 0) // Если из порта поступаю данные больше 0, то... { lcd.write(Serial.read()); // Считываем значения из serial порта и выводим их на дисплей } } }

Вы можете усложнить код и вывести часы реального времени DS1307 на Arduino на Ваш LCD1602.

Теперь по подробнее рассмотрим все функции в библиотеке LiquidCrystal:

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

lcd.print(); - самая простая и часто используемая, используется для вывода информации.

lcd . clear (); - используется для очистки дисплея.

lcd.setCursor(x , y ); - ставит курсор на определенное место.

Х – изменение позиции в строке

Y – изменение строки

Например, lcd.setCursor(0, 0); это верхняя левая ячейка.

lcd.home(); - ставит курсор в позицию 0, 0

lcd.home(); = lcd.setCursor(0, 0);

lcd . scrollDisplayLeft (); - сдвиг влево

lcd . scrollDisplayRight (); - сдвиг вправо

Lcd.createChar(имя , массив ); - создание собственного знака.

Например знак градуса выглядит вот так:

Celc = {B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 };

Все давно привыкли, что у каждого электронного устройства есть экран, с помощью которого оно дает человеку всякую полезную информацию. MP3-плеер показывает название играемого трека, пульт квадрокоптера отображает полетную телеметрию, даже стиральная машина выводит на дисплей время до конца стирки, а на смартфоне вообще размещается целый рабочий стол персонального компьютера! Скорее всего, вашему очередному устройству тоже не помешает какой-нибудь небольшой дисплейчик 🙂 Попробуем сделать простые электронные часы! А в качестве табло используем распространенный и дешевый символьный жидкокристаллический дисплей 1602. Вот прямо такой, как на картинке: Кроме 16х2, достаточно популярным считается символьный дисплей 20х4 (четыре строки по 20 символов), а также графический дисплей с разрешением 128х64 точек. Вот они на картинках:

1. Подключение символьного ЖК дисплея 1602

У дисплея 1602 есть 16 выводов. Обычно они нумеруются слева-направо, если смотреть на него так как на картинке. Иногда выводы подписываются, типа: DB0, DB1, EN и т.п. А иногда просто указывают номер вывода. В любом случае, список выводов всегда одинаковый: 1 — «GND», земля (минус питания); 2 — «Vcc»,­ питание +5В; 3 — «VEE», контраст; 4 — «RS», выбор регистра; 5 — «R/W», направление передачи данных (запись/чтение); 6 — «EN», синхронизация; 7-14 — «DB0­», «DB1», .., «DB7″­- шина данных; 15 — анод подсветки (+5В); 16 — катод подсветки (земля). Линии VEE, RS и четыре линии данных DB4, DB5, DB6, DB7 подключаем к цифровым выводам контроллера. Линию «R/W» подключим к «земле» контроллера (так как нам потребуется только функция записи в память дисплея). Подсветку пока подключать не будем, с этим, я полагаю, вы сами легко разберетесь 🙂 Принципиальная схема подключения дисплея к Ардуино Уно
Внешний вид макета
На всякий случай еще и в виде таблички:
ЖК дисплей 1602 1 2 4 6 11 12 13 14 15 16
Ардуино Уно GND +5V 4 5 6 7 8 9 +5V GND

2. Программируем «Hello, world!»

Для работы с ЖК дисплеями различных размеров и типов, в редакторе Arduino IDE имеется специальная библиотека LiquidCrystal . Чтобы подключить библиотеку, запишем первой строчкой нашей программы следующее выражение: #include Далее, нам потребуется указать какие выводы Ардуино мы использовали для подключения дисплея. Эту информацию мы укажем при инициализации модуля: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Здесь первые два аргумента — это выводы RS и EN, а оставшиеся четыре — линии шины данных DB4-DB7. Далее, укажем размер дисплея с помощью команды «begin»: lcd.begin(16, 2); Напоминаю, в нашем дисплее имеется две строки, по 16 символов в каждой. Наконец, для вывода текста нам понадобится простая функция «print». Вывод с помощью этой функции всем известной фразы будет выглядеть следующим образом: lcd.print("Hello, world!"); Полностью программа будет выглядеть так: #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup(){ lcd.begin(16, 2); lcd.print("Hello, world!"); } void loop(){ } Загружаем её на Ардуино Уно, и смотрим что творится на дисплее. Может быть три основных ситуации 🙂 1) На дисплее отобразится надпись «Hello, world!». Значит вы все правильно подключили, и контраст каким-то чудесным образом оказался изначально правильно настроен. Радуемся, и переходим к следующей главе. 2) На дисплее отобразится целый ряд черных прямоугольников — требуется настройка контраста! Именно для этого мы добавили в цепь потенциометр с ручкой. Крутим его от одного края, до другого, до момента пока на дисплее не появится четкая надпись. 3) Два ряда черных прямоугольников. Скорее всего, вы что-то напутали при подключении. Проверьте трижды все провода. Если не найдете ошибку — попросите кота проверить!

3. Программируем часы

Теперь когда дисплей точно работает, попробуем превратить наше нехитрое устройство в настоящие электронные часы. Внимание! Для вывода времени нам потребуется библиотека «Time». Если она еще не установлена, то можно скачать архив по ссылке . Подключим ее: #include Затем установим текущие дату и время с помощью функции «setTime»: setTime(23, 59, 59, 12, 31, 2015); Здесь все понятно: часы, минуты, секунды, месяц, число, год. Для вывода даты используем кучу функции:
  • year() — вернет нам год;
  • month()­ — месяц;
  • day() ­- день;
  • hour() ­- час;
  • minute() — вернет минуту;
  • second() -­ секунду.
Теперь обратим внимание вот на какой факт. Если посчитать количество символов в типовой записи даты: «31.12.2015 23:59:59», получим 19. А у нас всего 16! Не влазит, однако, в одну строчку. Решить проблему можно еще одной полезной функцией — «setCursor». Эта функция устанавливает курсор в нужную позицию. Например: lcd.setCursor(0,1); Установит курсор в начало второй строчки. Курсор — это место символа, с которого начнется вывод текста следующей командой «print». Воспользуемся этой функцией для вывода даты в первой строчке, а времени во второй. С выводом даты и времени теперь все ясно. Остались рутинные вещи. Например, после каждого заполнения дисплея, мы будем его чистить функцией «clear()»: lcd.clear(); А еще нам нет смысла выводить данные на дисплей чаще чем раз в секунду, поэтому между двумя итерациями сделаем паузу в 1000 миллисекунд. Итак, сложив все вместе, получим такую программу: #include #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup(){ lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 утра, десятого января 2015 года } void loop(){ lcd.clear(); lcd.print(day()); lcd.print("."); lcd.print(month()); lcd.print("."); lcd.print(year()); lcd.setCursor(0, 1); lcd.print(hour()); lcd.print(":"); lcd.print(minute()); lcd.print(":"); lcd.print(second()); delay(1000); } Загружаем скетч на Ардуино Уно, и наблюдаем за ходом часиков! 🙂 Для того чтобы закрепить полученные знания, рекомендую прокачать наши часы до полноценного будильника. Всего-то на всего потребуется добавить пару кнопок и зуммер 🙂 На сей раз хочу вам рассказать как подключить дисплей от мобильного телефона Nokia 1202 к микроконтроллеру Atmega8. Программируем в среде CodeVision. Кое где могу и ошибаться. Сам только не давно разобрался что к чему. Опыта в программировании не имею и библиотеки для работы с дисплеем писал не я. Они скопированы с одного проекта в интернете. Там прописаны все нужные функции и есть шрифт 5*8 латинские буквы и кириллица. Есть так же пару символов 12*16 и 24*32, которые использовал автор библиотек в своем устройстве. Если их удалить, то шрифт 5*8 будет занимать около 700 байт флеша микроконтроллера. Поэтому микроконтроллер для проекта надо брать "пожирней”. В моем случае использована Atmega8 . Вполне достаточно. Все файлы - исходники, библиотеку и так далее, .

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

Принципиальная схема подключения ЖК дисплея к МК

Нарисовал схему подключения. Для питания дисплея нужно напряжение 3,3V. Если запитывать микроконтроллер от 5V, то ставим резисторные делители и микросхему 78L33 . В случае питания всей схемы от 3,3V резисторные делители не нужны. Вроде Atmega8A может работать от 3,3V при условие, что частота не выше 8 МГц. Лично я не пробовал. У меня все собрано на отладочной плате с питанием от 5V. Перед самим дисплеем ставить по питанию электролит большой емкости ни в коем случае не надо. В самом начале работы контроллер подает на дисплей команды инициализации. Для заряда конденсатора нужно время. Пока он зарядится и дисплей начнет работать пройдет некоторое время, и команды инициализации он не получит. Конечно это миллисекунды, но в даном случае эффект ощутим.


Схема распиновки дисплея

У дисплея Nokia 1202 9-ти битный SPI интерфейс. У выбранного нами микроконтроллера такой роскоши нет. По этому для связи с дисплеем мы используем не аппаратный, а программный SPI, так сказать "ногодрыг”. Как создавать новые проекты в CodeVision рассказывать не буду - думайте сами. Скажу только, что все выводы PORTB надо настроить на выход. В настройках проекта нужно поставить галочку на "Store Global Constants in FLASH Memory ”. Данное действие нужно для того, чтоб массивы шрифтов и наших картинок хранились во флеше.


Итак, проект мы создали. Выбрали микроконтроллер, задали тактовую частоту, настроили проект. Что дальше? А дальше нужно добавить библиотеки для работы с дисплеем и библиотеки задержек. Распаковываем архив. Там есть два файла. Их нужно скопировать в определенные папки. Надеюсь CodeVision вы установили прямо на диск C:\. Если да, то файлы копируем по соответствующим путям:

C:\cvavreval\inc для файла 1100.inc, и
C:\cvavreval\lib для файла 1100.h .


Еще хочу сказать, что назначение пинов микроконтроллера можно изменять в файле 1100.h . Тогда и схема подключения изменится. Начинаем кодить. Просто выведем какую-то надпись на дисплей основным шрифтом 5*8. В самом начале добавим библиотеки.

#include < 1100.h> // библиотека дисплея
#include // библиотека задержек

В самом низу до основного цикла while(1){} делаем инициализацию дисплея и его очистку.

lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея

Нашу надпись поставим так же до основного цикла. Пусть сперва контролер выведет послание на дисплей, а после крутится в основном цикле. Пишем вот это:

print_string("Выводим надпись",5,0);
print_string("Какую сами хотим",0,1);
print_string("БУХАРЬ",10,2);

Думаю здесь все понятно. Первая цифра – координата по оси x на дисплее. Она может принимать значение от 0 до 96. Вторая – строка. Она от 0 до 7. В принципе там помещается 8 с половиной строк, но на пол строки мы читать не будем. Компилируем и прошиваем. Смотрим результат. Можно так же установить Proteus, и протестировать в нем. Контроллер можно настроить для работы от внутреннего генератора на частоту заданную в проекте с задержкой при старте 64 мсек. Добавляю архив с скомпилированным проектом. Частота 8 Мгц.


Но как уже писал в начале, в библиотеке есть еще и другие символы. Правда там нет букв, а только цифры. Теперь немного усложним задачу. Пусть надпись не будет инертной, а изменяется. Допустим считает от 0 до 9 с интервалом в 1 секунду. Когда дойдет до 9, после обнулится и снова наново. Возьмем цифры большие размером 24*32. Ну чтож приступим. Можно взять предыдущий проект и удалить три строки "print_string”. Сразу после добавления библиотек объявим некую глобальную переменную m .

char m = 0;

Можно и просто написать:

В даном случае ей автоматически присвоится значение 0. В основном цикле пишем вот это:

char_24_32(m,35,2); //функция вывода символа 24*32
delay_ms(1000); // ждем 1 секунду
m++; // добавляем 1 к переменной m
if(m>9)m=0; // Условие. Если переменная m больше 9, то m равняется 0.

Снял небольшое видео работы программы

Попробую рассказать как рисовать картинки и выводить их на экран дисплея. Как создавать массивы и функции к их выводу и как инвертировать изображение. Библиотеки позаимствовал с сайта cxem.net. Материал подготовил Бухарь .

Обсудить статью ПОДКЛЮЧЕНИЕ ДИСПЛЕЯ К МИКРОКОНТРОЛЛЕРУ

В этой инструкции показано, как подключать к Arduino и использовать LCD экраны на 16х2 и 20х4.

Эти экраны имеют встроенную подсветку на базе маломощного светодиода, работают от +5 В. Для подключения этих жидкокристаллических экранов понадобится 6 контактов. Можно использовать любые пины на вашем Arduino!

Инструкция написана на основании LCD экранов от компании Adafruit - blue&white 16x2, RGB 16x2 LCD, и blue&white 20x4, RGB 20x4. Если вы используете ЖК экран от другого производителя, нет 100% гарантии, что он сработает (хотя в 99% случаев все работает).

Символьные и графические LCD - в чем разница?

Существует огромное количество разных ЖК экранов. В этой статье мы рассмотрим символьные (character) LCD. Подобные экраны - отличный вариант для отображения текста. Можно настроить и отображение иконок, но размер этих иконок не должен превышать 7 пикселей (очень маленькие!).

На фото ниже показан пример работы LCD монитора на 16 символов с двумя строками:

Если вы присмотритесь повнимательнее, вы увидите маленькие прямоугольники, в которых отображаются символы. Каждый прямоугольник - это отдельная сетка пикселей. Для сравнения, ниже показан графический (graphical) LCD экран:

На графическом жидкокристаллическом дисплее одна большая сетка пикселей (в данном примере - 128х64). На нем можно отобразить текст, но лучше выводить изображения. Графические LCD обычно больше по размерам, на них больше контактов для подключения, использовать их несколько сложнее, чем текстовые.

В этой статье мы рассмотрим только текстовые/символьные экраны!

Разные модели LCD экранов

После того, как мы ограничили тип рассматриваемых экранов, рассмотрим, какие они бывают.


Несмотря на то, что они используются только для отображения текста, существуют разные модели и форм-факторы: в левом верхнем углу ЖК экран 20x4 с белым текстом на синем фоне, в правом верхнем - 16x4 с черным текстом на зеленом фоне, слева внизу - 16x2 с белым текстом на синем фоне и 16x1 с черным текстом на сером фоне.

Хорошая новость: все эти экраны взаимозаменяемы. Если вы настроили один из них, вы можете заменить его на другую модель. Скетч Arduino придется немного изменить, но подключение одинаковое!


В этой части мы используем LCD экраны с одной рельсой и 16 контактами для подключения (смотрите фото выше). Есть и LCD с 2 рельсами по 8 контактов для подключения (на рисунке ниже).


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

Подключение символьного LCD экрана к Arduino

Устанавливаем рельсы контактов


Помимо LCD экрана вам понадобится дополнительная обвязка. Во-первых - потенциометр на 10 КОм. С помощью потенциометра мы будем настраивать контрастность дисплея. На каждом ЖК экране различные настройки контрастности, так что без регулировки не обойтись. Кроме того, вам понадобится рельса контактов 0.1".


Если рельса с контактами слишком длинная, лишние контакты модно просто отрезать!

Вам надо припаять контакты к ЖК дисплею.

При пайке будьте предельно осторожны, не повредите ваш Breadboard ! Можете сначала "прихватить" первый и 16 контакты, а потом уже припаять остальные.


Питание и подсветка

Подключаем питание и подсветку

Пояснения


Мы начинаем подбираться к интересным вещам! Установите ваш LCD на breadboard.


Макетную плату запитываем от нашего Arduino. Подключите +5V к красной рельсе, а Gnd - к синей.


После этого подключим подсветку нашего LCD экрана. Подключите контакт 16 к gnd, а пин 15 - к +5V. На большинстве ЖК экранов предусмотрены резисторы для подсветки.

Если же на вашем модуле резисторов не оказалось, придется добавить один между 5V и пином 15. Для расчета номинала резисторов, уточните максимальный ток для питания подсветки и примерное значение падения напряжения из даташита. Отнимите значение падения напряжения от 5 В, после этого разделите на максимальную силу тока и округлите к ближайшему большему стандартному значению номинала резистора. Например, если падение напряжения составляет 3.5 В, а сила тока 16 мА, номинал резистора будет равен: (5 - 3.5)/0.016 = 93.75 Ом, или 100 Ом после округления к стандартному значению. Если вы не можете найти даташит, используйте резистор на 220 Ом. Правда, в этом случае подсветка может быть достаточно бледной.


Подключите ваш Arduino к питанию. Подсветка должна загореться.

Кстати, на некоторых дешевых LCD экранах подсветка не предусмотрена!

Схема для настройки контраста

Цепь для настройки контраста

Пояснения


Устанавливаем потенциометр. На фото он находится справа от пина 1.


Подключите одну сторону потенциометра к +5V, а вторую - к Gnd. Средний контакт потенциометра подключите к 3 пину на LCD.


Теперь подключаем логику нашего экрана - это отдельная от подсветки цепь! Пин 1 идет к Gnd, а пин 2 - к +5V.


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

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

Окончательное подключение

От D0 до D7, RS, EN, и RW. D0-D7 - это контакты, на которых хранится значения, передаваемые на дисплей. Контакт RS сообщает контроллеру, будем ли мы отображать данные (например, ASCII символ) или это управляющий байт (например, смена положения курсора). Контакт EN - это сокращение от "enable" (доступно), с помощью этого контакта мы сообщаем LCD, когда данные готовы для считывания. Контакт RW используется для установки направления - мы хотим отобразить (обычно) или считать (используется реже) данные с дисплея.

Не все эти контакты надо подключать к Arduino. Например, использовать RW не надо, если мы только отображаем данные на экране, так что его достаточно "подтянуть" к контакту Gnd. Кроме того, можно обмениваться данными с LCD экраном, используя 4 контакта вместо 8. Вероятно, возникает закономерный вопрос, в каких случаях используют 8 контактов? Скорее всего, это влияет на скорость передачи данных. То есть, используя 8 контактов вместо 4, вы можете увеличить скорость обмена информацией в 2 раза. В данном случае, скорость не важна, так что мы используем 4 контакта для подключения LCD к Arduino.

Итак, нам понадобятся 6 контактов: RS, EN, D7, D6, D5, и D4.

Для работы с LCD экраном, будем использовать библиотеку LiquidCrystal library, которая значительно облегчает процесс настройки пинов. Одно из достоинств этой библиотеки: вы можете использовать любые пины на Arduino для подключения контактов ЖК дисплея. Так что по окончанию этого гайда вы сможете легко заменить контакты, если это критично для вашего проекта.

Окончательное подключение дисплея

Пояснения


Как упоминалось выше, мы не будем использовать пин RW, так что "подтягиваем" его к земле. Это пин 5.


После подключаем RS - это пин #4. Мы используем коричневый провод для его подключения к цифровому контакту #7 на Arduino.


Белым проводом подключаем контакт EN - пин #6 к цифровому пину digital #8 на Arduino.


Подошла очередь к контактам data. DB7 - это пин #14 на LCD. Он подключается оранжевым проводом к пину #12 на Arduino.


Осталось три контакта data, DB6 (пин #13 желтый), DB5 (пин #12 зеленый) и DB4 (пин #11 синий). Они подключаются к пинам #11, 10 и 9 на Arduino соответственно.


В результате Подключения у вас получится что-то похожее на фото слева.

Используем символьный LCD

Пришло время загрузить скетч на Arduino для управления LCD экраном. Библиотека LiquidCrystal library установлена в Arduino IDE по умолчанию. Так что нам достаточно загрузить один из примеров и немного подкорректировать в соответствии с теми пинами, которые мы использовали для подключения.

Откройте скетч File→Examples→LiquidCrystal→HelloWorld.

Обновляем информацию о пинах. Ищем следующую строку:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

И меняем ее на:

Теперь можете компилировать и загружать скетч на Arduino.


Если надо, настройте контраст


Естественно, вы можете использовать ЖК дисплей с любыми размерами. Например, на фото ниже показана работа LCD 20x4.


Или черный текст на зеленом фоне:


Одно из достоинств экранов с черным текстом на зеленом фоне - возможность отключения подсветки.


Задействуем насколько строк

Давайте разберемся, как ЖК экран обрабатывает длинные сообщения и задействует несколько строк. Например, если вы измените следующую строку:

lcd.print("hello, world!");

На следующую:

lcd.print("hello, world! this is a long long message");

LCD дисплей 16x2 обрежет все после 16-го символа:


Но LCD дисплей 20x4 перенесет не отображенные символы с первой строки на третью (вторая строка продолжится на четвертой). Не очень удобно, но на этом этапе придется смириться. Так что при отображении длинных строк, считайте символы, чтобы не превысить допустимую длину.


LCD с RGB подсветкой

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

После подключения LCD и его проверки в соответствии с инструкциями выше, подключите светодиоды к ШИМ аналоговым пинам вашего Arduino для точной настройки цвета. Если вы используете Arduino Uno, у вас должно было остаться три свободных ШИМ контакта. подключите красный светодиод (16 контакт на LCD) к Digital 3, зеленый светодиод (контакт 17) - к Digital 5, а синий светодиод (18 контакт на LCD) - к digital 6. На LCD модуле уже предусмотрены резисторы, так что подключать дополнительные не надо.


Теперь загрузите приведенный ниже скетч на Arduino.

// включаем в скетч библиотеки:

#include

#include

#define REDLITE 3

#define GREENLITE 5

#define BLUELITE 6

// объявляем количество контактов, которые используем

// для передачи данных

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// яркость можно изменять в диапазоне 0 -> 255

int brightness = 255;

// настраиваем количество столбцов и строк на LCD:

lcd.begin(16, 2);

// отображаем сообщение на LCD.

lcd.print("RGB 16x2 Display ");

lcd.setCursor(0,1);

lcd.print(" Multicolor LCD ");

pinMode(REDLITE, OUTPUT);

pinMode(GREENLITE, OUTPUT);

pinMode(BLUELITE, OUTPUT);

brightness = 100;

for (int i = 0; i < 255; i++) {

setBacklight(i, 0, 255-i);

for (int i = 0; i < 255; i++) {

setBacklight(255-i, i, 0);

for (int i = 0; i < 255; i++) {

setBacklight(0, 255-i, i);

void setBacklight(uint8_t r, uint8_t g, uint8_t b) {

// настраиваем красный светодиод - он ярче остальных!

r = map(r, 0, 255, 0, 100);

g = map(g, 0, 255, 0, 150);

r = map(r, 0, 255, 0, brightness);

g = map(g, 0, 255, 0, brightness);

b = map(b, 0, 255, 0, brightness);

// общий анод, так что инвертируем!

r = map(r, 0, 255, 255, 0);

g = map(g, 0, 255, 255, 0);

b = map(b, 0, 255, 255, 0);

Serial.print("R = "); Serial.print(r, DEC);

Serial.print(" G = "); Serial.print(g, DEC);

Serial.print(" B = "); Serial.println(b, DEC);

analogWrite(REDLITE, r);

analogWrite(GREENLITE, g);

analogWrite(BLUELITE, b);

Результат работы данного скетча приведен на видео ниже

Команда createChar

Вероятно, вы захотите использовать специальные символы. Например, если вы разрабатываете проект с использованием датчика температуры (термопары), вам пригодится символ (°).

Реализовать это можно с помощью команды createChar. Кроме того, вам может пригодиться отличный веб-сайт, который выполнит за вас всю грязную работу по созданию новых символов !

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

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

В данной статье мы расскажем как его подключить к Arduino и вывести информацию.

Используемые компоненты (купить в Китае):

. Управляющая плата

. Соединительные провода

Данные дисплеи имеют два исполнения: желтая подсветка с черными буквами либо, что встречается чаще, синюю подсветку с белыми буквами.

Размерность дисплеев на контроллере HD44780 может быть различной, управляться они будут одинаково. Самые распространенные размерности 16x02 (т.е. по 16 символов в двух строках) либо 20x04. Разрешение же самих символов - 5x8 точек.

Большинство дисплеев не имеют поддержку кириллицы, имеют её лишь дисплеи с маркировкой CTK. Но данную проблему можно попытаться частично решить (продолжение в статье).

Выводы дисплея:

На дисплее имеется 16pin разъем для подключения. Выводы промаркированы на тыльной стороне платы.

1 (VSS) - Питание контроллера (-)
2 (VDD) - Питание контроллера (+)
3 (VO) - Вывод управления контрастом
4 (RS) - Выбор регистра
5 (R/W) - Чтение/запись (режим записи при соединении с землей)
6 (E) - Еnable (строб по спаду)
7-10 (DB0-DB3) - Младшие биты 8-битного интерфейса
11-14 (DB4-DB7) - Старшие биты интерфейса
15 (A) - Анод (+) питания подсветки
16 (K) - Катод (-) питания подсветки

Режим самотестирования:

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

Для настройки контрастности следует использовать потенциометр на 10 кОм. Каким он будет по форме - не важно. На крайние ноги подается +5V и GND, центральная ножка соединяется с выводом VO

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

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

Вывод информации:

Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h

Функционал библиотеки

//Работа с курсором lcd.setCursor (0, 0); // Устанавливаем курсор (номер ячейки, строка) lcd.home (); // Установка курсора в ноль (0, 0) lcd.cursor (); // Включить видимость курсора (подчеркивание) lcd.noCursor (); // Убрать видимость курсора (подчеркивание) lcd.blink (); // Включить мигание курсора (курсор 5х8) lcd.noBlink (); // Выключить мигание курсора (курсор 5х8) //Вывод информации lcd.print ("сайт" ); // Вывод информации lcd.clear (); // Очистка дисплея, (удаление всех данных) установка курсора в ноль lcd.rightToLeft (); // Запись производится справа на лево lcd.leftToRight (); // Запись производится слева на право lcd.scrollDisplayRight (); // Смещение всего изображенного на дисплее на один символ вправо lcd.scrollDisplayLeft (); // Смещение всего изображенного на дисплее на один символ влево //Информация полезная для шпионов:) lcd.noDisplay (); // Информация на дисплее становится невидимой, данные не стираются // если, в момент когда данная функция активна, ничего не выводить на дисплей, то lcd.display (); // При вызове функции display() на дисплее восстанавливается вся информация которая была

Сам же дисплей может работать в двух режимах:

8-битный режим - для этого используются и младшие и старшие биты (BB0- DB7)

4-битный режим - для этого используются и только младшие биты (BB4- DB7)

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

Для вывода текста необходимо подключить выводы RS, E, DB4, DB5, DB6, DB7 к выводам контроллера. Их можно подключать к либым пинам Arduino, главное в коде задать правильную последовательность.

Пример программного кода:

#include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup (){ lcd.begin (16, 2); // Задаем размерность экрана lcd.setCursor (0, 0); lcd.print ("Hello, world!" ); // Выводим текст lcd.setCursor (0, 1); // Устанавливаем курсор в начало 2 строки lcd.print ("сайт" ); // Выводим текст } void loop (){ }

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

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?

Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.

В ниже приведенном примере нарисуем смайлик.

Пример программного кода

//Тестировалось на Arduino IDE 1.0.5 #include #include // Лобавляем необходимую библиотеку // Битовая маска символа улыбки byte smile = { B00010, B00001, B11001, B00001, B11001, B00001, B00010, }; LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup (){ lcd.begin (16, 2); // Задаем размерность экрана lcd.createChar (1, smile); // Создаем символ под номером 1 lcd.setCursor (0, 0); // Устанавливаем курсор в начало 1 строки lcd.print ("\1" ); // Выводим смайлик (символ под номером 1) - "\1" } void loop (){ }

Бонус

В комментариях участник сообщества скинул ссылку на генератор символов

  • igorka

      генератор символов по примеру выше,
      сделал потому что не слабо)

Лучшие статьи по теме