LCD WH1602B компанії Winstar

  • Час 10-09-2015, 11:34
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

LCD дисплеї від компанії Winstar вже протягом декількох років є невід'ємною частиною сучасної електронної продукції, і не тільки на російському ринку. Вони дешеві, дуже поширені (не бачив магазинів, де їх не було б), їх різноманітність надає розробнику вибирати відповідний залежно від експлуатаційних умов. Їх відмінність полягає в діапазонах температур, кількістю рядків для відображення інформації, кількістю знакомест в рядку, стандартними з яких є значення 8, 12, 16, 20, 24 і 40 символів на один рядок, так само розрізняються розмірами символу, його дозволом, розмірами самого дисплея і т.д. Winstar випускає не тільки буквено-цифрові знакосінтезірующіе LCD-модулі, але й графічні. Ті, в свою чергу, теж мають різні параметри, що надає користувачеві можливість вибирати відповідний виходячи з поставленого завдання.

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

Стандартно дисплей WH1602B виглядає так:

LCD WH1602B компанії Winstar

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

Далеко не рідкісним є дисплей з боковим розташуванням контактів.

Залежно від конструктиву радіоелектронного пристрою розробник може використовувати будь-який тип розташування висновків - відмінності між програмними забезпеченнями абсолютно немає.
Модулі можуть комплектуватися заднім підсвічуванням екрану, причому тип джерела підсвічування у різних модулів різний. У деяких дисплеях використовується електролюмінесцентне підсвічування, що забезпечує рівномірний розподіл світіння по всій відображається поверхні екрана. Головним недоліком дисплея з таким типом підсвічування є, мабуть, одне: для живлення такого дисплея потрібен змінний струм високої напруги. У світлодіодних подсветок недоліків практично немає, модулі із застосуванням світлодіодного підсвічування можуть використовуватися в додатках, що працюють при широких діапазонах температур. Виробник дає широкий вибір в плані кольору підсвічування - оскільки світлодіодні матриці можна встановити практично будь-якого кольору.

Істотним недоліком дисплеїв WH1602B є струм споживання, тому застосовувати даний тип дисплеїв в пристроях з автономним живленням зовсім невигідно.

Дисплеї лінійки WH побудовані на базі спеціалізованого контролера LCD-модулів HD44780, який якраз і розроблявся для управління знакосінтезірующіх РК-панелями.

З невеликим описом, мабуть, варто закінчити, і приступити до практичної частини. Нумерація висновків дисплея, якщо дивитися на нього зверху (тобто як ми дивимося на нього при читанні інформації), йде починаючи з самого крайнього лівого виводу. Це висновок 1.

Підключення 1602:

LCD WH1602B компанії Winstar

Отже терморегулятори 1602:
1) GND - загальний провід
2) Vcc - напруга живлення +5
3) V0 - контрастність
4) RS - лінія вибору регістра
5) RW - лінія вибору напрямку передачі даних (читання або запис)
6) E - лінія синхронізації
7) DB0 - 14) DB7 - лінії шини даних
15) A - анод підсвічування (підключаємо сюди + 5В через резистор 100Ом)
16) К - катод підсвічування (підключаємо до загального проводу)

Дисплей може працювати в 2 режимах: у режимі 8-бітної передачі даних, коли дані передаються групами по 8 біт (при цьому забезпечується максимальна швидкість взаємодії з дисплеєм), і в режимі 4-бітної передачі, коли 8-бітові дані розбиваються на дві групи по чотири розряди і послідовно передаються по чотирьох старшим лініях даних DB4-DB7.

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

Ми розглянемо процес ініціалізації дисплея WH1602B в 8-бітному режимі з використанням керуючої плати, заснованої на мікроконтролері Attiny2313.

Отже, які дії необхідно виконати для надійного процесу ініціалізації:
1) Включити живлення дисплея
2) Витримати паузу 20мс
3) Видати команду 00110000 при RS = 0 RW = 0
4) Витримати паузу не менше 40мкс
5) Видати команду 00110000 при RS = 0 RW = 0
6) Витримати паузу не менше 40мкс
7) Видати команду 00110000 при RS = 0 RW = 0
8) Витримати паузу не менше 40мкс
9) Видати команду 00111000 при RS = 0 RW = 0
10) Витримати паузу не менше 40мкс
11) Видати команду 00001000 при RS = 0 RW = 0
12) Витримати паузу не менше 40мкс
13) Видати команду 00000001 при RS = 0 RW = 0
14) Витримати паузу не менше 1,5мс
15) Видати команду 00000110 при RS = 0 RW = 0.

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

RW - лінія вибору напрямку передачі даних (0 - запис в дисплей, 1 - читання даних з дисплея).
Після видачі даних на лінію даних DB0-DB7 і установки значень на лініях RS, RW, необхідно ці дані замкнути - для цього потрібно встановити лінію E в 1, і, потім, знову скинути у вихідне положення - в 0.

Підключаємо PD0 мікроконтролера до лінії RS LCD, висновок PD1 мікроконтролера до RW дисплея, ну а PD2 - відповідно до лінії Е дисплея, а лінії шини даних DB0-DB7 до відповідних лініях порту B мікроконтролера. Сам дисплей підключаємо згідно зі схемою вгорі.

Тепер справа за програмною частиною:

.include "tn2313def.inc"; Attiny2313, 1 MHz clock .cseg .org 0 rjmp reset; ************************************* *******************************; Стандартний перехід до ініціалізованої частини програми reset: ldi r16, low (RAMEND); Ініціалізація стека МК out SPL, r16 rcall lcd_init; Ініціалізація дисплея; Тут ми ініціалізували стек мікроконтролера і перейшли до ініціалізації LCD-модуля; ********************************** ********************************** lcd_init: ldi r16, 0b10000000; скидаємо все підтягує резистори out MCUCR, r16 ldi r16, 0b11111111; Налаштування порту B out ddrb, r16 ldi r16, 0b00000111; Налаштування порту D out ddrd, r16; Налаштовуємо лінії портів введення / виводу: скидаємо підтягує резистори і визначаємо; PB0-PB7, PD0-PD2 як лінії виведення даних; ***************** ************************************************** *; Виходячи з вищевказаної процедури ініціалізації виконуємо операції: ldi r16, 0b00000000; Адресація IR ldi r17, 0b00110000; Установка розрядності Data line rcall delay_20000mks; Пауза перед ініціалізацією lcd rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ldi r17, 0b00111000; Установка параметрів lcd rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ldi r17, 0b00001000; Вимкнення дисплея rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ldi r17, 0b00000001; Очищення дисплея rcall write_lcd; Запис даних в lcd rcall delay_1500mks; Затримка перед виконанням операцій з lcd ldi r17, 0b00000110; Установка режиму введення даних rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ret; Вихід з підпрограми; ********************************************** ********************** delay_20000mks: ldi r18, 0b10110010; Введення змінної затримки ldi r19, 0b00000101; Налаштування предделителя rjmp init_delay delay_1500mks: ldi r18, 0b11111010; Введення змінної затримки ldi r19, 0b00000101; Налаштування предделителя rjmp init_delay delay_40mks: ldi r18, 0b11011000; Введення змінної затримки ldi r19, 0b00000010; Налаштування предделителя init_delay: out TCNT0, r18; Ініціалізація TCNT0 out TCCR0B, r19; Старт T0 test_TIFR: in r18, TIFR; Читання TIFR sbrs r18, 1; Перехід, якщо "Переповнення T0" rjmp test_TIFR; Нескінченна перевірка TOV0 ldi r20, 0b00000000; Зупинка T0 out TCCR0B, r20 ldi r20, 0b00000010; Завантаження TOV0gt; gt; 0 out TIFR, r21 ret; Вихід з підпрограми; ********************************************** ********************** write_lcd: out portd, r16; Установка значення лінії RS out portb, r17; Висновок байта даних DB0-DB7 nop; Захист від шумів на лінії стробирования sbi portd, 2; Egt; gt; 1 nop; Захист від шумів на лінії стробирования cbi portd, 2; Egt; gt; 0 nop; Захист від шумів на лінії стробирования ret; Вихід з підпрограми; ********************************************** ********************** user_write_IR: ldi r16, 0b00000000; Адресація IR rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ret; Вихід з підпрограми; ********************************************** ********************** user_write_DR: ldi r16, 0b00000001; Адресація DR rcall write_lcd; Запис даних в lcd rcall delay_40mks; Затримка перед виконанням операцій з lcd ret; Вихід з підпрограми; ********************************************** ********************** lcd_clear: ldi r16, 0b00000000; Адресація IR ldi r17, 0b00000001; Очищення дисплея rcall write_lcd; Запис даних в lcd rcall delay_1500mks; Затримка перед виконанням операцій з lcd ret; Вихід з підпрограми; ********************************************** **********************

Як користуватися даними кодом. Для занесення символу на екран необхідно записати байт, відповідний коду цього символу, в регістр R17. У регістр 17 заносимо 0х1 - якщо хочемо записати символ на екран, або скидаємо в 0х0, якщо хочемо записати якусь команду в регістр команд LCD дисплея.

Мною були передбачені підпрограми, які викликає користувач:
user_write_IR - запис команди в регістр команди LCD;
user_write_DR - запис даних для відображення на LCD;
lcd_clear - підпрограма / команда, виклик якої здійснює очищення дисплея.

Як працювати з викликом підпрограм:

ldi r17, 0x24; Символ з кодом 0x24 rcall user_write_DR; запис символу на відображення ldi r17, 0x2; команда 0х2 rcall user_write_IR; записуємо в регістр.

Зазначу, що при використанні підпрограми lcd_clear попередній запис в R17 не потрібно.
Де писати свій код? Ось тут:

reset: ldi r16, low (RAMEND); Ініціалізація стека МК out SPL, r16 rcall lcd_init; Ініціалізація дисплея; ВАШ КОД !!! Наприклад: Ldi r17, 0xC; Включаємо зображення ldi r17, 0x24; Символ з кодом 0x24 rcall user_write_DR; запис символу на відображення

LCD WH1602B компанії Winstar

LCD WH1602B компанії Winstar

Додам, що останнім часом з'явилися дані модулі з платою послідовного перетворювача, що дозволяють підключати LCD дисплеї 1602 по 4-х провідній схемі і працюючими по I2C-інтерфейсу. Т.ч. трохи спрощується підключення і економляться висновки контролера. Модуль можна придбати окремо і підключити до вже наявного LCD 1602.

LCD WH1602B компанії Winstar

Завантажити вихідні коди і прошивку ви можете нижче

Прикріплені файли:
  • 1602.rar (3 Кб)
Tags

Коментарі до новини