- Текстовый экран 16×2
- Видеообзор
- Примеры работы для Arduino
- Подключение к Arduino
- Вывод текста
- Кириллица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Использование библиотеки LiquidCrystalRus
- Примеры работы для Espruino
- Подключение к Iskra JS
- Вывод текста
- Кирилица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Комнатный термометр
- Подключаем «отечественный» LCD 16×2 MT-16S2S по SPI
- Mt 16s2h 2ylg подключение к arduino
- Подключение шины данных
- Программирование
- Autoscroll
- Blink
- Cursor
- CustomCharacter
- Display
- HelloWorld
- Scroll
- SerialDisplay
- SetCursor
- TextDirection
- Индикатор прогресса яркости светодиода
- Кириллица
- Библиотека LiquidCrystalRus с поддержкой кириллицы
- Функции библиотеки LiquidCrystal
- autoscroll()
- begin()
- blink()
- clear()
- createChar()
- cursor()
- display()
- leftToRight()
- LiquidCrystal()
- noAutoscroll()
- noBlink()
- noCursor()
- noDisplay()
- print()
- rightToLeft()
- scrollDisplayLeft()
- scrollDisplayRight()
- setCursor()
- write()
- Собственные символы
- Визуальный редактор
- Знакоместо
- Результат
- Код для скетча Arduino
- Экран с I2C
- Библиотека i2cdetect
- Видеообзор
- Подключение и настройка
- Подключение дисплея к управляющей плате
- Примеры работы для Arduino
- Вывод текста
- Кириллица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Использование библиотеки Liqu >
- Примеры работы для Iskra JS
- Вывод текста
- Кирилица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Комнатный термометр
- Видеообзор
- Подключение и настройка
- Подключение дисплея к управляющей плате
- Объединение питания
- Примеры работы для Arduino
- Вывод текста
- Кириллица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Подключение нескольких дисплеев
- Примеры работы для Iskra JS
- Вывод текста
- Кириллица
- Таблица знакогенератора
- Переключение страниц знакогенератора
- Подключение нескольких дисплеев
- Комнатный термометр
Текстовый экран 16×2
Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
Видеообзор
Примеры работы для Arduino
В качестве примера подключим дисплей к управляющей плате Arduino Uno.
Подключение к Arduino
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
4 | RS | 11 |
5 | R/W | GND |
6 | E | 12 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | 5 |
12 | DB5 | 4 |
13 | DB6 | 3 |
14 | DB7 | 2 |
15 | VCC | 5V |
16 | GND | GND |
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Кириллица
Существует два способа вывода кириллицы на текстовые дисплеи:
Рассмотрим оба способа более подробно.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Использование библиотеки LiquidCrystalRus
Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.
Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.
В качестве примера выведем фразу «Привет от Амперки» на дисплей.
Примеры работы для Espruino
В качестве примера подключим дисплей к управляющей плате Iskra JS.
Подключение к Iskra JS
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
4 | RS | P11 |
5 | R/W | GND |
6 | E | P12 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | P5 |
12 | DB5 | P4 |
13 | DB6 | P3 |
14 | DB7 | P2 |
15 | VCC | 5V |
16 | GND | GND |
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Кирилица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
Источник
Подключаем «отечественный» LCD 16×2 MT-16S2S по SPI
Тенденция импортозамещения подтолкнула протестировать символьный LCD индикатор от фирмы МЭЛТ. Мы взяли МТ-16S2S на ST7070. В некотором роде это аналог широко известного WH-1602 на 44780. А еще он поддерживает SPI-режим.
МЭЛТ кроме того собирает дисплеи и на отечественном контроллере КБ1013ВГ6 от Интеграла. У него есть отличие в в работе в 4-битном режиме от ставшего уже стандартом 44780.
На сайте производителя есть пример кода для работы в разных режимах. Но написан он на ассемблере и под абстрактную платформу в вакууме. Переделывать его на STM – все равно, что писать заново. Опыт использования готовых библиотек даже для распространенного 44780 я тоже не могу назвать положительным. Их приходится долго править под нужную платформу и модель контроллера. И в большинстве из них используется функция задержки под AVR, которой «почему-то» не предусмотрено для STM. И даже то, что запустилось, работает из рук вон плохо, то выводя невесть что, то зависая. Поэтому было решено написать свою собственную библиотеку.
Кроме того у МТ-16S2S есть еще одна особенность: SPI-интерфейс, который позволяет сократить число используеых ножек контроллера до 4. Так что вывод будет организован именно через SPI.
Подключение почти стандартное. VCC, E, D0-D4 на плюс питания, A0, GND, R/W и PSB на землю; К контроллеру подключаются: D5– к CS, D6– к SCK, D7–к MOSI, XRES– к любому GPIO. Я подключил к MISO, т.к. все равно управляю им программно. На сайте в описании, кстати, приведена неправильная схема. Указано, что D5 подтягивается к плюсу питания, но это CS. На форуме написали, что знают об этом, но пока ничего не исправлено.
Выводы для подсветки можно оставить свободными, но лучше, конечно, работать с подсветкой, а для этого подключить анод через резистор 10-30 Ом к питанию, а катод – к земле. Вывод для управления контрастностью, как ни странно, на 5-вольтовом индикаторе ничем не управляет. Его я просто оставил висеть в воздухе.
Еще одной интересной особенностью является наличие двух страниц знакогенератора. Благодаря этому можно вывести на дисплей огромное количество неведомой фигни самых разнообразных символов.
Но вот если вы выбрали «отечественный» дисплей для работы с кириллицей, вас ждет сюрприз. Русские буквы, не имеющие аналогов в латинице, расположены на первой странице. А цифры и латиница – на нулевой. И чтобы вывести их вместе, придется переключаться между страницами. Так что никакого вывода строки целиком не получится.
В этом отношении дисплей от Winstar по-удобнее. Пусть у него не так много символов, зато они на одной странице.
А вот 90% знакогенератора MT-16S2S русскому человеку не понадобятся. Еще одна неприятность для программиста – обозначение в даташите координат символов в таблице единичками и ноликами по полубайту. Еще веселее обозначать их H и L. То есть номер символа будет, например, 1111+1101 или HHHH+HHLH.
Почему бы не использовать шестнадцатеричный код 0xFD, удобный для разработчика? И ведь на некоторые дисплеи такие таблицы есть. Неужели так трудно сделать удобную координатную сетку?
Теперь о библиотеке. К функциональности были следущие требования:
1. Вывод символа из таблицы в произвольную позицию;
2. Вывод строки текста в произвольнцю позицию;
3. Запись в память собственного символа;
4. Очистка дисплея, включение и выключение курсора, его сдвиг, сдвиг области отображения и прочие настройки индикатора.
Все это удалось реализовать довольно быстро. Но все же напрягает необходимость постоянного переключения между страницами знакогенератора при использовании кириллицы. Саму библиотеку не выкладываю, потому что она сделана «для себя». Со всеми недочетами и костылями и под конкретный чип: с зашитыми портами и частотами (так как целью не было создание коммерческой версии с карточными играми и женскими особями, настройки портов, SPI и задержек прописаны прямо в самих функциях, в зависимости от того, к какому контроллеру и к какому SPI подключается дисплей). В дальнейшем планируется ее доработка.
В целом — впечатление положительное. Несколько мешают мелкие недочеты в описании на дисплей и отсутствие нормальных примеров кода. В остальном — неплохо. Даже цена не выше чем у Winstar-овского аналога WH-1602.
Источник
Mt 16s2h 2ylg подключение к arduino
Выводить информацию удобно на экран. Очень популярным решением является текстовый жидкокристаллический экран, знакомый нам по древним звонилкам. Для опытов я использовал простой текстовый экран 16×2 от компании МЭЛТ.
Я думал, что работать с такими экранами очень сложно, оказалось, что ничего страшного.
Краткое описание дисплея: LCD-дисплей MT-16S2H компании Мэлт служит для вывода текста с подсветкой. По изображению похож на дисплеи старых мобильных телефонов вроде Nokia 3310 или Siemens C35. Экран имеет 16 контактов для подведения питания и взаимодействия с управляющей электроникой. Для управления выводом дисплея возможно использовать только 6 из них. Дисплей выполнен на чипе, совместимом с HD44780, который является де-факто стандартом для LCD-экранов.
Процесс подключения очень хорошо описан на сайте Амперки – Подключение текстового экрана к Arduino
Основная особенность дисплея – необычная нумерация выходов. Всего их 16, но идут они не по порядку, а весьма нетривиальным способом. И только три из них подписаны: 14, 1 и 16. Но, оказывается, это вполне достаточно. Я помогу вам разобраться.
14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 16 | 15 |
Контакт | Обозначение | Назначение |
---|---|---|
1 | Vss | Заземление |
2 | Vdd | Питание 5В |
3 | Vo | Регулировка контрастности (потенциометр) |
4 | Rs | Выбор режим (командный или отображения данных) |
5 | RW | Чтение/Запись |
6 | En | Готовность данных |
7 | D0 | Линия передачи данных 0 (не используется) |
8 | D1 | Линия передачи данных 1 (не используется) |
9 | D2 | Линия передачи данных 2 (не используется) |
10 | D3 | Линия передачи данных 3 (не используется) |
11 | D4 | Линия передачи данных 4 |
12 | D5 | Линия передачи данных 5 |
13 | D6 | Линия передачи данных 6 |
14 | D7 | Линия передачи данных 7 |
15 | A | Анод подсветки |
16 | K | Катод подсветки |
Вкратце, чтобы самому не забыть. Втыкаем дисплей своими 16 ножками в макетную плату. Подводим к рельсам питания макетки питание +5 В и землю с Arduino.
Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным. Включить её можно подав +5 В на 15-й контакт дисплея и подключив 16-й контакт к земле. Соединив эти два контакта с соответствующими рельсами, можно включить Arduino и увидеть, что дисплей засветился.
Далее необходимо подключить цепь, отвечающую за отображение символов. Для этого предназначены контакты 1, 2 и 3 на дисплее. Перед подключением отключите Arduino от питания.
Первый — это земля. Соедините его с рельсой земли.
Второй — питание. Соедините его с рельсой +5 В.
Третий — контрастность. Для получение максимально контрастного изображения соедините его с рельсой земли. Вы можете подать на этот контакт произвольное напряжение от 0 до 5 В, чем оно выше, тем тусклее будет изображение, но вместе с этим снизится энергопотребление. Для возможности плавной регулировки контрастности можете подать на этот контакт выходной сигнал потенциометра.
После подключения, если включить Arduino, вы можете увидеть прямоугольные знакоместа. В зависимости от комбинации цветов текста и подсветки они могут быть как яркими и хорошо заметными, так и едва заметными. Это нормально: в любом случае, текст будет смотреться отлично.
Подключение шины данных
Для коммуникации между Arduino и экраном необходимо использовать несколько линий взаимодействия:
2 или 3 для командования дисплеем
4 или 8 для передачи данных (кодов символов и команд)
Таким образом занятыми окажутся от 6-ти до 11-ти контактов от обоих устройств. Если вам не требуется считывать с дисплея, что подходит под большинство сценариев использования, для команд понадобится 2 линии.
Если скорость обновления данных так же не является проблемой, для передачи данных достаточно 4-х линий.
Итак, для подключения дисплея достаточно использовать 6 линий, 6 контактов на Arduino. Рассмотрим именно этот сценарий. Как упоминалось, нам не за чем считывать с дисплея, мы будем в него только писать. Поэтому соединим 5-й контакт дисплея, который отвечает за выбор чтение/запись с рельсой земли. Это означает «всегда писать».
Затем, соединяем Arduino и экран нашими 6-ю линиями коммуникации. Какие именно контакты будут выбраны на Arduino не имеет значения: мы зададим их в программе, но для примера была выбрана такая конфигурация:
4-й контакт дисплея — 4-й контакт Arduino. Это линия адресного сигнала. Известная как A0 или RS. В зависимости от того, 0 она или 1, дисплей понимает имеем ли мы на линии данных команду вроде «передвинуть курсор» или код символа для отображения.
6-й контакт дисплея — 5-й контакт Arduino. Это линия разрешения доступа к данным. Известная, как E или Enable. Когда эта линия становится единицей, дисплей исполняет команду или выводит символ с линии данных.
11-й, 12-й, 13-й, 14-й контакт дисплея — 10-й, 11-й, 12-й, 13-й контакт Arduino соответственно. Это линии данных. Известные как D4, D5, D6, D7.
Программирование
Существует стандартная библиотека LiquidCrystal для работы с текстовыми жидкокристаллическими экранами.
В Arduino IDE выбираем меню Sketch | Import Library | LiquidCrystal. В начало скетча будет вставлена строка.
Это удобно, если вы позабыли правильное написание библиотеки и убережёт от опечаток.
Также в состав Arduino IDE входят несколько примеров работы с библиотекой: File | Examples | LiquidCrystal.
Единственное, что вам нужно сделать – это менять строчку инициализации контактов в соответствии с вашими соединениями.
А ещё лучше использовать константы.
Простейшая программа для вывода «Hello World»
В данном случае функция loop() нам не требуется, поэтому оставляем её пустой.
Нужно помнить, что фуккция print() не проверяет длину строк, поэтому самостоятельно следите за своими данными.
Рассмотрим поставляемые примеры.
Autoscroll
Бегущая строка. Выводится первая строка, затем вторая.
Blink
Выводим строку hello, world! и мигающий курсор в виде знакоместа.
Cursor
Выводим строку hello, world! и мигающий символ в виде значка подчёркивания.
CustomCharacter
Выводим собственные символы: сердечко, смайлик. Небольшая анимация человечка.
Display
Выводим мигающий текст.
HelloWorld
Выводим на первой строке сообщение, а на второй время в секундах с момента запуска.
Scroll
Выводим бегущую строку, которая движется вправо и влево.
SerialDisplay
Вводим текст в Serial Monitor, чтобы увидеть его на дисплее.
SetCursor
Выводим символы алфавита во все доступные позиции экрана.
TextDirection
Выводим символы в разных направлениях, используя функции leftToRight() и rightToLeft().
Индикатор прогресса яркости светодиода
Создадим проект, в котором будем получать данные с потенциометра и выводить получаемые данные на экран в виде индикатора прогресса. Также будем менять яркость светодиода в соответствии с показаниями. Так как показания варьируются от 0 до 1024, необходимо преобразовать значения в пределах от 0 до 256 для светодиода и от 0 до 17 для экрана. Сам индикатор состоит из полностью закрашенного прямоугольника. Если выводить подобные прямоугольники с начала строки, то будет похоже на индикатор прогресса.
Потенциометр подключаем к выводу A0, светодиод к выводу 6. Подключение ЖК-дисплея стандартное, как описано в начале статьи.
Кириллица
Не все дисплеи имеют кириллицу. Дисплей от Мэлт поддерживает русский язык. Но просто напечатать текст на русском не получится. Так например, букве «Я» соответствует код B1 в шестнадцатиричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x, он считывает за ним все символы, которые могут являться разрядами шестнадцатиричной системы даже если их больше двух. Из-за этого вы не можете просто использовать символы из диапазона 0-9, a-f следом за двузначным кодом символа: это вызовет ошибку компиляции. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются. Так, если вы хотите написать «Яeee»:
Полную таблицу символов с кодами можно найти в документации к экрану.
Я на скорую руку написал скрипт на JavaScript, который конвертирует слова в нижнем регистре в нужные последовательности. Если в слове встречаются повторяющие буквы, то нажмите на кнопку несколько раз.
Библиотека LiquidCrystalRus с поддержкой кириллицы
Совсем не обязательно мучиться с байтами, чтобы вывести русский символ. Существует библиотека LiquidCrystalRus, которая поддерживает кириллицу. Исходники лежат на Гитхабе. Скачайте файл LiquidCrystalRus-1.6.0.zip и распакуйте его в папку libraries. У вас получится что-то типа D:ArduinolibrariesLiquidCrystalRus. В папке находятся файлы библиотеки и папка examples, содержащая три скетча. После этого примеры будут доступны из Arduino IDE. Запустите пример File | Examples | LiquidCrystalRus | HelloWorldRus и убедитесь, что экран способен выводить русские символы.
Функции библиотеки LiquidCrystal
autoscroll()
Функция autoscroll() включает автоматическую прокрутку экрана жидкокристаллического индикатора и заставляет каждый вывод символа на экран индикатора перемещать предыдущие символы на одно знакоместо. Если текущее направление вывода символов слева направо (значение по умолчанию) — экран индикатора прокручивается влево; если текущее направление вывода символов справа налево — экран индикатора прокручивается вправо. Это производит эффект вывода каждого нового символа в одно и то же знакоместо на экране жидкокристаллического индикатора.
begin()
Функция begin() определяет размерность (количество символов в ширину и высоту) индикатора.
blink()
Функция blink() выводит на экран жидкокристаллического индикатора мигающий курсор. Если она используется в комбинации с функцией cursor(), результат будет зависеть от конкретного индикатора.
clear()
Функция clear() очищает экран жидкокристаллического индикатора и располагает курсор в верхнем левом углу.
createChar()
Функция createChar() создаёт пользовательский символ (глиф) для использования на жидкокристаллическом дисплее. Поддерживаются до восьми символов 5×8 пикселов (нумерация с 0 до 7). Создание каждого пользовательского символа определяется массивом из восьми байтов — один байт для каждой строки. Пять младших значащих битов каждого байта определяют пикселы в этой строке. Чтобы вывести пользовательский символ на экран, используйте функцию write() с номером символа в качестве параметра.
cursor()
Функция cursor() выводит на экран жидкокристаллического индикатора курсор — подчёркивание знакоместа в позиции, в которую будет записан следующий символ.
display()
Функция display() включает жидкокристаллический индикатор после того, как он был выключен функцией noDisplay(). Эта функция восстанавливает текст (и курсор), который был на дисплее.
Функция home() располагает курсор в верхнем левом углу жидкокристаллического индикатора. Используется для определения начального положения при выводе последовательного текста на экран индикатора. Чтобы ещё и очистить экран индикатора, используйте вместо этой функции функцию clear().
leftToRight()
Функция leftToRight() устанавливает направление вывода символов на экран жидкокристаллического индикатора слева направо (значение по умолчанию). Это означает, что последующие символы, выводимые на экран индикатора, пойдут слева направо, но не повлияют на выведенный ранее текст.
LiquidCrystal()
Конструктор LiquidCrystal() создаёт переменную типа LiquidCrystal. Индикатором можно управлять, используя 4 или 8 линий данных. Для подключения по 4-м линиям пропустите контакты от D0 до D3 и оставьте эти линии неподключёнными. Контакт RW может быть соединён с «землёй» вместо соединения с контактом платы Arduino. Если в вашей схеме так — пропустите этот параметр функции.
noAutoscroll()
Функция noAutoscroll() выключает автоматическую прокрутку экрана жидкокристаллического индикатора.
noBlink()
Функция noBlink() выключает мигающий курсор на экране жидкокристаллического индикатора.
noCursor()
Функция noCursor() скрывает курсор с экрана жидкокристаллического индикатора.
noDisplay()
Функция noDisplay() выключает жидкокристаллический индикатор без потери отображаемой на нем информации.
print()
Функция print() печатает текст на жидкокристаллическом индикаторе.
rightToLeft()
Функция rightToLeft() устанавливает направление вывода символов на экран жидкокристаллического индикатора справа налево (значение по умолчанию — слева направо). Это означает, что последующие символы, выводимые на экран индикатора, пойдут справа налево, но не повлияют на выведенный ранее текст.
scrollDisplayLeft()
Функция scrollDisplayLeft() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо влево.
scrollDisplayRight()
Функция scrollDisplayRight() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо вправо.
setCursor()
Функция setCursor() позиционирует курсор жидкокристаллического индикатора, т.е. устанавливает положение, в котором на его экран будет выведен последующий текст.
write()
Функция write() записывает символ в жидкокристаллический индикатор.
Собственные символы
Собственные символы рисуются с помощью функции createChar(). Пример, предлагаемый на сайте Arduino:
Вы можете нарисовать несколько собственных символов и вывести их на экран.
Визуальный редактор
Редактор для создания собственных символов для дисплеев HD44780
wrote this file. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a beer in return. Omer Kilic —————————————————————————- –> Щёлкайте по квадратам для генерации кода.
Знакоместо
Результат
Код для скетча Arduino
Экран с I2C
Стандартный экран неудобно подключать, слишком много контактов задействовано в сборке. Существует альтернативный вариант, когда к экрану прилагается дополнительный модуль. В этом случае используется только четыре контакта (питание, земля и два аналоговых порта).
На других микроконтроллерах сигнальные выводы отличаются (Leonardo: SDA-D2, SCL-D3; MEGA, ADK, DUE: SDA-D20, SCL-D21).
Модуль может поставляться отдельно и его нужно припаять самостоятельно. Но проще сразу приобрести готовый собранный модуль с экраном. Встречаются различные модификации экранов – 4х20, 2х16.
Стандартная библиотека не подойдёт. Нужно использовать библиотеку с поддержкой I2C LiquidCrystal I2C by Frank de Brabander (GitHub).
После установки библиотеки будут доступны несколько примеров: CustomChars, HelloWorld, SerialDisplay.
Если при запуске примера не видны символы на экране, то попробуйте покрутить винт на модуле для изменения контрастности. У меня был именно такой случай.
Библиотека i2cdetect
В примерах важно использовать правильный адрес. Самый типичный пример – использовать адрес 0х27.
Если у вас попался нестандартный дисплей, то можно узнать используемый адрес устройства при помощи библиотеки i2cdetect, доступный через менеджер библиотек.
После установки библиотеки запустите прилагаемый к нему пример и через последовательный монитор увидите нужный адрес.
Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
Видеообзор
Подключение и настройка
Дисплей MT-16S2H предназначен для вывода текста на латинице и кириллице.
Экран имеет 16 контактов для питания логики, взаимодействия с управляющей электроникой и подсветки.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | Vcc | Напряжение питания (3,3—5 В) |
3 | Vo | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | +LED | + питания подсветки |
16 | –LED | – питания подсветки |
Дисплей может работать в двух режимах:
Использовать восьмибитный режим не целесообразно. Для его работы требуется на 4 дополнительные ноги, а выигрыша по скорости практически нет.
Подключение дисплея к управляющей плате
В качестве примера подключим дисплей к управляющей плате Arduino Uno. Для подключения понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | Vcc | 5V |
3 | Vo | GND |
4 | RS | 12 |
5 | R/W | GND |
6 | E | 11 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | 5 |
12 | DB5 | 4 |
13 | DB6 | 3 |
14 | DB7 | 2 |
15 | Vcc | 5V |
16 | GND | GND |
Аналогично можно подключить дисплей к платформе Iskra JS.
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | Vcc | 5V |
3 | Vo | GND |
4 | RS | P12 |
5 | R/W | GND |
6 | E | P11 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | P5 |
12 | DB5 | P4 |
13 | DB6 | P3 |
14 | DB7 | P2 |
15 | Vcc | 5V |
16 | GND | GND |
Примеры работы для Arduino
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.
Библиотека подходит как для работы с контроллерами на AVR-платформе, так и с ARM-контроллерами.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Кириллица
Существует два способа вывода кириллицы на текстовые дисплеи:
Рассмотрим оба способа более подробно.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Использование библиотеки Liqu >
Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.
Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.
В качестве примера выведем фразу «Привет, Амперка» на дисплей.
Примеры работы для Iskra JS
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Кирилица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
Текстовый экран 16×2 (I²C) пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
Видеообзор
Подключение и настройка
Дисплей MT-16S2H-I предназначен для вывода текста на латинице и кириллице.
Экран имеет 18 контактов для питания логики, взаимодействия с управляющей электроникой и подсветки.
Вывод | Обозначение | Описание |
---|---|---|
1 | GND | Общий вывод (земля) |
2 | Vcc | Напряжение питания (3,3—5 В) |
3 | Vo | Управление контрастностью |
4 | RS | Выбор регистра |
5 | R/W | Выбор режима записи или чтения |
6 | E | Разрешение обращений к индикатору (а также строб данных) |
7 | DB0 | Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме) |
8 | DB1 | Шина данных (8-ми битный режим) |
9 | DB2 | Шина данных (8-ми битный режим) |
10 | DB3 | Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме) |
11 | DB4 | Шина данных (8-ми и 4-х битные режимы) |
12 | DB5 | Шина данных (8-ми и 4-х битные режимы) |
13 | DB6 | Шина данных (8-ми и 4-х битные режимы) |
14 | DB7 | Шина данных (8-ми и 4-х битные режимы) |
15 | +LED | + питания подсветки |
16 | –LED | – питания подсветки |
17 | SDA | Последовательная шина данных |
18 | SCL | Последовательная линия тактированния |
Дисплей может работать в трёх режимах:
Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C. Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.
Подключение дисплея к управляющей плате
В качестве примера подключим дисплей к управляющей плате Arduino Uno. Для подключения понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Arduino Uno |
---|---|---|
1 | GND | GND |
2 | Vcc | 5V |
3 | Vo | GND |
4 | RS | — |
5 | R/W | — |
6 | E | — |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | — |
12 | DB5 | — |
13 | DB6 | — |
14 | DB7 | — |
15 | +LED | 5V |
16 | −LED | GND |
17 | SDA | SDA |
18 | SCL | SCL |
Аналогично можно подключить дисплей к платформе Iskra JS.
Объединение питания
Для питания дисплея необходимо пять контактов. Но если запаять перемычки J3 и J4 на обратной стороне дисплея, количество контактов питания можно сократить до трёх, объединив цепь питания и подсветки дисплея.
Примеры работы для Arduino
Для упрощения работы с LCD-дисплеем используйте библиотеку LiquidCrystal_I2C. В ней вы найдёте и примеры кода с комментариями.
Библиотека подходит как для работы с контроллерами на AVR-платформе, так и с ARM-контроллерами.
Вывод текста
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
Кириллица
Существует способ вывода кириллицы на текстовые дисплеи с помощью таблицы знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.
Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов.
J2 | J1 | J0 | Адрес |
---|---|---|---|
L | L | L | 0x38 |
L | L | H | 0x39 |
L | H | L | 0x3A |
L | H | H | 0x3B |
H | L | L | 0x3C |
H | L | H | 0x3D |
H | H | L | 0x3E |
H | H | H | 0x3F |
Примеры работы для Iskra JS
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
Кириллица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:
Сравните две строки кода для вывода надписи «Яeee»:
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
Полную таблицу символов с кодами можно найти в документации к экрану.
Подключение нескольких дисплеев
Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.
Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов.
J2 | J1 | J0 | Адрес |
---|---|---|---|
L | L | L | 0x38 |
L | L | H | 0x39 |
L | H | L | 0x3A |
L | H | H | 0x3B |
H | L | L | 0x3C |
H | L | H | 0x3D |
H | H | L | 0x3E |
H | H | H | 0x3F |
Комнатный термометр
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
Источник