LCD I2C модуль підключення до Arduino. LCD I2C модуль підключення до Arduino Lcd екран підключення за інтерфейсом i2c

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

Придбав я тут від гарного магазину Чіп Резістор черговий девайс для вивчення та застосування у корисних пристроях. Цей девайс виявився заточений для керування ЖК-дисплеєм під керуванням контролера HD44780, в 4-бітному режимі. Для цієї мети на платі встановлена ​​мікросхема , яка є перетворювачем шини I2C паралельний 8 бітний порт.

Плата розведена таким чином, щоб її можна було відразу схрестити з РК-дисплеєм. На вхід подається живлення та лінії I2C. На платі відразу встановлені підтягуючі резистори на лініях SCL та SDA, потенціометр для регулювання контрастності та живлення самого дисплея.

Джампер справа вмикає/вимикає підсвічування. Далі озброївшись тестером, була складена наступна табличка. Після вивчення модуля було виявлено що P3керує підсвічуванням. Якщо джампер встановлений, 1 включає підсвічування, а 0 вимикає. При знятому джампері підсвічування завжди вимкнене. Далі було прийнято рішення доповнити бібліотеку axlib функціями для роботи з шиною I2C (програмна реалізація) та функціями для керування мікросхемою PCF8574. Двома словами як працює модуль. Для того щоб вивести паралельно байт, для цього потрібно послати в шину I2C адресу мікросхеми (за умовчанням він дорівнює 0x4E. Також можна змінювати адресу методом впаювання перемичок на платі і змінюючи значення трьох молодших розрядів адреси), потім після отримання ACK посилається байт даних. Після того, як мікросхема відповідає ACK, байт з'являється на паралельному порту мікросхеми. Для управління РК-дисплеєм я взяв функції з бібліотеки axlib і трохи переробив їх для роботи з шиною I2C. #include #include #include #include #define ADD 0x4E // Адреса мікросхеми /* LCD Мікросхема RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 На ніжці P3 підключено підсвічування. 1 вкл., 0 вимк. */ // Виведення даних com | = 0x04; // Е в одиницю pcf8574_byte_out(com, ADD); // Виведення даних com &= 0xFB; // Є в нуль pcf8574_byte_out(com, ADD); // Виведення даних) void init (void) (_delay_ms (30); com(0x30); _delay_us(40); com(0x30); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x30); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x20); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x20); // Встановлення параметрів com(0x80); // Встановлення параметрів com(0x00); // Вимикаємо дисплей com(0x80); // Вимикаємо дисплей com(0x00); // Очищаємо дисплей com(0x10); // Очищаємо дисплей com(0x00); com(0x60); // Встановлюємо режим введення даних com(0x00); com(0xC0); // Включаємо дисплей з вибраним курсором) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Передача старших 4 біт data_h |= 0x04; pcf8574_byte_out(data_h, ADD)); // Передача старших 4 біт // Передача старших 4 біт // Передача молодших 4 біт // Передача молодших 4 біт // Передача молодших 4 біт) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" );while(1) ( ) )Власне, що тут відбувається. Спочатку підключаємо бібліотеки для I2C та PCF8574. Про I2C я писав вже, тому розпинатися ще раз на буду, а ось що в PCF8574.h я розповім. До складу бібліотеки увійшли лише три функції.
BYTE pcf8574_test(BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; )Першу функцію було написано для перевірки наявності пристрою на шині. В принципі її можна застосовувати для пошуку будь-якого пристрою, що знаходиться на шині. Функція приймає адресу пристрою і якщо він відповідає, то повертає нуль. Якщо пристрій з такою адресою немає на шині, поверне одиницю.
BYTE pcf8574_byte_out(BYTE data, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); )Ця функція вже заточена виключно під цю мікросхему. Як аргументи їй передаються байт для передачі в шину та адресу мікросхеми. Функція спочатку запросить мікросхему за адресою, а потім надішле байт. Якщо мікросхема отримала байт і відповіла ACK, то функція закінчить роботу з мікросхемою і поверне нуль, як вдала посилка байта. А мікросхема тим часом виведе цей байт у свій паралельний порт. Інакше отримаємо NACK та повернемо одиницю, передача провалилася.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Ця функція призначена для експерименту. Приймає покажчик на масив однобайтових даних, кількість цих байт та адресу мікросхеми. Власне, спроба передати всі дані однією сесією, а не одним байтом за сесію. Функція працює, але так для РК-дисплея і не підійшла. А тепер повернімося до основної програми. Після підключення бібліотек прописуємо адресу мікросхеми. Далі створюємо три функції за аналогією з lcd.h. Відмінність лише у принципі передачі.
void com (BYTE com) (com | = 0x08; // Р3 на одиницю, щоб горіло підсвічування pcf8574_byte_out(com, ADD); // Виведення даних com | = 0x04; // Е в одиницю pcf8574_byte_out(com, ADD); // Виведення даних com &= 0xFB; // Є в нуль pcf8574_byte_out(com, ADD); // Виведення даних } Ця функція передає лише команди дисплея. Звідси з'явився перший рядок із логічним додаванням команди з 0х08. Ця бяка потрібна через те, що ми передаємо байт не прямо в порт РК-дисплея, а через наш ретранслятор. Тобто якщо ми подали байт, а потім нам потрібно вивести лише один біт, то будьте ласкаві до попереднього байта привласнить потрібний біт і вже його знову відправити в порт. Ось така проблема. Додавання з 0х08 необхідне постійного утримання одиниці третьому розряді. Пам'ятаєте про підсвічування? Ось саме це додавання і включає підсвічування. Після цього викликаємо функцію передачі байта в шину. Про неї написано вище. Потім передаємо байт по шині мікросхему. Далі слід виставити в одиницю Е, чим займається логічне складання байта з 0х04. Після обнулення Е. Таким чином можна надіслати будь-яку команду дисплею лише передавши як аргумент саму команду. void init(void) (_delay_ms(30); // Пауза після подачі харчування com(0x30); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x30); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x30); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x20); // Перехід у 4-бітний режим _delay_us(40); // Затримка до виконання команди com(0x20); // Встановлення параметрів com(0x80); // Встановлення параметрів com(0x00); // Вимикаємо дисплей com(0x80); // Вимикаємо дисплей com(0x00); // Очищаємо дисплей com(0x10); // Очищаємо дисплей com(0x00); // Встановлюємо режим введення даних com(0x60); // Встановлюємо режим введення даних com(0x00); // Включаємо дисплей з вибраним курсором com(0xC0); // Включаємо дисплей з вибраним курсором } Ця функція займається лише ініціалізацією дисплея. Послідовність команд взята з даташита на РК-дисплей. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Передача старших 4 біт data_h |= 0x04; pcf8574_byte_out(data_h, ADD)); // Передача старших 4 біт data_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Передача старших 4 біт pcf8574_byte_out(data_l, ADD); // Передача молодших 4 біт data_l | = 0x04; pcf8574_byte_out(data_l, ADD); // Передача молодших 4 біт data_l &= 0xF9; pcf8574_byte_out(data_l, ADD); // Передача молодших 4 біт } Ця функція передає дані РК дисплею. Виконується так само, як і команди за винятком того, що передача байта йде спочатку старшим напівбайтом, а потім молодшим. А решта теж саме. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) )Ну а ця функція чисто для передачі рядка дисплею. Власне до нашої теми вона жодного стосунку не має.

Проект для AtmelStudio 6.2 

Грамотний 01.08.15 17:11

Кома пропущена. Правильно: "ПРИВІТ, СВІТ!" І цей аксесуар заточений не тільки для HD44780. Підтягуючі резистори ставляться з боку майстра. Відповідно до специфікації, запис даних у контролер LCD йде за спадом Е. Звідси перша ж функція спрощується: void com (BYTE com) (com | = 0x08; // підсвічування pcf8574_byte_out (com | 0x04, ADD); // Виведення даних pcf8574_byte_out , ADD);// Е в нуль) Та й інші теж істотно менше можуть бути. Наприклад, void char_out(BYTE data) буде всього з двох викликів, і особливо без додаткових змінних. Ініціалізація LCD виконана із порушеннями специфікації таймінгів.

Олексій 02.08.15 19:11

Через відсутність коми, дисплей не постраждає. Цей девайc заточений саме під дисплеї з таким, або аналогічним контролером. А ось саме мікросхема справді простий розширювач порту. Щодо Є я згоден. Додаткові змінні необхідні. Якщо передати функції аргумент з виконанням деяких дій з логікою, можуть з'явитися глюки. Вже з таким стикався. Ініціалізація виконується без порушень тайменгів. У документації сказано, що між командами ставиться пауза 40 мкс. Через те, що передача йде по шині i2c, а та в свою чергу програмна та повільна, то періоди виконуються з лишком. Якщо все ж Вам не ліньки, то напишіть свій варіант і надішліть мені. Я його опублікую. Зрештою даний сайт призначений на аматорську аудиторію і кожен, хто хоче, може висловити свою думку та бачення на життя МК.

Олексій 06.08.15 09:14

Додані тайменги при ініціалізації дисплея за зауваженням "Грамотного"

Дмитро 14.06.16 21:57

Доброго дня Олексій. Можна в генератор коду додати бібліотеку для роботи з PCF8574.

Олексій 14.06.16 22:32

Я подумаю.))

ruslan 21.12.16 19:54
Олексій 21.12.16 21:53

О так. Особливо код на асмі. Ардуїнщики оцінять по повній)))

Пи.си.
Навіть якщо не дивитися на асм, то там прога написана під контролер PIC. Для AVRщиків це "дуже" корисна інформація? особливо початківцям))) Я нічого не маю проти PIC, але навіть асм у PIC та AVR різний. А з приводу подробиць роботи РК дисплея, то можна глянути))) Правда я її ще писав під CVAVR але всі команди розібрані та розкладені по поличках. Але у будь-якому випадку вирішуйте самі де зрозуміліше написано))) Автор пише, читач обирає.

GeK 04.01.17 12:52

"I2C адреса мікросхеми (за умовчанням він дорівнює 0x4E")

Старші 4 біти адреси фіксовані,
префікс У PCF8574 дорівнює 0100, а PCF8574A - 0111
Молодші 3 біти залежить від стану входів мікросхеми A2-A0. За замовчуванням всі 3 перемички розімкнені, відповідно адреса мікросхеми набуває значення 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

Олексій 04.01.17 14:27

Щось ви переплутали.
Витяг з документації на мікросхему

0b01001110 це 0x4E
Так що тут все правильно. А якщо потрібно змінити адресу, то лише потрібно її поміняти в дефайні.

Юрій 14.12.17 21:26

Доброго вам дня! А можна ще код функції lcdgotoxy та lcdclear для роботи з перехідником на PCF8574.

Олександр 20.05.18 18:14

Доброго вам дня! як ви виводите російську текст.

Олексій 20.05.18 23:04

Це вітчизняний дисплей від фірми МЕЛТ. У нього в пам'яті зашита кирилиця.

Олександр 21.05.18 04:55

Доброго вам дня! Я пиши як у вас у Проект для AtmelStudio 6.2 " ЁPҐBET MҐP!" то виводить нормально
а якщо пиши "ПРИВІТ СВІТ!" виводить нісенітницю всяку. у мене два
варіанти дисплеїв в одного зашита кирилиця. другий китайський.

Олексій 21.05.18 09:22

Я б спершу написав би тестову програму. Перебір усієї пам'яті з відображенням символів та їх адрес. А потім уже з'ясовувати у чому проблема. Швидше за все, таблиця символів не збігається з таблицею ascii.

Андрій 03.09.18 08:32

Доброго дня!

А схемку під Proteus не можете підкинути?

Андрій 03.09.18 10:22

Чи в Proteuse ніхто не перевіряв?

Андрій 03.09.18 10:56

Розібрався main_init

Павло 30.05.19 23:35

Цікава річ, адреса дисплея 0х4Е, а якщо той самий дисплей підключити до ардуїнки то адреса 0х27

Павло 31.05.19 11:04

Дякую за Вашу роботу! Перерив весь інтернет, жоден із наведених прикладів, крім Вашого, не заробив. Єдине, в архіві проекту функції ініціалізації дисплея не прописані затримки _delay_, і він відповідно не працює

Олексій 01.06.19 09:52

Ну, це більше демонстраційний проект. По хорошому потрібно бібліотеку axlib переписувати, але з урахуванням того, що STM32 і STM8 рухається семимильними кроками, сенсу в AVR вже немає взагалі.

Павло 05.06.19 12:57

STM не має DIP корпусів, складніше робити друковані плати. Для моїх проектів можливостей AVR вистачає із запасом, на одній Atmega 8 дуже багато можна вмістити

Олексій 05.06.19 15:20

Так, але скільки коштує Atmega8 та stm8s003)))

Дмитро 07.06.19 00:41

Привіт, Олексію.
Підкажи, будь ласка, як потрібно читати з pcf8574 стан порту?
Хочу зробити зовнішній блок, 8 GPIO по шині i2c – саме воно.

Дмитро 07.06.19 17:56

Сам собі відповім
Функція повертає байт – стан портів мікросхеми
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr | = 0b01; //READ
uint8_t data=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

Return data;
}

Павло 07.06.19 20:37

Скільки коштує, 150 рублів, за ціною релюшки загалом), а як ви розводите плати під STM? ЛУТ ненадійний, ЧПУ фрезер не впевнений, що візьме (не пробував)

  • Модуль FC-113 зроблено на базі мікросхеми PCF8574T, яка є 8-бітовим зсувним регістром - «розширювачем» входів-виходів для послідовної шини I2C. На малюнку мікросхема позначено DD1.
  • R1 – підстроювальний резистор для регулювання контрастності РК дисплея.
  • Джампер J1 використовується для увімкнення підсвічування дисплея.
  • Висновки 1…16 служать підключення модуля до висновків LCD дисплея.
  • Контактні майданчики А1…А3 потрібні зміни адреси I2C пристрою. Запаюючи відповідні перемички, можна змінювати адресу пристрою. У таблиці наведено відповідність адрес та перемичок: "0" відповідає розриву ланцюга, "1" - встановленої перемичці. За замовчуванням усі 3 перемички розімкнені та адреса пристрою 0x27.

2 Схема підключення РК дисплея до Arduinoза протоколом I2C

Підключення модуля Arduino здійснюється стандартно для шини I2C: висновок SDA модуля підключається до аналогового порту A4, висновок SCL - до аналогового порту A5 Ардуіно. Живлення модуля здійснюється напругою +5 від Arduino. Сам модуль з'єднується висновками 1…16 із відповідними висновками 1…16 на РК дисплеї.


3 Бібліотека для роботиза протоколом I2C

Тепер потрібна бібліотека для роботи з LCD за інтерфейсом I2C. Можна скористатися, наприклад, ось цим (посилання у рядку "Download Sample code and library").

Завантажений архів LiquidCrystal_I2Cv1-1.rarрозархівуємо в папку \libraries\яка знаходиться в директорії Arduino IDE.

Бібліотека підтримує набір стандартних функцій для екранів LCD:

ФункціяПризначення
LiquidCrystal() створює змінну типу LiquidCrystal та приймає параметри підключення дисплея (номери висновків);
begin() ініціалізація LCD дисплея, завдання параметрів (кількість рядків і символів);
clear() очищення екрана та повернення курсору в початкову позицію;
home() повернення курсору у початкову позицію;
setCursor() встановлення курсору на задану позицію;
write() виводить символ на РК екран;
print() виводить текст на РК екран;
cursor() показує курсор, тобто. підкреслення під місцем наступного символу;
noCursor() ховає курсор;
blink() миготіння курсору;
noBlink() скасування миготіння;
noDisplay() вимкнення дисплея зі збереженням всієї інформації, що відображається;
display() включення дисплея зі збереженням всієї інформації, що відображається;
scrollDisplayLeft() прокручування вмісту дисплея на 1 позицію вліво;
scrollDisplayRight() прокручування вмісту дисплея на 1 позицію праворуч;
autoscroll() включення автопрокручування;
noAutoscroll() вимикання автопрокрутки;
leftToRight() задає напрямок тексту зліва направо;
rightToLeft() направлення тексту праворуч наліво;
createChar() створює символ користувача для LCD-екрана.

4 Скетч для виведення текстуна LCD екран по шині I2C

Відкриємо зразок: Файл Зразки LiquidCrystal_I2C CustomCharsі трохи його переробимо. Виведемо повідомлення, в кінці якого буде миготливий символ. У коментарях до коду прокоментовано всі нюанси скетчу.

#include // Підключаємо бібліотеку Wire #include // Підключаємо бібліотеку РК#define printByte(args) write(args); // uint8_t heart = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // бітова маска символу "серце" LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаємо адресу 0x27 для LCD дисплея 16x2 void setup() ( lcd.init(); // ініціалізація РК дисплея lcd.backlight(); // Увімкнення підсвічування дисплея lcd.createChar(3, heart); // Створюємо символ «серце» в 3 осередку пам'яті lcd.home(); // ставимо курсор у лівий верхній кут, у позицію (0,0) lcd.!"); // друкуємо рядок тексту lcd.setCursor(0, 1); // переклад курсора на рядок 2, символ 1 lcd.print( "i"); // друкуємо повідомлення на рядку 2 lcd.printByte(3); // друкуємо символ «серце», що знаходиться в 3-му осередку lcd.print("Arduino"); } void loop() (// миготіння останнього символу lcd.setCursor(13, 1); // Переведення курсору на рядок 2, символ 1 lcd.print("\t"); delay(500); lcd.setCursor(13, 1); // Переклад курсора на рядок 2, символ 1 lcd.print(" "); delay(500); }

До речі, символи, записані командою lcd.createChar();, залишаються у пам'яті дисплея після вимкнення живлення, т.к. записуються у ПЗУ дисплея 1602.

5 Створення власних символівдля РК дисплея

Дещо докладніше розглянемо питання створення власних символів для РК екранів. Кожен символ на екрані складається з 35-ти точок: 5 завширшки і 7 заввишки (+1 резервний рядок для підкреслення). У рядку 6 наведеного скетчу ми задаємо масив із 7-ми чисел: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Перетворимо 16-річні числа на бінарні: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Ці числа - не що інше, як бітові маски для кожного з 7 рядків символу, де "0" позначають світлу точку, а "1" - темну. Наприклад, символ серця, заданий у вигляді маски біта, буде виглядати на екрані так, як показано на малюнку.

6 Управління РК екраномпо шині I2C

Завантажимо скетч до Arduino. На екрані з'явиться заданий нами з миготливим курсором в кінці.


7 Що знаходиться «за»шиною I2C

Як бонус розглянемо тимчасову діаграму виведення латинських символів "A", "B" та "С" на РК дисплей. Ці символи є в дисплеї ПЗУ і виводяться на екран просто передачею дисплею їх адреси. Діаграма знята з висновків RS, RW, E, D4, D5, D6 та D7 дисплея, тобто. вже після перетворювача FC-113 "I2C паралельна шина". Можна сказати, що ми поринаємо трохи «глибше» в «залізо».


Тимчасова діаграма виведення латинських символів "A", "B" та "С" на LCD дисплей 1602

На діаграмі видно, що символи, що є в ПЗУ дисплея (див. стор.11 даташита, посилання нижче), передаються двома напівбайтами, перший з яких визначає номер стовпця таблиці, а другий номер рядка. При цьому дані «клацаються» по фронту сигналу на лінії E(Enable), а лінія RS(Register select, вибір регістру) перебуває у стані логічної одиниці, що означає передачу даних. Низький стан лінії RS означає передачу вказівок, що ми бачимо перед передачею кожного символу. У цьому випадку передається код інструкції повернення каретки на позицію (0, 0) РК дисплея, про що також можна дізнатися, вивчивши технічний опис дисплея.

І ще один приклад. На цій часовій діаграмі показано виведення символу «Серце» на РК-дисплей.


Знову, перші два імпульси Enableвідповідають інструкції Home()(0000 0010 2) - повернення каретки на позицію (0; 0), а другі два - виведення на РК дисплей, що зберігається в комірці пам'яті 3 10 (0000 0011 2) символ «Серце» (інструкція lcd.createChar(3, heart);скетчу).

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

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("сайт"); // Виводимо текст) void loop ()( )

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

  • Модуль FC-113 зроблено на базі мікросхеми PCF8574T, яка є 8-бітовим зсувним регістром - «розширювачем» входів-виходів для послідовної шини I2C. На малюнку мікросхема позначено DD1.
  • R1 – підстроювальний резистор для регулювання контрастності РК дисплея.
  • Джампер J1 використовується для увімкнення підсвічування дисплея.
  • Висновки 1…16 служать підключення модуля до висновків LCD дисплея.
  • Контактні майданчики А1…А3 потрібні зміни адреси I2C пристрою. Запаюючи відповідні перемички, можна змінювати адресу пристрою. У таблиці наведено відповідність адрес та перемичок: "0" відповідає розриву ланцюга, "1" - встановленої перемичці. За замовчуванням усі 3 перемички розімкнені та адреса пристрою 0x27.

2 Схема підключення РК дисплея до Arduinoза протоколом I2C

Підключення модуля Arduino здійснюється стандартно для шини I2C: висновок SDA модуля підключається до аналогового порту A4, висновок SCL - до аналогового порту A5 Ардуіно. Живлення модуля здійснюється напругою +5 від Arduino. Сам модуль з'єднується висновками 1…16 із відповідними висновками 1…16 на РК дисплеї.


3 Бібліотека для роботиза протоколом I2C

Тепер потрібна бібліотека для роботи з LCD за інтерфейсом I2C. Можна скористатися, наприклад, ось цим (посилання у рядку "Download Sample code and library").

Завантажений архів LiquidCrystal_I2Cv1-1.rarрозархівуємо в папку \libraries\яка знаходиться в директорії Arduino IDE.

Бібліотека підтримує набір стандартних функцій для екранів LCD:

ФункціяПризначення
LiquidCrystal() створює змінну типу LiquidCrystal та приймає параметри підключення дисплея (номери висновків);
begin() ініціалізація LCD дисплея, завдання параметрів (кількість рядків і символів);
clear() очищення екрана та повернення курсору в початкову позицію;
home() повернення курсору у початкову позицію;
setCursor() встановлення курсору на задану позицію;
write() виводить символ на РК екран;
print() виводить текст на РК екран;
cursor() показує курсор, тобто. підкреслення під місцем наступного символу;
noCursor() ховає курсор;
blink() миготіння курсору;
noBlink() скасування миготіння;
noDisplay() вимкнення дисплея зі збереженням всієї інформації, що відображається;
display() включення дисплея зі збереженням всієї інформації, що відображається;
scrollDisplayLeft() прокручування вмісту дисплея на 1 позицію вліво;
scrollDisplayRight() прокручування вмісту дисплея на 1 позицію праворуч;
autoscroll() включення автопрокручування;
noAutoscroll() вимикання автопрокрутки;
leftToRight() задає напрямок тексту зліва направо;
rightToLeft() направлення тексту праворуч наліво;
createChar() створює символ користувача для LCD-екрана.

4 Скетч для виведення текстуна LCD екран по шині I2C

Відкриємо зразок: Файл Зразки LiquidCrystal_I2C CustomCharsі трохи його переробимо. Виведемо повідомлення, в кінці якого буде миготливий символ. У коментарях до коду прокоментовано всі нюанси скетчу.

#include // Підключаємо бібліотеку Wire #include // Підключаємо бібліотеку РК#define printByte(args) write(args); // uint8_t heart = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // бітова маска символу "серце" LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаємо адресу 0x27 для LCD дисплея 16x2 void setup() ( lcd.init(); // ініціалізація РК дисплея lcd.backlight(); // Увімкнення підсвічування дисплея lcd.createChar(3, heart); // Створюємо символ «серце» в 3 осередку пам'яті lcd.home(); // ставимо курсор у лівий верхній кут, у позицію (0,0) lcd.!"); // друкуємо рядок тексту lcd.setCursor(0, 1); // переклад курсора на рядок 2, символ 1 lcd.print( "i"); // друкуємо повідомлення на рядку 2 lcd.printByte(3); // друкуємо символ «серце», що знаходиться в 3-му осередку lcd.print("Arduino"); } void loop() (// миготіння останнього символу lcd.setCursor(13, 1); // Переведення курсору на рядок 2, символ 1 lcd.print("\t"); delay(500); lcd.setCursor(13, 1); // Переклад курсора на рядок 2, символ 1 lcd.print(" "); delay(500); }

До речі, символи, записані командою lcd.createChar();, залишаються у пам'яті дисплея після вимкнення живлення, т.к. записуються у ПЗУ дисплея 1602.

5 Створення власних символівдля РК дисплея

Дещо докладніше розглянемо питання створення власних символів для РК екранів. Кожен символ на екрані складається з 35-ти точок: 5 завширшки і 7 заввишки (+1 резервний рядок для підкреслення). У рядку 6 наведеного скетчу ми задаємо масив із 7-ми чисел: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Перетворимо 16-річні числа на бінарні: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Ці числа - не що інше, як бітові маски для кожного з 7 рядків символу, де "0" позначають світлу точку, а "1" - темну. Наприклад, символ серця, заданий у вигляді маски біта, буде виглядати на екрані так, як показано на малюнку.

6 Управління РК екраномпо шині I2C

Завантажимо скетч до Arduino. На екрані з'явиться заданий нами з миготливим курсором в кінці.


7 Що знаходиться «за»шиною I2C

Як бонус розглянемо тимчасову діаграму виведення латинських символів "A", "B" та "С" на РК дисплей. Ці символи є в дисплеї ПЗУ і виводяться на екран просто передачею дисплею їх адреси. Діаграма знята з висновків RS, RW, E, D4, D5, D6 та D7 дисплея, тобто. вже після перетворювача FC-113 "I2C паралельна шина". Можна сказати, що ми поринаємо трохи «глибше» в «залізо».


Тимчасова діаграма виведення латинських символів "A", "B" та "С" на LCD дисплей 1602

На діаграмі видно, що символи, що є в ПЗУ дисплея (див. стор.11 даташита, посилання нижче), передаються двома напівбайтами, перший з яких визначає номер стовпця таблиці, а другий номер рядка. При цьому дані «клацаються» по фронту сигналу на лінії E(Enable), а лінія RS(Register select, вибір регістру) перебуває у стані логічної одиниці, що означає передачу даних. Низький стан лінії RS означає передачу вказівок, що ми бачимо перед передачею кожного символу. У цьому випадку передається код інструкції повернення каретки на позицію (0, 0) РК дисплея, про що також можна дізнатися, вивчивши технічний опис дисплея.

І ще один приклад. На цій часовій діаграмі показано виведення символу «Серце» на РК-дисплей.


Знову, перші два імпульси Enableвідповідають інструкції Home()(0000 0010 2) - повернення каретки на позицію (0; 0), а другі два - виведення на РК дисплей, що зберігається в комірці пам'яті 3 10 (0000 0011 2) символ «Серце» (інструкція lcd.createChar(3, heart);скетчу).