Lcd tft - рідкокристалічний дисплей, його терморегулятори, підключення, ініціалізація

  • Читайте книгу на сайті

    Як розумне народжується з хаосу

1. Початок цієї історії

З деяких пір в інтернет-магазині Аліекспресс з'явилися рідкокристалічні дисплеї з діагоналлю 2,2 дюйма і дозволом 240RGBx320 по дуже спокусливою ціною. Я опинився в числі спокусилися і придбав парочку таких виробів по 90 руб. за штуку. Забігаючи наперед, можу сказати, що авантюра виявилася вдалою: незважаючи на м'яку упаковку, фальшивий трек-номер і невідповідність моделі дисплея, товар дійшов без пошкоджень, екранчики вдалося підключити, протестувати і ніяких дефектів виявлено не було. Але, як то кажуть, скоро казка мовиться.

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

Lcd tft - рідкокристалічний дисплей, його терморегулятори, підключення, ініціалізація
Lcd tft - рідкокристалічний дисплей, його терморегулятори, підключення, ініціалізація

Мал. 1. Зовнішній вигляд пристрою для перевірки LCD.

Настільки простий, щоб ймовірність помилки в ній наближалася до нуля. Вона також повинна бути максимально відкритою, щоб її роботу легко можна було перевірити, наприклад, в покроковому режимі, вимірюючи напруги на висновках LCD. Потрібно було вибирати: збирати схему на мікроконтролері або без нього. Перевагу було віддано другого варіанту. По-перше, при цьому відпадала необхідність писати програму для контролера і возитися з її налагодженням. По-друге, для організації покрокового режиму не потрібно було нічого спеціально вигадувати. По-третє, при внесенні змін до програми не була потрібна перепрошивка чого-небудь - досить було зберегти зміни в текстовому файлі, і - можна знову запускати програму. Недолік же у цього методу, мабуть, всього один - низька швидкість запису інформації в LCD. Але з цим недоліком вирішено було змиритися з огляду на призначення даної схеми. Я не збирався постійно використовувати LCD з таким способом підключення. Мені потрібно було лише переконатися в справності екранчиків, розібратися з алгоритмом їх ініціалізації, поекспериментувати, потестировать. Описувана нижче схема відмінно впоралася з цими завданнями. Заповнення всього екрану графічною інформацією з її допомогою триває, звичайно, досить довго - потрібно передавати в LCD великий обсяг інформації при тому, що інтерфейс LCD реалізований шляхом його програмної емуляції, та ще й через зсувні регістри, керовані також програмно. Однак тривалість ініціалізації, як і тривалість настройки режимів LCD, не настільки велика і укладається в прийнятні рамки. Це пояснюється тим, що для ініціалізації або настройки досить виконати максимум кількох десятків операцій записи.

2. Схема пристрою

Розглянемо докладніше порядок підключення LCD, несе на собі загадкові написи TC220-85-C-P4-J-E і TFT8K0291FPC-A1.

Мал. 3. Схема електрична принципова. Клацніть по картинці, щоб відкрити в повному розмірі.

Для зв'язку з комп'ютером використаний простенький конвертер USB-RS232TTL на мікросхемі PL-2303. Зовсім не обов'язково застосовувати саме такий конвертер, але у цього є свої переваги. Головне з них полягає у відсутності необхідності підключати додаткове харчування. Всі живлять напруги можна отримати прямо від цього модуля. Крім звичайного для USB напруги + 5V, даний модуль має вихід + 3.3V. Навіщо творцям мікросхеми PL-2303 знадобилося утруждаться формуванням цієї напруги, я не дуже розумію. Здавалося б, харчування підключених до модулю пристроїв - не їхня турбота, але раз таке напруга вже сформовано, було б гріх цим не скористатися. За допомогою діода VD1 і резистора R29 напруга 3.3V знижується приблизно до 2.8V і використовується для живлення LCD. Як VD1 підійде будь-який кремнієвий діод.

Мікросхеми DD2 і DD3 живляться напругою 5V, яке також знімається з модуля перетворювача інтерфейсу. За допомогою цієї ж ланцюга харчування формується струм живлення світлодіодів підсвічування. Величина цього струму обмежується резисторами R30. R33. З'єднувати катоди світлодіодів підсвічування між собою не рекомендується.

На резисторах R3. R26 зібрані подільники напруги. Вони потрібні для зниження рівня логічної "1" сигналів, що надходять з виходів мікросхем DD2, DD3 на входи LCD. Якщо цього не зробити, на входах LCD буде з'являтися напруга логічної "1", що значно перевищує напруга живлення LCD, що неприпустимо.

Емуляція інтерфейсу LCD виконується шляхом послідовного наповнення зсувних регістрів DD2 і DD3. Завдяки наявності в цих мікросхемах додаткового регістра зберігання, процес їх наповнення не змінює стан виходів до тих пір, поки не буде подано сигнал паралельної завантаження на висновки 12. Це дозволяє управляти логічним рівнем будь-якого розряду на виходах Q0. Q7 зазначених мікросхем, залишаючи незмінними стану інших виходів.

Для наповнення зсувних регістрів (74595) на висновок 14 мікросхеми DD2 послідовно подаються дані, що вводяться, починаючи зі старшого розряду. Зрушення виконується позитивним фронтом синхроимпульса на висновках 11 обох мікросхем. Після закінчення наповнення регістрів на висновки 12 мікросхем DD2 і DD3 подається імпульс логічної одиниці, по фронту якого відбувається одночасне (паралельне) відображення накопичених послідовним способом даних на виходах регістрів. Передача зсуваються даних від DD2 до DD3 виконується за допомогою виведення 9 мікросхеми DD2, який відображає стан старшого розряду зсувного регістру, минаючи паралельний регістр зберігання. В цілому для управління зсувними регістрами як описано вище потрібно три сигналу: дані, зсувний синхроимпульс і синхроимпульс паралельного виводу.

Зазначені сигнали формуються програмно на виходах DTR, RTS і TXD конвертера USB-RS232TTL. Сигнали DTR, RTS і TXD в даному випадку використовуються нестандартно, але ніякого "криміналу" в цьому немає, і, як показує досвід, такий метод досить надійний. Задіяний в даній схемі конвертер не має зручно виведених виходів DTR і RTS, тому довелося прорізати вікно в термоусадочної оболонці і припаяти провідники безпосередньо до висновків мікросхеми PL-2303. У даній мікросхеми на виведення 1 формується сигнал TXD, на виводі 2 - DTR, на виводі 3 - RTS. Але такий метод отримання доступу до необхідних сигналам підійде не всім - пайка дрібна. Відстань між першим і чотирнадцятим висновками мікросхеми PL-2303 складає всього 8,8 мм. Можна піти іншим шляхом - застосувати конвертер USB-RS232TTL у вигляді шнура-перехідника. Тоді всі необхідні сигнали можна зняти з звичайного роз'єму, як у COM-порту. Харчування схеми в цьому випадку доведеться організовувати іншим способом. При заміні конвертера USB-RS232TTL на іншу модель необхідно враховувати можливість інвертування (або його відсутності) деяких сигналів в залежності від моделі конвертера. Немає ніяких вимог по інвертування, які впливали б на вибір конвертера. Потрібно лише мати на увазі, що може знадобитися внести відповідну поправку в програму (на самому початку скрипта, де описані настроювальні константи).

У ланцюзі харчування 5 В і 2,8 В корисно додати конденсатори ємністю 0,1. 1 мкф, щоб знизити ймовірність збою через перешкоди з харчування.

3. Програмна частина

Апаратна частина підключення даного LCD не містить в собі нічого особливого, якщо не звертати уваги на девятіразрядний шини даних, що, втім, не страшно. А ось з точки зору програмування даного дисплея можна сказати, що його творці намудрували грунтовно: всі внутрішні регістри вважаються 18-розрядними (навіть індексний, який використовує всього 7 розрядів), запис через це завжди виконується двома операціями (спочатку - старші 9 біт, потім - 9 молодших), інструкції в той же час 16-розрядні (що викликає особливий "перекіс" з 18-розрядних внутрішнім регістром записи), а графічні дані використовують всі 18 біт за умови, що шина даних працює в 9-розрядному режимі. Причому три елементарних колірних пікселя в одній тріаді передаються також за дві операції запису: спочатку 6 біт червоного і 3 старших біта зеленого, потім 3 молодших біта зеленого і 6 біт синього. До всього на додачу алгоритм ініціалізації придуманий як ніби з розрахунком "щоб вороги не здогадалися" - для запуску даного LCD потрібно велика кількість хитромудрих налаштувань і команд.

Мал. 4. Кожен з цих симпатичних квадратиків намальований на тлі колірного шуму за допомогою наступного алгоритму:


Y = 128;
a = 1;
while a 20) then
Точка = '000000000000000000' else
if (b 20) then
Точка = '000000000000000000' else
Точка = '111111000000000000'; //червоний
OutToGRAM ();
b = b + 1;
end;
Y = Y + 1;
a = a + 1;
Sys.PM ();
end;

З урахуванням вищесказаного, розглянутий LCD важко назвати простим для програмування. Роблю такий висновок, маючи можливість порівнювати: в минулому довелося "погратися" з схожим екранчіком, мають також дозвіл 240x320 і таку ж діагональ. Але той LCD вдалося запустити в буквальному сенсі голими руками - схема підключення складалася лише з батарейок (харчування), проводів, кнопок і не містила ніяких мікросхем! Шина даних там була 8-розрядна. Кожен запис в LCD складалася з однієї операції записи. Елементарні колірні пікселі кодувалися кожен своїм цілим байтом. Команди для ініціалізації доводилося набирати перемичками. Всього команд для запуску дисплея потрібно було штуки три і це було не важко. І все вийшло! З описуваних в даній статті LCD такий фокус не пройшов.

Розглянемо основні принципи програмування LCD. Сигнал апаратного скидання (висновок 28 LCD) може бути повністю апаратним, або ж, як в нашому випадку, - програмно керованим. Робота з LCD починається з подачі активного логічного рівня на вхід скидання, після чого даний сигнал повертається в неактивний стан. Далі програмне взаємодія з LCD складається з операцій запису в нього і читання з нього. У найпростішому випадку можна обійтися тільки операціями запису. Так і зроблено в розглянутому прикладі.

Що б ми не намагалися повідомити дисплею, першим завжди йде ПЦЗ команди. По-іншому це ще називають записом в індексний регістр. Код, який ми заносимо в цей регістр по суті є номером одного з регістрів, призначених для прийому даних. Це означає, що заповнюючи індексний регістр (передаючи команду), ми повідомляємо того чи іншого регістру даних, що подальша запис даних буде проводитися в нього. Після ПЦЗ команди виконується один або безліч ПЦЗ даних. LCD розрізняє запис даних і запис команд за допомогою свого 5-го виведення (RS), що встановлюється в стан логічного нуля при запису команд, і в стан логічної одиниці - при запису даних. Ось, власне, і все, що стосується загального підходу до програмування LCD, але є свої особливості в розподілі розрядів 18-розрядного слова всередині ПЦЗ.

Візьмемо, наприклад, ПЦЗ в індексний регістр. Цей регістр насправді використовує всього 7 біт. Зверніть увагу на малюнок, що показує відповідність між інформацією, що передається і записується в регістр.

Мал. 5. Повний цикл записи в індексний регістр.

Дані для тієї чи іншої команди є 16-розрядними (крім графічних). На наступному малюнку показано, як передаються за один ПЦЗ 18 розрядів "упаковуються" в 16-розрядний регістр даних.

Мал. 6. Повний цикл записи даних (інструкцій).

І, нарешті, передача в LCD одного повного RGB-пікселя (тріади) також не позбавлена ​​особливостей. Дані однієї тріади передаються за один ПЦЗ. На малюнку показано кодування тріади (18 біт = 6 біт "R" + 6 біт "G" + 6 біт "B").

Мал. 7. Повний цикл запису графічних даних (RGB-тріади).

Бажаючі можуть скачати RAR-архів програми (471 Кб). Написана вона у вигляді скрипта (файл "Тест LCD 240RGBx320.pms" в папці "PMS"), для виконання якого потрібно інтерпретатор, що входить до складу програми "Перпетуум М". Отримати "Перпетуум М" (6 Мб) також можна за прямим посиланням. Таким чином повинно вийти два архівних файлу. Установка програмного забезпечення зводиться лише до створення нової папки на жорсткому диску і розпакуванні в неї вмісту обох архівів. Після цього можна запускати файл perpetuum.exe

Тут також можна знайти таблицю інструкцій LCD c драйвером S6D0129. Ця таблиця допоможе розібратися в режимах та налаштування дисплея.

Повідомлення з гостьової книги за цією статтею і відповіді

Доброго дня. Підкажіть будь ласка які рівні на екрані. Чи не згорить він якщо я підключу на 3.3 вольта шину даних.
Заздалегідь дякую.