Контакти

Чи не працює lcd 1 602 i2c. Підключення LCD екрана LCM1602 з I2C до Arduino. Підключення I2C пристрої до Arduino

Придбав я тут від хорошого магазину Чіп Резистор черговий девайс для вивчення і застосування в корисних пристроях. Цей девайс виявився заточений для управління ЖК дисплеєм під управлінням контролера HD44780, в 4-х біт. Для цієї мети на платі встановлена \u200b\u200bмікросхема, яка є перетворювачем шини 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 | \u003d 0x04; // Е в одиницю pcf8574_byte_out (com, ADD); // Висновок даних com & \u003d 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 \u003d ((data & 0xF0) + 0x09); BYTE data_l \u003d ((data // Передача старших 4 біт data_h | \u003d 0x04; pcf8574_byte_out (data_h, ADD); // Передача старших 4 біт // Передача старших 4 біт // Передача молодших 4 біт // Передача молодших 4 біт // Передача молодших 4 біт ) Void str_out (BYTE * str) (while ((* str)! \u003d "\\ 0") (char_out (* str); str ++;)) int main (void) (init (); str_out ( "YOPҐBET MҐP!" ); while (1) ()) Власне що тут відбувається. Спочатку підключаємо бібліотеки для I2C і для PCF8574. Про I2C я писав уже, тому розпинатися ще раз на буду, а от що в PCF8574.h я розповім. До складу бібліотеки увійшли всього три функції.
BYTE pcf8574_test (BYTE add) (BYTE ask \u003d ACK; add & \u003d 0xFE; i2c_start (); ask \u003d i2c_send_byte (add); i2c_stop (); return ask;) Перша функція була написана для перевірки наявності пристрою на шині. В принципі її можна застосовувати для пошуку будь-якого пристрою знаходиться на шині. Функція приймає адресу шуканого пристрою і якщо воно відповідає, то повертає нуль. Якщо пристрій з такою адресою немає на шині, то поверне одиницю.
BYTE pcf8574_byte_out (BYTE data, BYTE add) (BYTE ask \u003d ACK; add & \u003d 0xFE; i2c_start (); ask \u003d i2c_send_byte (add); if (! Ask) ask \u003d i2c_send_byte (data); i2c_stop (); return ask; ) Ця функція вже заточена чисто під дану мікросхему. В якості аргументів їй передаються байт для передачі в шину і адреса мікросхеми. Функція спочатку запросить мікросхему за адресою, а потім пошле байт. Якщо мікросхема отримала байт і відповіла ACK, то функція закінчить роботу з мікросхемою і поверне нуль як вдала посилка байта. А мікросхема в цей час виведе цей байт в свій паралельний порт. Інакше отримаємо NACK і повернемо одиницю, передача провалилася.
BYTE pcf8574_str_out (BYTE * data, BYTE col, BYTE add) (BYTE ask \u003d ACK; add & \u003d 0xFE; i2c_start (); ask \u003d i2c_send_byte (add); for (BYTE i \u003d 0; i Ця функція створена для експерименту. Приймає покажчик на масив однобайтових даних, кількість цих байт і адреса мікросхеми. Власне спроба передати все дані однією сесією, а не одним байтом за сесію. Функція працює, але так для ЖК дисплея і не підійшла. А тепер давайте повернемося до основної програми. Після підключення бібліотек, прописуємо адресу мікросхеми. Далі створюємо три функції по аналогії з lcd.h. Відмінність лише в принципі передачі даних.
void com (BYTE com) (com | \u003d 0x08; // Р3 в одиницю, щоб горіла підсвічування pcf8574_byte_out (com, ADD); // Висновок даних com | \u003d 0x04; // Е в одиницю pcf8574_byte_out (com, ADD); // Висновок даних com & \u003d 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 \u003d ((data & 0xF0) + 0x09); BYTE data_l \u003d ((data // Передача старших 4 біт data_h | \u003d 0x04; pcf8574_byte_out (data_h, ADD); // Передача старших 4 біт data_h & \u003d 0xF9; pcf8574_byte_out (data_h, ADD); // Передача старших 4 біт pcf8574_byte_out (data_l, ADD); // Передача молодших 4 біт data_l | \u003d 0x04; pcf8574_byte_out (data_l, ADD); // Передача молодших 4 біт data_l & \u003d 0xF9; pcf8574_byte_out (data_l, ADD); // Передача молодших 4 біт } Ця функція передає дані РК дисплею. Виконується так само як і команди за винятком того, що передача байта йде спочатку старшим напівбайтів, а потім молодшим. А решта теж саме. void str_out (BYTE * str) (while ((* str)! \u003d "\\ 0") (char_out (* str); str ++;)) Ну, а ця функція чисто для передачі рядка дисплею. Власне до нашої теми вона ніякого відношення не має.

Проект для AtmelStudio 6.2

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

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

Олексій 02.08.15 19:11

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

Олексій 06.08.15 9: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 4:55

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

Олексій 21.05.18 9:22

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

Андрій 03.09.18 8: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 9: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 \u003d ACK;
addr | \u003d 0b01; // READ
uint8_t data \u003d 0;
i2c_start ();
ask \u003d i2c_send_byte (addr);
if (! ask) data \u003d 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 \u003d (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 ();, Залишаються в пам'яті дисплея навіть після вимкнення живлення, тому що записуються в ПЗУ дисплея тисячу шістсот дві.

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); скетчу).

У цій статті розповім, як використовувати інтерфейсний модуль I2C для управління LCD дисплеєм (2 × 16 / 20х4) за допомогою Arduino. Даний модуль дозволяє зменшити кількість використовуваних висновків контролера, замість 8 або 4-бітного з'єднання, потрібно тільки 2 виведення (SDA і SCL).

Технічні характеристики

Підтримка дисплеїв: LCD 16 × 02/20 × 04
Додатково: регулювання контрастності
Напруга живлення. 5В
Інтерфейс: I2C
Габарити: 54мм x 19мм x 15мм

Загальні відомості интерфейсного модуля I2C

Оскільки кількість контактів на контролерах Arduino обмежена і часто при використанні різних датчиків і модулів вони закінчуються, з'являється необхідність в їх економії, для цих випадок розроблений цей модуль, з його допомогою можна реалізувати передачу по двом контактам (SDA і SCL).

Тепер трохи про самому модулі, побудований він на мікросхемі PCF8574T. Резистори R8 (4.7кОм) і R9 (4.7кОм) необхідні для підтяжки ліній SDA і SCL, в ідеалі при підключенні двох і більше пристроїв по шині I2C необхідно використовувати підтяжку тільки на одному пристроїв, пізніше напишу чому. На платі передбачені три перемички (за схемою видно що лінії A0, A1, A2 підтягнуті до харчування через резистори R4, R5, R6), необхідні вони для зміни адресації пристрої, всього їх 8 варіантів. Зміна адресації дає нам можливість підключення до восьми пристроїв по шині IC2 c мікросхемою PCF8574T, варіанти адрес показані на малюнку (за замовчуванням адреса пристрою 0x27). Так само модуль оснащений потенціометром R11 з його допомогою можна змінити контрастність LCD дисплея.

Для з'єднання на модулі розташовано три групи контактів:

Перша група:
SCL: лінія тактирования (Serial CLock)
SDA: лінія даних (Serial Dфta)
VCC: «+» харчування
GND: «-» харчування

Друга група:
VSS: «-» харчування
VDD: «+» харчування
VO: Висновок управління контрастом
RS: Вибір регістру
RW: Читання / запис (режим запису при з'єднанні з землею)
E: Еnable (стрибає по спаду)
DB0-DB3: Молодші біти інтерфейсу
DB4-DB7: Старші біти інтерфейсу
A: «+» харчування підсвічування
K: «-» харчування підсвічування

Третя група: (за замовчуванням встановлена \u200b\u200bперемичка)
VCC:
A від LCD:

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

Необхідні деталі:
Arduino UNO R3 x 1 шт.
LCD-дисплей 1602A (2 × 16, 5V, Синій) x 1 шт.
Інтерфейсний модуль I2C, IIC, TWI для LCD x 1 шт.
Провід DuPont, 2,54 мм, 20 см, F-M (Female - Male) x 1 шт.
Кабель USB 2.0 A-B x 1 шт.

підключення:
Насамперед, припаюємо модуль I2C до LCD дисплеєм, а потім необхідно підключити дисплей до Arduino UNO. Для цього скористаємося проводками DuPont, підключення здійснюємо по таблиці нижче.

Для наочності, наведу ще одну схему.

Для цього експерименту необхідно завантажити та встановити бібліотеку «LiquidCrystal_I2C». Потім скопіюйте і вставте цей приклад коду у вікно програми IDE Arduino і завантажте в контролер.

/ * Тестувалося на Arduino IDE 1.6.11 Дата тестування 15.09.2016г. * / #Include #include LiquidCrystal_I2C lcd (0x27,16,2); // Задаємо адресу і розмір дисплея void setup () (lcd.init (); // Ініціалізація lcd lcd.backlight (); // Включаємо підсвічування lcd.setCursor (0,0); // Встановлюємо курсор в початок 1 рядка lcd .print ( "Hello, world"); // Виводимо текст lcd.setCursor (0,1); // Встановлюємо курсор в початок 2 рядки lcd.print ( "www.сайт"); // Виводимо текст) void loop ( ) ()

Тестувалося на Arduino IDE 1.6.11

Дата тестування 15.09.2016г.

#include

#include

LiquidCrystal_I2C lcd (0x27, 16, 2); // Задаємо адресу і розмір дисплея

void setup ()

lcd. init (); // Ініціалізація lcd

lcd. backlight (); // Включаємо підсвічування

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

lcd. print ( "www.сайт"); // Виводимо текст

void loop ()

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


посилання
завантажити бібліотеку
Документація на мікросхему

У цій статті розповім, як використовувати інтерфейсний модуль I2C для управління LCD дисплеєм (2 × 16 / 20х4) за допомогою Arduino. Даний модуль дозволяє зменшити кількість використовуваних висновків контролера, замість 8 або 4-бітного з'єднання, потрібно тільки 2 виведення (SDA і SCL).

Технічні характеристики

Підтримка дисплеїв: LCD 16 × 02/20 × 04
Додатково: регулювання контрастності
Напруга живлення. 5В
Інтерфейс: I2C
Габарити: 54мм x 19мм x 15мм

Загальні відомості интерфейсного модуля I2C

Оскільки кількість контактів на контролерах Arduino обмежена і часто при використанні різних датчиків і модулів вони закінчуються, з'являється необхідність в їх економії, для цих випадок розроблений цей модуль, з його допомогою можна реалізувати передачу по двом контактам (SDA і SCL).

Тепер трохи про самому модулі, побудований він на мікросхемі PCF8574T. Резистори R8 (4.7кОм) і R9 (4.7кОм) необхідні для підтяжки ліній SDA і SCL, в ідеалі при підключенні двох і більше пристроїв по шині I2C необхідно використовувати підтяжку тільки на одному пристроїв, пізніше напишу чому. На платі передбачені три перемички (за схемою видно що лінії A0, A1, A2 підтягнуті до харчування через резистори R4, R5, R6), необхідні вони для зміни адресації пристрої, всього їх 8 варіантів. Зміна адресації дає нам можливість підключення до восьми пристроїв по шині IC2 c мікросхемою PCF8574T, варіанти адрес показані на малюнку (за замовчуванням адреса пристрою 0x27). Так само модуль оснащений потенціометром R11 з його допомогою можна змінити контрастність LCD дисплея.

Для з'єднання на модулі розташовано три групи контактів:

Перша група:
SCL: лінія тактирования (Serial CLock)
SDA: лінія даних (Serial Dфta)
VCC: «+» харчування
GND: «-» харчування

Друга група:
VSS: «-» харчування
VDD: «+» харчування
VO: Висновок управління контрастом
RS: Вибір регістру
RW: Читання / запис (режим запису при з'єднанні з землею)
E: Еnable (стрибає по спаду)
DB0-DB3: Молодші біти інтерфейсу
DB4-DB7: Старші біти інтерфейсу
A: «+» харчування підсвічування
K: «-» харчування підсвічування

Третя група: (за замовчуванням встановлена \u200b\u200bперемичка)
VCC:
A від LCD:

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

Необхідні деталі:
Arduino UNO R3 x 1 шт.
LCD-дисплей 1602A (2 × 16, 5V, Синій) x 1 шт.
Інтерфейсний модуль I2C, IIC, TWI для LCD x 1 шт.
Провід DuPont, 2,54 мм, 20 см, F-M (Female - Male) x 1 шт.
Кабель USB 2.0 A-B x 1 шт.

підключення:
Насамперед, припаюємо модуль I2C до LCD дисплеєм, а потім необхідно підключити дисплей до Arduino UNO. Для цього скористаємося проводками DuPont, підключення здійснюємо по таблиці нижче.

Для наочності, наведу ще одну схему.

Для цього експерименту необхідно завантажити та встановити бібліотеку «LiquidCrystal_I2C». Потім скопіюйте і вставте цей приклад коду у вікно програми IDE Arduino і завантажте в контролер.

/ * Тестувалося на Arduino IDE 1.6.11 Дата тестування 15.09.2016г. * / #Include #include LiquidCrystal_I2C lcd (0x27,16,2); // Задаємо адресу і розмір дисплея void setup () (lcd.init (); // Ініціалізація lcd lcd.backlight (); // Включаємо підсвічування lcd.setCursor (0,0); // Встановлюємо курсор в початок 1 рядка lcd .print ( "Hello, world"); // Виводимо текст lcd.setCursor (0,1); // Встановлюємо курсор в початок 2 рядки lcd.print ( "www.robotchip.ru"); // Виводимо текст) void loop () ()

Тестувалося на Arduino IDE 1.6.11

Дата тестування 15.09.2016г.

#include

#include

LiquidCrystal_I2C lcd (0x27, 16, 2); // Задаємо адресу і розмір дисплея

void setup ()

lcd. init (); // Ініціалізація lcd

lcd. backlight (); // Включаємо підсвічування

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

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

void loop ()

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

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


посилання
Завантажити бібліотеку LiquidCrystal_I2C
Документація на мікросхему

LCD I2C модуль дозволити підключити символьний дисплей до плати Arduino всього по двом сигнальним проводам.

Використовувані компоненти (купити в Китаї):

. керуюча плата

. з'єднувальні дроти

Основні технічні характеристики:

Дисплей: символьний 16х02 або 20x04
. Підсвічування: Синя c білими символами
. Контраст: Настроюється потенціометром
. Напруга живлення: 5В
. Інтерфейс: I2C
. I2C адреса: 0x27
. Розміри: 82мм x 35мм x 18мм

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

Модуль обладнаний чотирьох-піновим роз'ємом стандарту 2.54мм

SCL: Послідовна лінія тактирования (Serial CLock)

SDA: Послідовна лінія даних (Serial DAta)

VCC: "+" Харчування

GND: "-" харчування

Висновки відповідають за інтерфейс I2C на платах Arduino на базі різних контролерів різняться

Для роботи з даним модулем необхідно встановити бібліотеку LiquidCrystal_I2C1602V1

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

Переходимо безпосередньо до скетчу. В даному прикладі виведемо стандартний "Hello, world!" і для адреса нашого співтовариства.

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

#include #include LiquidCrystal_I2C lcd (0x27,16,2); / * Задаємо адресу і розмірність дисплея. При використанні LCD I2C модуля з дисплеєм 20х04 нічого в коді змінювати не потрібно, cледует тільки задати правильну розмірність * / void setup () (Lcd.init (); // Ініціалізація lcd lcd.backlight (); // Включаємо підсвічування // Курсор знаходиться на початку 1 рядка lcd.print ( "Hello, world!"); // Виводимо текст lcd.setCursor (0, 1); // Встановлюємо курсор в початок 2 рядки lcd.print ( "сайт"); // Виводимо текст) void loop () { }

Створення власних символів

З висновком тексту розібралися, букви англійського алфавіту зашиті в пам'ять контролера всередині дисплея і з ними проблем немає. А ось що робити якщо потрібного символу в пам'яті контролера немає?

Не біда, необхідний символ можна зробити вручну. Даний спосіб частково, обмеження в 7 символів, допоможе вирішити проблему виведення.

Осередок, в розглянутих нами дисплеях, має дозвіл 5х8 точок. Все, до чого зводиться задача створення символу, це написати бітову маску і розставити в ній одинички в місцях де повинні горіти точки і нулики де немає.

У нижче наведеному прикладі намалюємо смайлик.

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

// Тестувалося на Arduino IDE 1.0.5 // Додаємо необхідні бібліотеки #include #include // Бітова маска символу посмішки byte smile \u003d (B00010, B00001, B11001, B00001, B11001, B00001, B00010,); LiquidCrystal_I2C lcd (0x27,20,4); // Задаємо адресу і розмірність дисплея. void setup () (Lcd.init (); // Ініціалізація lcd lcd.backlight (); // Включаємо підсвічування // Створюємо символ під номером 0 lcd.createChar (1, smile); lcd.setCursor (0, 0); // Встановлюємо курсор в початок 1 рядка lcd.print ( "\\ 1"); // Виводимо смайлик (символ під номером 1) - "\\ 1" ) void loop () { }

Програма для легкого створення символів

У коментарях учасник спільноти скинув посилання на генератор символів



Сподобалася стаття? поділіться їй