Робота з графічним дисплеєм 1602 в Arduino. LCD WH1602B компанії Winstar. Управління РК екраном по шині I2C

Приїхав Arduino Nano, приїхав кит, у якому макетка (бредборд), та LCD-дисплей. На дисплеї на платі написано – 1602А, нижче – QAPASS. Почав брати перший пристрій, і звичайно ж, захотілося виводити інформацію на дисплей, а не блимати світлодіодами.

Гугл допоміг, розповів, що це символьний дисплей; якщо не перекручуватися, то доступні швидше за все символи ASCII – цифри, латиниця, щось із базових символів.

Запустити дисплей допомогли наступні матеріали: Driving a character type LCD from a PC printer port; How to connect Arduino with Character LCD ; Pwm Driver Motor Control PDF .

Дисплей досить поширений, і для нього вже понадумували шилдів - є варіанти з SPI начебто, та/або з I2C, та інтернет повний рецептами для цих випадків. Але в мене був лише оригінальний дисплей 16x2, і ардуїнка, до якої хотілося його причепити.

Дисплей має режим роботи і передачі даних напівбайтами, по 4 біти, при цьому молодші розряди шини не використовуються. Підключення тільки половини шини даних багато де описано, і я не став розбиратися, як підключити дисплей і працювати з ним по 8 лініях. Мене цілком влаштувало, що й так працює.

Хороший опис дисплеїв даного типуя знайшов тут - http://greathard.ucoz.com/44780_rus.pdf. А тут - приклад завдання знакогенератора.

Підключення

У мене дисплей постачався з нерозпаяними контактами. З початку хотів припаяти шлейф, обрізав 16 дротів із дюпонами, зачистив. А потім покопався в киті, і знайшов гребінку дюпонів для паяння на плату. Звідти й відламав 16 контактів та припаяв їх.
Виглядав (до паяння контактів) мій дисплей приблизно так:

Спершу я підключив контакт 15(A) на +5В, 16(K) на землю, і переконався, що підсвічування працює. Взагалі правильно підключати катод на землю через резистор 220Ом, що я потім і зробив.

Потім підключив землю (1) та живлення (2). Arduino може живитися від USB, від стабілізованої напруги 5В і від нестабілізованої 6-12В, автоматично вибирається найбільша напруга. Зараз ардуїнка запитана від USB, і я думав, де там витягти 5 Вольт. Виявилося, що 5В є на контакті Ардуїни, куди підключаються зовнішні стабілізовані 5В. Точніше, там виявилося 4.7В, але мені вистачило.

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

Потім підключаємо потенціометр контрасту (пін 3 V0). Один із крайніх висновків потенціометра кидаємо на землю, другий – на +5В, середній – на пін 3 дисплеї. Рекомендується потенціометр 10К. У мене був 50К з кита, спочатку я використав його. Регулювання було тільки одному краю, дуже тонко доводилося ловити потрібний контраст. Потім в іншому киті знайшов аналогічний на 5К і поставив його. Налаштування розтягнулося від краю до половини обороту. Мабуть, можна ще менше взяти потенціометр. 10К напевно рекомендують, щоб схема менше споживала. Так, довелося трохи попаяти, припаяв до висновків потенціометрів проводки із дюпонами.

Тестовий скетч

Тестовий скетч беремо в прикладах від Ардуїно студії - "C:Program Files (x86)ArduinolibrariesLiquidCrystalexamplesHelloWorldHelloWorld.ino", тільки потрібно поміняти контакти на наші - LiquidCrystal lcd(7, 6, 5 4, 3, 2);

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

// include the library code: #include // Initialize library with numbers of interface pins LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // Set up the LCD"s number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); ) void loop() ( // set cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis() / 1000);

Виходить щось на кшталт цього:

До речі, дисплей, який потрапив до мене до рук, без підсвічування не працює. У сенсі працює, але практично нічого не видно.

Контакти дисплея 1602A

# контакту Найменування Як підключати
1 VSS GND
2 VDD +5V
3 V0 Контраст – на середній висновок потенціометра
4 RS (Register select) D7 Arduino
5 R/W (Read or write) GND
6 E (Enable signal) D6 Arduino
7-14 D0-D7 D0-D3 – не підключені; D4-D7 - підключені до контактів D5-D2 Ардуїно
15 A Анод підсвічування, підключається до +5В
16 K Катод підсвічування, що підключається до землі через резистор 220Ом

Стаття розповідає про те, як правильно підключити LCD до Arduino, розглянуто все необхідне підключення LCD 1602 і LCD i2c.

Дисплеї LCD 1602 розміру, створені на базі HD44780 контролера, в наші дні все ще залишаються одними з найдоступніших, простих і затребуваних, щоб розробляти будь-які електронні пристрої.

Не дивно, що їх можна побачити як у простих, зібраних буквально на коліні агрегатах, так і більш серйозних промислових, наприклад автоматах для приготування кави. Саме з таким дисплеєм і збираються найбільш популярні модулі та шилди за тематикою Arduino, наприклад LCD I2C модуль та LCD Keypad Shield.

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

Крок 2. LCD-дисплей 1602 для Ардуїно

Дисплеї 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) – негативний катод живлення підсвічування.

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

Перед тим, як підключати дисплей і передавати на нього інформацію, варто перевірити його працездатність. Спочатку подайте напругу на 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 займається мінімум шість цифрових виходів.

Крок 4. Схема обходу

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

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

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

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

Крок 5. Скетч (код програми)

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

Ви можете побачити зразковий скетч за адресою:

Файл -> Приклади -> LiquidCrystal -> HelloWorld_SPI

Або, якщо у вас меню англійською:

File -> Examples -> LiquidCrystal -> HelloWorld_SPI

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

LCD дисплей- Частий гість у проектах Ардуїно. Але в складних схемах у нас може виникнути проблема нестачі портів Arduino через необхідність підключити екран, який має дуже багато контактів. Виходом у цій ситуації може стати I2C /IICперехідник, який підключає практично стандартний для Arduino екран 1602 до плат Uno, Nano або Mega лише за допомогою 4 пінів. У цій статті ми подивимося, як можна підключити LCD екран з інтерфейсом I2C, які можна використовувати бібліотеки, напишемо короткий приклад і розберемо типові помилки.

Рідкокристалічний дисплей (Liquid Crystal Display) LCD 1602є гарним виборомдля виведення рядків символів у різних проектах. Він коштує недорого, є різні модифікації з різними кольорами підсвічування, ви можете легко завантажити готові бібліотеки для скетч Ардуїно. Але найголовнішим недоліком цього екрану є той факт, що дисплей має 16 цифрових висновків, з яких обов'язковими є мінімум 6. Тому використання цього екрану LCD без i2c додає серйозні обмеження для плат Arduino Uno або Nano. Якщо контактів не вистачає, вам доведеться купувати плату Arduino Mega або ж заощадити контакти, в тому числі за рахунок підключення дисплея через i2c.

Короткий опис пінів LCD 1602

Давайте подивимося на висновки LCD1602 уважніше:

Кожен із висновків має своє призначення:

  1. Земля GND;
  2. Харчування 5;
  3. Встановлення контрастності монітора;
  4. Команда, дані;
  5. Записування та читання даних;
  6. Enable;

7-14. Лінії даних;

  1. Плюс підсвічування;
  2. Мінус підсвічування.

Технічні характеристики дисплея:

  • Символьний тип відображення є можливість завантаження символів;
  • Світлодіодна підсвітка;
  • Контролер HD44780;
  • Напруга живлення 5В;
  • Формат 16х2 символів;
  • Діапазон робочих температур від -20°С до +70°С, діапазон температур зберігання від -30°С до +80°С;
  • Кут огляду 180 градусів.

Схема підключення LCD до плати Ардуїно без i2C

Стандартна схема приєднання монітора безпосередньо до мікроконтролера Ардуїно без I2C виглядає так.

Через велику кількість контактів, що підключаються, може не вистачити місця для приєднання потрібних елементів. Використання I2C зменшує кількість дротів до 4, а зайнятих пінів до 2.

Де купити LCD екрани та шилди для ардуїно

LCD екран 1602 (і варіант 2004) досить популярний, тому ви без проблем зможете знайти його як у вітчизняних інтернет магазинах, так і на закордонних майданчиках. Наведемо кілька посилань на найдоступніші варіанти:

Модуль LCD1602+I2C із синім екраном, сумісний з Arduino Простий дисплей LCD1602 (зелене підсвічування) дешевше 80 рублів Великий екран LCD2004 з I2C HD44780 для ардуїно (синє та зелене підсвічування)
Дисплей 1602 з IIC адаптером та синім підсвічуванням Ще один варіант LCD1602 із впаяним I2C модулем Модуль адаптера Port IIC/I2C/TWI/SPI для екрана 1602, сумісний з Ардуїно
Дисплей з RGB-підсвічуванням! LCD 16×2 + keypad +Buzzer Shield for Arduino Шилд для Ардуїно з кнопками та екраном LCD1602 LCD 1602 LCD дисплей для 3D принтера (Smart Controller for RAMPS 1.4, Text LCD 20×4), модулем кардрідера SD та MicroSD-

Опис протоколу I2C

Перш ніж обговорювати підключення дисплея до ардуїно через i2c-перехідник, коротко поговоримо про сам протокол i2C.

I2C/IIC(Inter-Integrated Circuit) – це протокол, що спочатку створювався для зв'язку інтегральних мікросхемвсередині електронного пристрою. Розробка належить фірмі Philips. В основі i2c протоколу є використання 8-бітної шини, яка потрібна для зв'язку блоків в електроніці, що управляє, і системі адресації, завдяки якій можна спілкуватися по одним і тим же проводам з декількома пристроями. Ми просто надаємо дані то одному, то іншому пристрою, додаючи до пакетів даних ідентифікатор потрібного елемента.

Сама проста схема I2C може містити один провідний пристрій (найчастіше це мікроконтролер Ардуїно) та кілька ведених (наприклад, дисплей LCD). Кожен пристрій має адресу в діапазоні від 7 до 127. Двох пристроїв з однаковою адресою в одній схемі не повинно бути.

Плата Arduino підтримує i2c на апаратному рівні. Ви можете використовувати піни A4 та A5 для підключення пристроїв за цим протоколом.

У роботі I2C можна виділити кілька переваг:

  • Для роботи потрібно лише 2 лінії – SDA (лінія даних) та SCL (лінія синхронізації).
  • Підключення великої кількості провідних приладів.
  • Зменшення часу розробки.
  • Для керування всім набором пристроїв потрібен лише один мікроконтролер.
  • Можливе число мікросхем, що підключаються, до однієї шини обмежується тільки граничною ємністю.
  • Висока ступінь збереження даних через спеціальний фільтр пригнічує сплески, вбудованого в схеми.
  • Проста процедура діагностики збоїв, що виникають, швидке налагодження несправностей.
  • Шина вже інтегрована в саму Arduino, тому не потрібно додатково розробляти шинний інтерфейс.

Недоліки:

  • Існує ємнісне обмеження на лінії – 400 пФ.
  • Важке програмування контролера I2C, якщо на шині є кілька різних пристроїв.
  • При велику кількість пристроїв виникає труднощі локалізації збою, якщо один з них помилково встановлює стан низького рівня.

Модуль i2c для LCD 1602 Arduino

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

З одного боку модуля ми бачимо висновки i2c – земля, живлення та 2 для передачі даних. З іншого перехідника бачимо роз'єми зовнішнього живлення. І, природно, на платі є безліч ніжок, за допомогою яких модуль припаює до стандартних висновків екрану.


Для підключення до плати Ардуїно використовуються i2c виходи. Якщо потрібно, підключаємо зовнішнє живлення для підсвічування. За допомогою вбудованого підстроювального резистора ми можемо налаштувати настроювання контрастності J

На ринку можна зустріти LCD 1602 модулі з припаяними перехідниками, їх використання максимально упощено. Якщо ви купили окремий перехідник, потрібно буде заздалегідь припаяти його до модуля.

Підключення РК екрану до Ардуїно за I2C

Для підключення необхідні сама плата Ардуїно, дисплей, макетна плата, з'єднувальні дроти та потенціометр.

Якщо ви використовуєте спеціальний окремий i2c перехідник, потрібно спочатку припаяти його до модуля екрана. Помилитись там важко, можете керуватися такою схемою.


Рідкокристалічний монітор з підтримкою i2c підключається до плати за допомогою чотирьох дротів – два дроти для даних, два дроти для живлення.

  • Висновок GND підключається до GND на платі.
  • Висновок VCC – на 5V.
  • SCL підключається до піну A5.
  • SDA підключається до піну A.

І це все! Жодних павутин проводів, в яких дуже легко заплутатися. При цьому всю складність реалізації протоколу i2C ми можемо просто довірити бібліотекам.

Бібліотеки для роботи з i2c LCD дисплеєм

Для взаємодії Arduino c LCD 1602 по шині I2C вам знадобиться як мінімум дві бібліотеки:

  • Бібліотека Wire.h для роботи з I2C вже є стандартною програмі Arduino IDE.
  • Бібліотека LiquidCrystal_I2C.h, яка включає велику різноманітність команд для управління монітором по шині I2C і дозволяє зробити скетч простіше і коротше. Потрібно додатково встановити бібліотеку Після підключення екрана потрібно додатково встановити бібліотеку LiquidCrystal_I2C.h

Після підключення до скетчу всіх необхідних бібліотек ми створюємо об'єкт і можемо використовувати його функції. Для тестування завантажимо наступний стандартний скетч з прикладу.

#include #include // Підключення бібліотеки //#include // Підключення альтернативної бібліотеки 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() ( )

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

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

Альтернативна бібліотека для роботи з дисплеєм i2c

У деяких випадках при використанні зазначеної бібліотеки з пристроями, оснащеними контролерами PCF8574, можуть виникати помилки. У цьому випадку альтернативою можна запропонувати бібліотеку LiquidCrystal_PCF8574.h. Вона розширює LiquidCrystal_I2C, тому проблем із її використанням не повинно бути.

Проблеми підключення i2c lcd дисплея

Якщо після завантаження скетча у вас не з'явиться жодного напису на дисплеї, спробуйте виконати такі дії.

По-перше, можна збільшити чи зменшити контрастність монітора. Часто символи просто не видно через режим контрастності та підсвічування.

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

Іншою частою причиною відсутності тексту на екрані може стати неправильна i2c адреса. Спробуйте спочатку поміняти в скетчі адресу пристрою з 0x27 0x20 або 0x3F. У різних виробників можуть бути різні адреси за замовчуванням. Якщо це не допомогло, можете запустити скетч i2c сканера, який переглядає всі підключені пристрої та визначає їх адресу методом перебору. Приклад скетчу i2c сканера.

Якщо екран все ще залишиться неробочим, спробуйте відпаяти перехідник та підключити LCD звичайним чином.

Висновок

У цій статті ми розглянули основні питання використання LCD екрану у складних проектах Ардуїно, коли нам потрібно економити вільні піни на платі. Простий і недорогий перехідник i2c дозволить підключити LCD екран 1602, займаючи всього 2 аналогові піни. У багатьох ситуаціях це може бути дуже важливим. Плата за зручність – необхідність використання додаткового модуля – конвертера та бібліотеки. На наш погляд, зовсім не висока ціна за зручність і ми рекомендуємо використовувати цю можливість у проектах.

Що є невід'ємною частиною великої кількості електронних девайсів? Звичайно, засоби індикації та графічного виведення даних. Користувачеві завжди зручніше і приємніше, коли результат роботи «розумної коробочки» можна побачити візуально. Тому сьогодні ми підключимо до STM32 дисплей для виведення тексту та цифр. Героєм наших експериментів стане популярний дисплей від Winstar'а. До речі в коментарях з'явилося важливе уточнення, що методика в принципі однакова для всіх дисплеїв на базі HD44780.Дякуємо JekaKey за важливе доповнення)

Для початку дисплей треба підключити до контролера. Завантажуємо даташит і шукаємо розпинання WH1602. Ось дивіться:

Як ви вже зрозуміли, дисплей WH1602має 16 висновків. Розглянемо кожен окремо.

Піни Vss, Vdd і K потрібно підключати до землі та до харчування, тобто прямо так, як зазначено в таблиці, тут без сюрпризів і навіть нічого обговорювати)

Висновок під номером 3 служить для регулювання контрастності – якщо подамо туди +5В, то не побачимо абсолютно нічого, а якщо закоротимо виведення на землю, то милуватимемося двома рядами чорних квадратів. зі змінним опором) для регулювання контрастності. Найкраща видимість символів забезпечується напругою 0.5-0.7 на цьому виводі дисплея.

Пін RS – це вже висновок, яким ми самі керуватимемо за допомогою мікроконтролера. Низький рівень напруги (0) на цьому висновку означає, що зараз піде команда, високий рівень (1) – отже зараз будуть дані для запису в пам'ять дисплея.

Пін R/W – тут зрозуміло, чи ми читаємо дані (прапор зайнятості дисплея, наприклад), у разі цьому висновку 1, чи записуємо команду/дані у дисплей, тоді в нас 0.

DB7 - DB0 - шина даних, і цим все сказано)

Пін E – так званий Enable Signal. Потрібний він ось для чого. Щоб працювати з дисплеєм – записувати дані чи подавати команду – нам треба видати цей висновок позитивний імпульс. Тобто процедура буде виглядати так:

  1. На піни RS, R/W, DB7 – DB0 – необхідні сигнали, відповідні нашій команді.
  2. Подаємо одиницю висновку E.
  3. Ждемс (за датаситом – не менше 150 нс)
  4. Подаємо висновок E низький рівень (0).

На ніжку A/Vee треба сунути 4.2 для живлення підсвічування дисплея.

Ось так відбувається спілкування з дисплеєм WH1602.

З підключенням WH1602 розібралися, але перш, ніж переходити, наприклад, розглянемо які взагалі команди розуміє наш дисплей. Для цього ліземо в даташит і знаходимо цікаву таблицю:

Тут описані всі команди та сигнали, які мають бути на відповідних висновках WH1602 для кожної конкретної команди. Ось хочемо ми, наприклад, очистити дисплей, дивимося в таблицю, і ось вона потрібна команда! Clear Display!

Подаємо висновки RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 нулі, але в ніжку DB0 – одиницю. Готово що далі? Вірно, одиницю на пін E, потім очікуємо деякий час і знову опускаємо E в нуль. Все, дисплей очищений 😉 Тільки перед виконанням наступної команди необхідно витримати паузу, вказану в датасіті для кожної команди. Ефективнішим буде опитування прапора зайнятості, як тільки він скинувся в 0 – можна працювати далі. Для читання цього прапора теж є спеціальна команда, тож з цим все зрозуміло) Йдемо далі…

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

Отримуємо у своє розпорядження 2 файли, MT_WH1602.c та MT_WH1602.h. Відриваємо другий, тут треба зробити вибір висновків і використовуваного контролера.

Дисплей у мене, до речі, підключений так:

RS – PC2
R/W – PB10
E – PB14
DB7 – PD2
DB6 – PC12
DB5 – PA8
DB4 – PA10
DB3 – PA15
DB2 – PD11
DB1 – PA3
DB0 - PA5

Відкриваємо файл MT_WH1602.h:

#define PLATFORM (STM32F10x)

Далі вибираємо висновки мікроконтролера, до яких у нас підключено дисплей. Тільки спочатку поставимо, які порти у нас задіяні. Ось при моєму підключенні у мене використовуються GPIOA, GPIOB, GPIOC і GPIOD.

Аналогічно для інших ніжок мікроконтролера.

З налаштуванням покінчили, продовжуємо) Для виклику команд, наведених на початку статті у файлі MT_WH1602.c містяться такі функції (названі вони за назвою команд, так що тут, думаю, все зрозуміло):

void MT_WH1602_ClearDisplay(void ); void MT_WH1602_ReturnHome(void); void MT_WH1602_EntryModeSet (bool IDaddress, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit); void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit); void MT_WH1602_SetCGRAMAddress (uint8_t address) ; void MT_WH1602_SetDDRAMAddress (uint8_t address) ; bool MT_WH1602_ReadBusy(void); void MT_WH1602_WriteData(uint8_t data) ;

Для деяких команд нам потрібно передати в функцію параметри, наприклад:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit);

Дивимося до таблиці команд:

Бачимо, що командою Display ON/OFF не лише вмикати/вимикати дисплей, але також активувати/деактивувати курсор та миготіння курсору. У даташіті ці біти команди позначені як D, C і B, їх то ми і передаємо як параметри в функцію. Якщо нам потрібно ввімкнути дисплей та курсор, але відключити миготіння курсору, викликаємо команду наступним чином:

MT_WH1602_DisplayOnOff(1, 1, 0);

Загалом все просто 😉

Коротше, створюємо новий проект, додаємо бібліотеку для роботи з дисплеєм WH1602, створюємо порожній.c файл і починаємо заповнювати його кодом:

// Підключаємо файл бібліотеки#include "MT_WH1602.h" /*******************************************************************/ int main (void) ( // Викликаємо функцію ініціалізації, без цього нікуди =)() ; // Тепер потрібно провести початкову конфігурацію дисплея // Документація та інтернет рекомендують робити так;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Delay(1000); MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000); // Я тут значення затримки для прикладу взяв перші, хто прийшов на думку) // Взагалі потрібно перевіряти прапор зайнятості дисплея // Давайте тепер виведемо щось на дисплей, наприклад назву нашого сайту MT_WH1602_WriteData(0x6D ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x69); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x63 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x72 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x6F); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x74 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x65 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x63 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x68); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x6E); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x69); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x63 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x73 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x2E); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x72 ); MT_WH1602_Delay(100 ); MT_WH1602_WriteData(0x75 ); MT_WH1602_Delay(100 ); while (1 ) ( __NOP() ; ) ) /*******************************************************************/

Готово, перевіряємо)


Як бачите, все працює правильно)

До речі, я якось втратив з уваги питання про те, що ж писати в дисплей, щоб вивести той чи інший символ. Ось табличка з даташиту:

Так ось, щоб визначити яке значення записати на згадку про дисплей, потрібно для конкретного символу взяти числа, написані зверху і зліва в цій таблиці. Наприклад, символ "А". Дивимося – цьому символу відповідає колонка 0100 (0х4) та рядок 0001 (0х1). Виходить, що з виведення символу “А” потрібно записати на дисплей значення 0х41.

Ось тепер начебто все =) Розібралися ми із підключенням та роботою дисплея WH1602, так що до швидкого!

P.S. Я при роботі з бібліотекою не тестував функцію читання прапора зайнятості, тож якщо раптом щось працюватиме не так, як треба, пишіть, розбиратимемося)

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

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

У прикладі ми розглянемо дисплей Winstar wh1602l1 – один із найпоширеніших дисплеїв на контролері hd44780. Крім того, Ви можете підключати LCD 2004 та інші аналогічні.
Перші дві цифри позначають кількість символів у рядку, а другі кількість рядків, таким чином, вибраний дисплей має 2 рядки по 16 символів.
Цей спосіб підключення передбачає заняття щонайменше 6 портів мікроконтролера Ардуїно. У разі потреби Ви можете підключити текстовий дисплей 1602 через I2C інтерфейс (2 порти).

З додаткових елементів нам знадобиться змінний резистор, для керування контрастністю. В іншому все підключається за схемою, згідно з даташитом та вибраними виходами Arduino у програмі.

Висновки 15 і 16 на дисплеї відповідають за підсвічування, його можна вимкнути або зробити автоматичне регулювання яскравості при підключенні фоторезистора до Arduino як датчика яскравості.

У нашому прикладі будемо зчитувати дані з послідовного порту та виводити їх на дисплей:

#include // Підключаємо бібліотеку роботи із символьними дисплеями LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) підключаємо виходи дисплея відповідно до послідовності, R/W – GND, тому що ми записуватимемо дані в дисплей, а не зчитуватимемо void setup() ( lcd.begin(16, 2); // Ініціалізуємо LCD 1602 // lcd.begin(20, 4); // Ініціалізуємо LCD 2004 Serial.begin(9600); // Запускаємо послідовний порт) void loop() ( if (Serial.available()) // Якщо з порту надходжу дані, то... (delay(100); lcd.clear(); // Повністю очищаємо екран while (Serial.available() > 0) // Якщо з порту надходжу дані більше 0, то ... ( lcd.write(Serial.read()); // Зчитуємо значення із serial порту і виводимо їх на дисплей ) ) )

Ви можете ускладнити код і вивести годинник реального часу DS1307 на Arduino на LCD1602.

Тепер детальніше розглянемо всі функції в бібліотеці LiquidCrystal:

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

lcd.print();- найпростіша і найчастіше використовується, використовується для виведення інформації.

lcd. clear(); - використовується для чищення дисплея.

lcd.setCursor(x, y); - Встановлює курсор на певне місце.

Х – зміна позиції у рядку

Y – зміна рядка

Наприклад, lcd.setCursor(0, 0); це верхній лівий осередок.

lcd.home(); -ставить курсор у позицію 0, 0

lcd.home(); = lcd.setCursor(0, 0);

lcd. scrollDisplayLeft(); - Зрушення вліво

lcd. scrollDisplayRight(); - Зрушення вправо

Lcd.createChar(ім'я, масив); - Створення власного знака.

Наприклад знак градуса виглядає ось так:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000);




Top