цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Как идентифицировать драйвер TFT дисплея с помощью Arduino


Как идентифицировать драйвер TFT дисплея с помощью Arduino

Автор: Mike(admin) от 30-03-2020, 09:55

Выяснение информации и проверка драйвера TFT дисплея очень неблагодарная вещь, особенно если это TFT китайского производства. TFT, которые поставляются китайскими производителями, очень доступны, и каждый предпочитает покупать их, потому что они дешевые, но люди не знают о проблемах, возникающих в будущем, при поиске документации или спецификаций конкретного TFT дисплея, который они приобрели. Китайские производители в большинстве своем не предоставляют технические данные на TFT или его драйвера. Единственное, что они делают, это пишут на своих сайтах о TFT-драйверах, которые их ЖК-дисплеи используют. Но можно написать программу, которая может идентифицировать драйвер.


Как идентифицировать драйвер TFT дисплея с помощью Arduino

В этом материале приведен скетч Arduino, который может легко и правильно идентифицировать драйвер TFT. Он был проверен на 2,4, 3,2 и 3,8-дюймовых 8-битных TFT LCD, и он правильно определяет драйверы. Драйверы, которые были успешно распознаны: ILI9325, ILI9328, ILI9341, ILI9335, ST7783, ST7781 и ST7787. Он также может распознавать другие драйверы, такие как ML9863A, ML9480 и ML9445, но практически это не тестировалось.


Основа проверки драйвера – чтение идентификатора устройства. Поскольку все драйверы имеют свои идентификаторы в своем регистре 0x00, поэтому мы читаем этот регистр и определяем, какой драйвер использует дисплей. Простая временная диаграмма драйвера ST7781 объясняет принцип работы.


Как идентифицировать драйвер TFT дисплея с помощью Arduino

Пример непростого TFT – дисплей от китайского производителя «mcufriend». На сайте mcufriend говорится, что они используют драйверы ILI9341 и ILI9325 для своих TFT. Но было обнаружено, что их TFT используют драйвер ST7781 (ID устройства = 7783). Это действительно странно. Например, их 2,4-дюймовый TFT, который в соответствии с их сайтом использует драйвер ILI9341, имеет драйвер ST7783 (ID устройства = 7783).


Как идентифицировать драйвер TFT дисплея с помощью Arduino

Итак, далее представлен код программы Arduino для проверки и идентификации драйверов TFT дисплея. Код работает на Arduino Uno отлично, но если вы используете любую другую плату, просто измените номера выводов в соответствии с платой, которую вы используете, также проверьте порты D и B. Контакт данных TFT D0 подключен к порту B Контакт 0 и D1 подключены к контакту 1 порта B. Выводы данных TFT от D2 до D7 подключены к выводам Port-D 2,3,4,5,6,7. Так что, если вы используете Arduino Mega, проверьте порты D и B и выполните соединения в соответствии с платой. Arduino mega работает на микроконтроллере ATmega2560 или ATmega1280, а Arduino uno работает на микроконтроллере ATmega328p, поэтому обе платформы имеют порты в разных местах на плате Arduino, поэтому сначала проверьте их, а затем установите соединения. Тот же процесс применяется ко всем платам Arduino.


Как идентифицировать драйвер TFT дисплея с помощью Arduino


void ReadDriver();
void Command(char Com);

int Lcd_RD=A0;
int Lcd_WR=A1;
int Lcd_RS=A2;
int Lcd_CS=A3;
int Lcd_RST=A4;
int Lcd_D0=8;
int Lcd_D1=9;

void setup()
{
pinMode(Lcd_RD,OUTPUT);
pinMode(Lcd_WR,OUTPUT);
pinMode(Lcd_RS,OUTPUT);
pinMode(Lcd_CS,OUTPUT);
pinMode(Lcd_RST,OUTPUT);

Serial.begin(9600);
digitalWrite(Lcd_CS,LOW);
digitalWrite(Lcd_RST,HIGH);
digitalWrite(Lcd_CS,LOW);
}

void Command(char Com)
{
DDRD=B11111111;
DDRB=B11111111;
PORTD=Com;
PORTB=Com;
delay(5);
digitalWrite(Lcd_RD,HIGH);
digitalWrite(Lcd_RS,LOW);
digitalWrite(Lcd_WR,HIGH);
delay(10);
digitalWrite(Lcd_WR,LOW);
delay(10);
digitalWrite(Lcd_WR,HIGH);
}

void ReadDriver()
{
int H=0,HH=0,i=0;
Command(0x00)
DDRD=B00000000;
DDRB=B00000000;
Serial.print("LCD Driver Found = ");
pinMode(Lcd_D0,INPUT);
pinMode(Lcd_D1,INPUT);
delay(5);

for(i=0;i<2;i++){
digitalWrite(Lcd_RD,HIGH);
digitalWrite(Lcd_RS,HIGH);
digitalWrite(Lcd_WR,HIGH);
delay(10);
digitalWrite(Lcd_RD,LOW);
delay(10);
H=PIND>>2;
H=H<<1;
HH=H|digitalRead(Lcd_D1);
HH=HH<<1;
HH=HH|digitalRead(Lcd_D0);
digitalWrite(Lcd_RD,HIGH);
Serial.print(HH,HEX);
}
}


void loop(){
int value=0;  
int i=0;
digitalWrite(Lcd_CS,LOW);
ReadDriver();
while(1); 
}



© digitrode.ru


Теги: Arduino, дисплеи




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий