Электронные компоненты, Микроконтроллеры Arduino, Сенсоры и Радиодетали

Наши контакты: г. Москва,
ул. Молодогвардейская, д.54с4
тел: +7 (495) 143-93-53     
  +7 (977) 404-81-30
WApp: +7 (977) 947-63-06
E-mail: sales@yourduino.ru

Подключение ЖК дисплея LCD1602 к Arduino

Опубликовано: 24.09.2018

При проектировании устройств на базе Arduino и отладке программной части зачастую удобно пользоваться "Монитором порта", встроенным в среду разработки Arduino IDE. В "Монитор порта" можно выводить всевозможную информацию: показания датчиков, значения переменных, информационные сообщения и т. п. При сборке готового устройства приходиться задумываться об устройствах индикации и вывода информации. В первую очередь для возможности автономного использования устройства и конечно для придания законченного вида своему творению. Проще всего для вывода информации использовать различные дисплеи, ведь они для того и созданы. Для несложных проектов идеальным решением будут дисплеи серии LCD1602. Эти небольшие дисплеи очень часто встречаются в электронных самоделках. Но можно их встретить и в промышленных образцах. Давайте узнаем о них побольше, попробуем их подключить и вывести на экран какое-нибудь сообщение.

Немного технических сведений: символы будут выводиться на жидкокристаллический дисплей в 2 ряда по 16 символов. Отсюда и название LCD1602. В память встроено 192 знака размером 5 на 8 точек. Еще 8 знаков может определить сам пользователь. Стоит учитывать, что в большинстве модулей нет поддержки русского алфавита, но эту проблему решить довольно просто, используя расширенные библиотеки.

Так выглядит модуль LCD1602 сверху:

А это фото с другой стороны:

LCD1602 подключается к Arduino "ужасно" просто. Посмотрите на рисунок ниже и убедитесь в этом сами.

Всего-то 12 проводов плюс один переменный резистор для регулировки контрастности. В итоге задействовано целых 6 портов ввода-вывода Arduino, не считая выходов питания. Кому как, но где же обещанная простота? А упростить схему можно, если совместно с модулем дисплея мы будем использовать модуль конвертера I2C.

   Вот его фото:

Протокол I2C позволяет подключать одновременно до 127 устройств, используя минимум проводов. Можно провести аналогию с протоколом USB. По нему также можно подключить большое количество устройств использую систему usb-хабов.

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

Вот это уже намного проще и удобнее. Следует учесть, что при использования протокола I2C используются аналоговые порты A4 и A5 (для Arduino UNO и NANO). Для Arduino Mega2560  и Due будут использоваться порты 20 и 21. Для других плат смотрите документацию. 

К порту арудинки А4 подключается вывод, обозначенные на модуле SDA. К порту А5 — SCL. Питание подключается как обычно.

ВНИМАНИЕ! Всегда проверяйте подключение. Ваш модуль и модуль на схемах не всегда имеют одинаковую распиновку.

Вернемся к протоколу I2C. Число одновременно подключенных устройств большое, сигнальных проводов всего 2. Как Arduino узнает, с каким устройством она должна работать? Всё просто, у каждого устройства имеется свой адрес, и этот адрес передается вместе с определенной командой. А где взять адрес для наших дисплеев?

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

#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); }

   Подключаем экран, заливаем наш скетч в Arduino, подключаемся к мониторингу порта, и, в случае успеха, увидим следующую картину:

Видим, что одно устройство найдено. Запоминаем адрес. А лучше запишите его на скотче и приклейте на модуль дисплея. Обратите внимание, что мы получили адрес не самого дисплея, а адрес I2C конвертера, через который мы дисплей подключаем При необходимости адрес конвертера можно изменять путем впаивания перемычек на контакты A0, A1, A2 конвертера, но об этом ниже.

   Вот теперь мы можем попробовать вывести какое-нибудь сообщение на наш маленький экранчик.

   Опять же, код минимальный, не забываем про библиотеку LiquidCrystal_I2C.h

#include <Wire.h>
#include <LiquidCrystal_I2C.h>      // подключаем библиотеку. Она должна уже быть установлена
LiquidCrystal_I2C lcd(0x3f,16,2);   // Устанавливаем дисплей (Первый параметр — адрес,
                                    // найденный сканером, 2-й количество символов в строке
                                    // 3-й количество строк.
void setup()
{
  lcd.init();                    
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("Hello, world!");  // Выводим стандартную фразу
  lcd.setCursor(0, 1);   // Устанавливаем курсор на вторую строку и нулевой символ.
  lcd.print("That is me.");      // «Это я»
}
 
void loop()
{
// Пустой цикл
}

Заливаем скетч в плату и, если всё хорошо, то должна появиться надпись «Hello, world!” в первой строке и «That is me.” во второй. Если строки не появились, а экран темный, то, скорее всего, необходимо отрегулировать контрастность. Переворачиваем сдвоенный модуль. Увидим следующую картину:

Нам интересен переменный резистор: синий пластмассовый кубик, а в нем крест. На фото в правом верхнем углу. Обведён красным. Покрутите его отверткой и добейтесь приемлемого уровня яркости экрана. Ну и все контакты стоит проверить. Раз уже мы смотрим на обратную сторону сдвоенного модуля, то еще два момента.

  1. Джампер слева - позволяет отключить подсветку.
  2. Площадка из 6 контактов A0, A1, A2 — позволяет изменить адрес модуля I2C. Для смены адреса необходимо впаять перемычку, соединив контакты любого вертикального ряда. Комбинировав перемычки можно получить 8 разных адресов. Нужда в этом возникает, когда есть конфликт адресов. К примеру, вы подключаете 2 и больше экрана. Чаще всего они будут иметь один адрес. Сменив адрес, мы решим это проблему. После получения нового адреса необходимо будет заново пересканировать адреса для получения нового. Кстати, все экраны необходимо подключать параллельно друг другу. При этом не важно: сколько подключено модулей: один, два или три. Задействовано будут всего два порта ардуино, и два порта питания. В этом огромное удобство I2C. Надеюсь, всё было понятно.

На этом наша статья подходит к концу. Всем удачного программирования и изучения Arduino!

 

 

Комментарии (0)
Пока нет комментариев
Вы не представились
Не правильно введен e-mail
Нам интересно Ваше мнение
Все поля обязательны к заполнению
Перед публикацией комментарии проходят модерацию

Главное меню

Каталог

Полезные ссылки

Цена
от
до
0 Корзина: 0 руб.
Заказ в один клик