Технологія tft tn. Технологія TFT дисплея. Що таке технологія TFT

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

У цій статті ви дізнаєтесь, як використовувати TFT LCD з платами Arduino. Ми намагатимемося освятити базові команди, а також розповімо про професійні дизайни та техніку. За планами поле статті можна буде навчитися:

  • виводити тексти, символи та цифри з потрібним шрифтом;
  • малювати фігури, такі як коло, трикутник, квадрат тощо;
  • відображати зображення.bmp на екрані;
  • змінювати параметри екрана, такі як обертання та інвертування кольору;
  • відображати анімацію за допомогою Arduino.

З Вікіпедії: Рідкокристалічний дисплей з активною матрицею (TFT LCD, англ. thin-film transistor - тонкоплівковий транзистор) - різновид рідкокристалічного дисплея, в якому використовується активна матриця, керована тонкоплівковими транзисторами.

У проектах електроніки дуже важливо створити інтерфейс між користувачем та системою. Цей інтерфейс може бути створений шляхом відображення корисних даних, меню та простоти доступу. Гарний дизайн не менш важливий.

І тому є кілька компонентів. Світлодіоди, 7 сегментні модулі, графічні дисплеї та повнокольорові TFT-дисплеї. Правильний компонент для ваших проектів залежить від кількості даних, типу взаємодії з користувачем і ємності процесора.

TFT LCD - це варіант рідкокристалічного дисплея (LCD), який використовує технологію тонкоплівкового транзистора (TFT) для покращення якості зображення, такого як адресність та контрастність. TFT LCD є активним матричним РК-дисплеєм, на відміну від пасивних матричних РК-дисплеїв або простих РК-дисплеїв з прямим керуванням з кількома сегментами.

У проектах Arduino частота процесора низька. Таким чином, неможливо відображати складні зображення високої чіткості та високошвидкісні рухи. Тому повнокольорові TFT-дисплеї можуть використовуватись лише для відображення простих даних та команд.

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

Якого розміру? Який контролер?

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

Отже, по-перше, ви повинні перевірити роздільну здатність, швидкість руху, деталі кольору та розміру зображень, текстів та цифр. Ми пропонуємо популярні розміри дисплеїв Arduino, таких як:

  • 3,5" дюйми 480 × 320,
  • 2,8" дюйми 400 × 240,
  • 2,4" дюйми 320 × 240,
  • 1,8" дюйми 220 × 176.

Вибравши правильний дисплей, настав час вибрати правильний контролер. Якщо ви хочете відображати символи, тексти, цифри та статичні зображення та швидкість відображення не важлива, плати Atmega328 Arduino (такі як ) є правильним вибором.

Якщо розмір коду є великим, UNO може виявитися недостатнім. Натомість ви можете використовувати . І якщо ви хочете показувати зображення з високою роздільною здатністю і руху з високою швидкістю, ви повинні використовувати модулі ARM Arduino, такі як Arduino DUE.

Драйвери та бібліотеки

В електроніці / комп'ютерному устаткуванні драйвер дисплея зазвичай є напівпровідниковим. інтегральну схему(але може альтернативно містити кінцеву машину, що складається з дискретної логіки та інших компонентів), що забезпечує функцію інтерфейсу між мікропроцесором, мікроконтролером, ASIC або периферійним інтерфейсом загального призначенняі конкретним типом пристрою відображення, наприклад, LCD, LED, OLED, ePaper, CRT, Nixie і т.п.

Драйвер дисплея зазвичай приймає команди та дані з використанням стандартного універсального послідовного або паралельного інтерфейсу загального призначення, як TTL, CMOS, RS232, SPI, I2C і т.д. і генерує сигнали з відповідною напругою, струмом, часом та демультиплексуванням, щоб реалізувати на дисплеї відображення потрібного тексту або зображення.

Виробники РК-дисплеїв використовують різні драйвери у своїх продуктах. Деякі з них популярніші, а деякі з них невідомі. Щоб легко запускати екран, ви повинні використовувати бібліотеки LCD Arduino і додати їх до свого коду. В іншому випадку запуск дисплея може бути дуже ускладненим. В Інтернеті є багато безкоштовних бібліотек, але важливим моментом у бібліотеках є їхня сумісність з драйвером РК-дисплея. Драйвер вашого РК-дисплея повинен бути відомий вашій бібліотеці. У цій статті ми використовуємо бібліотеку Adafruit GFX та бібліотеку MCUFRIEND KBV та приклади коду. Ви зможете завантажити їх за супутніми посиланнями.

Розархівуйте MCUFRIEND KBV та відкрийте MCUFRIEND_kbv.CPP. Ви побачите список драйверів, які підтримує бібліотека MCUFRIEND.

Відкрийте папку з прикладами (англ. – Example). Існує кілька прикладів коду, які можна запустити на Arduino. Підключіть РК-дисплей та перевірте деякі приклади.

Список комплектуючих

Для реалізації багатьох проектів, пов'язаних з TFT LCD, нам знадобиться набір деяких комплектуючих, які ми вже обговорили вище:

  • 3.5-дюймовий кольоровий TFT-дисплей ElectroPeak × 1
  • 2,4-дюймовий дисплей TFT LCD ElectroPeak × 1
  • Arduino UNO R3 × 1
  • Arduino Mega 2560 × 1
  • Arduino DUE × 1

Програмне забезпечення

Також для роботи з Ардуїно нам зазвичай потрібна.

Код

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

  • Перейдіть на наш сайт або на сайт www.arduino.cc/en/Main/Software і завантажте програмне забезпеченнядля вашої ОС. Встановіть програмне забезпечення відповідно до вказівок.
  • Запустіть середу розробки Arduino, очистіть текстовий редакторта скопіюйте код у текстовий редактор.
  • Перейдіть до ескізу та увімкніть бібліотеки. Натисніть "Додати ZIP-бібліотеку" і додайте бібліотеки.
  • Виберіть плату в "Tools and Boards", виберіть плату Arduino.
  • Підключіть Arduino до комп'ютера та встановіть COM-порт у "Tools and port".
  • Натисніть кнопку "Завантажити" (стрілка).
  • Тепер все налаштовано!

Після завантаження коду прикладу настав час дізнатися, як створювати зображення на РК-дисплеї.

Бібліотека

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h"

У першому рядку додано основну графічна бібліотекадля дисплеїв (написана Adafruit).

Друга додає бібліотеку, яка підтримує драйвери екранів MCUFRIEND Arduino.

#include "TouchScreen.h" // тільки якщо ви хочете використовувати сенсорний екран #include "bitmap_mono.h" // коли ви хочете відображати растрове зображенняз бібліотеки #include "bitmap_RGB.h" // коли ви хочете відображати растрове зображення з бібліотеки #include "Fonts/FreeSans9pt7b.h" // коли вам потрібні інші шрифти #include "Fonts/FreeSans12pt7b.h" // коли вам потрібні інші шрифти #include "Fonts/FreeSerif12pt7b.h" // коли вам потрібні інші шрифти #include "FreeDefaultFonts.h" // коли вам потрібні інші шрифти #include "SPI.h" // використання sdcard для відображення растрового зображення #include "SD .h"

Ці бібліотеки зараз не потрібні, але ви можете додати їх.

Основні команди

Клас та об'єкт

//(int CS=A3, int RS=A2, int WR=A1, int RD=A0, int RST=A4) MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);

Цей рядок робить об'єкт з ім'ям TFT класу MCUFRIEND_kbv і забезпечує зв'язок SPI між РК-дисплеєм і Arduino.

Запуск РК-екрана

uint16_t ID = tft.readID(); tft.begin(ID);

Функція tft.readIDзчитує ID з дисплея і поміщає його змінну ідентифікатора. Потім функція tft.beginотримує ідентифікатор та РК-дисплей готовий до роботи.

Роздільна здатність екрану

tft.width(); // int16_t width (void); tft.height(); //int16_t height(void);

За цими двома функціями ви можете дізнатися роздільну здатність дисплея. Просто додайте їх у код і помістіть вихідні дані у змінну uint16_t. Потім прочитайте його із послідовного порту Serial.println();. Спочатку додайте Serial.begin (9600);в setup().

Колір екрану

tft.fillScreen(t); //fillScreen(uint16_t t);

Функція fillScreenзмінює колір екрану на колір t. Це має бути 16-бітна змінна, що містить код кольору UTFT.

#define BLACK 0x0000 #define NAVY 0x000F #define DARKGREEN 0x03E0 #define DARKCYAN 0x03EF #define MAROON 0x7800 #define PURPLE 0x780F #define fine DARKGREY 0x7BEF #define BLUE 0x001F #define GREEN 0x07E0 #define CYAN 0x07FF #define RED 0xF800 #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define ORANGE 0xFD20 #define GREENYELLOW 0xAFE5 #define PINK 0xF81F

Ви можете додати ці рядки на початок коду і просто використовувати ім'я кольору в функціях.

Заповнення пікелів

tft.drawPixel(x,y,t); //drawPixel(int16_t x, int16_t y, uint16_t t) tft.readPixel(x,y); //uint16_t readPixel(int16_t x, int16_t y)

Функція drawPixelзаповнює піксель x і y за кольором t.

Функція readPixelзчитує колір пікселя в розташування x та y.

Малювання ліній

tft.drawFastVLine(x,y,h,t); //drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t t) tft.drawFastHLine(x,y,w,t); //drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t t) tft.drawLine(xi, yi, xj, yj, t); //drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t t)

Функція drawFastVLineмалює вертикальну лінію, Що починається з розташування x, y, її довжина - h пікселів, а колір - t.

Функція drawFastHLineмалює горизонтальну лінію, Що починається з розташування x і y, довжина дорівнює w пікселів, а колір - t.

Функція drawLineмалює рядок, що починається з xi, yi до xj, yj, колір - t.

For (uint16_t a=0; a<5; a++) { tft.drawFastVLine(x+a, y, h, t);} for (uint16_t a=0; a<5; a++) { tft.drawFastHLine(x, y+a, w, t);} for (uint16_t a=0; a<5; a++) { tft.drawLine(xi+a, yi, xj+a, yj, t);} for (uint16_t a=0; a<5; a++) { tft.drawLine(xi, yi+a, xj, yj+a, t);}

Ці три блоки коду малюють лінії, подібні до попереднього коду з 5-піксельною товщиною.

Tft.fillRect(x,y,w,h,t); //fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t t) tft.drawRect(x, y, w, h, t); //drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t t) tft.fillRoundRect(x,y,w,h,r,t); //fillRoundRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t R , uint16_t t) tft.drawRoundRect(x,y,w,h,r,t); //drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t R , uint16_t t)

Функція fillRectмалює заповнений прямокутник у координатах x і y, w – ширина, h – висота, t – колір прямокутника.

Функція drawRectмалює прямокутник у координатах x та y з шириною w, висотою h та кольором t.

Функція fillRoundRectмалює заповнений прямокутник з радіусом кутів r, координатах x і y, шириною w і висотою h, кольором t.

Функція drawRoundRectмалює прямокутник з r радіальними закругленими кутами x і y, з шириною w і висотою h і кольором t.

Малюємо кола

tft.drawCircle(x,y,r,t); //drawCircle(int16_t x, int16_t y, int16_t r, uint16_t t) tft.fillCircle(x,y,r,t); //fillCircle(int16_t x, int16_t y, int16_t r, uint16_t t)

Функція drawCircleмалює коло по координатах x та y, з радіусом r та кольором t.

Функція fillCircleмалює заповнене коло за координатами x і y, радіусом r та кольором t.

For (int p = 0; p< 4000; p++) { j = 120 * (sin(PI * p / 2000)); i = 120 * (cos(PI * p / 2000)); j2 = 60 * (sin(PI * p / 2000)); i2 = 60 * (cos(PI * p / 2000)); tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col[n]); }

Цей код змальовує дугу. Можна змінити значення «for» між 0 і 4000.

Малювання трикутників

tft.drawTriangle(x1,y1,x2,y2,x3,y3,t); //drawTriangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, // uint16_t t) tft.fillTriangle(x1,y1,x2,y2,x3,y //fillTriangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, // uint16_t t)

Функція drawTriangleмалює трикутник з трьома кутовими координатами x, y та z та t кольором.

Функція fillTriangleмалює заповнений трикутник із трьома кутовими координатами x, y, z та t кольором.

Відображення тексту

tft.setCursor(x,y); //setCursor(int16_t x, int16_t y)

Цей код встановлює позицію курсору на x та y.

Tft.setTextColor(t); //setTextColor(uint16_t t) tft.setTextColor(t,b); //setTextColor(uint16_t t, uint16_t b)

Перший рядок задає колір тексту. Наступний рядок задає колір тексту та його фону.

Tft.setTextSize(s); //setTextSize(uint8_t s)

Цей код встановлює розмір тексту завбільшки s. Саме число sзмінюється у діапазоні від 1 до 5.

Tft.write(c); //write(uint8_t c)

Цей код відображає символ.

Tft.println("www.Electropeak.com"); tft.print("www.Electropeak.com");

Перша функція відображає рядок та переміщує курсор на наступний рядок.

Друга функція просто відображає рядок.

ShowmsgXY(x,y,sz,&FreeSans9pt7b,"www.Electropeak.com"); //void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) y1, uint16_t wid, ht; tft.set

Ця функція змінює текст шрифту. Ви повинні додати цю функцію та бібліотеки шрифтів.

For (int j = 0; j< 20; j++) { tft.setCursor(145, 290); int color = tft.color565(r -= 12, g -= 12, b -= 12); tft.setTextColor(color); tft.print("www.Electropeak.com"); delay(30); }

Ця функція може змусити текст зникати. Ви повинні додати її до свого коду.

Обертання екрану

tft.setRotation(r); //setRotation(uint8_t r)

Цей код повертає екран. 0 = 0 °, 1 = 90 °, 2 = 180 °, 3 = 270 °.

Інвертування кольорів екрану

tft.invertDisplay(i); //invertDisplay(boolean i)

Цей код інвертує кольори екрана.

Tft.color565(r,g,b); //uint16_t color565(uint8_t r, uint8_t g, uint8_t b)

Цей код передає код RGB та отримує колірний код UTFT.

Прокручування екрану

for (uint16_t i = 0; i< maxscroll; i++) { tft.vertScroll(0, maxscroll, i); delay(10);}

Цей код прокручує екран. Maxroll – максимальна висота прокручування.

Скидання

tft.reset();

Цей код скидає екран.

Відображення монохромних зображень

static const uint8_t name PROGMEM = ( // Додайте код зображення тут. ) tft.drawBitmap(x, y, name, sx, sy, 0x0000);

Спочатку ви повинні перетворити своє зображення на шістнадцятковий код. Завантажте програмне забезпечення на посилання нижче. Якщо ви не бажаєте змінювати налаштування програмного забезпечення, ви повинні інвертувати колір зображення, відобразити зображення горизонтально (дзеркально) і повернути його на 90 градусів проти годинникової стрілки.

Тепер додайте його до програмного забезпечення та перетворіть його. Відкрийте експортований файл і скопіюйте шістнадцятковий код у Arduino IDE. xі y- Розташування зображення. sxі sy- Розміри зображення. Ви можете змінити колір зображення на останньому input.

Відображення кольорового зображення RGB

const uint16_t name PROGMEM = ( // Add image code here. ) tft.drawRGBBitmap(x, y, name, sx, sy);

Спочатку ви повинні перетворити своє зображення на код. Використовуйте це посилання для перетворення зображення:

Завантажте зображення та скачайте перетворений файл, з яким можуть працювати бібліотеки UTFT. Тепер скопіюйте шістнадцятковий код в Arduino IDE. x та y - розташування зображення. sx та sy - розмір зображення.

Ви можете нижче завантажити програму-конвертер зображень у шістнадцятковий код:

Попередньо створені елементи

У цьому шаблоні ми просто використовували рядок та 8 заповнених кіл, які змінюють свої кольори по порядку. Щоб намалювати кола навколо статичної точки, можна використовувати sin(); та cos(); функції. Ви повинні встановити величину PI. Щоб змінити кольори, можна використовувати функцію color565();та замінити свій код RGB.

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; #include "Fonts/FreeSans9pt7b.h" #include "Fonts/FreeSans12pt7b.h" #include "Fonts/FreeSerif12pt7b.h" #include "FreeDefaultFonts.h" #define PI 3.1415926535897932384626433832795 int col; void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) ( int16_t x1, y1; uint16_t wid, ht; tft.setFont(f); tft.setCursor(x, y); tft .setTextColor(0x0000);tft.setTextSize(sz); tft.print(msg); ) void setup() (tft.reset(); Serial.begin(9600); begin(ID);tft.setRotation(1); tft.invertDisplay(true); 155, 0, 50);col = tft.color565(170, 30, 80); color565(230, 120, 170); loop() ( for (int i = 8; i > 0; i--) ( tft.fillCircle(240 + 40 * (cos(-i * PI / 4))), 120 + 40 * (sin(-i * PI / 4)), 10, col);delay(15); + 1) * PI / 4)), 10, col); delay (15); (-(i + 2)*PI / 4)), 10, col); delay(15); tft.fillCircle(240 + 40 * (cos(-(i + 3)*PI / 4)), 120 + 40 * (sin(-(i + 3)*PI / 4)), 10, col); delay(15); tft.fillCircle(240 + 40 * (cos(-(i + 4)*PI / 4)), 120 + 40 * (sin(-(i + 4)*PI / 4)), 10, col); delay(15); tft.fillCircle(240 + 40 * (cos(-(i + 5)*PI / 4)), 120 + 40 * (sin(-(i + 5)*PI / 4)), 10, col); delay(15); tft.fillCircle(240 + 40 * (cos(-(i + 6)*PI / 4)), 120 + 40 * (sin(-(i + 6)*PI / 4)), 10, col); delay(15); tft.fillCircle(240 + 40 * (cos(-(i + 7)*PI / 4)), 120 + 40 * (sin(-(i + 7)*PI / 4)), 10, col); delay(15); )

Класичний текст

У цьому шаблоні ми вибрали класичний шрифт та використали функцію для загасання тексту.

#include "Adafruit_GFX.h" // Core graphics library #include "MCUFRIEND_kbv.h" // Hardware-specific library MCUFRIEND_kbv tft; #include "Fonts/FreeSans9pt7b.h" #include "Fonts/FreeSans12pt7b.h" #include "Fonts/FreeSerif12pt7b.h" #include "FreeDefaultFonts.h" void showmsgXY(int x, int y, int s , const char *msg) ( int16_t x1, y1; uint16_t wid, ht; tft.setFont(f); tft.setCursor(x, y); tft.setTextSize(sz); tft.println(msg); ) uint8_t r = 255, g = 255, b = 255; uint16_t color; void setup() ( Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); tft.setRotation(1); ) void loop(void) ( tft .invertDisplay(true); tft.fillScreen(WHITE); in trouble,"); delay(40); tft.println(" who can gather strength from distress,"); delay(40); delay(40); conscience approves their conduct,"); delay(40); = 0;< 20; j++) { tft.setCursor(145, 290); color = tft.color565(r -= 12, g -= 12, b -= 12); tft.setTextColor(color); tft.print(" ---- Da Vinci ----"); delay(30); } while (1); }

Подання/презентація логотипу

У цьому шаблоні ми перетворили файл a.jpgу файл .cі додали його в код, написали рядок і використовували код згасання. Потім ми використовували код прокручування, щоб перемістити екран ліворуч. Завантажте файл .hі додайте його до папки ескізу Arduino.

#include "Adafruit_GFX.h" // Core graphics library #include "MCUFRIEND_kbv.h" // Hardware-specific library MCUFRIEND_kbv tft; #include "Ard_Logo.h" #define BLACK 0x0000 #define RED 0xF800 #define GREEN 0x07E0 #define WHITE 0xFFFF #define GREY 0x8410 #include "Fonts/FreeSans9pt7b" "Fonts/ FreeSerif12pt7b.h" #include "FreeDefaultFonts.h" void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) ( int16_t x1, y1; uint16_t wid, ht; tft. ; tft.setCursor(x, y); tft.setTextSize(sz); uint16_t color; void setup() ( Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); tft.setRotation(1); ) void loop(void) ( tft .invertDisplay(true);tft.fillScreen(WHITE);< 20; j++) { color = tft.color565(r -= 12, g -= 12, b -= 12); tft.setTextColor(color); showmsgXY(95, 280, 1, &FreeSans12pt7b, "ELECTROPEAK PRESENTS"); delay(20); } delay(1000); for (int i = 0; i < 480; i++) { tft.vertScroll(0, 480, i); tft.drawFastVLine(i, 0, 320, 0xffff); // vertical line delay(5);} while (1); }

Точкова діаграма

У цьому шаблоні ми використовували лінії малювання, заповнені кола та функції відображення рядків.

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; uint16_t ox=0,oy=0; int ave = 0, avec = 0, avet = 0; //////////////////////////////////////////////////// /////////////// void aveg(void) (int z=0; Serial.println(ave); Serial.println(avec); avet=ave/avec; Serial.println(avet) );avet=avet*32;<24; i++){ for (uint16_t a=0; a<3; a++){ tft.drawLine(avet+a, z, avet+a, z+10, 0xFB21);} // thick for (uint16_t a=0; a<2; a++){ tft.drawLine(avet-a, z, avet-a, z+10, 0xFB21);} delay(100); z=z+20; } } ////////////////////////////////////////////////////////////////// void dchart_10x10(uint16_t nx,uint16_t ny) { ave+=nx; avec++; nx=nx*32; ny=ny*48; tft.drawCircle(nx, ny, 10, 0x0517); tft.drawCircle(nx, ny, 9, 0x0517); tft.fillCircle(nx, ny, 7, 0x0517); delay (100); ox=nx; oy=ny; } /////////////////////////////////////////////////////////////////////// void dotchart_10x10(uint16_t nx,uint16_t ny) { ave+=nx; avec++; nx=nx*32; ny=ny*48; int plus=0; float fplus=0; int sign=0; int y=0,x=0; y=oy; x=ox; float xmines, ymines; xmines=nx-ox; ymines=ny-oy; if (ox>nx) (xmines = ox-nx; sign = 1;) else sign = 0; for (int a=0; a<(ny-oy); a++) { fplus+=xmines/ymines; plus=fplus; if (sign==1) tft.drawFastHLine(0, y, x-plus, 0xBFDF); else tft.drawFastHLine(0, y, x+plus, 0xBFDF); y++; delay(5);} for (uint16_t a=0; a<2; a++){ tft.drawLine(ox+a, oy, nx+a, ny, 0x01E8);} // thick for (uint16_t a=0; a<2; a++){ tft.drawLine(ox, oy+a, nx, ny+a, 0x01E8);} ox=nx; oy=ny; } //////////////////////////////////////////////////////////////////// void setup() { tft.reset(); Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); } void loop() { tft.invertDisplay(true); tft.fillScreen(0xffff); dotchart_10x10(3, 0); dotchart_10x10(2, 1); dotchart_10x10(4, 2); dotchart_10x10(4, 3); dotchart_10x10(5, 4); dotchart_10x10(3, 5); dotchart_10x10(6, 6); dotchart_10x10(7, 7); dotchart_10x10(9, 8); dotchart_10x10(8, 9); dotchart_10x10(10, 10); dchart_10x10(3, 0); dchart_10x10(2, 1); dchart_10x10(4, 2); dchart_10x10(4, 3); dchart_10x10(5, 4); dchart_10x10(3, 5); dchart_10x10(6, 6); dchart_10x10(7, 7); dchart_10x10(9, 8); dchart_10x10(8, 9); dchart_10x10(10, 10); tft.setRotation(1); tft.setTextSize(2); tft.setTextColor(0x01E8); tft.setCursor(20, 20); tft.print("Average"); int dl=20; for (int i=0;i<6;i++){ for (uint16_t a=0; a<3; a++){ tft.drawLine(dl, 40+a, dl+10, 40+a, 0xFB21);} dl+=16;} tft.setRotation(0); aveg(); while(1); }

Температура

У цьому шаблоні ми використовували sin();і cos();функції для малювання дуг з бажаною товщиною та числом, що відображається за допомогою функції текстового друку. Потім ми перетворили зображення на шістнадцятковий код і додали його в код і відобразили зображення за допомогою функції растрового зображення. Потім ми використовували функцію малювання ліній, щоб змінити стиль зображення. Завантажте файл.h і додайте його до папки Arduino.

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" #include "Math.h" MCUFRIEND_kbv tft; #include "Temperature.h" #define PI 3.1415926535897932384626433832795 int a=1000,b=3500; int n, f; int j, j2, lj; int i, i2 ,li; int pct = 0; int d = (20, 20, 20, 20, 20); uint16_t col = (0x7006, 0xF986, 0x6905, 0x7FF7, 0x024D); void setup() ( tft.reset(); Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); tft.setTextSize(2); ) void loop() ( // put your main code here, to run repeatedly: tft.fillScreen(0xffff); tft.setRotation(1); tft.drawBitmap(350, 70, Temp, 70, 180, 0x0000); tft.fillCir (385,213,25,tft.color565(255, 0, 0));< 4000; p++) { j = 120 * (sin(PI * p / 2000)); i = 120 * (cos(PI * p / 2000)); j2 = 110 * (sin(PI * p / 2000)); i2 = 110 * (cos(PI * p / 2000)); tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, tft.color565(100, 100, 100)); } ///////////////////////////////////////////////////////////////////// if (b>a) (while (a Кругова діаграма

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

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" #include "Math.h" MCUFRIEND_kbv tft; #define PI 3.1415926535897932384626433832795 int n, f; int j, j2; int i, i2; int pct = 0; int d = (10, 60, 16, 9, 10); uint16_t col = (0x7006, 0xF986, 0x6905, 0x7FF7, 0x024D); void setup() ( tft.reset(); Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); tft.setTextSize(2); ) void loop() ( // put your main code here, to run repeatedly: tft.fillScreen(0x0042); tft.setRotation(1); for (int p = 0; p< 4000; p++) { j = 120 * (sin(PI * p / 2000)); i = 120 * (cos(PI * p / 2000)); j2 = 60 * (sin(PI * p / 2000)); i2 = 60 * (cos(PI * p / 2000)); tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col[n]); } n = 0; for (int a = 0; a < 5; a++) { pct += d[n] * 40; f = 4000 - pct; for (int b = 0; b < f; b++) { j = 120 * (sin(PI * b / 2000)); i = 120 * (cos(PI * b / 2000)); j2 = 60 * (sin(PI * b / 2000)); i2 = 60 * (cos(PI * b / 2000)); tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col); } tft.fillCircle(380, 100 + (30 * n), 10, col[n]); tft.setTextColor(0xffff); tft.setCursor(400, 94 + (30 * n)); tft.print(d[n]); tft.print("%"); n++; } while (1); }

Музика

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; #include "Volume.h" #define BLACK 0x0000 int a = 0,b = 4000,c = 1000,d = 3000; int s = 2000; int j, j2; int i, i2; int White; void setup() ( Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); tft.setRotation(1); ) void loop(void) ( tft .invertDisplay(true), tft.fillScreen(BLACK);< s) { j = 14 * (sin(PI * a / 2000)); i = 14 * (cos(PI * a / 2000)); j2 = 1 * (sin(PI * a / 2000)); i2 = 1 * (cos(PI * a / 2000)); tft.drawLine(i2 + 62, j2 + 240, i + 62, j + 240, White); j = 14 * (sin(PI * (a-300) / 2000)); i = 14 * (cos(PI * (a-300) / 2000)); j2 = 1 * (sin(PI * (a-300) / 2000)); i2 = 1 * (cos(PI * (a-300) / 2000)); tft.drawLine(i2 + 62, j2 + 240, i + 62, j + 240, 0x0000); tft.fillRect(50, 285, 30, 30, 0x0000); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(50, 285); tft.print(a / 40); tft.print("%"); a++; } if (b < s) { j = 14 * (sin(PI * b / 2000)); i = 14 * (cos(PI * b / 2000)); j2 = 1 * (sin(PI * b / 2000)); i2 = 1 * (cos(PI * b / 2000)); tft.drawLine(i2 + 180, j2 + 240, i + 180, j + 240, White); j = 14 * (sin(PI * (b-300) / 2000)); i = 14 * (cos(PI * (b-300) / 2000)); j2 = 1 * (sin(PI * (b-300) / 2000)); i2 = 1 * (cos(PI * (b-300) / 2000)); tft.drawLine(i2 + 180, j2 + 240, i + 180, j + 240, 0x0000); tft.fillRect(168, 285, 30, 30, 0x0000); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(168, 285); tft.print(b / 40); tft.print("%"); b++;} if (c < s) { j = 14 * (sin(PI * c / 2000)); i = 14 * (cos(PI * c / 2000)); j2 = 1 * (sin(PI * c / 2000)); i2 = 1 * (cos(PI * c / 2000)); tft.drawLine(i2 + 297, j2 + 240, i + 297, j + 240, White); j = 14 * (sin(PI * (c-300) / 2000)); i = 14 * (cos(PI * (c-300) / 2000)); j2 = 1 * (sin(PI * (c-300) / 2000)); i2 = 1 * (cos(PI * (c-300) / 2000)); tft.drawLine(i2 + 297, j2 + 240, i + 297, j + 240, 0x0000); tft.fillRect(286, 285, 30, 30, 0x0000); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(286, 285); tft.print(c / 40); tft.print("%"); c++;} if (d < s) { j = 14 * (sin(PI * d / 2000)); i = 14 * (cos(PI * d / 2000)); j2 = 1 * (sin(PI * d / 2000)); i2 = 1 * (cos(PI * d / 2000)); tft.drawLine(i2 + 414, j2 + 240, i + 414, j + 240, White); j = 14 * (sin(PI * (d-300) / 2000)); i = 14 * (cos(PI * (d-300) / 2000)); j2 = 1 * (sin(PI * (d-300) / 2000)); i2 = 1 * (cos(PI * (d-300) / 2000)); tft.drawLine(i2 + 414, j2 + 240, i + 414, j + 240, 0x0000); tft.fillRect(402, 285, 30, 30, 0x0000); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(402, 285); tft.print(d / 40); tft.print("%"); d++;} if (a >s) (j = 14 * (sin(PI * a / 2000)); i = 14 * (cos(PI * a / 2000)); j2 = 1 * (sin(PI * a / 2000)); i2 = 1 * (cos (PI * a / 2000)); / 2000));i = 14 * (cos (PI * (a + 300) / 2000)); PI * (a+300) / 2000)); tft.setTextSize(2); tft.setTextColor(0xffff); s) (j = 14 * (sin(PI * b / 2000)); i = 14 * (cos (PI * b / 2000)); j2 = 1 * (sin (PI * b / 2000)); i2 = 1 * (cos (PI * b / 2000)); / 2000)), i = 14 * (cos (PI * (b + 300) / 2000)); PI * (b + 300) / 2000)); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(168, 285); tft.print(b/40); tft.print("%"); b--;) if (c > s) (j = 14 * (sin(PI * c / 2000)); i = 14 * (cos(PI * c / 2000)); j2 = 1 * (sin(PI * c / 2000));i2 = 1 * (cos (PI * c / 2000)); sin(PI*(c+300)/2000)); i=14* (cos(PI*(c+300)/2000)); ), i2 = 1 * (cos (PI * (c + 300) / 2000)); 285, 30, 30, 0x0000); tft.setTextSize(2); c--;) if (d > s) (j = 14 * (sin(PI * d / 2000)); i = 14 * (cos(PI * d / 2000)); j2 = 1 * (sin(PI * d / 2000));i2 = 1 * (cos (PI * d / 2000)); sin(PI*(d+300)/2000)); i = 14* );i2 = 1 * (cos (PI * (d +300) / 2000)); 285, 30, 30, 0x0000); tft.setTextSize(2); tft.setTextColor(0xffff); tft.setCursor(402, 285); tft.print(d/40); tft.print("%"); d--;) ) )

Спідометр

#include "Adafruit_GFX.h" // Core graphics library #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; #define BLACK 0x0000 #include "Gauge.h" #include "Fonts/FreeSans9pt7b.h" #include "Fonts/FreeSans12pt7b.h" #include "Fonts/FreeSerif12pt7b.h" #include "FreeDefault0 int b = 4000; int j, j2; int i, i2; void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) ( int16_t x1, y1; uint16_t wid, ht; tft.setFont(f); tft.setCursor(x, y); tft .setTextSize(sz); tft.println(msg); ) void setup() ( Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.invertDisplay(true); .setRotation(1); ) void loop(void) ( tft.invertDisplay(true); tft.fillScreen(BLACK); tft.drawRGBBitmap(0, 0, test, 480, 320);< b) { while (a < b) { Serial.println(a); j = 80 * (sin(PI * a / 2000)); i = 80 * (cos(PI * a / 2000)); j2 = 50 * (sin(PI * a / 2000)); i2 = 50 * (cos(PI * a / 2000)); tft.drawLine(i2 + 235, j2 + 169, i + 235, j + 169, tft.color565(0, 255, 255)); tft.fillRect(200, 153, 75, 33, 0x0000); tft.setTextSize(3); tft.setTextColor(0xffff); if ((a/20)>99) tft.setCursor(208, 160); else tft.setCursor(217, 160); tft.print(a/20); a++; ) b = 1000; ) /////////////////////////////////////////////////// ////////////////// while (b< a) { j = 80 * (sin(PI * a / 2000)); i = 80 * (cos(PI * a / 2000)); j2 = 50 * (sin(PI * a / 2000)); i2 = 50 * (cos(PI * a / 2000)); tft.drawLine(i2 + 235, j2 + 169, i + 235, j + 169, tft.color565(0, 0, 0)); tft.fillRect(200, 153, 75, 33, 0x0000); tft.setTextSize(3); tft.setTextColor(0xffff); if ((a/20)>99) tft.setCursor(208, 160); else tft.setCursor(217, 160); tft.print(a/20); a--; ) while (1); )

Веселий чоловічок

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

#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; #include "image.h" #include "Fonts/FreeSans9pt7b.h" #include "Fonts/FreeSans12pt7b.h" #include "Fonts/FreeSerif12pt7b.h" #include "FreeDefaultFonts.h" #define BLUE 0x0 define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define GREY 0x8410 #define OX z, const GFXfont *f, const char *msg) ( int16_t x1, y1; uint16_t wid, ht; tft.setFont(f); tft.setCursor(x, y); tft.setTextColor(WHITE); tft.setTextSize(sz); tft.print(msg) ; ) void setup() ( Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.setRotation(1); tft.invertDisplay(true); tft.fillScreen(tft. color565(0,20,0)); 180, Line1, 258, 128, WHITE);delay(60); 258, 128, WHITE); delay (40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line3, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line4, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line5, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line6, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line7, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line8, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line9, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line10, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line11, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line12, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line13, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line14, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line15, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line16, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line17, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128,tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line18, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line19, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line20, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line21, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line22, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line23, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line24, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line25, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128,tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line26, 258, 128, WHITE);delay(40); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); tft.drawBitmap(20, 180, Line27, 258, 128, WHITE);delay(60); tft.fillRect(20, 180, 258, 128, tft.color565(0,20,0)); )

Зображення

У цьому шаблоні ми просто показуємо деякі зображення за допомогою функцій RGBbitmapі bitmap. Просто створіть код для сенсорного екрана та використовуйте цей шаблон. Завантажте файл.h і додайте його до папки Arduino.

#include "Adafruit_GFX.h" // Core graphics library #include "MCUFRIEND_kbv.h" // Hardware-specific library MCUFRIEND_kbv tft; #define BLACK 0x0000 #define RED 0xF800 #define GREEN 0x07E0 #define WHITE 0xFFFF #define GREY 0x8410 #include "images.h" #include "Fonts/FreeSans9pt7b.h" #2 nts/ FreeSerif12pt7b.h" #include "FreeDefaultFonts.h" int a = 3000; int b = 4000; int j, j2; int i, i2; void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) ( int16_t x1, y1; uint16_t wid, ht; // tft.drawFastHLine(0, y, tft.width(), 0xffff );tft.setFont(f); tft.setCursor(x, y); Serial.begin(9600); uint16_t ID = tft.readID(); tft.fillScreen(BLACK); tft.drawRGBBitmap(0, 0, test, 480, 320); , Line2, 45, 45, 0xffff); // wifi tft.drawBitmap (125, 25, Line3, 45, 45, 0xffff); //instagram tft.drawBitmap(245, 25, Line6, 45, 45, 0xffff);//power tft.drawBitmap(20, 260, Line5, 45, 45, 0xffff);//twitter tft.drawBitmap(4 , Line7, 45, 45, 0xffff);//rain tft.setTextSize(6); tft.setTextColor(0xffff); tft.setTextSize(2); tft.setTextColor(0xffff); showmsgXY(330, 280, 1, FreeSans12pt7b, "Saturday"); showmsgXY(300, 305, 1, &FreeSans12pt7b, "6 жовтня 2018"); while (1); )

Підсумок

Завантажте архів із файлами .hнижче:

  • Швидкість відтворення всіх файлів GIF відредагована, вони зроблені швидше або повільніше для кращого розуміння. Швидкість рухів залежить від швидкості вашого процесора або типу коду, а також від розміру та товщини елементів у коді.
  • Ви можете додати код зображення на головній сторінці, але він заповнює всю сторінку. Таким чином, ви можете зробити файл a.hі додати до папки ескіз.
  • У цій статті ми щойно розібрали відображення елементів на РК-екрані. Слідкуйте за наступними уроками, щоб дізнатися, як використовуються сенсорні екрани та карти SD.
  • Якщо у вас є проблеми із включенням бібліотек, змініть знак лапки "" на<>.

На цьому поки що все. Діліться цим посібником з TFT LCD для Arduino зі своїми друзями та колегами.

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

Зараз існує безліч термінів, які позначають певні технології, що ховаються під абревіатурами. Наприклад, багато хто міг чути чи читати про IPS чи TFT, проте мало хто розуміє, у чому насправді різниця між ними. Пов'язано це з нестачею інформації в каталогах електроніки. Саме тому варто розібратися з цими поняттями, а також вирішити, TFT чи IPS – що краще?

Термінологія

Для визначення того, що буде краще чи гірше в кожному окремому випадку, потрібно дізнатися, за які функції та завдання відповідає кожен IPS за фактом є TFT, точніше її різновид, при виготовленні якого використовувалася певна технологія - TN-TFT. Слід розглянути докладніше ці технології.

Відмінності

TFT (TN) є одним із способів виробництва матриць тобто екранів на тонкоплівкових транзисторах, в яких елементи розташовуються по спіралі між парою пластин. За відсутності подачі напруги вони будуть повернені один до одного під прямим кутом горизонтальної площини. Максимальна напруга змушує кристали повертатися так, щоб світло, що проходить крізь них, призводило до утворення чорних пікселів, а при відсутності напруги - білих.

Якщо розглядати IPS або TFT, то відмінність першої від другої полягає в тому, що матриця виготовлена ​​на базі, описаній раніше, проте кристали в ній розташовані не спірально, а паралельно єдиній площині екрана один одному. На відміну від TFT, кристали у разі не повертаються за умов відсутності напруги.

Як ми це бачимо?

Якщо дивитися на IPS або то візуально, відмінність між ними полягає в контрастності, яка забезпечується майже ідеальною передачею чорного кольору. На першому екрані зображення буде більш чітким. А ось якість передачі кольору у разі використання матриці TN-TFT не можна назвати гарною. У даному випадку кожен піксель має власний відтінок, відмінний від інших. Через цей колір сильно спотворюються. Однак є у такої матриці і перевага: вона характеризується найвищою швидкістю відгуку серед усіх існуючих на даний момент. Для екрану IPS потрібен певний час, протягом якого всі паралельні кристали здійснять повний розворот. Однак людське око практично не вловлює різницю в часі відгуку.

Важливі особливості

Якщо говорити про те, що краще в експлуатації: IPS або TFT, варто відзначити, що перші є більш енергоємними. Це з тим, що з повороту кристалів потрібно чимало енергії. Саме тому, якщо перед виробником стоїть завдання зробити свій пристрій енергоефективним, у ньому зазвичай використовується TN-TFT матриця.

Якщо вибирати екран TFT або IPS, варто відзначити ширші кути огляду другого, а саме 178 градусів в обох площинах, це дуже зручно для користувача. Інші виявилися нездатними забезпечити таке. І ще однією істотною відмінністю між двома цими технологіями є вартість виробів на їх основі. TFT-матриці на даний момент є найбільш дешевим рішенням, яке використовується в більшості бюджетних моделей, а IPS відноситься до більш високого рівня, але і він не є топовим.

Дисплей IPS чи TFT вибрати?

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

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

IPS - це дуже вдале продовження розвитку TFT-дисплеїв. Високий рівень контрастності та досить великі кути огляду – це додаткові переваги даної технології. Наприклад, у моніторів на базі TN іноді чорний колір сам змінює свій відтінок. Однак високе споживання енергії пристроями, що працюють на базі IPS, змушує багатьох виробників вдаватися до використання альтернативних технологій або знижувати цей показник. Найчастіше матриці цього типу зустрічаються у провідних моніторів, які працюють від акумулятора, що дозволяє не бути пристрою настільки энергозависимым. Однак постійно ведуться розробки у цій галузі.

TFT та IPS матриці: особливості, переваги та недоліки

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

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

TFT матриці

Thin Film Transistor (TFT) - це система виробництва рідкокристалічних дисплеїв, в основі якої лежить активна матриця з тонкоплівкових транзисторів. При подачі напруги на таку матрицю кристали повертаються один до одного, що призводить до утворення чорного кольору. Відключення електрики дає протилежний результат – кристали утворюють білий колір. Зміни напруги, що подається, дозволяє формувати будь-який колір на кожному окремо взятому пікселі.

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

Недоліки TFT дисплеїв:

    • низька передача кольору. Технологія має обмеження 6 біт на один канал;
    • спіральне розташування кристалів негативно позначається на контрастності зображення;
    • якість зображення помітно знижується за зміни кута огляду;
    • висока ймовірність появи "битих" пікселів;
    • щодо низьке енергоспоживання.

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

IPS матриці

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

Переваги IPS матриць:

  • кути огляду, при яких якість зображення не знижується, збільшено до 178 градусів;
  • покращена кольоропередача. Кількість даних, що передаються за кожен канал збільшено до 8 біт;
  • суттєво покращена контрастність;
  • знижено енергоспоживання;
  • низька ймовірність появи «битих» або пікселів, що вигоріли.

Зображення на матриці IPS виглядає більш живим і насиченим, але це не означає, що ця технологія позбавлена ​​недоліків. У порівнянні з попередником у IPS значно знижено яскравість зображення. Також, внаслідок зміни електродів, що управляють, постраждав такий показник, як час відгуку матриці. Останнім, але не менш значним недоліком є ​​відносно висока ціна на пристрої, в яких використовуються дисплеї IPS. Як правило, вони на 10-20% дорожчі за аналогічні з TFT матрицею.

Що вибрати: TFT чи IPS?

Варто розуміти, що TFT та IPS матриці, незважаючи на суттєві відмінності як зображення, технології дуже схожі. Вони обидві створені на основі активних матриць і використовують однакові структури рідкі кристали. Багато сучасних виробників віддають свою перевагу IPS матрицям. Великою мірою завдяки тому, що вони можуть скласти більш гідну конкуренцію плазмовим матрицям і мають вагомі перспективи в майбутньому. Проте TFT матриці також розвиваються. Зараз на ринку можна зустріти TFT-TN та TFT-HD дисплеї. Вони практично не поступаються зображення IPS матрицям, але при цьому має більш доступну вартість. Але зараз пристроїв із такими моніторами не так багато.

Якщо вам важлива якість зображення і ви готові трохи доплатити, то пристрій з дисплеєм IPS є оптимальним вибором.

Абревіатури зазвичай застосовуються для позначення характеристик чи специфіки. У разі щодо порівняння екранів IPS і TFT виникає жахлива плутанина, оскільки технологія (матриця) IPS – це різновид матриць TFT і тільки. Неможливо порівнювати між собою ці дві технології.

АЛЕ! Є технологія TN-TFT – ось між нею та IPS можна робити вибір та порівнювати. Тому коли ми говоримо про те, який екран краще: IPS або TFT, ми маємо на увазі TFT-екрани в будь-якому випадку, але виготовлені на основі різних технологій: TN і IPS.

Коротко про TN-TFT та IPS

TN-TFT - це технологія, на основі якої виконано матрицю рідкокристалічного екрану. Тут кристали, коли на їхні комірки не подається напруга, дивляться один на одного під кутом 90 градусів. Вони розташовуються по спіралі, і коли на них подається напруга, вони повертаються таким чином, щоб утворити потрібний колір.

IPS - ця технологія відрізняється тим, що тут кристали розташовуються паралельно один одному в єдиній площині екрану (у першому випадку спірально). Все це складно ... на практиці відмінність між екранами на основі матриць TN і IPS полягає в тому, що IPS ідеально відображає чорний колір, в результаті чого картинка виходить більш чіткою та насиченою.

Що стосується TN-TFT, то якість передачі кольору даної матриці не вселяє довіри. Тут кожен піксель може мати свій власний відтінок, отже, кольори спотворюються. IPS-матриці показують картинку набагато краще, а також дбайливіше поводяться з квітами. Також IPS дозволяють спостерігати за тим, що відбувається на екрані, під великим кутом. Якщо дивитися на екран TN-TFT під таким же кутом, кольори будуть спотворені настільки, що буде складно розібрати картинку.

Переваги TN

Однак матриці TN-TFT мають свої переваги. Головне з них – нижча швидкість відгуку пікселів. IPS потрібно більше часу, щоб весь масив паралельних кристалів повернути у потрібний кут. Тому якщо йдеться про вибір монітора для ігор або для відображення динамічних сцен, коли дуже важливою є швидкість промальовування, то найкраще вибирати саме екрани на основі технології TN-TFT.

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

Ще один плюс – низьке споживання електроенергії. IPS-матриці енергоємні, т.к. для повороту масиву кристалів їм потрібна велика напруга. Отже, екрани на основі TFT найкраще підходять для мобільних гаджетів, де гостро стоїть питання економії енергії акумулятора.

І ще – матриці TN-TFT дешеві. Не знайти сьогодні монітора (не рахуючи б/в або ЕПТ моделі), який би був дешевший за модель на основі технології TN. Будь-який бюджетний пристрій електроніки з екраном обов'язково використовуватиме матрицю TN-TFT.

Отже, який екран краще:TFT абоIPS:

  1. IPS менш чуйні за рахунок більшого часу відгуку (погано для ігор та екшн-сцен);
  2. IPS гарантують практично ідеальну кольоропередачу та контрастність;
  3. IPS має ширший кут огляду;
  4. IPS енерговитратні та споживають більше електрики;
  5. Вони також дорожчі, в той час як TN-TFT дешеві.

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


Будь ласка, оцініть статтю:

Якість монітора (екрана) дуже важлива для збереження зору користувачів персональних комп'ютерів. Інтенсивна працювавши протягом багатьох годин за монітором є дуже сильним навантаженням для зору. Чіткість зображення значною мірою залежить від розміру точок люмінофора екрану. Середня відстань між точками називається зерном. У різних моніторів цей параметр має значення від 0,21 до 0,31. Важливими параметрами є частота кадрової (вертикальної) розгортки та малої (горизонтальної) розгортки та смуга пропускання відеосигналу. Чим вище частота кадрів, тим стійкіше зображення і менше втома зору (у якісних моніторів частота кадрів 70-80 Гц). Частота рядків у кілогерцях визначається шляхом множення кількості рядків, що виводяться в одному кадрі, на частоту кадрової розгортки. Смуга частот пропускання відеосигналу (вимірювана МГц) визначається як добуток кількості точок у рядку і частоти малої розгортки. Нижче розглянуто основні характеристики TFT LCD дисплеїв:

1. Відносний отвір.

Апертурне відношення (відносний отвір) є відношення площі зображення, або ефективної площі апертури, до загальної площі матриціРК дисплея. Чим це ставлення більше, тим яскравіший дисплей , оскільки збільшується площа, зайнята кольорами. Збільшується також і контрастність . Відносний отвір є важливим показником РК дисплея, який використовується для оцінки його якості.

2. Кут огляду.

Контрастність зображення РК-монітора змінюється в залежності від кута, під яким ведеться його спостереження. Кут зору характеризує цю зміну. Він може бути виражений через зміну контрасту при зміщенні вгору/вниз і праворуч/ліворуч. Пропускна здатність рідкого кристала великою мірою залежить від кута нахилу падаючого світла. . Таким чином, зміни контрасту визначаються коефіцієнтом передачі на вході та виході.

Зазвичай вказуються значення кутів огляду, наприклад, 170/170°. Вимогою щодо кутів оглядує збереження контрастності не нижче 10:1. При цьому абсолютно байдужа передача кольору в такому положенні, навіть якщо кольори будуть інвертовані (кути визначаються в центрі матриці, а на кути ми, природно, дивимося під кутом).

3. Інтерференція.

Інтерференція виявляється у негативномувзаємовплив пікселів , коли активізованийнапругою піксель впливає на сусідній пасивний . Це характерно переважно для простих панелей типу STN, однак і в панелях з активними матрицями помітно незначний вплив інтерференції.
4. Яскравість.

Для вимірювання яскравості РК-дисплеїв використовуються такі величини, як NIT, Foot Lambert та кандела на квадратний метр – кд/м (cd/m).

Яскравість дисплеявизначається яскравістю заднього освітленняі пропускною здатністю панелі.

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

5. Масштабування зображення під час багаторежимної роботи.

Для моніторів TFT рекомендована роздільна здатність XGA (1024х768) і SXGA (1280х1024), крім того, ці монітори забезпечують підтримку повноекранних розширених режимів SVGA і VGA. Однак при роздільній здатності, що відповідає режиму SVGA і меншому, символи та зображення можуть вийти грубими та нестабільними. Причина в тому, що базова кількість пікселів для 14" та 15" TFT панелейбуло вибрано для режиму XGA. Тому для відтворення зображень в режимах SVGA або VGA вони повинні бути перетворені.

Вирішення цієї проблеми лежить у сфері конкурентоспроможності фірми в цій ринковій ситуації. Компанії роблять спеціальні заходи до того, щоб забезпечити якісне зображення при багаторежимній роботімонітора. Розроблено та реалізовано функція вдосконаленого масштабування зображення (Image Enhancement Function), яка, використовуючи метод нелінійної інтерполяції для збільшення картинки, дозволяє отримати її якісне відтворення при роздільній здатності, відмінному від базового.

6. Час відгуку.

Цей показник означає мінімальний час, за який осередок рідкокристалічної панелі змінює колір. Використовують два способи вимірювання швидкості матриці: black to black (чорний-білий-чорний),і gray to gray(між градаціями сірого), причому значення цих способів оцінки дуже різняться. При зміні стану осередку між крайніми положеннями (чорний-білий) на кристал подається максимальна напруга, і він повертається з максимальною швидкістю (цю характеристику і зазвичай вказують у характеристиках сучасних моніторів). : 8, 6, іноді і 4 мс. При зміщенні кристалів між градаціями сірогона комірку подається значно менше напруга, тому що їх потрібно точно позиціонувати для отримання потрібного відтінку, а тому часу для цього витрачається набагато більше (Від 14 мс - до 28 мс). Нещодавно змогли знайти досить прийнятний спосіб вирішення цієї проблеми. На комірку подається максимальна напруга (або скидається до нуля), а в потрібний момент моментально виводиться на необхідне утримання положення кристала. Але за всіх переваг цього способу, значно збільшується складність точного управління напругою з частотою, що перевищує частоту розгортки. Крім того, керуючий імпульс потрібно вираховувати з урахуванням початкового положення кристалів (Samsung вже представила моделі з технологією Digital Capacitance Compensation, Що реально забезпечує показники в 8-6 мс для матриць PVA).

7. Контрастність зображення.

Значення контрастності визначається за співвідношенням яскравості матриці в стані «чорний» і «білий» (менше засвічений чорний колір і чим яскравість білого, тим вище контрастність). Цей показник важливий для якісного перегляду відео зображень та для хорошого відображення будь-якого зображення(наприклад, для S-IPSсереднє значення - 400:1 , а для PVA – до 1000:1).Але заявлені у характеристиках монітора значення замірялися для матриці, а не для монітора, причому на спеціальному стенді, коли на матрицю подається суворо стандартна напруга, підсвічування живиться строго стандартним струмом і т.д.).

8. Передача кольорів.

Цей показник не завжди коректний. Більшість матриць, вироблених за сучасними технологіями, підтримують 24-бітну передачу кольору (виключенням є деякі монітори PVA від Samsung - ніякої системи в установці 18- або 24-бітних PVA компанією Samsung не простежується).

Windows 7