LCD 16x2 підключення до arduino. Символьний LCD та Arduino

Всі давно звикли, що кожен електронний пристрій має екран, за допомогою якого він дає людині будь-яку корисну інформацію. 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. Щоб підключити бібліотеку, запишемо першим рядком нашої програми наступний вираз:

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

Тут перші два аргументи - це висновки RS і EN, а чотири - лінії шини даних DB4-DB7.

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(":"); lcd.print(":"); (1000);

Завантажуємо скетч на Ардуїно Уно, і спостерігаємо за перебігом годинок! 🙂 Для того щоб закріпити отримані знання, рекомендую прокачати наші годинники до повноцінного будильника. Всього на все потрібно додати пару кнопок і зумер 🙂

Рідкокристалічний дисплей (Liquid Crystal Display) скорочено LCD побудований на технології рідких кристалів. При проектуванні електронні пристрої, нам потрібний недорогий пристрій для відображення інформації та другий не менш важливий фактор наявності готових бібліотек для Arduino. З усіх доступних LCD дисплеїв на ринку, що найчастіше використовується є LCD 1602A, який може відображати ASCII символу в 2 рядки (16 знаків в 1 рядку) кожен символ у вигляді матриці 5х7 пікселів. У статті розглянемо основи підключення дисплея до Arduino.

Технічні параметри

Напруга живлення: 5 В
Розмір дисплея: 2.6 дюйми
Тип дисплея: 2 рядки по 16 символів
Колір підсвічування: синій
Колір символів: білий
Габаритні: 80мм x 35мм x 11мм

Опис дисплея

LCD 1602A є електронним модулем заснований на драйвері HD44780 від Hitachi. LCD1602 має 16 контактів і може працювати в 4-бітному режимі (з використанням лише 4 лінії даних) або 8-бітному режимі (з використанням всіх 8 рядків даних), так само можна використовувати інтерфейс I2C. У цій статті я розповім про підключення у 4-бітному режимі.

Призначення контактів:
VSS: "-" живлення модуля
VDD: "+" живлення модуля
VO: Виведення керування контрастом
RS: Вибір регістру
RW: Вибір режиму запису або читання (при підключенні до землі встановлюється режим запису)
E: Строб зі спаду
DB0-DB3: Біти інтерфейсу
DB4-DB7: Біти інтерфейсу
A: «+» живлення підсвічування
K: «-» живлення підсвічування

На лицьовій частині модуля розташовується LCD дисплей та група контактів.

На задній частині модуля розташовано два чіпи в «крапельному» виконанні (ST7066U і ST7065S) і електрична обв'язка, малювати принципову схему не бачу сенсу, тільки розповім про резистори R8 (100 Ом), який служить обмежувальним резистором для світлодіодного підсвічування, так що можна підключити 5В безпосередньо до контакту A. Трохи пізніше напишу статтю в якій розповім як можна міняти підсвічування LCDдисплея за допомогою ШИП та транзистора.

Підключення LCD 1602A до Arduino (4-бітного режиму)

Необхідні деталі:
Arduino UNO R3 х 1 шт.
LCD-дисплей 1602A (2×16, 5V, Синій) x 1 шт.
Дрот DuPont, 2,54 мм, 20 см, F-F (Female - Female) x 1 шт.
Потенціометр 10 кОм х 1 шт.
Роз'єм PLS-16 x 1 шт.
Макетна плата MB-102 х 1 шт.
Кабель USB 2.0 A-B х 1 шт.

Підключення:
Для підключення будемо використовувати макетну плату, схема та таблиця підключення LCD1602a до Arduino у 4-бітному режимі можна подивитися на малюнку нижче.

Підключення дисплея до макетної плати здійснюватиметься через штирьові контакти PLS-16 (їх необхідно припаяти до дисплея). Встановимо модуль дисплея в плату breadboard і підключимо живлення VDD (2 контакт) до 5В (Arduino) і VSS (1 контакт) до GND (Arduino), далі RS (4 контакт) підключаємо до цифрового контакту 8 (Arduino) ). RW (5-й контакт) заземляємо, підключивши його до GND (Arduino), потім підключити виведення E до контакту 8 (Arduino). Для 4-розрядного підключення потрібно чотири контакти (DB4 до DB7). Підключаємо контакти DB4 (11-й контакт), DB5 (12-й контакт), DB6 (13-й контакт) та DB7 (14-й контакт) з цифровими висновками Arduino 4, 5, 6 та 7. Потенціометр 10K використовується для регулювання контрастності дисплея, схема підключення LCD дисплея 1602а показана нижче

Бібліотека вже входить у середу розробки IDE Arduino і не потрібно її встановлювати. Скопіюйте та вставте цей приклад коду у вікно програми IDE Arduino та завантажте у контролер.

/* Тестування проводилося на Arduino IDE 1.6.11 Дата тестування 20.09.2016р. */ #include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup() ( lcd.begin(16, 2); // Ініціалізує LCD 16x2 ) void loop() ( lcd.setCursor(0,0); // Встановити курсор на перший рядок lcd.print("Hello, world" ); // Вивести текст lcd.setCursor(0,1); // Встановити курсор на другий рядок lcd.print("www.robotchip.ru");

Тестування проводилося Arduino IDE 1.6.11

Дата тестування 20.09.2016р.

#include

LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

void setup()

lcd. begin (16, 2); // Ініціалізує LCD 16x2

void loop ()

lcd. print ("Hello, world"); // Вивести текст

lcd. print ("www.robotchip.ru"); // Вивести текст

Завантажити програму

Трохи про програму.
Для полегшення зв'язку між Arduino та LCD дисплеєм використовується вбудований у бібліотеці в IDE Arduino « LiquidCrystal.h « - яка написана для LCD дисплеїв, які використовують HD44780 (Hitachi) чіпсет (або сумісні мікросхеми). Ця бібліотека може обробляти як 4-бітному режимі і 8-бітному режимі підключення LCD.

У цій інструкції показано, як підключати 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, наприклад LCD I2C модуль та LCD Keypad Shield.

Ця стаття докладно із зображеннями розповідає, як підключити LCD до Arduino та відобразити інформацію.

Дисплеї 1602 мають два різних виконання:

Жовте підсвічування з чорними літерами
- або (це буває набагато частіше) синє підсвічування з білими.

Розмірність дисплеїв на HD44780 контролері буває різною, а управляються вони однаково. Найбільш поширені з розмірностей – 16 на 02 (тобто по 16 символів у двох рядках) або 20 на 04. Самі ж символи мають роздільну здатність у 5 на 8 точок.

Більшість дисплеїв не підтримує кирилицю (за винятком CTK-маркування). Але така проблема частково вирішується, і далі стаття докладно розповідає, як це зробити.

На дисплеї є 16-PIN роз'єм для підключення. Висновки мають маркування з тильного боку плати, Вона наступна:

1 (VSS) – живлення мінус для контролера.
2 (VDD) – харчування плюс для контролера.
3 (VO) – налаштування керування контрастом.
4 (RS) – вибір для регістру.
5 (R/W) – читання та запис, зокрема запис при з'єднанні із землею.
6 (E) – активація (Enable).
7-10 (DB0-DB3) - молодші біти від восьмибітного інтерфейсу.
11-14 (DB4-DB7) - старші біти від інтерфейсу
15 (A) – позитивний анод живлення підсвічування.
16 (K) – негативний катод живлення підсвічування.

Крок 2: Підключаємо РК-дисплей

Перед тим, як підключати дисплей і передавати на нього інформацію, варто перевірити його працездатність. Спочатку подайте напругу на VSS і VDD контролер, запитайте підсвічування (A, K), далі настройте контрастність. Для таких налаштувань підійде потенціометр із 10 кОм, форма його не важлива. На крайні ноги подають +5V і GND, а ніжку центром з'єднують з VO виведенням.

Коли на схему подається харчування, потрібно домогтися необхідного розмаїття, якщо він налаштовується неправильно, і зображення на екрані видно не буде. Щоб налаштувати контраст, потрібно пограти з потенціометром. Коли схема буде зібрана правильно і контраст налаштований правильно, верхній рядок на екрані має заповнитися прямокутниками.

Щоб дисплей працював, застосовується вбудована в Arduino IDE середовище спеціальна бібліотека LiquidCrystal.h, про яку я напишу нижче. Він може діяти в 8-бітному та в 4-бітному режимі. У першому варіанті застосовують лише молодші та старші біти (BB0-DB7), у другому – лише молодші (BB4-DB7).

Але застосування 8-бітного режиму в цьому дисплеї - неправильне рішення, переваги в швидкості майже немає, оскільки частота оновлення у нього завжди менше 10 разів на секунду. Щоб виводився текст, треба приєднати висновки DB7, DB6, DB5, DB4, E та RS до висновків контролера. Приєднувати їх можна до будь-яких пін Arduino, головне - завдання правильної послідовності в коді.

Якщо необхідного символу поки немає в пам'яті контролера, можна його визначити вручну (всього до семи символів). Комірка в дисплеях має розширення в п'ять на вісім точок. Завдання створення символу в тому, щоб написати бітову маску і розставити одиниці в місцях, де крапки повинні горіти, а нулі - де не повинні.

Розглянута вище схема підключення не завжди хороша, тому що Arduino займається мінімум шість цифрових виходів.

Крок 3: Схема обходу

Вивчимо варіант, як обійти це і обійтися лише двома. Потрібен додатковий модуль-конвертор для LCD у IIC/I2C. Як він припаюється до дисплея і приєднується Arduino, можна побачити на зображеннях нижче.

Але такий варіант підключення діє лише зі спеціальною бібліотекою LiquidCrystal_I2C1602V1, яку, втім, неважко знайти в Мережі та встановити, після чого можна без проблем користуватися ним.

Крок 4: Бібліотека LiquidCrystal.h

Бібліотеку LiquidCrystal.h можна завантажити з офіційного ресурсу. Також ви можете завантажити нижче за посиланнями:

Скетч

Після того, як ви завантажили архів, замініть папку LiquidCrystal в папці з бібліотеками вашого каталогу установки Arduino.

Ви можете побачити приблизний скетч у Файл -> Приклади -> LiquidCrystal -> HelloWorld_SPI(File -> Examples -> LiquidCrystal -> HelloWorld_SPI).

На цьому наш черговий урок завершено. Бажаємо вам якісних проектів!

Кожен радіоаматор після деякої кількості простих саморобок приходить до мети сконструювати щось грандіозне з використанням датчиків і кнопок. Адже набагато цікавіше виводити дані на дисплей, ніж монітор порту. Але тоді постає питання: який екран вибрати? І взагалі, як підключати його, що потрібне для підключення? Відповіді на ці питання будуть розглянуті у цій статті.

LCD 1602

Серед багатьох варіантів серед дисплеїв окремо хочеться відзначити саме дисплей LCD1602 на базі контролера HD4478. Існує цей дисплей у двох кольорах: білі літери на блакитному тлі, чорні літери на жовтому фоні. Підключення LCD 1602 до Arduino також не викликає жодних проблем, оскільки є вбудована бібліотека, і нічого завантажувати додатково не потрібно. Дисплеї відрізняються не лише ціною, а й розміром. Найчастіше радіоаматорами використовується 16 x 2, тобто 2 рядки по 16 символів. Але існує також і 20 х 4, де 4 рядки по 20 символів. Розміри та колір не відіграють жодної ролі у підключенні дисплея lcd 1602 до Arduno, підключаються вони однаково. Кут огляду становить 35 градусів, час відгуку дисплея – 250 мс. Працювати може за температури від -20 до 70 градусів за Цельсієм. При роботі використовує 4 мА на екран і підсвічування 120 мА.

Де використовується?

Даний дисплей має свою популярність не тільки у радіоаматорів, а й у великих виробників. Наприклад, принтери, кавові апарати також використовують LCD1602. Це зумовлено її низькою ціною, коштує цей дисплей на китайських майданчиках 200-300 рублів. Купувати варто саме там, тому що у наших магазинах націнки на цей дисплей дуже високі.

Підключення до Arduino

Підключення LCD 1602 до Arduino Nano та Uno не відрізняється. З дисплеєм можна працювати у двох режимах: 4 біти та 8. При роботі з 8-бітним використовуються і молодші, і старші біти, а з 4-бітним – лише молодші. Працювати з 8-бітним особливого сенсу немає, оскільки додасться для підключення ще 4 контакти, що не доцільно, адже швидкості вище не буде, межа оновлень дисплея – 10 разів на секунду. Взагалі, для підключення lcd 1602 до Arduino використовується багато дротів, що завдає деяких незручностей, але є спеціальні шилди, але про це пізніше. На фотографії зображено підключення дисплея до Arduino Uno:

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

#include // Додаємо необхідну бібліотеку LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup()( lcd.begin(16, 2); // Задаємо розмірність екрану lcd.setCursor(0, 0); // Встановлюємо курсор на початок 1 рядки lcd.print("Hello, world!"); // Виводимо текст lcd.setCursor(0, 1); // Встановлюємо курсор на початок 2 рядки lcd.print("сайт") // Виводимо текст ) ()( )

Що робить код? Насамперед підключається бібліотека для роботи з дисплеєм. Як уже говорилося вище, ця бібліотека вже входить до складу Arduino IDE та додатково завантажувати та встановлювати її не треба. Далі визначаються контакти, підключені до висновків: RS, E, DB4, DB5, DB6, DB7 відповідно. Після цього задається розмірність екрану. Так як ми працюємо з версією, де 16 символів та 2 рядки, то пишемо такі значення. Встановлюємо курсор на початок першого рядка та виводимо наш перший текст Hello World. Далі ставимо курсор на другий рядок та виводимо назву сайту. Ось і все! Було розглянуто підключення lcd 1602 до Arduino Uno.

Що таке I2C і навіщо він потрібний?

Як говорилося вище, підключення дисплея займає дуже багато контактів. Наприклад, при роботі з кількома датчиками та дисплеєм LCD 1602 контактів може просто не вистачити. Найчастіше радіоаматорами використовуються версії Uno чи Nano, де не так багато контактів. Тоді люди вигадали спеціальні шилди. Наприклад, I2C. Він дозволяє підключати дисплей лише у 4 контакти. Це вдвічі менше. Продається модуль I2C як окремо, де потрібно припаювати, так і вже припаяний до дисплея LCD 1602.

Підключення за допомогою I2C модуля

Підключення LCD 1602 до Arduino Nano з I2C займає мало місця, всього 4 контакти: земля, живлення та 2 виходи для передачі даних. Живлення та землю підключаємо на 5V та GND на Arduino відповідно. Два контакти, що залишилися: SCL і SDA підключаємо до будь-яких аналогових пін. На фотографії можна побачити приклад підключення lcd 1602 до arduino з I2C модулем:

Програмний код

Якщо для роботи з дисплеєм без модуля необхідно було скористатися лише однією бібліотекою, то для роботи з модулем потрібно дві бібліотеки. Одна з них вже є у складі Arduino IDE – Wire. Іншу бібліотеку, LiquidCrystal I2C, треба завантажувати окремо та встановлювати. Для встановлення бібліотеки в Arduino вміст завантаженого архіву необхідно завантажити до кореневої папки Libraries. Приклад програмного коду з використанням I2C:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); // Встановлюємо дисплей void setup() ( lcd.init(); lcd.backlight();// Включаємо підсвічування дисплея lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Встановлюємо курсор на другий рядок і нульовий символ. lcd.setCursor(0, 1); // Виводимо на екран кількість секунд з моменту запуску ардуїни lcd.print(millis()/1000); )

Як можна побачити, код майже не відрізняється.

Як додати символ?

Проблемою цих дисплеїв є те, що немає підтримки кирилиці та символів. Наприклад, вам необхідно якийсь символ завантажити в дисплей, щоб він міг його відображати. Для цього дисплей дозволяє створити до 7 символів. Подайте таблицю:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Якщо 0 – там нічого немає, якщо 1 – це зафарбована ділянка. У прикладі вище можна побачити створення символу "смайл, що посміхається". На прикладі програми в Arduino це буде виглядати так:

#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()( )

Як можна побачити, була створена бітова маска така сама, як і таблиця. Після створення її можна виводити як змінну на дисплей. Пам'ятайте, що в пам'яті можна зберігати лише сім символів. В принципі цього і буває достатньо. Наприклад, якщо необхідно показати символ градуса.

Проблеми, при яких дисплей може не працювати

Трапляються такі випадки, коли дисплей не працює. Наприклад, вмикається, але не показує символи. Або зовсім не включається. Спочатку подивіться, чи правильно ви підключили контакти. Якщо ви використовували підключення lcd 1202 до Arduino без I2C, то дуже легко заплутатися у дротах, що може стати причиною некоректної роботидисплея. Також слід переконатися в тому, що контрастність дисплея збільшена, оскільки при мінімальній контрастності навіть не видно, чи вмикається LCD 1602 чи ні. Якщо це нічого не допомагає, то, можливо, проблема може криється в пайці контактів, це під час використання модуля I2C. Також частою причиною, при якій дисплей може не працювати, неправильне встановлення I2C адреси. Справа в тому, що виробників багато, і вони можуть ставити різну адресу, потрібно виправляти тут:

LiquidCrystal_I2C lcd(0x27,16,2);

У дужках можна побачити два значення, 0x27 і 16,2 (16, 2 - є розміром дисплея, а 0x27 саме адреса I2C). Замість цих значень можна спробувати встановити 0x37 або 0x3F. Ну і ще однією причиною є просто несправний LCD 1602. З огляду на те, що практично все для Arduino виготовляється в Китаї, то не можна бути впевненим на 100%, що придбаний товар не є шлюбом.

Плюси та мінуси LCD 1602

Розглянемо плюси та мінуси дисплея LCD 1602.

  • Ціна. Цей модуль можна придбати за демократичною ціною в китайських магазинах. Ціна складає 200-300 рублів. Іноді продається навіть разом із I2C модулем.
  • Легко підключати. Мабуть, ніхто зараз не підключає LCD 1602 без I2C. А з цим модулем підключення займає всього 4 контакти, ніяких павутин з проводів не буде.
  • Програмування. Завдяки готовим бібліотекам працювати з цим модулем легко всі функції вже прописані. А при необхідності додати свій символ витрачається лише кілька хвилин.
  • За час використання тисячами радіоаматорами жодних великих мінусів виявлено не було, тільки трапляються випадки купівлі шлюбу, оскільки в основному використовуються китайські варіанти дисплеїв.

У цій статті було розглянуто підключення 1602 Arduino, а також були представлені приклади програм для роботи з цим дисплеєм. Він справді є у своїй категорії одним із найкращих, не просто так його обирають тисячі радіоаматори для своїх проектів!