====== Текстовый экран 20×4 / I²C: инструкция по подключению и примеры использования ======
[[amp>product/display-lcd-text-20x4-ylg-i2c?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Текстовый экран 20×4 / I²C]] пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c.1.jpg?nolink |}}
===== Видеообзор ======
{{youtube>Q7O22tg5eYw?large}}
===== Примеры работы для Arduino =====
В качестве примера подключим дисплей к управляющей плате [[amp>product/arduino-uno?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Arduino Uno]].
==== Подключение к Arduino ====
Для коммуникации понадобится [[amp>product/breadboard-half?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Breadboard Half]] и [[amp>product/wire-mm?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|соединительные провода «папа-папа»]].
^ Вывод ^ Обозначение ^ Пин Arduino Uno ^
| 1 | GND | GND |
| 2 | VCC | 5V |
| 3 | VO | GND |
| 17 | SDA | SDA |
| 18 | SCL | SCL |
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-arduino-wiring.png?nolink |}}
Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку [[https://github.com/johnrickman/LiquidCrystal_I2C|Библиотека для Arduino «Liquid Crystal I²C»]]. В ней вы найдёте примеры кода с подробными комментариями.
==== Вывод текста ====
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
// подключаем библиотеку LiquidCrystal_I2C
#include
#include
// создаем объект-экран, передаём используемый адрес
// и разрешение экрана:
LiquidCrystal_I2C lcd(0x38, 20, 4);
void setup() {
// инициализируем экран
lcd.init();
// включаем подсветку
lcd.backlight();
// устанавливаем курсор в колонку 0, строку 0
lcd.setCursor(0, 0);
// печатаем первую строку
lcd.print("Hello Amperka");
// устанавливаем курсор в колонку 0, строку 1
// на самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(0, 1);
// печатаем вторую строку
lcd.print("Do It Yourself");
// устанавливаем курсор в колонку 0, строку 2
lcd.setCursor(0, 2);
// печатаем третью строку
lcd.print("LCD Screen 20x4");
// устанавливаем курсор в колонку 0, строку 3
lcd.setCursor(0, 3);
// печатаем четвёртую строку
lcd.print("www.Amperka.ru");
}
void loop() {
}
{{ :products:display-lcd-text-20x4-i2c:hello-amperka.png?nolink |}}
==== Кириллица ====
Существует способ вывода кириллицы на текстовые дисплеи с помощью таблицы знакогенератора.
==== Таблица знакогенератора ====
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
[[this>_media/products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.pdf|{{:products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.png}}]]
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве ''Я'' соответствует код ''B1'' в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности ''\x##'' встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность ''\x'', он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона ''0-9'' и ''A-F'' следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка
lcd.print("\xB1""eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет от Амперки!»:
// подключаем библиотеку LiquidCrystal_I2C
#include
#include
// создаем объект-экран
// передаём используемый адрес и разрешение экрана
LiquidCrystal_I2C lcd(0x38, 20, 4);
void setup() {
// инициализируем экран
lcd.init();
// включаем подсветку
lcd.backlight();
// устанавливаем курсор в колонку 7, строку 0
// на самом деле это первая строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 0);
// печатаем первую строку
lcd.print("\xA8""p""\xB8\xB3""e\xBF");
// устанавливаем курсор в колонку 9, строку 1
// на самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(9, 1);
// печатаем вторую строку
lcd.print("o\xBF");
// устанавливаем курсор в колонку 7, строку 2
// на самом деле это третья строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 2);
// печатаем третью строку
lcd.print("A\xBC\xBE""ep\xBA\xB8");
}
void loop() {
}
{{ :products:display-lcd-text-20x4-i2c:hello-amperka-rus.png?nolink |}}
==== Переключение страниц знакогенератора ====
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую
command(0b101010);
// переключение с первой страницы на нулевую
command(0b101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
// подключаем библиотеку LiquidCrystal_I2C
#include
#include
// создаем объект-экран, передаём используемый адрес
// и разрешение экрана:
LiquidCrystal_I2C lcd(0x38, 20, 4);
void setup() {
// инициализируем экран
lcd.init();
// включаем подсветку
lcd.backlight();
// устанавливаем курсор в колонку 7, строку 0
// на самом деле это первая строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 0);
// печатаем строку
lcd.print("\x9b\x9c\x9d\x9e\x9f");
}
void loop() {
// устанавливаем 0 станицу знакогенератора (стоит по умолчанию)
lcd.command(0b101000);
// ждём 1 секунду
delay(1000);
// устанавливаем 1 станицу знакогенератора
lcd.command(0b101010);
// ждём 1 секунду
delay(1000);
}
{{ :products:display-lcd-text-20x4-i2c:change-page.gif?nolink |}}
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.pdf |Полная таблица символов с кодами знакогенератора.}}
==== Подключение нескольких дисплеев ====
Используя шину ''I²C'' можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. [[#выбор_адреса|Подробнее читайте в нашей документации.]]
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам ''I²C'', а в коде программы инициализируйте работу с двумя дисплеями.
// подключаем библиотеку LiquidCrystal_I2C
#include
#include
// создаем объекты-экранов, передаём используемые адреса
// и разрешение экранов:
LiquidCrystal_I2C lcd1(0x38, 20, 4);
LiquidCrystal_I2C lcd2(0x39, 20, 4);
void setup() {
// инициализируем первый экран
lcd1.init();
// включаем подсветку
lcd1.backlight();
// выводим информацию на первый дисплей
// устанавливаем курсор
lcd1.setCursor(6, 1);
// печатаем первую строку
lcd1.print("Display_1");
lcd1.setCursor(4, 2);
lcd1.print("Address: 0x38");
// инициализируем второй экран
lcd2.init();
// включаем подсветку
lcd2.backlight();
// выводим информацию на второй дисплей
// устанавливаем курсор
lcd2.setCursor(6, 1);
// печатаем первую строку
lcd2.print("Display_2");
lcd2.setCursor(4, 2);
lcd2.print("Address: 0x39");
}
void loop() {
}
{{ :products:display-lcd-text-20x4-i2c:two-displays-arduino.png?nolink |}}
===== Примеры работы для Espruino =====
В качестве примера подключим дисплей к управляющей плате [[amp>product/iskra-js?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Iskra JS]].
==== Подключение к Iskra JS ====
Для коммуникации понадобится [[amp>product/breadboard-half?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Breadboard Half]] и [[amp>product/wire-mm?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|соединительные провода «папа-папа»]].
^ Вывод ^ Обозначение ^ Пин Iskra JS ^
| 1 | GND | GND |
| 2 | VCC | 5V |
| 3 | VO | GND |
| 17 | SDA | SDA |
| 18 | SCL | SCL |
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-espruino-wiring.png?nolink |}}
Для работы с LCD-дисплеем из среды Espruino существует библиотека [[https://www.espruino.com/HD44780|HD44780]].
==== Вывод текста ====
Для вывода программы приветствия, воспользуйтесь скриптом:
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку и указываем адрес дисплея
var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38);
// включаем подсветку
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// печатаем первую строку
lcd.print("Hello Amperka");
// устанавливаем курсор в колонку 0, строку 1
// на самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(0, 1);
// печатаем вторую строку
lcd.print("Do It Yourself");
// устанавливаем курсор в колонку 0, строку 2
lcd.setCursor(0, 2);
// печатаем третью строку
lcd.print("LCD Screen 20x4");
// устанавливаем курсор в колонку 0, строку 3
lcd.setCursor(0, 3);
// печатаем четвёртую строку
lcd.print("www.Amperka.ru");
{{ :products:display-lcd-text-20x4-i2c:hello-amperka.png?nolink |}}
==== Кириллица ====
Вывод кириллицы на дисплей с помощью платформы [[amp>product/iskra-neo?utm_source=man&utm_campaign=text-lcd-i2c&utm_medium=wiki|Iskra JS]] доступен через встроенную в дисплей таблицу знакогенератора.
==== Таблица знакогенератора ====
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
[[this>_media/products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.pdf|{{:products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.png}}]]
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве ''Я'' соответствует код ''B1'' в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности ''\x##'' встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность ''\x'', он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона ''0–9'' и ''A–F'' следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка
lcd.print("\xB1"+"eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку и указываем адрес дисплея
var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38);
// включаем подсветку
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// устанавливаем курсор в колонку 7, строку 0
// на самом деле это первая строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 0);
// печатаем первую строку
lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF");
// устанавливаем курсор в колонку 9, строку 1
// на самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(9, 1);
// печатаем вторую строку
lcd.print("o\xBF");
// устанавливаем курсор в колонку 7, строку 2
// на самом деле это третья строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 2);
// печатаем третью строку
lcd.print("A\xBC\xBE"+"ep\xBA\xB8");
{{ :products:display-lcd-text-20x4-i2c:hello-amperka-rus.png?nolink |}}
==== Переключение страниц знакогенератора ====
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую
command(0b101010);
// переключение с первой страницы на нулевую
command(0b101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку и указываем адрес дисплея
var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38);
// включаем подсветку
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// создаём переменную состояния
var state = false;
// устанавливаем курсор в колонку 7, строку 0
// на самом деле это первая строка, т.к. нумерация начинается с нуля
lcd.setCursor(7, 0);
// печатаем строку
lcd.print("\x9b\x9c\x9d\x9e\x9f");
setInterval(function() {
// каждую секунду меняем переменую состояния
state = !state;
// вызываем функцию смены адреса страницы
lcdChangePage();
}, 1000);
function lcdChangePage () {
if (state) {
// устанавливаем 0 станицу знакогенератора (стоит по умолчанию)
lcd.write(0b101000, 1);
} else {
// устанавливаем 1 станицу знакогенератора
lcd.write(0b101010, 1);
}
}
{{ :products:display-lcd-text-20x4-i2c:change-page.gif?nolink |}}
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-table-character-generator.pdf |Полная таблица символов с кодами знакогенератора.}}
==== Big Number Module ====
Для пользователей Espruino есть возможность выводить супер большие числа «Big Number Module» на текстовой дисплей 20×4.
Размер цифры в данном шрифте: 3 символа по столбцам и 4 по строкам.
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку и указываем адрес дисплея
var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38);
// включаем подсветку
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// создаём переменную для работы с большим шрифтом цифр
var disp = require("big_number").use(lcd);
// выводим число «31337»
disp.showDigit(1,3);
disp.showDigit(4,1);
disp.showDigit(8,3);
disp.showDigit(12,3);
disp.showDigit(16,7);
{{ :products:display-lcd-text-20x4-i2c:big-number.png?nolink |}}
==== Подключение нескольких дисплеев ====
Используя шину ''I²C'' можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. [[#выбор_адреса|Подробнее читайте в нашей документации.]]
После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам ''I²C'', а в коде программы инициализируйте работу с двумя дисплеями.
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// создаем объекты дисплеев, подключаем библиотеку и указываем адреса
var lcd1 = require("HD44780").connectI2C(PrimaryI2C, 0x38);
var lcd2 = require("HD44780").connectI2C(PrimaryI2C, 0x39);
// включаем подсветку первого дисплея
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// включаем подсветку второго дисплея
PrimaryI2C.writeTo(0x39, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x39, 0x00);
// выводим информацию на первый дисплей
// устанавливаем курсор
lcd1.setCursor(6, 1);
// печатаем первую строку
lcd1.print("Display_1");
lcd1.setCursor(4, 2);
lcd1.print("Address: 0x38");
// выводим информацию на второй дисплей
// устанавливаем курсор
lcd2.setCursor(6, 1);
// печатаем первую строку
lcd2.print("Display_2");
lcd2.setCursor(4, 2);
lcd2.print("Address: 0x39");
{{ :products:display-lcd-text-20x4-i2c:two-displays-espruino.png?nolink |}}
===== Комнатный термометр =====
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
==== Что понадобится ====
- Управляющая платформа [[amp>product/arduino-uno?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Arduino Uno]] или [[amp>product/iskra-js?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Iskra JS]]
- [[amp>product/text-lcd-20x4?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Текстовый экран 20×4]]
- [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Troyka Shield]]
- [[amp>product/troyka-temperature-sensor?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Аналоговый термометр (Troyka-модуль)]]
- [[amp>product/wire-mm?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Соединительные провода «папа-папа»]]
==== Как собрать ====
- Возьмите Troyka Shield и установите сверху на управляющую плату — Arduino или Iskra JS.
- Подключите текстовый экран к управляющей платформе, используя [[#подключение_дисплея_к_управляющей_плате|схему подключения дисплея]]
- Подключите аналоговый термометр к управляющей плате через 3-проводной шлейф к аналоговому пину ''A0''. В итоге должна получится схема.{{ :products:display-lcd-text-20x4-i2c:temperature-room.png?nolink |}}
- Прошейте управляющую платформу кодом, приведённым ниже.
==== Скетч для Arduino ====
Для работы с термометром удобно использовать библиотеку [[https://github.com/amperka/TroykaThermometer|TroykaThermometer]].
// подключаем библиотеку LiquidCrystal_I2C
#include
#include
// создаем объект-экран, передаём используемый адрес
// и разрешение экрана:
LiquidCrystal_I2C lcd(0x38, 20, 4);
// подключим библиотеку для работы с термометром
#include
// создаём объект для работы с аналоговым термометром
// и передаём ему номер пина выходного сигнала
TroykaThermometer thermometer(A0);
void setup() {
// инициализируем экран
lcd.init();
// включаем подсветку
lcd.backlight();
}
void loop() {
// очищаем дисплей
lcd.clear();
// считываем данные с аналогового термометра
thermometer.readData();
// считываем показания с датчика температуры
float temperature = thermometer.getTemperatureC();
// устанавливаем курсор
// выводим результат на дисплей
lcd.setCursor(4, 1);
lcd.print("Temperature");
lcd.setCursor(8, 2);
lcd.print(temperature);
lcd.print("\x99""C");
delay(500);
}
==== Скрипт для Iskra JS ====
// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев
// настраиваем интерфейс I2C
PrimaryI2C.setup({sda: SDA, scl: SCL});
// подключаем библиотеку
var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38);
// включаем подсветку
PrimaryI2C.writeTo(0x38, 0x08);
// выключить подсветку
// PrimaryI2C.writeTo(0x38, 0x00);
// создаём переменную для работы с датчиком температуры
var thermometer = require('@amperka/thermometer')
.connect(A0);
// устанавливаем курсор в колонку 4, строку 1
// на самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(4, 1);
// выводим на дисплей строку «Temperature»
lcd.print("Temperature");
// каждую секунду считываем данные с датчика температуры и выводим на дисплей
setInterval(function() {
var celsius = thermometer.read('C');
lcd.setCursor(8, 2);
lcd.print(celsius.toFixed(0) + "\x99"+"C");
}, 1000);
{{ :products:display-lcd-text-20x4-i2c:temperature-room-result.png?nolink |}}
===== Элементы платы =====
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-annotation.png?nolink |}}
==== Дисплей ====
{{ :products:display-lcd-text-20x4-i2c:mt-20s4a-i-datasheet.pdf |Дисплей MT-20S4A-I}} умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.
Экран выполнен на жидкокристаллической матрице, которая отображает 4 строки по 20 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.
==== Контроллер дисплея ====
Матрица индикатора подключена к встроенному чипу {{ :products:display-lcd-text-20x4-i2c:an6866-datasheet.pdf |КБ1013ВГ6}} с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.
Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.
==== I²C-расширитель ====
Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов {{ :products:display-lcd-text-20x4-i2c:inf8574-datasheet.pdf |INF8574A}}: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.
==== Контакты подключения ====
На плате дисплея выведено 18 контактов для подведения питания и взаимодействия с управляющей электроникой.
^ Вывод ^ Обозначение ^ Описание ^
| 1 |GND|Общий вывод (земля)|
| 2 |VCC|Напряжение питания (5 В)|
| 3 |VO|Управление контрастностью|
| 4 |RS|Выбор регистра|
| 5 |R/W|Выбор режима записи или чтения|
| 6 |E|Разрешение обращений к индикатору (а также строб данных)|
| 7 |DB0|Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)|
| 8 |DB1|Шина данных (8-ми битный режим)|
| 9 |DB2|Шина данных (8-ми битный режим)|
| 10 |DB3|Шина данных (8-ми битный режим)|
| 11 |DB4|Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)|
| 12 |DB5|Шина данных (8-ми и 4-х битные режимы)|
| 13 |DB6|Шина данных (8-ми и 4-х битные режимы)|
| 14 |DB7|Шина данных (8-ми и 4-х битные режимы)|
| 15 |LED+|Питания подсветки (+)|
| 16 |LED–|Питания подсветки (–)|
| 17 |SDA |Последовательная шина данных|
| 18 |SCL |Последовательная линия тактированния|
==== Питание ====
Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт. Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей [[products:display-lcd-text-20x4-i2c-3v3|текстовый экран 20×4 / I²C / 3,3 В]].
==== Интерфейс передачи данных ====
Дисплей может работать в трёх режимах:
* 8-битный режим — в нём используются и младшие и старшие биты (''DB0''-''DB7'')
* 4-битный режим — в нём используются только младшие биты (''DB4''-''DB7'')
* I²C режим — данные передаются по протоколу [[Видеоуроки:7-i2c-и-processing|I²C/TWI]]. Адрес дисплея ''0x38''.
Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C.
Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на [[:products:display-lcd-text-20x4|текстовый экран 20×4]].
==== Объединение питания ====
Для подключения питания к дисплею необходимо пять контактов:
^ Вывод ^ Обозначение ^ Описание ^
| 1 |GND|Общий вывод (земля)|
| 2 |VCC|Напряжение питания (5 В)|
| 3 |VO|Управление контрастностью|
| 15 |LED+|Питания подсветки (+)|
| 16 |LED–|Питания подсветки (–)|
Но если запаять перемычки ''J3'' и ''J4'' на обратной стороне дисплея, количество контактов питания можно сократить до трёх, объединив цепь питания и подсветки дисплея.
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-power-join.gif?nolink |}}
Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.
==== Выбор адреса ====
Используя шину ''I²C'' можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.
Для общения с каждым дисплеем отдельно, необходимо установить в них разные адреса. Для смены адреса на обратной стороне дисплея установлены контактные площадки ''J0'', ''J1'' и ''J2''.
{{ :products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-switch-address.png?nolink |}}
Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:
* ''L'' нет припоя, соответственно нет электрического контакта.
* ''H'' есть припой, соответственно есть электрический контакт.
^ 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 |
===== Габаритный чертёж =====
[[this>_media/products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-dimensions.pdf|{{:products:display-lcd-text-20x4-i2c:display-lcd-text-20x4-i2c-dimensions.png}}]]
===== Характеристики =====
* Тип дисплея: текстовый
* Цвет: монохромный
* Технология: LCD (Liquid Crystal Display)
* Индикация: 4 строки по 20 символов
* Драйвера матрицы: КБ1013ВГ6
* Расширитель I²C: INF8574A
* Интерфейс: I²C, параллельный 4/8 бит
* Тип подсветки: LED
* Цвет подсветки: зелёный
* Цвет символов: чёрный
* Напряжение питания: 5 В
* Максимальный ток потребления: 1,4 мА
* Потребляемый ток подсветки: 120 мА
* Напряжение логических уровней: 3,3–5 В
* Габариты: 98×60×13 мм
===== Ресурсы =====
* [[amp>product/display-lcd-text-20x4-ylg-i2c?utm_source=man&utm_campaign=display-lcd-text&utm_medium=wiki|Текстовый экран 20×4 / I²C]] в магазине
* {{ :products:display-lcd-text-20x4-i2c:mt-20s4a-i-datasheet.pdf |Datasheet на текстовый экран MT-20S4A-I}}
* {{ :products:display-lcd-text-20x4-i2c:an6866-datasheet.pdf |Datasheet на контроллер КБ1013ВГ6}}
* {{ :products:display-lcd-text-20x4-i2c:inf8574-datasheet.pdf |Datasheet на I²C расширитель INF8574}}
* [[https://github.com/amperka/hardware-drawings/blob/master/display-lcd-text-20x4-i2c.svg|Векторное изображение дисплея]]
* [[https://github.com/johnrickman/LiquidCrystal_I2C|Библиотека для Arduino «Liquid Crystal I²C»]]
* [[http://www.espruino.com/HD44780|Библиотека для Espruino «HD44780»]]