Модуль дисплея LCD 1602 — очень популярен в последнее время ввиду простоты его работы и способа подключения. Используется во множестве проектов где требуется вывод информации на дисплей. О том как подключить и настройка LCD модуля 1602 к Arduino и пойдет речь в этом посте.

При помощи модуля LCD 1602  можно без труда вывести на кран какую либо информацию — будь это текстовое сообщение, значение температуры, количество оборотов, давление и любые другие параметры.

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

Один важный момент: модуль можно подключить напрямую к Arduino либо через специальный модуль i2c — этот вариант предпочтительнее, т.к. позволяет передавать данные всего по 4-м проводам.

Распиновка LCD модуля 1602

Распиновка выводов модуля lcd 1602

Назначение выводов дисплея 1602

Вывод Обозначение Пин Arduino Uno
1- земля GND; GND GND
2-питание 5 В; VCC 5V
3-установка контрастности монитора; VO GND
4-команда, данные; RS 11
5-записывание и чтение данных; R/W GND
6-enable; 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

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

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

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

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

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

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

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

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

Модуль i2c для работы с LCD 1602

Этот интерфейсный модуль позволяет уменьшить количество используемых выводов контроллера, вместо 8 или 4-битного соединения, требуется только 2 вывода (SDA и SCL).

  • поддержка дисплеев: LCD 16×02 / 20×04;
  • дополнительно: регулировка контрастности;
  • напряжение питания. 5 В;
  • интерфейс: I2C;
  • размеры модуля: 54 мм x 19 мм x 15 мм

Схема модуля i2c для работы с LCD 1602

Схема модуля i2c для работы с LCD 1602

Внешний вид интерфейсного модуля i2c

Внешний вид модуль i2c

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

Первая группа:

  • SCL:    линия тактирования (Serial CLock)
  • SDA:   линия данных (Serial Dфta)
  • VCC:   «+» питание
  • GND:  «-» питание

Вторая группа:

  • VSS:   «-» питание
  • VDD:  «+» питание
  • VO:    Вывод управления контрастом
  • RS:     Выбор регистра
  • RW:   Чтение/запись ( режим записи при соединении с землей)
  • E:       Еnable (строб по спаду)
  • DB0-DB3: биты интерфейса (младшие )
  • DB4-DB7: биты интерфейса (старшие)
  • A:      «+» питания подсветки
  • K:      «-»  питания подсветки

Третья группа: (по умолчанию установлена перемычка)

  • VCC:
  • A от LCD:

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

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

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

Примеры скетчев


#include < LiquidCrystal.h >
// используйте свои значения
const int rs = 4, en = 5, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
lcd.begin(16, 2);
}

void loop() {
// устанавливаем курсор в позицию (0,0):
lcd.setCursor(0, 0);
// выводим цифры от 0 до 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
}

// устанавливаем курсор в (16,1):
lcd.setCursor(16, 1);
// включаем автоматическую прокрутку
lcd.autoscroll();
// печатаем от 0 до 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
}
// выключаем автоматическую прокрутку
lcd.noAutoscroll();

// очищаем экран для следующей итерации
lcd.clear();
}
                   


#include < Wire.h > 
#include < LiquidCrystal_I2C.h > // Подключение библиотеки
//#include < LiquidCrystal_PCF8574.h > // Подключение альтернативной библиотеки

LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой 
//LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 

void setup()
{
lcd.init();                      // Инициализация дисплея  
lcd.backlight();                 // Подключение подсветки
lcd.setCursor(0,0);              // Установка курсора в начало первой строки
lcd.print("Hello");       // Набор текста на первой строке
lcd.setCursor(0,1);              // Установка курсора в начало второй строки
lcd.print("ArduinoMaster");       // Набор текста на второй строке
}
void loop()
{
}
                    

#include < Wire.h >  
void setup(){
    Wire.begin();
    Serial.begin(9600);  // ответ будем просматривать через мониторинг порта.
    while (!Serial);
    Serial.println("\nI2C Scanner");
}

void loop(){
    byte error, address;
    int nDevices;
    Serial.println("Scanning...");
    nDevices = 0;  // Пока не нашли ни одного устройства. Счетчик обнуляем
    for(address = 8; address<127; address++ ){ 

// адресация начинается с 8, поэтому реально устройств подключается не 127 а чуть меньше.
// адреса до 8 зарезервированы

        Wire.beginTransmission(address);  // послали запрос по очередному адресу
        error = Wire.endTransmission();
        if (error == 0){  //ошибок нет
            Serial.print("I2C device found at address 0x");
            if (address<16) {
            Serial.print('0');
            Serial.print(address,HEX); // выводим адрес найденного устройства
            Serial.println(" !");
            nDevices++;
        } else if (error==4) {
            Serial.print("Unknow error at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.println(address,HEX);
        }
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");
    delay(5000);
}
                

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

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

Возможные ошибки при подключении модуля I2C

Если после того  загрузили  программу в arduino экран никак не реагирует и он не отображается никакого символа, попробуйте выполнить следующие шаги:

1. Попробуйте увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.
2. Если первый пункт не помогает проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный i2c переходник, то проверьте еще раз качество пайки контактов.

Другой причиной не рабочего экрана может стать неправильный i2c адрес, для устранения неисправности попробуйте выполнить следующие шаги:

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

Похожие записи

Цифровые игральные кости на Arduino

На Arduino можно довольно интересный проект начального уровня - цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6. ...

Системы заземления TN-C, TN-S, TNC-S, TT, IT

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

Маркировки кабеля европейских производителей

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

Подключение сервопривода к Arduino

Сервопривод (servo) - устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень...

Схема полицейской мигалки на микроконтроллере

Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...

Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации переменных, настройки режимов работы портов (выводов), для старта каких либо функций...

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