Arduino и дисплеи от сотиков мобильных телефонов

slider
Offline
Зарегистрирован: 17.06.2014

forfrends, перевод на ДУЕ неудобен, там с портами набезобразили, раскидали кусками по всей плате и обозначаются иначе.

неужели у друзей или знакомых нет какойнибудь электроники? этих резисторов валом везде, особенно в старых материнках, cd-rom, hdd , платах принтеров, телевизоров, ... . пойдут от 10ком-20ком (мож и поменьше номиналы, непроверял)  . вместо стабилитрона 3,0-3,3в белый светодиод, или 2 старых красных последовательно.
 

Lelick, как подключить смотрите внимательно подобные примеры выше, можете в инете найти схему на тлф и глянуть, на других форумах от сониэриков подключали, ссылка подобного давал в предыдущем посте.

slider
Offline
Зарегистрирован: 17.06.2014
№9  
320x240  Wistron Opt. p/n: 145711-A  XYL2806 дисплей 145711 145716 ,   ILI9325  3,0" tft lcd  37pin 
дисплей 16бит, для перевода на 8 бит  надо перекинуть дорожку проходящую между кондерами С6 и С2 с "+" на "GND". Распиновка оказалась часто встречающаяся 37пин:
   D7
   D6
   D5
GND
+
+
RESET
D15
D14
D13
D12
D11
D10
D9
D8
   D4
nc
K1
K2
K3
K4
A
ts
ts
ts
ts
nc
RD
WR
DC(RS)
CS
+
GND
   D3
   D2
   D1
   D0

вызов библиотеки UTFT myGLCD(ILI9325D_16ALT,38,39,40,41); 

всё таки для надёжности лучше не использовать подсветку дисплея в качестве стабилизатора , желательно  стабилитроном 3,0-3,3в . Разноцветные эмальрованные провода с моторчиков cd-rom, старых кассетных магнитофонов,....

 
 
slider
Offline
Зарегистрирован: 17.06.2014
№10  
400x240  1540004160  TM032LDH03  дисплей FLY E135  ,   ( HX8352  HX8352A )  3,2" tft lcd  45pin 
 
 
дисплей 18/16/8бит . распиновка как в 15м сообщении http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov#comment-93736   
 дисплейчик большой, красочный, очень хорошие углы обзора, имеет металлизацию с тылу, к которой удобно приклеить на 2х сторонний скотч всё остальное. Можно высвободить ещё 2 пина :  вывод RESET  дисплея соеденить с таким же на ардуино, чтоб дисплей сбрасывался вместе с ней. и вывод CS (выбор кристалла) лог.0 (на GND) . с UTFT вычистить их использование и вуаля :) , имеем 12 пинов свободных (8 из них аналоговые) . Если прижмет можно и D0-D7 использовать, если микросхему регистр добавлять.
 
 
 
устройство получилось очень компактное и тонкое (если заменить кварц, кондеры, убрать кнопку, то толщина 5мм , львиная доля - толщина дисплея) . По ширине и длине чуть меньше пластиковой карты. 
 В качестве корпуса превосходно подходят карточницы, и прозрачный корпус от пакета симки Мегафон , Теле2 ,... , сверху ещё остается место чтоб шурупами насквозь притянуть корпус куда нибудь. 
 
 
устройство предназначалось как логгер с графиками температур и напряжений.
//Если использовать ардуино 3,3в, то никакие резисторы и не надо. питание можно от  лития, и в корпус от старых аудио кассет вместе с аккумулятором.
 новые  дисплеи можно ещё найти в магазинах в своих городах, то там обычно остатки, цена 50-200руб.
 
// 05.2017 дополнение
стабилитрон понадежнее поставить 3.0в , 3.3 это рядом с пределом диспа. 
в сети появился даташит на этот дисп tm032ldh03 , сохранил у себя https://yadi.sk/i/h9EpL21K3Hbnbu 
 
на этом же сайте http://www.beyondinfinite.com/lcd-panel.php  очень много даташитов диспов разных фирм , рекомендую. 
к примеру этого же производителя Tianma  около 500 диспов
 
///// вот еще какие распиновки TFT LCD 45pin бывают  (3шт) https://yadi.sk/i/1C99RHRL3Krgeu
 
////10.2017///и еще где много диспов описано http://www.komponenta.ru/displays/tft/truly/  
 
forfrends
Offline
Зарегистрирован: 24.02.2015

Slider, можете помочь? Пытаюсь подогнать программу из первого поста к Дуе... Сразу возникло несколько вопросов: 

В коде используется пин #define CD_Pin 38 // (RS)Но у меня в распиновке нет ни CD ни RS, это случайно не DC? Также вопрос: в коде есть RST_Pin 41 это подключение пина RESET дисплея?

И еще : PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00

Как именно происходит считывание ИД дисплея? Если не ошибаюсь - это команды настройки портов А и С на вход? Можно ли просто заменить на код for (i=22; i<=37;i++) { pinMode(i, INPUT); }

Проверьте правильность подключения дисплея:

1?LED-    GND
2?LED+   (3.3V)
3?VSS      GND
4?VCC      3.3V
5?VDD      3.3V
6?NC -
7?CS        40
8?RESET  41
9?DC        38
10?WR     39
11?RD      42
12?D17    29
13?D16    28
14?D15    27
15?D14    26
16?D13    25
17?D12    24
18?D11    23
19?D10    22
forfrends
Offline
Зарегистрирован: 24.02.2015

Попробовал переделать код под Arduino DUE и дисплей 128*64 на контроллере ST7920. Вот что получилось:

#include "U8glib.h"

#define CD_Pin 38 // (RS)
#define WR_Pin 39
#define CS_Pin 40
#define RST_Pin 41
#define RD_Pin 42

U8GLIB_ST7920_128X64_4X u8g(48, 47, 49);  // SPI Com: SCK = En = 18, MOSI = rw = 16, CS=RS=di= 17

int i;
byte byteH;
byte byteL;
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g.setFont(u8g_font_unifont);
//lcd.begin(16, 2);

digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
digitalWrite(RST_Pin, 0); // сброс дисплея
//for (i=22; i<=42;i++) { digitalWrite(i, 0); } // всё лог.0
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса

// запишем команду
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
digitalWrite(CD_Pin, 0); // будем работать 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация)
//PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00
for (i=22; i<=42;i++) { digitalWrite(i, LOW); } // 
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)

//чтение данных
//DDRA=0x00; DDRC=0x00; // или 
for (i=22; i<=37;i++) { pinMode(i, INPUT); } // конфиг всех пинов на вход
digitalWrite(RD_Pin, 0); // уст. порта дисплея на передачу (вывод данных с дисплея)
digitalWrite(CD_Pin, 1); // будем работать с 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация )
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);

u8g.setPrintPos(0, 10); 
byteH=0;
if ( digitalRead(29) ) { byteH=byteH+128; u8g.print(1); } else u8g.print(0);
if ( digitalRead(28) ) { byteH=byteH+64; u8g.print(1); } else u8g.print(0);
if ( digitalRead(27) ) { byteH=byteH+32; u8g.print(1); } else u8g.print(0);
if ( digitalRead(26) ) { byteH=byteH+16; u8g.print(1); } else u8g.print(0);
if ( digitalRead(25) ) { byteH=byteH+8; u8g.print(1); } else u8g.print(0);
if ( digitalRead(24) ) { byteH=byteH+4; u8g.print(1); } else u8g.print(0);
if ( digitalRead(23) ) { byteH=byteH+2; u8g.print(1); } else u8g.print(0);
if ( digitalRead(22) ) { byteH=byteH+1; u8g.print(1); } else u8g.print(0);
byteL=0;
if ( digitalRead(30) ) { byteL=byteL+128; u8g.print(1); } else u8g.print(0);
if ( digitalRead(31) ) { byteL=byteL+64; u8g.print(1); } else u8g.print(0);
if ( digitalRead(32) ) { byteL=byteL+32; u8g.print(1); } else u8g.print(0);
if ( digitalRead(33) ) { byteL=byteL+16; u8g.print(1); } else u8g.print(0);
if ( digitalRead(34) ) { byteL=byteL+8; u8g.print(1); } else u8g.print(0);
if ( digitalRead(35) ) { byteL=byteL+4; u8g.print(1); } else u8g.print(0);
if ( digitalRead(36) ) { byteL=byteL+2; u8g.print(1); } else u8g.print(0);
if ( digitalRead(37) ) { byteL=byteL+1; u8g.print(1); } else u8g.print(0);

u8g.setPrintPos(0, 30); 
u8g.print("ID display: ");
u8g.print(byteH, HEX);
u8g.setPrintPos(0, 50); 
u8g.print(byteL, HEX);

digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение шины данных DB0..DB15)
//DDRA=0xFF; DDRC=0xFF; // или
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); } // конф. шины данных ARDUINO на выход
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
//digitalWrite(RST_Pin, 1);

// вставка для UTFT
// pinMode(42, OUTPUT); // конф.ардуино для RD на выход
// digitalWrite(42, 1); // уст. RD=1 - чтобы порт дисплея был на приём (ввод данных в дисплей)

//delay(100);
}

void setup(void) {
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

void loop() {
// put your main code here, to run repeatedly:
}

В результате в верхней строке только нули и ИД контроллера - тоже нули. Есть большое побозрение на неправильное подключение дисплея (писал в предыдущем посте). Можете с этим помочь?

forfrends
Offline
Зарегистрирован: 24.02.2015

Перелапатил кучу сайтов... Не нашел никакой другой распиновки кроме той что уже имеется. НО! Везде распиновка была на дисплеи 1.5-2.5 дюймов, а здесь все 4". Настораживает это.

Попробовал переделать программу читалка ID дисплеев v2.0 под ДУЕ. Собственно, вот что получилось:

#define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i=0;
byte byteH;
byte byteL;


void setup() 
{
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
Serial.println("UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)");
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(5);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(15);
digitalWrite(RST_Pin, 1);
delay(500);

Serial.println("register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)" ); 
Serial.println("                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)");
Serial.println("                 R61509V(B509), R61505W(C505), SPFD5420A(5408) ");
Serial.println("if  (0 93 0 27) -> 8bit  .  if  (93 27 93 27) -> 16bit " );
byteH=0x00 ;  byteL=0x00 ;  // 
writeCommand_read6Parameter();
 

rstx_u();

Serial.println("register EFh for ILI9327(0 02 04 93 27 FF),   " ); 
byteH=0x00 ;  byteL=0xEF ;  // для ili9327 - 00 02 04 93 27 FF
writeCommand_read6Parameter();

rstx_u();

Serial.println("register BFh for ILI9481(0 0 94 81 xx xx)  " ); 
byteH=0x00 ;  byteL=0xBF ;  // для ili9481 - 00 00 94 81 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register D3h for ILI9488(0 0 94 88 xx xx)   " ); 
byteH=0x00 ;  byteL=0xD3 ;  // для ili9488 - 00 00 94 88 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register 04h for HX8357(?DA-DC), HX8353(?80-85),   " ); 
byteH=0x00 ;  byteL=0x04 ;  // для  -  xx xx
writeCommand_read6Parameter();

rstx_u();



}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}


// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
digitalWrite(RSTX, 0);  delay(15); 
digitalWrite(RSTX, 1);  delay(250);
} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 

// дергаем RD вверх и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(2);
//byteH=0; byteL=0;
//byteH=PINA; // считываем с выводов PORTA
//byteL=PINC; // считываем с выводов PORTC

byteH=0; // PORTA считаем
if ( digitalRead(29) )    byteH=byteH+128; 
if ( digitalRead(28) )    byteH=byteH+64; 
if ( digitalRead(27) )    byteH=byteH+32;  
if ( digitalRead(26) )    byteH=byteH+16; 
if ( digitalRead(25) )    byteH=byteH+8; 
if ( digitalRead(24) )    byteH=byteH+4;  
if ( digitalRead(23) )    byteH=byteH+2; 
if ( digitalRead(22) )    byteH=byteH+1;  
byteL=0;  // PORTC считаем
if ( digitalRead(30) )    byteL=byteL+128; 
if ( digitalRead(31) )    byteL=byteL+64; 
if ( digitalRead(32) )    byteL=byteL+32;  
if ( digitalRead(33) )    byteL=byteL+16; 
if ( digitalRead(34) )    byteL=byteL+8; 
if ( digitalRead(35) )    byteL=byteL+4;  
if ( digitalRead(36) )    byteL=byteL+2; 
if ( digitalRead(37) )    byteL=byteL+1;

} 

// конфигурация порта на вход
int port_in()
{
//DDRA=0x00; DDRC=0x00; // конфиг всех пинов на вход
for (i=22; i<=37;i++) { pinMode(i, INPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}

// конфигурация портов на выход
int port_out()
{
//DDRA=0xFF; DDRC=0xFF; // конфиг всех пинов на выход
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход
  
//PORTA=byteH ; 
//PORTC=byteL ;
if (byteL == 0x00){
  for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}
if (byteL == 0xEF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, LOW);
  digitalWrite(27, HIGH);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0xBF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, HIGH);
  digitalWrite(27, HIGH);
  digitalWrite(28, LOW);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0xD3){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, HIGH);
  digitalWrite(27, LOW);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0x04){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, HIGH);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
Serial.print("register " ); 
Serial.print(byteH, HEX );Serial.print(" ");Serial.println(byteL, HEX );
// 1-будем передавать команду
//digitalWrite(RDX, 1);  // порт дисплея в режим приема   ***************
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
wrx_u(); // дергаем WRITE вверх
// 2-будем принимать данные
port_in();  // порт ардуины на вход
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
digitalWrite(WRX, 1);  
rdx_u(); // дергаем RD и получаем данные
Serial.print("1 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("2 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("3 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("4 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("5 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("6 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
Serial.println(""); 
}

Из дисплея ничего не читает. Пины DB7-0 подключал к пинам 37-30 ардуины.

slider
Offline
Зарегистрирован: 17.06.2014

так то правильно перевод байтов на пины и обратно, молодец,(точность не проверял, но принцип вы точно уловили) так мне кажется проще для DUE (можно и ещё упростить чтение с пинов используя операции сдвига в байте - эт для заядлых разбирающихся в С++, я начинал с программирования на ассемблере, С++ для меня тяжко, надо постоянно в нём быть, чтоб помнить что к чему). 

 Как вариант , можно ещё глянуть как пересылает UTFT  8ми битные байты (H+L) в 32х разрядные для DUE , в файлике ...Arduino\libraries\UTFT\hardware\arm\HW_SAM3X8E.h 

....
	case 8:
#if defined(CTE_DUE_SHIELD) || defined(EHOUSE_DUE_SHIELD)
		REG_PIOC_CODR=0xFF000;
		REG_PIOC_SODR=(VH<<12) & 0xFF000;
		pulse_low(P_WR, B_WR);
		REG_PIOC_CODR=0xFF000;
		REG_PIOC_SODR=(VL<<12) & 0xFF000;
		pulse_low(P_WR, B_WR);
#else
		REG_PIOA_CODR=0x0000C000;
		REG_PIOD_CODR=0x0000064F;
		REG_PIOA_SODR=(VH & 0x06)<<13;
		(VH & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000;
		REG_PIOD_SODR=((VH & 0x78)>>3) | ((VH & 0x80)>>1);
		pulse_low(P_WR, B_WR);

		REG_PIOA_CODR=0x0000C000;
		REG_PIOD_CODR=0x0000064F;
		REG_PIOA_SODR=(VL & 0x06)<<13;
		(VL & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000;
		REG_PIOD_SODR=((VL & 0x78)>>3) | ((VL & 0x80)>>1);
		pulse_low(P_WR, B_WR);
#endif
		break;
	case 16:
#if defined(CTE_DUE_SHIELD)
        REG_PIOC_CODR=0xFF1FE;
		REG_PIOC_SODR=(VL<<1) & 0x1FE;
		REG_PIOC_SODR=(VH<<12) & 0xFF000;
#elif defined(EHOUSE_DUE_SHIELD)
		PIOC->PIO_ODSR = ((PIOC->PIO_ODSR&(~0x000FF3FC)) | ((((uint32_t)VL)<<2) | (((uint32_t)VH)<<12)));
#else
		REG_PIOA_CODR=0x0000C080;
		REG_PIOC_CODR=0x0000003E;
		REG_PIOD_CODR=0x0000064F;
		REG_PIOA_SODR=((VH & 0x06)<<13) | ((VL & 0x40)<<1);
		(VH & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000;
		REG_PIOC_SODR=((VL & 0x01)<<5) | ((VL & 0x02)<<3) | ((VL & 0x04)<<1) | ((VL & 0x08)>>1) | ((VL & 0x10)>>3);
		REG_PIOD_SODR=((VH & 0x78)>>3) | ((VH & 0x80)>>1) | ((VL & 0x20)<<5) | ((VL & 0x80)<<2);
#endif
		pulse_low(P_WR, B_WR);
		break;
	case LATCHED_16:
		asm("nop");		// Mode is unsupported
		break;
.....

 через установку побитно 0 и 1 в 32х разрядном байте DUE , для попадания на нужные  пины по плате. Но эт для скорости вывода такая припарка из-за разбросанности пинов порта по плате.  Для чтения ID скорость не важна.

  Проще посылать в сериал монитор и смотреть там, зачем приляпывать экран для вывода ID , хотя и 4х строчный на ST7920 . Вторая читалка выдаёт очень много инфы , по многим часто встречающимся адресам, поэтому внешний дисплей не покажет это всё сразу. Первая читалка(с первого сообщения) только по нулевому адресу, поэтому там и внешний экран для вывода. 

 

И так, у вас  дисплей только с 8ми битной шиной http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov#comment-162948  , распиновка 99% известна (если есть ещё возможность, то скиньте качественные фото  шлейфа с 2х сторон и платы где он стоял, на какойнибудь бесплатный без регистрации фотохостинкг типа ipicture.ru  http://fastpic.ru/   http://radikal.ru/  ) . Есть Мега (но нужны резисторы и стабилитрон, чтобы уровни через резисторы не пересиливали питание) , и DUE (не нужно согласование),

Вижу 2 варианта запустить ваш неизвестный дисплей на DUE. 

1.способ вероятность 70% , перебиранием инициализаций UTFT

пока ваше подключение не проверял, но надо подключить как указано в UTFT_Requirements.pdf , на стр2 есть табличка ,  6-е уточнение - для 8ми битного дисплея DB0-DB7 на земле, тогда подключать к пинам D22...D29 (начиная с младшего заканчивая старшим, в вашем случае соответственно дисплейные DB10...DB17 , т.е. D22 DUE подключаем к DB10 дисплейному и т.д.) .  на RD подаем лог1 (+3,3в). Далее убеждаемся что в файле  memorysaver.h все disable иницициализаций закоментированы. Далее в файле UTFT.cpp меняем  byte dtm[] = {16, .... , SERIAL_5PIN};  на все "8"  byte dtm[] = {8, .... , 8}; , т.е. перестраиваем все режимы на 8бит .  ( word dsx[] =  и word dsy[] пока необязательно, главно пока угадать инициализацию)   Далее открываем пример, к примеру UTFT\examples\Arduino (ARM) + Teensy\UTFT_Demo_400x240 (можно под лупой разглядеть пиксели на экране на сантиметр и примерно прикинуть его разрешение) и перебираем UTFT myGLCD(ITDB32WD,38,39,40,41);   32 раза    от UTFT myGLCD(0,38,39,40,41); до UTFT myGLCD(31,38,39,40,41); загружая в ардуино , и ожидая около 5 секунд на какой инициализации что появится на экране. Если экран хоть немного сменит яркость - эт тоже хорошо(дисплей проснулся, заработали преобразователи для питания ЖК матрицы), значит инициализация немного подходит к семейству его контроллера.  Ну а в лучшем случае появится тест на экране.

И обязательно попробовать UTFT_v2.77b2_uno_ili9327_8bit_turbo либу из соседней ветки 3.5", на Уно подключается как адафруитский шилд (DB0-DB7 к D8,D9,D2-D7) , на меге к портуС (D37-D30) . Ибо с некоторыми контоллерами дисплеев в режиме 8бит надо немного по другому общаться. В этой либе по умолчанию настроен №31 инит - ili9327, но можно подменять закидывая в папку UTFT_\tft_drivers\ili9327_8 другие иниты и установки.

2.способ  вероятность 99,9% , считать ID, и использовать его инициализацию в UTFT, если в ней не окажется , то запросто найти в инете и подменить схожую в UTFT.  

либо а).  переделать первую читалку согласно пинам DUE , и перебрать все самые распространённые регистры где может лежать ID .

либо б). лучше также переделать вторую читалку, + возможно её прийдётся переделать на 8 бит (добавляется ещё дерганье WR для пересылки второго 8бит для 16ти битной инфы , и дерганье RD для принятия второго 8битного 16ти битной инфы) , хотя вроде в дисплеях у которых адрес не лежит в 0x00 адресе, и так адрес(регистр) 8ми битный. Или мож там просто предусмотреть переключение PORTA и PORTC между собой, ибо при переключении разных контроллеров с 16 на 8 бит, у них эти 8бит оказываются у кого на PORTA, у кого на PORTC (речь о Меге).

посмотреть к примеру можно скачать даташит ili9488 стр.40-42 , на 40стр показано запись и чтение в 8ми битном режиме "DBI Type B 8-bit". на 41-42 графики записи чтения 16ти битного режима , надо только добавить дерганье соответственно WR и RD для отправки/получения второго и последующего 8ми битного байта. Что-то мне помниться оно немного иное чем для контроллеров у которых ID лежит по 0x00 адресу. 

// 8битные дисплеи вторая читалка хорошо читает, если у них ID лежит в 0x00 адресе(регистре). Если в других регистрах, надо время тестить проверять/допиливать на 8бит на DUE(у меня её нет). Если будете переделывать первую читалку, то проверте в ней чтоб правильно устанавливались лог. уровни управляющих сигналов согласно графикам записи чтения , а то я сомневаюсь там в правильности.  Вторую читалку переделывать/проверять на 8бит пока у меня нет ни надобности(все дисплеи что мне попадаются, имеют возможность 16ти битного режима)  ни самого главного - времени. 

//// 1. сделайте 1 способ.   2. когда будете добивать второй способ , то там для 8ми битов надо оставить только их ,

byteL=0;  // PORTC считаем
if ( digitalRead(30) )    byteL=byteL+128; 
if ( digitalRead(31) )    byteL=byteL+64; 
if ( digitalRead(32) )    byteL=byteL+32;  
if ( digitalRead(33) )    byteL=byteL+16; 
if ( digitalRead(34) )    byteL=byteL+8; 
if ( digitalRead(35) )    byteL=byteL+4;  
if ( digitalRead(36) )    byteL=byteL+2; 
if ( digitalRead(37) )    byteL=byteL+1;

  без того что должно падать во второй порт PORTA на другие пины, ибо если вторая читалка ничего не вычитала (лог сериал монитора надо было приложить, подключение D37пин меги/дуе  младший бит к младшему биту вашего дисплея D10 и т.д.) , то скорее всего у вас контроллер у которого ID не по 0x00 адресу, пилите вторую читалку, выложите что она ответила в сериал монитор. т.е. выложите что отвечает в сериал монитор переделанная вторая читалка без убирания старшего байта, и с убиранием работы со старшим байтом (пины 29-22).

 

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо за помощь! С программой сегодня уже не успею, скорее всего завтра- послезавтра. Надеюсь на следующей неделе выбраться в город и купить резисторы, что бы попробовать с Мегой (если не получится с ДУЕ).

Вот ссылки на фото дисплея и схемы от телефона:

http://i75.fastpic.ru/big/2016/0209/f7/a016a9211e1f958c53aa5627432d47f7.jpg
http://i76.fastpic.ru/big/2016/0209/50/aba3925c455f0aaa0e37bf7d579e2d50.jpg
http://i76.fastpic.ru/big/2016/0209/8e/93055e74ccf87278d3892f6ce6a54f8e.jpg
http://i75.fastpic.ru/big/2016/0209/c5/77deef8bdd4095a83d74888951d2bbc5.jpg
http://i76.fastpic.ru/big/2016/0209/81/ae4ba47a6986e2c5d3901ee03998ba81.jpg
http://i73.fastpic.ru/big/2016/0209/6d/70e845bb51632491549082ec1bd2b96d.jpg
http://i75.fastpic.ru/big/2016/0209/2f/077ba4a195ef278563c5ea33cec6c12f.jpg
http://i75.fastpic.ru/big/2016/0209/de/9b67a2b951945a8d296a8501920d42de.jpg
http://i73.fastpic.ru/big/2016/0209/05/854d9e3e533a6f0670092df21a8d3d05.jpg
http://i74.fastpic.ru/big/2016/0209/08/e6bec9da9f53f9b087fdf470349a1808.jpg
http://i75.fastpic.ru/big/2016/0209/8d/945a25b4a193003b2f41263f2224278d.jpg
http://i75.fastpic.ru/big/2016/0209/26/548cb0bad1afc6a14f08813d7220b026.jpg
http://i75.fastpic.ru/big/2016/0209/42/f0c376a7200bb4c9923e6095a9341c42.jpg
http://i75.fastpic.ru/big/2016/0209/b4/e23e022de170ba138c15a0892961f1b4.jpg
http://i75.fastpic.ru/big/2016/0209/27/893899fcdac18ee3b5d4ba8606d88627.jpg
http://i75.fastpic.ru/big/2016/0209/d2/d735e0e1eae9933f2c80782b112db0d2.jpg
http://i73.fastpic.ru/big/2016/0209/b2/179781228205ff37fb19281062f975b2.jpg
http://i74.fastpic.ru/big/2016/0209/f3/6ba76295eb2b4967e7a97e7a24bcfef3.jpg
http://i74.fastpic.ru/big/2016/0209/38/99b0947c3dbc710dbd7eee754f5d4d38.jpg
http://i74.fastpic.ru/big/2016/0209/75/1a5ce8e398bd852eb0c2a0ed1affb775.jpg

А вот что выдает 2-я программа чтения ИД:

start... 
UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)

register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)
                 R61509V(B509), R61505W(C505), SPFD5420A(5408) 
if  (0 93 0 27) -> 8bit  .  if  (93 27 93 27) -> 16bit 
register 0 0
1 Parameter   0 0
2 Parameter   0 0
3 Parameter   0 0
4 Parameter   0 0
5 Parameter   0 0
6 Parameter   0 0

register EFh for ILI9327(0 02 04 93 27 FF),   
register 0 EF
1 Parameter   EF 0
2 Parameter   EF 0
3 Parameter   EF 0
4 Parameter   EF 0
5 Parameter   EF 0
6 Parameter   EF 0

register BFh for ILI9481(0 0 94 81 xx xx)  
register 0 BF
1 Parameter   BF 0
2 Parameter   BF 0
3 Parameter   BF 0
4 Parameter   BF 0
5 Parameter   BF 0
6 Parameter   BF 0

register D3h for ILI9488(0 0 94 88 xx xx)   
register 0 D3
1 Parameter   D3 0
2 Parameter   D3 0
3 Parameter   D3 0
4 Parameter   D3 0
5 Parameter   D3 0
6 Parameter   D3 0

register 04h for HX8357(?DA-DC), HX8353(?80-85),   
register 0 4
1 Parameter   4 0
2 Parameter   4 0
3 Parameter   4 0
4 Parameter   4 0
5 Parameter   4 0
6 Parameter   4 0

Начал читать UTFT_Requirements.pdf, немного не понятно: написанно что для 8-ми битного режима пины DB0-DB7 (подключенные к D37-D30) нужно подключить к земле. Соответственно в 8-ми битном режиме используются только старшие пины DB8-DB15 (подключенные к D22-D29). Но на дисплее только младшие пины DB0-DB7. Получается их нужно поставить на место старших? Так? Что-то я сегодня устал и немного торможу...

forfrends
Offline
Зарегистрирован: 24.02.2015
Итоги первого теста (перебиранием инициализаций UTFT):
Дисплей 11 раз откликнулся и показал "мусор". Дисплей откликался только после того как перекинул пины дисплея DB8-DB15 на D22-D29 ардуины. byte dtm[] = {...}; заменил на byte dtm[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
Подошли инициализации 3, 4, 5, 7, 10, 11, 21, 22, 24, 27, 28.
3, 4, 5, 7, 10, 22 - больше всего мусора
11, 21, 27 - немножко "мусора"
29 - плотная узкая полоска мусора внизу экрана
24 - дисплей стал темнее с непонятным пятном. То ли отсвет от продавленного тача, то ли неполный рисунок...
Фото (по порядку):
 
Lelick
Offline
Зарегистрирован: 07.02.2016

forfrends, покажи пожалуйста подробную схему подключения... если можно все.. и весь код? у меня тоже несколько экранчиков есть но на них практически нет информации... есть информация более менее на экранчик от k750i... но вот с чего начать не знаю.... боюсь что спалить.. 

slider
Offline
Зарегистрирован: 17.06.2014

говорил D10-D17 эт по распиновке http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov#comment-163168 , да их можно как вы DB8-DB15 обзываете.  

Точно, извиняюсь ,ошибся, (исправил по возможности),  при дисплеях 8бит надо подключать к меге/дуе D22-D29 а не к D30-37.  Т.е. у вас младшим битом DB8 к младшему D22 и т.д. 

цветной мусор это очень хорошо. это значит дисплей работает, выводится на экран что в видеоОЗУ в контроллере при включении оказалось , значит либо неработает только очистка экрана, м.б. из-за большой скорости дуе, экран не успел отработать или попробуйте перевернуть подключение DB8..DB15 на DB15..DB8 (крайне редко встречал когда распиновка зеркальна была в отличии как на схеме распиновки), либо у UTFT не оказалось нужной инициализации, без чтения ID не обойтись.

 // судя по фоткам дорожек в шлейфе и в какой очередности они заходят в стекло, можно попробовать перевернуть DB8..DB15 на зеркально DB15..DB8 и снова прогнать все иниты в UTFT 

и попробуйте ещё с прямым и зеркальным подключением инит от ili9488,  https://yadi.sk/d/eO7CXOMQkpdYV   (файлы из папки UTFT\tft_drivers\ili9486 закиньте в свою UTFT\tft_drivers\ili9486    , вызов UTFT myGLCD(28,38,39,40,41);  

если не поможет, пробуйте вычитать ID, скиньте свою переделку под дуе на 8 бит, проверю на меге (отвечать изменять буду на старые свои сообщения уже заблокированные для изменения, чтоб у вас был доступ отредактировать свое последнее, чтоб не засирать ветку новыми сообщениями)

forfrends
Offline
Зарегистрирован: 24.02.2015
Lelick , перечитайте тему, ответ написан. Если очень коротко, то:
1) смотрите примерную распиновку дисплея (GND и питание подсветки легко найти, а после и + не сложно)
2) Считаете количество контактов и ищите в интернете все похожие распиновки.
3) Подключаете к Ардуине (лучше Меге, что бы не мучаться так как я) Примерную распиновку подключения смотрите в UTFT_Requirements.pdf на стр2 и перечитайте посты выше.
4) Заливаете скетч из первого поста (или из http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie)
5) пробуйте, читайте.
 
slider, пробовал переворачивать когда прогонял инициализации - дисплей не реагировал. Но я пробовал не на все, а только на те, на к оторые была реакция. Попробую все прогнать в зеркальном. Отпишусь о результатах.
Инит от ili9488 не подошел. Реакции от дисплея нет ни в прямом, ни в зеркльном подключении.
 
Прогнал все иниты в зеркальном - ответа нет.
forfrends
Offline
Зарегистрирован: 24.02.2015

Пробую вариант 2. Пересмотрел код из первого поста, вроде все верно, но я могу и ошибаться.

// программа для определения ID контроллера дисплея, подключать все 16бит
// (эт чтоб найти старшие биты , ибо в большинстве случаев именно они используются для 8ми битного режима)
//
// в верхней строчке покажет 16 бит ответа с дисплея , начиная со старшего бита
// в нижней строчке в HEX коде старший и младший байты. (для ILI контроллеров это будет 9325, 9320, 9327,...)
// при угадывании правильного подключения шины данных дисплея должно получиться к примеру:
// 1я строчка: 1001 0011 0010 0101
// 2я строчка: 9 3 2 5 ,т.е. это контроллер ILI9325
// подсветку дисплея через ом~20-30 к +5v, питание дисплея от ардуиновских 3.3v (если надо то занизить стабилитроном
// или стабилизатором до 2.8v - т.к. иногда инициализации дисплеев приводятся для 2.8v - там константы напряжений
// для правильной работы ЖК матрицы)
//
// выводы дисплея желательно подключать через резист. делители к примеру 10к+22к , на крайняк тупо через 10к,
// но тогда на питание диспл. посадить стабилитрон 3,0-3,1v и запитывать через резист. ом~20-30 от +3,3v,
// иначе дисплей запитается через выводы и ~4-5v пересилят ардуиновские +3,3v
//
// выводы подключать стандартно UTFT на arduino mega RS(CD),WR, CS, RST
// Standard Arduino Mega/Due shield : <display model>,38, 39, 40, 41
// CTE TFT LCD/SD Shield for Arduino Mega : <display model>,38, 39, 40, 41
//
//выводы ардуино меги 22-29 к предполагаемым выводам дисплея DB8-DB15
//выводы ардуино меги 30-37 к предполагаемым выводам дисплея DB8-DB0
// и дополнительно, для получения ответа от дисплея, необходимо
// к выв. ардуино меги 42 подключить вывод RD дисплея. (по умолчанию на шилдах он кинут на +3.3v)
// Дисплей 1602, выводы VSS, VDD, RS, E, D4, D5, D6, D7
// к выводам ардуино меги GND, +5v, 13, 12, 11, 10, 9, 8
// помним на дисплее поставить резистор 3,3к между VO и VSS(+) , RW замкнуть на VSS(+), подключить A и K к VSS(+) и VDD

#include "U8glib.h"
//#include <LiquidCrystal.h>

#define CD_Pin 38 // (RS)
#define WR_Pin 39
#define CS_Pin 40
#define RST_Pin 41
#define RD_Pin 42

U8GLIB_ST7920_128X64_4X u8g(48, 47, 49);  // SPI Com: SCK = En = 18, MOSI = rw = 16, CS=RS=di= 17

//LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
int i;
byte byteH;
byte byteL;
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g.setFont(u8g_font_unifont);
//lcd.begin(16, 2);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
digitalWrite(RST_Pin, 0); // сброс дисплея
//for (i=22; i<=42;i++) { digitalWrite(i, 0); } // всё лог.0
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(5);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(15);
digitalWrite(RST_Pin, 1);
delay(500);
// запишем команду
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
digitalWrite(CD_Pin, 0); // будем работать 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация)
//PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00
for (i=22; i<=37;i++) { digitalWrite(i, LOW); } // 
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)

//чтение данных
//DDRA=0x00; DDRC=0x00; // или 
for (i=22; i<=37;i++) { pinMode(i, INPUT); } // конфиг всех пинов на вход
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
digitalWrite(RD_Pin, 0); // уст. порта дисплея на передачу (вывод данных с дисплея)
digitalWrite(CD_Pin, 1); // будем работать с 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация )
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);

u8g.setPrintPos(0, 10); 
byteH=0;
if ( digitalRead(29) ) { byteH=byteH+128; u8g.print(1); } else u8g.print(0);
if ( digitalRead(28) ) { byteH=byteH+64; u8g.print(1); } else u8g.print(0);
if ( digitalRead(27) ) { byteH=byteH+32; u8g.print(1); } else u8g.print(0);
if ( digitalRead(26) ) { byteH=byteH+16; u8g.print(1); } else u8g.print(0);
if ( digitalRead(25) ) { byteH=byteH+8; u8g.print(1); } else u8g.print(0);
if ( digitalRead(24) ) { byteH=byteH+4; u8g.print(1); } else u8g.print(0);
if ( digitalRead(23) ) { byteH=byteH+2; u8g.print(1); } else u8g.print(0);
if ( digitalRead(22) ) { byteH=byteH+1; u8g.print(1); } else u8g.print(0);
byteL=0;
if ( digitalRead(30) ) { byteL=byteL+128; u8g.print(1); } else u8g.print(0);
if ( digitalRead(31) ) { byteL=byteL+64; u8g.print(1); } else u8g.print(0);
if ( digitalRead(32) ) { byteL=byteL+32; u8g.print(1); } else u8g.print(0);
if ( digitalRead(33) ) { byteL=byteL+16; u8g.print(1); } else u8g.print(0);
if ( digitalRead(34) ) { byteL=byteL+8; u8g.print(1); } else u8g.print(0);
if ( digitalRead(35) ) { byteL=byteL+4; u8g.print(1); } else u8g.print(0);
if ( digitalRead(36) ) { byteL=byteL+2; u8g.print(1); } else u8g.print(0);
if ( digitalRead(37) ) { byteL=byteL+1; u8g.print(1); } else u8g.print(0);

u8g.setPrintPos(0, 30); 
u8g.print("ID display: ");
u8g.print(byteH, HEX);
u8g.setPrintPos(0, 50); 
u8g.print(byteL, HEX);

digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение шины данных DB0..DB15)
//DDRA=0xFF; DDRC=0xFF; // или
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); } // конф. шины данных ARDUINO на выход
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
//digitalWrite(RST_Pin, 1);

// вставка для UTFT
// pinMode(42, OUTPUT); // конф.ардуино для RD на выход
// digitalWrite(42, 1); // уст. RD=1 - чтобы порт дисплея был на приём (ввод данных в дисплей)

//delay(100);
}

void setup(void) {
  // flip screen, if required
  // u8g.setRot180();
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

void loop() {
// put your main code here, to run repeatedly:

}

Единственное что я не делал: в коментарии к коду написанно RW замкнуть на VSS(+), я этого не делал так как RW используется в коде, и если замкнуть на + то никакие команды по этому пину не пойдут. Результат тот же что и раньше - одни нули. Мне кажется что просто код неправильно переведен под ДУЕ.

А вот вариант Б с переделкой 2-й читалки под 8 бит - для меня это пока что высшая математика. Вроде все просто объяснено, но я сам это не смогу сделать - не хватает знаний.

Кстати, меня терзают сомнения по поводу правильности моего перевода 2-й читалки. Особенно  перевода 0x00, 0xEF и др... Мне кажется я мог биты в обратном порядке написать, но как проверить - не знаю.

// читалка ID дисплеев v2.0   Slider , вопросы и предложения можно на   segun@yandex.ru
// "спасибо" поблагодарить за проделанную работу можно на карту Сбербанка  4276 4500 1754 7783 или скинуть на тлф. 8-951-404-7109
// моя ветка http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-...
// подключить дисплей к Arduino Mega:
// старший DB15-8 , пины 29-22     PORTA       к примеру считать с 00D3  =>0x00 старший 
// младший DB7-0  , пины 37-30     PORTC       к примеру считать с 00D3  =>0xD3 младший
// при использовании 8битных дисплеев, подключать к младшему, DB7-0  , пины 37-30     PORTC 
// Это соответственно UTFT распиновке. 
// Для некоторых дисплеев при их включении на 8 бит, шина переносится в старший байт, а для некоторых , разбрасывается по битам DB0-DB18 
// поэтому дабы не утраивать вывод инфы в сериал монитор для всех случаев, здесь только для UTFT случая. 
// Кому надо, можно поменять везде местами PORTA PORTC , на случай подключения 16битного дисплея и активированного на 8бит, 
// шина данных которого смещается на старший байт. Ну или если попадётся такой шилд, то сделаю это в этом скетче. 

 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i=0;
byte byteH;
byte byteL;


void setup() 
{
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
Serial.println("UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)");
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(5);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(15);
digitalWrite(RST_Pin, 1);
delay(500);

Serial.println("register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)" ); 
Serial.println("                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)");
Serial.println("                 R61509V(B509), R61505W(C505), SPFD5420A(5408) ");
Serial.println("if  (0 93 0 27) -> 8bit  .  if  (93 27 93 27) -> 16bit " );
byteH=0x00 ;  byteL=0x00 ;  // 
writeCommand_read6Parameter();
 

rstx_u();

Serial.println("register EFh for ILI9327(0 02 04 93 27 FF),   " ); 
byteH=0x00 ;  byteL=0xEF ;  // для ili9327 - 00 02 04 93 27 FF
writeCommand_read6Parameter();

rstx_u();

Serial.println("register BFh for ILI9481(0 0 94 81 xx xx)  " ); 
byteH=0x00 ;  byteL=0xBF ;  // для ili9481 - 00 00 94 81 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register D3h for ILI9488(0 0 94 88 xx xx)   " ); 
byteH=0x00 ;  byteL=0xD3 ;  // для ili9488 - 00 00 94 88 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register 04h for HX8357(?DA-DC), HX8353(?80-85),   " ); 
byteH=0x00 ;  byteL=0x04 ;  // для  -  xx xx
writeCommand_read6Parameter();

rstx_u();



}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}


// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
digitalWrite(RSTX, 0);  delay(15); 
digitalWrite(RSTX, 1);  delay(250);
} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 

// дергаем RD вверх и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(2);
//byteH=0; byteL=0;
//byteH=PINA; // считываем с выводов PORTA
//byteL=PINC; // считываем с выводов PORTC

byteH=0; // PORTA считаем
if ( digitalRead(29) )    byteH=byteH+128; 
if ( digitalRead(28) )    byteH=byteH+64; 
if ( digitalRead(27) )    byteH=byteH+32;  
if ( digitalRead(26) )    byteH=byteH+16; 
if ( digitalRead(25) )    byteH=byteH+8; 
if ( digitalRead(24) )    byteH=byteH+4;  
if ( digitalRead(23) )    byteH=byteH+2; 
if ( digitalRead(22) )    byteH=byteH+1;  
byteL=0;  // PORTC считаем
if ( digitalRead(30) )    byteL=byteL+128; 
if ( digitalRead(31) )    byteL=byteL+64; 
if ( digitalRead(32) )    byteL=byteL+32;  
if ( digitalRead(33) )    byteL=byteL+16; 
if ( digitalRead(34) )    byteL=byteL+8; 
if ( digitalRead(35) )    byteL=byteL+4;  
if ( digitalRead(36) )    byteL=byteL+2; 
if ( digitalRead(37) )    byteL=byteL+1;

} 

// конфигурация порта на вход
int port_in()
{
//DDRA=0x00; DDRC=0x00; // конфиг всех пинов на вход
for (i=22; i<=37;i++) { pinMode(i, INPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}

// конфигурация портов на выход
int port_out()
{
//DDRA=0xFF; DDRC=0xFF; // конфиг всех пинов на выход
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход
  
//PORTA=byteH ; 
//PORTC=byteL ;
if (byteL == 0x00){
  for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}
if (byteL == 0xEF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, LOW);
  digitalWrite(27, HIGH);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0xBF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, HIGH);
  digitalWrite(27, HIGH);
  digitalWrite(28, LOW);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0xD3){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, HIGH);
  digitalWrite(27, LOW);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
if (byteL == 0x04){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, HIGH);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
  digitalWrite(30, LOW);
  digitalWrite(31, LOW);
  digitalWrite(32, LOW);
  digitalWrite(33, LOW);
  digitalWrite(34, LOW);
  digitalWrite(35, LOW);
  digitalWrite(36, LOW);
  digitalWrite(37, LOW);
}
Serial.print("register " ); 
Serial.print(byteH, HEX );Serial.print(" ");Serial.println(byteL, HEX );
// 1-будем передавать команду
//digitalWrite(RDX, 1);  // порт дисплея в режим приема   ***************
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
wrx_u(); // дергаем WRITE вверх
// 2-будем принимать данные
port_in();  // порт ардуины на вход
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
digitalWrite(WRX, 1);  
rdx_u(); // дергаем RD и получаем данные
Serial.print("1 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("2 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("3 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("4 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("5 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
rdx_u();
Serial.print("6 Parameter   " ); 
Serial.print(byteH,HEX);Serial.print(" ");Serial.println(byteL, HEX);
Serial.println(""); 
}

 

slider
Offline
Зарегистрирован: 17.06.2014

forfrends пишет:

..... что я не делал: в коментарии к коду написанно RW замкнуть на VSS(+), я этого не делал так как RW используется в коде, и если замкнуть на + то никакие команды по этому пину не пойдут. Результат тот же что и раньше - одни нули. Мне кажется что просто код неправильно переведен под ДУЕ.

.....

млин, как могла опечатка затесаться, непонятно, бывает видимо,  имелось ввиду VSS(-, GND) , речь шла о подключении 1602, чтоб выводить инфу что по 0му адресу у изучаемого дисплея. 

хорошо. проверю скетч на разных дисплеях, черкну. ,// в скетче не должно быть использование 

 digitalRead(30) )    

 ....

  digitalRead(37)

дисплей же 8ми битный ))) . сейчас, погодь, посмотрю... чтобы получать второй байт нужно дергнуть RD , чтобы отправить второй байт, нужно дернуть WR ....

для одних дисплеев надо так

 

 

вот , пробуйте (протестировал на ili9325)

// читалка ID дисплеев V3.0beta только для 8ми битных дисплеев, у кого не в 00 адресе - не проверено , попробовать для них закоментить строчку //////////////////////////////////////////////////////////////// 
// подключить 8ми битный дисплей к Arduino Mega/Due:
//  DB0-7 (DB8-DB15 , DB10-DB17) , соответственно на arduino пины 22-29   ( микроконтроллера PORTA PA0-PA7 )       к примеру считать с 00D3  =>0xD3 младший
// Это же подключение соответственно UTFT распиновке. 


 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i=0;
byte byteH;
byte byteL;


void setup() 
{
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
//Serial.println("UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)");
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(100);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(100);
digitalWrite(RST_Pin, 1);// вывод дисплея из сброса
delay(500);
rstx_u();
Serial.println("register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)" ); 
Serial.println("                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)");
Serial.println("                 R61509V(B509), R61505W(C505), SPFD5420A(5408) ");
Serial.println("if  (0 93 0 27) -> 8bit  .  if  (93 27 93 27) -> 16bit " );
 byteL=0x00 ;  // 
writeCommand_read6Parameter();
 

rstx_u();

Serial.println("register EFh for ILI9327(0 02 04 93 27 FF),   " ); 
  byteL=0xEF ;  // для ili9327 - 00 02 04 93 27 FF
writeCommand_read6Parameter();

rstx_u();

Serial.println("register BFh for ILI9481(0 0 94 81 xx xx)  " ); 
  byteL=0xBF ;  // для ili9481 - 00 00 94 81 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register D3h for ILI9488(0 0 94 88 xx xx)   " ); 
  byteL=0xD3 ;  // для ili9488 - 00 00 94 88 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register 04h for HX8357(?DA-DC), HX8353(?80-85),   " ); 
  byteL=0x04 ;  // для  -  xx xx
writeCommand_read6Parameter();

rstx_u();



}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}


// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
  digitalWrite(WRX, 0);digitalWrite(DCX, 0);digitalWrite(RDX, 1);
digitalWrite(RSTX, 0);  delay(100); 
digitalWrite(RSTX, 1);  delay(100);

} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 


// дергаем RD вниз и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(10);
//byteL=PINA; // считываем с выводов PORTA
byteL=0; // PORTA считаем
if ( digitalRead(29) )    byteL=byteL+128; 
if ( digitalRead(28) )    byteL=byteL+64; 
if ( digitalRead(27) )    byteL=byteL+32;  
if ( digitalRead(26) )    byteL=byteL+16; 
if ( digitalRead(25) )    byteL=byteL+8; 
if ( digitalRead(24) )    byteL=byteL+4;  
if ( digitalRead(23) )    byteL=byteL+2; 
if ( digitalRead(22) )    byteL=byteL+1;  
digitalWrite(RDX, 1); // считали, переводим дисплей обратно в режим приема инфы
delay(10);
} 


// конфигурация порта на вход
int port_in()
{
//DDRA=0x00; DDRC=0x00; // конфиг всех пинов на вход
for (i=22; i<=37;i++) { pinMode(i, INPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


// конфигурация портов на выход
int port_out()
{
//DDRA=0xFF; DDRC=0xFF; // конфиг всех пинов на выход
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход

// сначала передадим старший байт=00 (00 на порт уже установил port_out(); )
//for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
wrx_u();  ///////////////////////////////////////////////////////////////////////////////////////////////
// теперь передадим младший байт

// if (byteL == 0x00) {  for (i=22; i<=37;i++) { digitalWrite(i, LOW); }     }

if (byteL == 0x00){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
}
if (byteL == 0xEF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, LOW);
  digitalWrite(27, HIGH);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
}
if (byteL == 0xBF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, HIGH);
  digitalWrite(27, HIGH);
  digitalWrite(28, LOW);
  digitalWrite(29, HIGH);
}
if (byteL == 0xD3){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, HIGH);
  digitalWrite(27, LOW);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
}
if (byteL == 0x04){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, HIGH);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
}
Serial.print("register " ); 
Serial.println(byteL, HEX );
// 1-будем передавать команду
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
delay(10);
wrx_u(); // дергаем WRITE вверх
delay(10);
// 2-будем принимать данные
port_in();  // порт ардуины на вход
delay(10);
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
delay(10);
rdx_u(); // дергаем RD вниз и получаем данные
Serial.print("1 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("2 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("3 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("4 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("5 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("6 Parameter   " ); 
Serial.println(byteL, HEX);
Serial.println(""); 
}

////11.02.2016 

 Если ответы будут 00 EF BF D3 04 , то скорее всего забыли после использования UTFT переключить  RD дисплея обратно c "+" на 42пин . И проверьте всёже на Меге. у меня с десяток разных дисплеев у которых ID по 00 адресу, эта читалка превосходно их читает. других дисплеев пока нет.

slider
Offline
Зарегистрирован: 17.06.2014

.

forfrends
Offline
Зарегистрирован: 24.02.2015

Мне кажется это ни на что не влияет, так это всего лишь чтение с дисплея. Просто в итоге результат пишет чуть больше чем надо (так мне кажется). Только что попробовал: убрал из программы всякое использование 30-37. Результат тот же:

00000000
ID display: 00
 
На всякий случай, код программы Переделал под вывод в сериал:
#define CD_Pin 38 // (RS)
#define WR_Pin 39
#define CS_Pin 40
#define RST_Pin 41
#define RD_Pin 42

int i;
byte byteH;
byte byteL;

void setup(void) {
  Serial.begin(9600);
  digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
  digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
  digitalWrite(RST_Pin, 0); // сброс дисплея
  //for (i=22; i<=42;i++) { digitalWrite(i, 0); } // всё лог.0
  for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины
  digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
  delay(5);
  digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
  delay(15);
  digitalWrite(RST_Pin, 1);
  delay(500);
  // запишем команду
  digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
  digitalWrite(CD_Pin, 0); // будем работать 0-команда 1-данные
  digitalWrite(CS_Pin, 0); // выбор дисплея (активация)
  //PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00
  for (i=22; i<=22;i++) { digitalWrite(i, LOW); } // 
  digitalWrite(WR_Pin, 1); // дёргаем WR
  digitalWrite(WR_Pin, 0);
  digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
  
  //чтение данных
  //DDRA=0x00; DDRC=0x00; // или 
  for (i=22; i<=22;i++) { pinMode(i, INPUT); } // конфиг всех пинов на вход
  for (i=22; i<=22;i++) { digitalWrite(i, LOW); }
  digitalWrite(RD_Pin, 0); // уст. порта дисплея на передачу (вывод данных с дисплея)
  digitalWrite(CD_Pin, 1); // будем работать с 0-команда 1-данные
  digitalWrite(CS_Pin, 0); // выбор дисплея (активация )
  digitalWrite(WR_Pin, 1); // дёргаем WR
  digitalWrite(WR_Pin, 0);
  
  byteH=0;
  if ( digitalRead(29) ) { byteH=byteH+128; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(28) ) { byteH=byteH+64; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(27) ) { byteH=byteH+32; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(26) ) { byteH=byteH+16; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(25) ) { byteH=byteH+8; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(24) ) { byteH=byteH+4; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(23) ) { byteH=byteH+2; Serial.print(1); } else Serial.print(0);
  if ( digitalRead(22) ) { byteH=byteH+1; Serial.print(1); } else Serial.print(0);

  Serial.println("");
  Serial.print("ID display: ");
  Serial.print(byteH, HEX);
  
  digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение шины данных DB0..DB15)
  //DDRA=0xFF; DDRC=0xFF; // или
  for (i=22; i<=22;i++) { pinMode(i, OUTPUT); } // конф. шины данных ARDUINO на выход
  digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
  //digitalWrite(RST_Pin, 1);
  
  // вставка для UTFT
  // pinMode(42, OUTPUT); // конф.ардуино для RD на выход
  // digitalWrite(42, 1); // уст. RD=1 - чтобы порт дисплея был на приём (ввод данных в дисплей)
  //delay(100);
}

void loop() {
// put your main code here, to run repeatedly:
}

 

 

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

Здраствуйте. Попался мне дисплей "CDT 128 96-002V2", дисплей от сотика, не могу найти на него нормальной информации, вроде - бы на контроллере ST7571, даташит на ST7571 нашёл но толку мало. Может кто использовал такай дисплей,  подскажите.

 

slider
Offline
Зарегистрирован: 17.06.2014

ладно, буду писать следующие сообщения(по возможности сохраняя старые), чтоб прослеживалась последовательноость в диалоге, не в угоду конечно малостраничности темы (((

для одних дисплеев надо так:  16бит разбивается на 2 последовательных по8

на примере ili9325, для передачи адреса регистра сначала выводим старший байт ( 00 ), дергаем WR чтоб дисплей принял , потом выводим младший байт (00, или какой нужно) дергаем WR чтоб дисплей принял . Чтение тож в 2 последовательных байта (видимо м.б. и больше)

 

для других дисплеев на примере ili9488,  регистры 8ми битные, поэтому нужен один такт WR для передачи адреса регистра, но несколько тактов, если будем записывать "параметры"(а они очень иногда глубокие, своего рода стек), и несколько тактов RD чтобы из регистра вынимать  много "параметров"( последовательных байтов стека). Таким образом дстигается некоторое ускорение при записи/вычитывании байтов (не нужно передавать адрес следующего реристра, а контроллер сам инкрементирует его в пределах главного) , и уже эти "параметры" могут иметь 8/16/18 битное слово.

 

вот , пробуйте, накидал скетч читалка ID дисплеев V3.0beta Mega/Due (протестировал на Mega+8bit ili9325, делал не полное кажись соответствие диаграмме , но работает)

// читалка ID дисплеев V3.0beta только для 8ми битных дисплеев, у кого не в 00 адресе - не проверено , попробовать для них закоментить строчку //////////////////////////////////////////////////////////////// 
// подключить 8ми битный дисплей к Arduino Mega/Due:
//  DB0-7 (DB8-DB15 , DB10-DB17) , соответственно на arduino пины 22-29   ( микроконтроллера PORTA PA0-PA7 )       к примеру считать с 00D3  =>0xD3 младший
// Это же подключение соответственно UTFT распиновке. 


 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i=0;
byte byteH;
byte byteL;


void setup() 
{
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
//Serial.println("UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)");
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(100);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(100);
digitalWrite(RST_Pin, 1);// вывод дисплея из сброса
delay(500);
rstx_u();
Serial.println("register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)" ); 
Serial.println("                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)");
Serial.println("                 R61509V(B509), R61505W(C505), SPFD5420A(5408) ");

 byteL=0x00 ;  // 
writeCommand_read6Parameter();
 

rstx_u();

Serial.println("register EFh for ILI9327(0 02 04 93 27 FF),   " ); 
  byteL=0xEF ;  // для ili9327 - 00 02 04 93 27 FF
writeCommand_read6Parameter();

rstx_u();

Serial.println("register BFh for ILI9481(0 0 94 81 xx xx)  " ); 
  byteL=0xBF ;  // для ili9481 - 00 00 94 81 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register D3h for ILI9488(0 0 94 88 xx xx)   " ); 
  byteL=0xD3 ;  // для ili9488 - 00 00 94 88 xx xx
writeCommand_read6Parameter();

rstx_u();

Serial.println("register 04h for HX8357(?DA-DC), HX8353(?80-85),   " ); 
  byteL=0x04 ;  // для  -  xx xx
writeCommand_read6Parameter();

rstx_u();



}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}


// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
  digitalWrite(WRX, 0);digitalWrite(DCX, 0);digitalWrite(RDX, 1);
digitalWrite(RSTX, 0);  delay(100); 
digitalWrite(RSTX, 1);  delay(100);

} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 


// дергаем RD вниз и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(10);
//byteL=PINA; // считываем с выводов PORTA
byteL=0; // PORTA считаем
if ( digitalRead(29) )    byteL=byteL+128; 
if ( digitalRead(28) )    byteL=byteL+64; 
if ( digitalRead(27) )    byteL=byteL+32;  
if ( digitalRead(26) )    byteL=byteL+16; 
if ( digitalRead(25) )    byteL=byteL+8; 
if ( digitalRead(24) )    byteL=byteL+4;  
if ( digitalRead(23) )    byteL=byteL+2; 
if ( digitalRead(22) )    byteL=byteL+1;  
digitalWrite(RDX, 1); // считали, переводим дисплей обратно в режим приема инфы
delay(10);
} 


// конфигурация порта на вход
int port_in()
{
//DDRA=0x00; DDRC=0x00; // конфиг всех пинов на вход
for (i=22; i<=37;i++) { pinMode(i, INPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


// конфигурация портов на выход
int port_out()
{
//DDRA=0xFF; DDRC=0xFF; // конфиг всех пинов на выход
for (i=22; i<=37;i++) { pinMode(i, OUTPUT); }
//PORTA=0x00; PORTC=0x00;  // выключение подтягивающих резисторов  
for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход

// сначала передадим старший байт=00 (00 на порт уже установил port_out(); )
//for (i=22; i<=37;i++) { digitalWrite(i, LOW); }
wrx_u();  ///////////////////////////////////////////////////////////////////////////////////////////////
// теперь передадим младший байт

// if (byteL == 0x00) {  for (i=22; i<=37;i++) { digitalWrite(i, LOW); }     }

if (byteL == 0x00){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
}
if (byteL == 0xEF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, LOW);
  digitalWrite(27, HIGH);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
}
if (byteL == 0xBF){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, HIGH);
  digitalWrite(25, HIGH);
  digitalWrite(26, HIGH);
  digitalWrite(27, HIGH);
  digitalWrite(28, LOW);
  digitalWrite(29, HIGH);
}
if (byteL == 0xD3){
  digitalWrite(22, HIGH);
  digitalWrite(23, HIGH);
  digitalWrite(24, LOW);
  digitalWrite(25, LOW);
  digitalWrite(26, HIGH);
  digitalWrite(27, LOW);
  digitalWrite(28, HIGH);
  digitalWrite(29, HIGH);
}
if (byteL == 0x04){
  digitalWrite(22, LOW);
  digitalWrite(23, LOW);
  digitalWrite(24, HIGH);
  digitalWrite(25, LOW);
  digitalWrite(26, LOW);
  digitalWrite(27, LOW);
  digitalWrite(28, LOW);
  digitalWrite(29, LOW);
}
Serial.print("register " ); 
Serial.println(byteL, HEX );
// 1-будем передавать команду
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
delay(10);
wrx_u(); // дергаем WRITE вверх
delay(10);
// 2-будем принимать данные
port_in();  // порт ардуины на вход
delay(10);
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
delay(10);
rdx_u(); // дергаем RD вниз и получаем данные
Serial.print("1 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("2 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("3 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("4 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("5 Parameter   " ); 
Serial.println(byteL, HEX);
rdx_u();
Serial.print("6 Parameter   " ); 
Serial.println(byteL, HEX);
Serial.println(""); 
}
потом закоментить 158 строчку  wrx_u(); /////  и посмотреть снова что выдаст монитор порта 

 

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо за пример! Правда мне све это еще сложно понять, точнее сложно понять согласование таймингов. Это так, к слову.

Попробовал ваш код, оба раза ответа не было. Потом появилась мысль немного увеличить задержки. Поменял delay(10) на delay(50). В результате в регистре "0" появилось "10". wrx_u(); - закоментированна.

start... 

register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)
                 R61509V(B509), R61505W(C505), SPFD5420A(5408) 
register 0
1 Parameter   0
2 Parameter   0
3 Parameter   0
4 Parameter   0
5 Parameter   0
6 Parameter   10

register EFh for ILI9327(0 02 04 93 27 FF),   
register EF
1 Parameter   EF
2 Parameter   EF
3 Parameter   EF
4 Parameter   EF
5 Parameter   EF
6 Parameter   EF

register BFh for ILI9481(0 0 94 81 xx xx)  
register BF
1 Parameter   BF
2 Parameter   BF
3 Parameter   BF
4 Parameter   BF
5 Parameter   BF
6 Parameter   BF

register D3h for ILI9488(0 0 94 88 xx xx)   
register D3
1 Parameter   D3
2 Parameter   D3
3 Parameter   D3
4 Parameter   D3
5 Parameter   D3
6 Parameter   D3

register 04h for HX8357(?DA-DC), HX8353(?80-85),   
register 4
1 Parameter   4
2 Parameter   4
3 Parameter   4
4 Parameter   4
5 Parameter   4
6 Parameter   4

После поднятия задержек до "100" картина совсем изменилась:

start... 

register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)
                 R61509V(B509), R61505W(C505), SPFD5420A(5408) 
register 0
1 Parameter   0
2 Parameter   0
3 Parameter   10
4 Parameter   7E
5 Parameter   7F
6 Parameter   FF

register EFh for ILI9327(0 02 04 93 27 FF),   
register EF
1 Parameter   EF
2 Parameter   EF
3 Parameter   EF
4 Parameter   EF
5 Parameter   FF
6 Parameter   FF

register BFh for ILI9481(0 0 94 81 xx xx)  
register BF
1 Parameter   BF
2 Parameter   BF
3 Parameter   BF
4 Parameter   BF
5 Parameter   FF
6 Parameter   FF

register D3h for ILI9488(0 0 94 88 xx xx)   
register D3
1 Parameter   D3
2 Parameter   D3
3 Parameter   D3
4 Parameter   FF
5 Parameter   FF
6 Parameter   FF

register 04h for HX8357(?DA-DC), HX8353(?80-85),   
register 4
1 Parameter   4
2 Parameter   4
3 Parameter   54
4 Parameter   7F
5 Parameter   FF
6 Parameter   FF

Мне кажется что это не ответ а просто ошибки чтения из-за сильно больших пауз

diger67
Offline
Зарегистрирован: 25.07.2015

Не пробавали написать код не в IDE arduino, а в Keil. По началу трудновато конечно, а потом как по маслу. Пройдены варианты и по SPI и с  8 и 16 бит шинами. И вот еще вопрос, как вы при инициализации управляете RESET-ом? Можно просто подключить к цепи сброса процессора, у меня так работает, экономит целый пин I/O.

forfrends
Offline
Зарегистрирован: 24.02.2015

diger67, Вариант, как по мне хороший, но подходит только для уже готового подключения и опознанного контроллера. Если же дисплей не опознан и нужно прочитать его ИД, то такой вариант не подходит, так как Ресет используется в процессе.

forfrends
Offline
Зарегистрирован: 24.02.2015

slider, наконец-то купил резисторы! Тодключил к Меге. Протестировал. Читалка из первого поста выдает одни нули. Читалки №2 и №3 вернули один и тот же ответ:

start... 
register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)
                 R61509V(B509), R61505W(C505), SPFD5420A(5408) 
register 0
1 Parameter   0
2 Parameter   0
3 Parameter   0
4 Parameter   0
5 Parameter   0
6 Parameter   0

register EFh for ILI9327(0 02 04 93 27 FF),   
register EF
1 Parameter   0
2 Parameter   0
3 Parameter   0
4 Parameter   0
5 Parameter   0
6 Parameter   0

register BFh for ILI9481(0 0 94 81 xx xx)  
register BF
1 Parameter   FF
2 Parameter   74
3 Parameter   0
4 Parameter   0
5 Parameter   0
6 Parameter   0

register D3h for ILI9488(0 0 94 88 xx xx)   
register D3
1 Parameter   0
2 Parameter   0
3 Parameter   86
4 Parameter   0
5 Parameter   0
6 Parameter   0

register 04h for HX8357(?DA-DC), HX8353(?80-85),   
register 4
1 Parameter   54
2 Parameter   66
3 Parameter   0
4 Parameter   0
5 Parameter   0
6 Parameter   0

Что можете сказать по этому поводу? Это типа у меня контроллер дисплея HX5466 или ILI8600 или ...? Что выдала читалка?

slider
Offline
Зарегистрирован: 17.06.2014

о, эт хорошо, что к меге, через резисторы, и ответ нормальный виден, и видно что не по 0му адресу у него ID. Из широкораспространеных адресов пока не понятно. Недавно диспл. от sony ericsson копал, так там вообще распиновка на 1бит оказалось сдвинута, не как по схеме. Еле запустил, пока не проверил что неспользованный пин лог.1/0 выдавал,  он оказался вхож в нужные 8бит/пин.  Эт я к тому что можно попробовать прикинуть какой ответ бы был, если зеркально перевернуть биты, или мож проще физически  перевернуть и глянуть что выдаст. Вечерком с ноута скину читалку, сделал чтение всех подряд регистров с 0 по 255 (00 - FF ) // эт проще в меге счетчик for и кидаем это наращивание в порт PORTA, для дуе вообще  мутно побитно получилось бы.

    Так с некоторых дисплеев видно было, в регистрах попадалось разрешение контроллера (дисплея) 00EF  01AF 013F (240x432   x320) , ну и ID тож.

 Проконтролируйте ещё напр. 3,3в , оно не должно быть выше, особенно когда запускались схожие иниты UTFT, когда был виден цветной мусор. Если есть время, можете прогнать теперь уже  на меге иниты UTFT.

Для питания дисплея пока остановился на резисторе 100-150 Ом от 5в и стабилитроне 3.0 в с параллельно smd кондером 4-10мкф.  (ибо если делать 300 Ом то при запуске инита, питание может просесть ниже 2,8в . И если ставить стабилитрон 3,3в, то без инита напряжение может подняться аж до 3,6в , а для контроллеров это уже критично) . Если ещё параллельно стабилитрону подключить, для опыта, белый светодиод , то по маленькому снижению его яркости можно  судить о возможной подходящего инита(инициализации), что заработали внутренние преобразователи для питания ЖК матрицы. Если хорошо притухнет, эт плохо, значит было перенапряжение на дисплее и преобразователи скончались. хотя ID, перед запуском инита вычитывается правильно, типа как контроллер рабочий.  Но в ваше случае всё живое 99,9% , ведь виден цветной мусор на некоторых инитах.

  В вашем случае  на меге можно запитать от меговских 3,3в и параллельно какую нить нагрузку кинуть, типа стабилитрона 3,3в. 

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

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо, буду ждать читалку. Проверил питание (от ардуины) - 3.25 вольта. Пробовал прогонять иниты - результат тот же что и на Дуе. Приложил линейку и через макро съемку получилось разрешение примерно 522*290 пикселей.

slider
Offline
Зарегистрирован: 17.06.2014

forfrends пишет:

Спасибо, буду ждать читалку. Проверил питание (от ардуины) - 3.25 вольта. Пробовал прогонять иниты - результат тот же что и на Дуе. Приложил линейку и через макро съемку получилось разрешение примерно 522*290 пикселей.

 читалка 3.1 PORTA, проверена на дисплеях с ID  в 00h , и на других (ili9327 8bit , R61523 16bit) - отлично читает всю память, соответственно и ID в ней. (да, иногда некоторые регистры имеют глубину 10 , но ID так глубоко не запихивают, хватает в читалке и глубины =8) .

// ID_display_read_to_serial_monitor_universal_v3_1_PORTA.ino
// читалка ID дисплеев V3.1beta только для 8ми битных дисплеев PORTA, 
// подключить 8ми битный дисплей к Arduino Mega/Due:
//  DB0-7 (DB8-DB15 , DB10-DB17) , соответственно на arduino пины 22-29   ( микроконтроллера PORTA PA0-PA7 )       
// к примеру считать с 00D3  =>0xD3 младший
// Это же подключение соответственно UTFT распиновке, 
// только не забыть, в тесте UTFT, на 42 пин подать лог.1 хотя бы внутренним резистором 
// digitalWrite(42, HIGH); 


 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i,j;
byte byteLL; // вспомогательный , ибо основной используется
byte byteL;


void setup() 
{  DDRA=0xFF;
 
  // кнопка для продолжения скетча, если где надо его остановить, чтоб замерить лог. уровни
    pinMode(A12, INPUT); // кнопку удобно воткнуть в 12й пин и в рядом GND
    digitalWrite(12, HIGH); // внутренний подтягив. резистор к + 
    pinMode(13, OUTPUT); // и светодиод на плате чтоб мигал, когда можно нажать кнопку для продолжения
    
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(100);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(100);
digitalWrite(RST_Pin, 1);// вывод дисплея из сброса
delay(500);
rstx_u();

Serial.println("      ");
Serial.println("               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)");
Serial.println("      ");
byteL=0x00 ;  // 
writeCommand_read6Parameter();
rstx_u();
Serial.println("      ");


for (j=0; j<=255;j++) //255 0x4F
  {
   byteL=j ;  // 
   writeCommand_read6Parameter();
   rstx_u();
   }
}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}




// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
digitalWrite(WRX, 0);digitalWrite(DCX, 0);digitalWrite(RDX, 1);
digitalWrite(RSTX, 0);  delay(10); 
digitalWrite(RSTX, 1);  delay(10);
} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 


// дергаем RD вниз и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(2);
PORTA=0x00;
byteL=0; //  PORTA  считаем
byteL=PINA; // считываем с выводов PORTA
//knopel();
delay(2);
} 


// конфигурация порта на вход
int port_in()
{
DDRA=0x00;  // конфиг всех пинов на вход
PORTA=0x00; // выключение подтягивающих резисторов  
}


// конфигурация портов на выход
int port_out()
{
DDRA=0xFF;// конфиг всех пинов на выход
PORTA=0x00;  // выключение подтягивающих резисторов  
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход

// 1-будем передавать команду
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
delay(2);

// сначала передадим старший байт=00 (00 на порт уже установил port_out(); )
PORTA=0x00;
wrx_u();  /////////////wrx_u(); ///////////////////
// теперь передадим младший байт
PORTA=byteL;
wrx_u(); // дергаем WRITE вверх
delay(2);
Serial.print("register " );  pn();
Serial.print(byteL, HEX );
Serial.print("   " );
byteLL=byteL; // запомним для нужд
// 2-будем принимать данные
port_in();  // порт ардуины на вход
delay(2);
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
delay(2);
// дергаем RD вниз и получаем данные \, к примеру прочесть до 8ми параметров , физически в памяти это просто последующие регистры,
// просто для скорости не надо задавать адрес последующего снова - это сделано во многих LCD контроллерах.
for (i=1; i<=8; i++) 
                     {
                      rdx_u(); // дергаем RD вниз и получаем данные
                      Serial.print(" " );  pn(); 
                      Serial.print(byteL, HEX); 
                     }
if ( byteLL==0x00 || byteLL==0xEF || byteLL==0xBF || byteLL==0x04 || byteLL==0xD3 ) Serial.print("  ***" );
if ( byteLL==0xDA || byteLL==0xDB || byteLL==0xDC  ) Serial.print("  ***" );
Serial.println(""); 

digitalWrite(RDX, 1); // считали, переводим дисплей обратно в режим приема инфы
}


int pn()  // печать дополнительный 0 , если 0 , чтоб печаталось в итоге 00
{
if (byteL<=0x0F) Serial.print("0");
}  


int knopel()  // остановка программы чтоб замерить уровни где надо и ожидание нажатия кнопки, для продолжения программы
{
while (digitalRead(12)==1) { digitalWrite(13, 1); delay(100);digitalWrite(13, 0); delay(200)  ;}
delay(500);
} 

~522*290  не встречал похожего разрешения, ближние разрешения 480x320 (ili9486,ili9488,ili9481,HX8357,HX8347,RM68040,R61581,...) и 640x360 (R61523,...)

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо. Попробовал читалку. Что-то выдало. Вот результат:

start... 

      
               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  *
      
register 00    00 00 00 00 00 00 00 00  *
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    54 66 00 00 00 00 00 00  *
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 00 00 00 00 00 00
register 0A    08 08 08 08 08 08 08 08
register 0B    00 00 00 00 00 00 00 00
register 0C    66 66 66 66 66 66 66 66
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 01 00 00 00 00
register 2B    00 00 00 01 00 00 00 00
register 2C    00 00 00 00 00 00 00 00
register 2D    00 00 00 00 00 00 00 00
register 2E    00 00 00 00 F0 70 00 00
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 01 00 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 01 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    66 66 66 66 66 66 66 66
register 3B    00 00 00 00 00 00 00 00
register 3C    00 00 00 00 00 00 00 00
register 3D    00 00 00 00 00 00 00 00
register 3E    00 68 00 00 00 00 F0 70
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 00 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    00 00 00 00 00 00 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 00 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    B0 01 00 00 00 00 00 00
register B2    00 00 11 00 00 00 00 00
register B3    00 00 15 00 00 00 00 00
register B4    00 00 00 00 00 00 00 00
register B5    02 02 02 0A 00 00 00 00
register B6    02 02 02 00 00 00 00 00
register B7    06 06 06 06 06 06 06 06
register B8    00 00 00 00 00 00 00 00
register B9    00 00 00 00 00 00 00 00
register BA    00 00 00 00 00 00 00 00
register BB    00 00 00 00 00 00 00 00
register BC    00 00 00 00 00 00 00 00
register BD    00 00 00 00 00 00 00 00
register BE    00 00 00 00 00 00 00 00
register BF    FF 14 00 00 00 00 00 00  *
register C0    0E 00 00 00 00 00 00 00
register C1    04 04 00 00 00 00 00 00
register C2    33 33 33 33 33 33 33 33
register C3    33 33 33 33 33 33 33 33
register C4    33 33 33 33 33 33 33 33
register C5    00 00 00 00 00 00 00 00
register C6    00 00 00 00 00 00 00 00
register C7    00 00 00 00 00 00 00 00
register C8    00 00 00 00 00 00 00 00
register C9    00 00 00 00 00 00 00 00
register CA    00 00 00 00 00 00 00 00
register CB    00 00 00 00 00 00 00 00
register CC    00 00 00 00 00 00 00 00
register CD    00 00 00 00 00 00 00 00
register CE    00 00 00 00 00 00 00 00
register CF    00 00 00 00 00 00 00 00
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 00 00 00 00 00 00 00
register D3    00 00 86 00 00 00 00 00  *
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    54 54 54 54 54 54 54 54
register DB    80 80 80 80 80 80 80 80
register DC    66 66 66 66 66 66 66 66
register DD    00 00 00 00 00 00 00 00
register DE    00 00 00 00 00 00 00 00
register DF    00 00 00 00 00 00 00 00
register E0    00 00 07 05 08 00 07 05
register E1    00 00 00 00 00 00 00 00
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 00 00 00 00 00 00 00
register E9    00 00 00 00 00 00 00 00
register EA    00 00 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 00 00 00 00 00 00 00
register EE    00 00 00 00 00 00 00 00
register EF    00 00 00 00 00 00 00 00  *
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    00 00 00 00 00 00 00 00
register F3    00 00 00 00 00 00 00 00
register F4    00 00 00 00 00 00 00 00
register F5    00 00 00 00 00 00 00 00
register F6    00 00 00 00 00 00 00 00
register F7    00 00 00 00 00 00 00 00
register F8    00 00 00 00 00 00 00 00
register F9    00 00 00 00 00 00 00 00
register FA    00 00 00 00 00 00 00 00
register FB    00 00 00 00 00 00 00 00
register FC    00 00 00 00 00 00 00 00
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    01 01 00 00 00 00 00 00

А это результат с закоментированной wrx_u();

start... 

      
               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  *
      
register 00    00 00 00 00 00 00 00 00  *
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    54 66 00 00 00 00 00 00  *
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 00 00 00 00 00 00
register 0A    08 08 08 08 08 08 08 08
register 0B    00 00 00 00 00 00 00 00
register 0C    66 66 66 66 66 66 66 66
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 01 00 00 00 00
register 2B    00 00 00 01 00 00 00 00
register 2C    00 00 00 00 00 00 00 00
register 2D    00 00 00 00 00 00 00 00
register 2E    00 68 00 00 00 F0 70 00
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 01 00 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 01 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    66 66 66 66 66 66 66 66
register 3B    00 00 00 00 00 00 00 00
register 3C    00 00 00 00 00 00 00 00
register 3D    00 00 00 00 00 00 00 00
register 3E    00 68 00 00 00 00 F0 70
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 00 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    00 00 00 00 00 00 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 00 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    B0 01 00 00 00 00 00 00
register B2    00 00 11 00 00 00 00 00
register B3    00 00 15 00 00 00 00 00
register B4    00 00 00 00 00 00 00 00
register B5    02 02 02 0A 00 00 00 00
register B6    02 02 02 00 00 00 00 00
register B7    06 06 06 06 06 06 06 06
register B8    00 00 00 00 00 00 00 00
register B9    00 00 00 00 00 00 00 00
register BA    00 00 00 00 00 00 00 00
register BB    00 00 00 00 00 00 00 00
register BC    00 00 00 00 00 00 00 00
register BD    00 00 00 00 00 00 00 00
register BE    00 00 00 00 00 00 00 00
register BF    FF 14 00 00 00 00 00 00  *
register C0    0E 00 00 00 00 00 00 00
register C1    04 04 00 00 00 00 00 00
register C2    33 33 33 33 33 33 33 33
register C3    33 33 33 33 33 33 33 33
register C4    33 33 33 33 33 33 33 33
register C5    00 00 00 00 00 00 00 00
register C6    00 00 00 00 00 00 00 00
register C7    00 00 00 00 00 00 00 00
register C8    00 00 00 00 00 00 00 00
register C9    00 00 00 00 00 00 00 00
register CA    00 00 00 00 00 00 00 00
register CB    00 00 00 00 00 00 00 00
register CC    00 00 00 00 00 00 00 00
register CD    00 00 00 00 00 00 00 00
register CE    00 00 00 00 00 00 00 00
register CF    00 00 00 00 00 00 00 00
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 00 00 00 00 00 00 00
register D3    00 00 86 00 00 00 00 00  *
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    54 54 54 54 54 54 54 54
register DB    80 80 80 80 80 80 80 80
register DC    66 66 66 66 66 66 66 66
register DD    00 00 00 00 00 00 00 00
register DE    00 00 00 00 00 00 00 00
register DF    00 00 00 00 00 00 00 00
register E0    00 00 07 05 08 00 07 05
register E1    00 00 00 00 00 00 00 00
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 00 00 00 00 00 00 00
register E9    00 00 00 00 00 00 00 00
register EA    00 00 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 00 00 00 00 00 00 00
register EE    00 00 00 00 00 00 00 00
register EF    00 00 00 00 00 00 00 00  *
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    00 00 00 00 00 00 00 00
register F3    00 00 00 00 00 00 00 00
register F4    00 00 00 00 00 00 00 00
register F5    00 00 00 00 00 00 00 00
register F6    00 00 00 00 00 00 00 00
register F7    00 00 00 00 00 00 00 00
register F8    00 00 00 00 00 00 00 00
register F9    00 00 00 00 00 00 00 00
register FA    00 00 00 00 00 00 00 00
register FB    00 00 00 00 00 00 00 00
register FC    00 00 00 00 00 00 00 00
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    01 01 00 00 00 00 00 00

Результат, похоже, одинаковый

slider
Offline
Зарегистрирован: 17.06.2014

судя по логу, это подделка (аналог) известного контроллера . не все ID знаю, но здесь подозрительно он слишком короткий (здесь м.б. данные с регистов 04 BF , DA DB DC, 2A 2B-размер), похоже на подделку . Но это не мешает работать этим дисплеям с ардуинкой. инит должен подойти от широкораспространённого. Есть ещё вариант поискать прошивку на этот тлф. по его названию , в прошивке глянуть какой драйвер дисплея используется. Еслиб тлф. был живой, то ещё вариант можно было включить анализатор при его включении, и снять короткий лог инита и вывода графики.

  Ещё вариант, простой для вас, переберите иниты распространенных 480x320 дисплеев, которых нет в UTFT ( memorysaver.h ). какие можно поиском по aliexpress, инету, вайенжиниринг.ком найти,   480x320 , 320x480  , 480 x 320 LCD screen - будут много разных вариантов, смотрите описание , зачастую приводят тип контроллера, далее находите инит , подтыкаете в UTFT , заводите, радуетесь победе, и стряпаете на нём чтонибудь полезное. 

// позже, если время будет, мож через недельку выложу ещё несколько изученных контроллеров/дисплеев вместе с логами читалки для сравнения , как оформлю. вот на днях попался 640x360 R61523 , подделка (ID почти пустое, как у вас, и не такое как в PDF) , но инит подошёл, UTFT тест кажет (подменил значения и переназвал функции в ините r61581, от найденного инита от STM в инете) , . как куплю оригинал, исследую , выложу инфу о разнице по чтению оригинала и аналога(подделки).  

 Вот по некоторым контроллерам есть ещё старенькая табличка LCD_Table.xls контроллеров, дисплеев, тлф  найденная на просторах инета https://yadi.sk/i/Z_0aZQkAoyDGo  . (мож существует и дополнение благодаря тому кто её составляет) . Когда ищите в ней, не забывайте , избегать выделенных фрагментов и ставить галку искать по всей книге, а не листу.  

////Чтоб ветку не засорять, можете на емайл писать   sеgun coб. яндekс ру (переписать все буквы латиницей)

fixedip
Offline
Зарегистрирован: 16.03.2015

Интересно подниму тему :-)

forfrends
Offline
Зарегистрирован: 24.02.2015

.

victorv
Offline
Зарегистрирован: 31.07.2015

Здравствуйте помогите разобраться :

дисплей с мегой

http://ru.aliexpress.com/item/MEGA-2560-ATmega2560-16AU-Board-For-Arduin...

 в скетче инициализация :

UTFT myGLCD(CTE40,38,39,40,41);

UTouch        myTouch(6, 5, 4, 3, 2);

бтблиотеки -

#include <UTFT.h>

#include <UTouch.h>
#include <UTFT_Buttons.h>
 

Проблема в таче- он работает только с одной стороны экрана . Добавил  #define TOUCH_ORIENTATION  PORTRAIT , все равно точно не попадает куда нажимаешь. Я где то давно видел в библиотеку добавляется , что то типа x=480 y=240  и тогда точно работает . Сам искал - ненашел .

slider
Offline
Зарегистрирован: 17.06.2014

victorv пишет:

Здравствуйте помогите разобраться :

.....

http://arduino.ru/forum/apparatnye-voprosy/kalibrovka-ekrana-tft-lcd-7#comment-169444

victorv
Offline
Зарегистрирован: 31.07.2015

slider пишет:

victorv пишет:

Здравствуйте помогите разобраться :

.....

http://arduino.ru/forum/apparatnye-voprosy/kalibrovka-ekrana-tft-lcd-7#comment-169444

 

калибровка не помогает -вообще тогда не реагирует , а со стандартными значениями рисует сбоку в одной части экрана еще и зеркально .

Lelick
Offline
Зарегистрирован: 07.02.2016

victorv пишет:

slider пишет:

victorv пишет:

Здравствуйте помогите разобраться :

.....

http://arduino.ru/forum/apparatnye-voprosy/kalibrovka-ekrana-tft-lcd-7#comment-169444

 

калибровка не помогает -вообще тогда не реагирует , а со стандартными значениями рисует сбоку в одной части экрана еще и зеркально .


Я по той ссылке что выше прочитал всего одно сообщение... И то там увидел что возможно у кого то перепутаны были пины... X и Y или что то в этом роде... Проверте у себя...

diger67
Offline
Зарегистрирован: 25.07.2015

Про перепутанные пины это верно, есть у меня tft на ili9327. Подключение 8бит UNO. Работать нормально не хотел, пока в программе не подкорректировал подкючение выводов тача. Они там напрямую к ардуино подключены.

slider
Offline
Зарегистрирован: 17.06.2014

по калибровке, пожалуйста, пишите в одноименные темы .

diger67
Offline
Зарегистрирован: 25.07.2015

По теме вопрос. Есть такой tft WD666AB2H 39 pin. облазил весь интернет. Нашел только продаем, продаем, продаем. Хорошо хот контроллер озвучили ili9488. На руках его нет, но есть желание его приладить. Может кто встречал инфу, нужна распиновка.

slider
Offline
Зарегистрирован: 17.06.2014

diger67 пишет:

По теме вопрос. Есть такой tft WD666AB2H 39 pin. облазил весь интернет. Нашел только продаем, продаем, продаем. Хорошо хот контроллер озвучили ili9488. На руках его нет, но есть желание его приладить. Может кто встречал инфу, нужна распиновка.

Раз его нет на руках, к чему тогда вопрос?! На сейчас он уже превосходно гуглиться, поиск и аналоги выдает. В соседней ветке вам отвечали по нему. Неохота снова искать? И еслли раз никто не потратил на него драгоценного времени, не выложил в инет, (раз был вопрос, значит рассчитывали на  ответ) - предлагаю тогда самим потратить пару дней. разобраться безвозмездно и сделать добро, выложить инфу по нему. мож кому пригодиться. или мож скажут хотя бы спасибо. Находя себе тоже нужную инфу в инете, задумывались,  кто то ж добрый потрудился, её выложил. 

forfrends пишет:

Спасибо. Попробовал читалку. Что-то выдало. Вот результат:

...

register 04    54 66 00 00 00 00 00 00  *
..
register 2A    00 00 00 01 00 00 00 00
register 2B    00 00 00 01 00 00 00 00

...

register DA    54 54 54 54 54 54 54 54
register DB    80 80 80 80 80 80 80 80
register DC    66 66 66 66 66 66 66 66

...

глянул ещё парочку даташитов больших дисплейчиков , замечу, что ID иногда не только ложат в 04h (или вообще пустой оставят). но и дублируют ID1 ID2 ID3 в DAh DBh DCh .  ( DAh - manufacture фабрика (не стоит обращать внимание) DBh DCh - module / driver драйвер ).  

Из 800x480 864x480 попались такие замечательные даташиты

NT35510  : 04h    00 80 00   , DAh 00 , DBh 80 , DCh 00 .

HX8369 HX8369A   : 04h-отсутствует ,  DAh 00 , DBh 80 ( 81 82 83 84 85 ) , DCh 00 . 

иниты гугляться . к примеру " HX8369 init "

480x320

ILI9486 ILI9486L : 04h 1параметр не определен, 2й-фабрика. 3,4й-драйвер , DAh - xx , DBh от 80 до FF , DCh 00h  (тоже немного подходит под то что выдала читалка)

кстати эти регистры м.б. перепрограммированы в OTP режиме. 

т.е. у вас получается id1 0x54   id2 0x80    id3 0x66 

что то такое подобное уже гуглиться , https://github.com/notro/fbtft/issues/62

# tinylcd35: 0x2A, 0x40, 0x33

        #   ID1 = 0x2A -> This does not match register 0xDA = 0x54  but (0x2A >> 1) = 0x54
        #   ID2 = 0x40 -> This does not match register 0xDB = 0x80  but (0x80 >> 1) = 0x40
        #   ID3 = 0x33 -> This does not match register 0xDC = 0x66  but (0x66 >> 1) = 0x33

возможно похоже на HX8369 , скормите  его инит дисплею .

в книге LCD_Table.xls (спасибо составителю) https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0ahUKEwiu6vXx2IrLAhULDCwKHanVDi0QFghGMAU&url=http%3A%2F%2Fvrtp.ru%2Findex.php%3Fact%3DAttach%26type%3Dpost%26id%3D385043&usg=AFQjCNF0lMgp6m6m0UoU_nnF17Uwp79spA&bvm=bv.114733917,d.bGg поищите подходящие по разрешению контроллеры, и в инете гляньте в их даташитах , какие у них бывают ID .

вот ещё попалось интересное место инитов с файлов какой-то версии андроида под контроллеры применяемых больших дисплеев https://github.com/wiko-sources/cink-slim/tree/master/mediatek/custom/common/kernel/lcm . Также из файловой системы андроида, полагаю можно подсмотреть инфу чтобы подключить емкостный тачскрин к ардуино, ведь они тоже дешевые , от 50руб.  ( Разработка ядер и прошивок для Android http://4pda.ru/forum/index.php?showtopic=583114 ) 

diger67
Offline
Зарегистрирован: 25.07.2015

Специально проводить экспиримент я и не просил. Знаю по себе как заниматься инженирингом. Покупать кота в мешке тоже не айс. Хватает вопросов и по работе с контроллерами и с их перефирией.

Lemur
Offline
Зарегистрирован: 11.01.2016

вот здесь много и со ссылками где заказать сделать плату и с написаными драйверами

http://andybrown.me.uk/2013/10/19/vivaz-u5-lcd/

 

slider
Offline
Зарегистрирован: 17.06.2014

Да. спасибо. про vivaz знал, хорошая статейка. Ранее запускал уже дисплеи от SonyEricsson U5 и U8i на ардуино мега . шаманил UTFT под него.

 

 

Разрешение превосходное. Диагональ бы поболе. Повышайку для подсветки поставил готовый модуль MT3608, 19вольт через гасящий резистор. Подпаивал дисплей проводками, ибо разъем ( шаг 0.2мм против обычных 0.3мм ) стоит дороже дисплея в 4ре раза! . Ищу пока оригинал дисплея чтоб сравнить с неоригиналом. В плане потом черкнуть по ним. Да и флаи надо добить.  U5 U8i перевести на 8 бит для мини, чтоб было много свободных пинов,  весьма трудно , смотрел , очень тонкие дорожки от im0-2 со стекла в шлейф и там сразу на +   и - . Если делать как есть 16бит , на мини остануться 4ре свободных пина, хотя для некоторых проектов хватит. И если сравнивать 8 бит и 16 бит на ардуино уно/мини/нано , то 8бит будет гораздо шустрее работать, чем 16 бит.  (из-за раскидывании по многим разным портам при 16бит) . На меге да, 16 побыстрей будет чем 8 . К примеру тест UTFT на меге на ili9325 320x240 8бит-за 45сек, а в режиме 16бит - 41сек. 

//////////////////// по R61523 Vivaz  Arduino  UTFT  в следующих постах на 6й странице

diger67
Offline
Зарегистрирован: 25.07.2015

Имхо LCD с разрешением более 320х240 подключать к 8-ми разрядным процам да еще по 8 разрядной шине считаю кащумством. Тогда уж лучше miniSTM на 103c8t, да на 16 полноценных битах. остается порядка 20  свободных пинов, есть адаптация под IDE arduino.  http://www.stm32duino.com/viewforum.php?f=1&sid=776b93cae447043c5a6340572d148fe3

И быстре решает задачи. и больше перифирии.

satelit
Offline
Зарегистрирован: 12.12.2015

у меня меньше пинов, 10 штук .  дисплей от айфона 5+++( татч косил, ну я его и списал на запчасти).

пины просто подписаны 1.......10,

может кто даст в какую сторону искать и как прозвонить пины

releyshic
Offline
Зарегистрирован: 20.11.2015

у меня TFT 2.8/ Не работает с оргиналом Адафруита ни с UTFT, но работает вот с этой переделкой https://hackaday.io/project/6829-spfd5408-arduino-library-for-24-tft

У меня программа вот это выдала, не пойм что с этим делать? как понять что за дисплей? подключал в соответсвии с пинами на плате как есть

start...
UTFT normal   pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)

register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
                 HX8347D(047),  HX8347G(075),  HX8352A(052),  HX8352B(065), HX8352C(072)
                 R61509V(B509), R61505W(C505), SPFD5420A(5408)
if  (0 93 0 27) -> 8bit  .  if  (93 27 93 27) -> 16bit
register 0 0
1 Parameter   0 0
2 Parameter   0 0
3 Parameter   0 0
4 Parameter   0 0
5 Parameter   0 0
6 Parameter   0 0

register EFh for ILI9327(0 02 04 93 27 FF),   
register 0 EF
1 Parameter   0 EF
2 Parameter   0 EF
3 Parameter   0 EF
4 Parameter   0 EF
5 Parameter   0 EF
6 Parameter   0 EF

register BFh for ILI9481(0 0 94 81 xx xx)  
register 0 BF
1 Parameter   0 BF
2 Parameter   0 BF
3 Parameter   0 BF
4 Parameter   0 BF
5 Parameter   0 BF
6 Parameter   0 BF

register D3h for ILI9488(0 0 94 88 xx xx)   
register 0 D3
1 Parameter   0 D3
2 Parameter   0 D3
3 Parameter   0 D3
4 Parameter   0 D3
5 Parameter   0 D3
6 Parameter   0 D3

register 04h for HX8357(?DA-DC), HX8353(?80-85),   
register 0 4
1 Parameter   0 4
2 Parameter   0 4
3 Parameter   0 4
4 Parameter   0 4
5 Parameter   0 4
6 Parameter   0 4
 

slider
Offline
Зарегистрирован: 17.06.2014

releyshic пишет:

у меня TFT 2.8/ Не работает с оргиналом Адафруита ни с UTFT, но работает вот с этой переделкой https://hackaday.io/project/6829-spfd5408-arduino-library-for-24-tft

Если работает, тогда нечего уже и пытать.

судя по логу (считывается тоже, что и посылается), у вас неподключен RD дисплея на 42й пин меги.

Для вставки кода , при написании сообщения, надо пользоваться значком {....} code , в окошко скопировать выданный код из монитор порта. В окошке, еще есть вкладка дополнительно  ,  поставить галочку на Сворачитьвать код по умолчанию...

 Примените читалку для 8ми бит . версию 3.1  она считывает все регистры. Управляющие пины подключать как написано в скетче читалки. шину данных два варианта:

читалка v3.1 для PORTC , если дисплей вы подключили на  PORTC (пины ардуино 30-37 соответственно подключили к дисплейным DB7-DB0), то :


// ID_display_read_to_serial_monitor_universal_v3_1_PORTC.ino
// читалка ID дисплеев V3.1beta только для 8ми битных дисплеев, 
// подключить 8ми битный дисплей к Arduino Mega/Due:
// дисплейные DB0-7 (и могут быть физические DB8-DB15 , DB10-DB17) , соответственно на arduino  пины 37-30   ( микроконтроллера PORTC PC0-PC7 )       
// к примеру считать с 00D3  =>0xD3 младший
// Это же подключение не соответствует UTFT распиновке, для 8ми бит она ориентирована на PORTA
// разве что для ili9327 в UTFT_v2.77b2_uno_ili9327_8bit_turbo, там используется PORTC 
// тогда не забыть на 42 пин подать лог.1 хотя бы внутренним резистором digitalWrite(42, HIGH); 


 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i,j;
byte byteLL; // вспомогательный , ибо основной используется
byte byteL;


void setup() 
{  DDRA=0xFF;
 
  // кнопка для продолжения скетча, если где надо его остановить, чтоб замерить лог. уровни
    pinMode(A12, INPUT); // кнопку удобно воткнуть в 12й пин и в рядом GND
    digitalWrite(12, HIGH); // внутренний подтягив. резистор к + 
    pinMode(13, OUTPUT); // и светодиод на плате чтоб мигал, когда можно нажать кнопку для продолжения
    
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(100);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(100);
digitalWrite(RST_Pin, 1);// вывод дисплея из сброса
delay(500);
rstx_u();

Serial.println("      ");
Serial.println("               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)");
Serial.println("      ");
byteL=0x00 ;  // 
writeCommand_read6Parameter();
rstx_u();
Serial.println("      ");


for (j=0; j<=255;j++) //255 0x4F
  {
   byteL=j ;  // 
   writeCommand_read6Parameter();
   rstx_u();
   }
}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}




// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
digitalWrite(WRX, 0);digitalWrite(DCX, 0);digitalWrite(RDX, 1);
digitalWrite(RSTX, 0);  delay(10); 
digitalWrite(RSTX, 1);  delay(10);
} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 


// дергаем RD вниз и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(2);
PORTC=0x00;
byteL=0; //  PORTC  считаем
byteL=PINC; // считываем с выводов PORTC
//knopel();
delay(2);
} 


// конфигурация порта на вход
int port_in()
{
DDRC=0x00;  // конфиг всех пинов на вход
PORTC=0x00; // выключение подтягивающих резисторов  
}


// конфигурация портов на выход
int port_out()
{
DDRC=0xFF;// конфиг всех пинов на выход
PORTC=0x00;  // выключение подтягивающих резисторов  
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход

// 1-будем передавать команду
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
delay(2);

// сначала передадим старший байт=00 (00 на порт уже установил port_out(); )
PORTC=0x00;
wrx_u();  /////////////wrx_u(); ///////////////////
// теперь передадим младший байт
PORTC=byteL;
wrx_u(); // дергаем WRITE вверх
delay(2);
Serial.print("register " );  pn();
Serial.print(byteL, HEX );
Serial.print("   " );
byteLL=byteL; // запомним для нужд
// 2-будем принимать данные
port_in();  // порт ардуины на вход
delay(2);
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
delay(2);
// дергаем RD вниз и получаем данные \, к примеру прочесть до 8ми параметров , физически в памяти это просто последующие регистры,
// просто для скорости не надо задавать адрес последующего снова - это сделано во многих LCD контроллерах.
for (i=1; i<=8; i++) 
                     {
                      rdx_u(); // дергаем RD вниз и получаем данные
                      Serial.print(" " );  pn(); 
                      Serial.print(byteL, HEX); 
                     }
if ( byteLL==0x00 || byteLL==0xEF || byteLL==0xBF || byteLL==0x04 || byteLL==0xD3 ) Serial.print("  ***" );
if ( byteLL==0xDA || byteLL==0xDB || byteLL==0xDC  ) Serial.print("  ***" );
Serial.println(""); 

digitalWrite(RDX, 1); // считали, переводим дисплей обратно в режим приема инфы
}


int pn()  // печать дополнительный 0 , если 0 , чтоб печаталось в итоге 00
{
if (byteL<=0x0F) Serial.print("0");
}  


int knopel()  // остановка программы чтоб замерить уровни где надо и ожидание нажатия кнопки, для продолжения программы
{
while (digitalRead(12)==1) { digitalWrite(13, 1); delay(100);digitalWrite(13, 0); delay(200)  ;}
delay(500);
} 

читалка v3.1 для PORTA , если дисплей вы подключили на PORTA (пин 22-29 ардуино меги соответственно подключать к дисплейным DB0-DB7), то :

// ID_display_read_to_serial_monitor_universal_v3_1_PORTA.ino
// читалка ID дисплеев V3.1beta только для 8ми битных дисплеев PORTA, 
// подключить 8ми битный дисплей к Arduino Mega/Due:
//  DB0-7 (DB8-DB15 , DB10-DB17) , соответственно на arduino пины 22-29   ( микроконтроллера PORTA PA0-PA7 )       
// к примеру считать с 00D3  =>0xD3 младший
// Это же подключение соответственно UTFT распиновке, 
// только не забыть, в тесте UTFT, на 42 пин подать лог.1 хотя бы внутренним резистором 
// digitalWrite(42, HIGH); 


 #define  CD_Pin 38 // (RS)     //38
 #define  DCX 38 

 #define  WR_Pin 39		 //39	
 #define  WRX 39 
 	 
 #define  CS_Pin 40		 //40
 #define  CSX 40
  		 
 #define  RST_Pin 41		//41
 #define  RSTX 41
 		 
 #define  RD_Pin 42              //42 __-
 #define  RDX 42
 
int i,j;
byte byteLL; // вспомогательный , ибо основной используется
byte byteL;


void setup() 
{  DDRA=0xFF;
 
  // кнопка для продолжения скетча, если где надо его остановить, чтоб замерить лог. уровни
    pinMode(A12, INPUT); // кнопку удобно воткнуть в 12й пин и в рядом GND
    digitalWrite(12, HIGH); // внутренний подтягив. резистор к + 
    pinMode(13, OUTPUT); // и светодиод на плате чтоб мигал, когда можно нажать кнопку для продолжения
    
Serial.begin(9600);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
digitalWrite(CS_Pin, 0); // активация шины данных дисплея (выбор кристалла ChipSelect)
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины  //i=22; i<=42;i++
Serial.println("start... " );
Serial.println(""); 
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
delay(100);
digitalWrite(RST_Pin, 0); // удержание в сбросе дисплея
delay(100);
digitalWrite(RST_Pin, 1);// вывод дисплея из сброса
delay(500);
rstx_u();

Serial.println("      ");
Serial.println("               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)");
Serial.println("      ");
byteL=0x00 ;  // 
writeCommand_read6Parameter();
rstx_u();
Serial.println("      ");


for (j=0; j<=255;j++) //255 0x4F
  {
   byteL=j ;  // 
   writeCommand_read6Parameter();
   rstx_u();
   }
}


// Г Л А В Н А Я   П Р О Г Р А М М А
void loop() 
{
  // put your main code here, to run repeatedly:
}




// П О Д П Р О Г Р А М М Ы  ,   Ф У Н К Ц И И
// RST вверх.  Сброс дисплея
int rstx_u()
{
digitalWrite(WRX, 0);digitalWrite(DCX, 0);digitalWrite(RDX, 1);
digitalWrite(RSTX, 0);  delay(10); 
digitalWrite(RSTX, 1);  delay(10);
} 


// дергаем WR вверх
int wrx_u()
{
digitalWrite(WRX, 0); digitalWrite(WRX, 1);  //digitalWrite(WRX, 0); 
delay(2);
} 


// дергаем RD вниз и считываем данные
int rdx_u()
{
//digitalWrite(RDX, 0); digitalWrite(RDX, 1);  // digitalWrite(RDX, 0); 
digitalWrite(RDX, 1); digitalWrite(RDX, 0); // оставим в 0 , чтоб порт дисплея был на выход, 
// и преобразователи уровней на шилде (если они есть) тоже были на выход
delay(2);
PORTA=0x00;
byteL=0; //  PORTA  считаем
byteL=PINA; // считываем с выводов PORTA
//knopel();
delay(2);
} 


// конфигурация порта на вход
int port_in()
{
DDRA=0x00;  // конфиг всех пинов на вход
PORTA=0x00; // выключение подтягивающих резисторов  
}


// конфигурация портов на выход
int port_out()
{
DDRA=0xFF;// конфиг всех пинов на выход
PORTA=0x00;  // выключение подтягивающих резисторов  
}


int writeCommand_read6Parameter()
{
  // передадим команду
digitalWrite(RDX, 1);  // сначала порт дисплея в режим приема  
port_out(); // конфим ардуинку на выход

// 1-будем передавать команду
digitalWrite(DCX, 0);  // для передачи команды в дисплей, а не данных
delay(2);

// сначала передадим старший байт=00 (00 на порт уже установил port_out(); )
PORTA=0x00;
wrx_u();  /////////////wrx_u(); ///////////////////
// теперь передадим младший байт
PORTA=byteL;
wrx_u(); // дергаем WRITE вверх
delay(2);
Serial.print("register " );  pn();
Serial.print(byteL, HEX );
Serial.print("   " );
byteLL=byteL; // запомним для нужд
// 2-будем принимать данные
port_in();  // порт ардуины на вход
delay(2);
digitalWrite(DCX, 1); // работаем теперь с данными, а не с командой
delay(2);
// дергаем RD вниз и получаем данные \, к примеру прочесть до 8ми параметров , физически в памяти это просто последующие регистры,
// просто для скорости не надо задавать адрес последующего снова - это сделано во многих LCD контроллерах.
for (i=1; i<=8; i++) 
                     {
                      rdx_u(); // дергаем RD вниз и получаем данные
                      Serial.print(" " );  pn(); 
                      Serial.print(byteL, HEX); 
                     }
if ( byteLL==0x00 || byteLL==0xEF || byteLL==0xBF || byteLL==0x04 || byteLL==0xD3 ) Serial.print("  ***" );
if ( byteLL==0xDA || byteLL==0xDB || byteLL==0xDC  ) Serial.print("  ***" );
Serial.println(""); 

digitalWrite(RDX, 1); // считали, переводим дисплей обратно в режим приема инфы
}


int pn()  // печать дополнительный 0 , если 0 , чтоб печаталось в итоге 00
{
if (byteL<=0x0F) Serial.print("0");
}  


int knopel()  // остановка программы чтоб замерить уровни где надо и ожидание нажатия кнопки, для продолжения программы
{
while (digitalRead(12)==1) { digitalWrite(13, 1); delay(100);digitalWrite(13, 0); delay(200)  ;}
delay(500);
} 

 

Вот к примеру что она выдала для неизвестного 2.4" tft lcd shield arduino uno 

               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  *
      
register 00    00 00 00 00 00 00 00 00  *
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    00 00 00 00 00 00 00 00  *
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 61 00 00 00 00 00
register 0A    08 08 08 08 08 08 08 08
register 0B    00 00 00 00 00 00 00 00
register 0C    66 66 66 66 66 66 66 66
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 00 00 00 00 00
register 2B    00 00 00 00 00 00 00 00
register 2C    00 00 00 00 00 00 00 00
register 2D    00 00 00 00 00 00 00 00
register 2E    FC 7C 6C 14 FC 58 DC 54
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 00 00 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 00 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    00 00 00 00 00 00 00 00
register 3B    00 00 00 00 00 00 00 00
register 3C    00 00 00 00 00 00 00 00
register 3D    00 00 00 00 00 00 00 00
register 3E    FC 7C 6C 14 FC 58 DC 54
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 00 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    00 00 00 00 00 FF 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 FF 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    00 00 00 00 00 00 00 00
register B2    00 00 00 00 00 00 00 00
register B3    00 00 00 00 00 00 00 00
register B4    00 00 00 00 00 00 00 00
register B5    00 00 00 00 00 00 00 00
register B6    00 00 00 00 00 00 00 00
register B7    00 00 00 00 00 00 00 00
register B8    00 00 00 00 00 00 00 00
register B9    00 00 00 00 00 00 00 00
register BA    00 00 00 00 00 00 00 00
register BB    00 00 00 00 00 00 00 00
register BC    00 00 00 00 00 00 00 00
register BD    00 00 00 00 00 00 00 00
register BE    00 00 00 00 00 00 00 00
register BF    00 00 00 00 00 00 00 00  *
register C0    00 00 00 00 00 00 00 00
register C1    00 00 00 00 00 00 00 00
register C2    00 00 00 00 00 00 00 00
register C3    00 00 00 00 00 00 00 00
register C4    00 00 00 00 00 00 00 00
register C5    00 00 00 00 00 00 00 00
register C6    00 00 00 00 00 00 00 00
register C7    00 00 00 00 00 00 00 00
register C8    00 00 00 00 00 00 00 00
register C9    00 00 00 00 00 00 00 00
register CA    00 00 00 00 00 00 00 00
register CB    00 00 00 00 00 00 00 00
register CC    00 00 00 00 00 00 00 00
register CD    00 00 00 00 00 00 00 00
register CE    00 00 00 00 00 00 00 00
register CF    00 00 00 00 00 00 00 00
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 00 00 00 00 00 00 00
register D3    00 00 00 00 00 00 00 00  *
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    00 00 00 00 00 00 00 00
register DB    00 00 00 00 00 00 00 00
register DC    00 00 00 00 00 00 00 00
register DD    00 00 00 00 00 00 00 00
register DE    00 00 00 00 00 00 00 00
register DF    00 00 00 00 00 00 00 00
register E0    00 00 00 00 00 00 00 00
register E1    00 00 00 00 00 00 00 00
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 00 00 00 00 00 00 00
register E9    00 00 00 00 00 00 00 00
register EA    00 00 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 00 00 00 00 00 00 00
register EE    00 00 00 00 00 00 00 00
register EF    00 00 00 00 00 00 00 00  *
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    28 94 03 08 08 10 00 15
register F3    01 00 00 00 00 00 00 00
register F4    0B 00 00 00 21 4F 01 02
register F5    00 4D 66 00 00 12 00 00
register F6    01 01 03 00 02 0C 02 08
register F7    00 80 10 00 00 00 00 00
register F8    33 00 00 00 00 00 00 00
register F9    04 00 00 00 00 00 00 00
register FA    00 0C 01 0D 13 1C 15 3A
register FB    00 00 00 00 00 00 00 00
register FC    00 00 00 00 00 00 00 00
register FD    00 00 10 14 12 01 04 48
register FE    04 20 53 00 00 00 00 00
register FF    00 00 00 00 00 00 00 00

, который тоже запустился  на адафруитской переделке от SPFD5408 (для запуска на UTFT, никто видимо не хочет попыхтеть для него, можно было сделать на базе UTFT_v2.77b2_uno_ili9327_8bit_turbo). 

Как видно из лога, это вообще непонятный левый аналог. Согласно даташиту http://www.micro4you.com/files/lcd/SPFD5408A.pdf , для SPFD5408, ID должен лежать в 00h , и должно было считаться 54 08 .   

По факту в дисплее  стоит контроллер - аналог . Поэтому и применяют переделки, в частности от adafruita ,они не вычитывают какой id контроллера, чтобы скормить ему подходящий инит , а тупо дают ему определенный инит. Собственно как и делает UTFT,  для неизвестных дисплеев в нем может не оказаться подходящего инита, да и подходящую битность  там надо установить. К тому же в UTFT ,если дисплей переведен с 16ти на 8 бит, иногда приходиться немного попыхтеть. К примеру выставить все 16ть бит  byte dtm[] = {16, 16 ... 16}, но физически использовать младшие 8мь бит, т.е. PORTC ( пин 30-37 соответственно подключать к дисплейным DB7-DB0 ) , так хоть можно увидеть какие нибудь корявые картинки теста. Т.о. перебирая иниты можно убедиться что дисплей жив и может что-то рисовать.

как конечное решение можно , подсмотреть на переделке UTFT  UTFT_v2.77b2_uno_ili9327_8bit_turbo , на форуме она есть .  Для меги, уновский шилд по умолчанию подключать проводочками  на PORTC .  Можно и напрямую , в соседней ветке про 3.5", выкладывал переделку на базе её, чтоб уновский адафруитский дисплей воткнутый в мегу работал.

 

releyshic
Offline
Зарегистрирован: 20.11.2015

по поводу подключения - я не вижу смысла подключать дисплей иначе как у него штырьки стоят, прям на плату втыкаешь и всё. зачем огород городить, если можно пины переназначить в программе. или это только для проверки ?

у меня дсиплей с  вот такими пинами  LCD_CS A3  LCD_CD A2  LCD_WR A1  LCD_RD A0. это фактическое подключение в соответствии с надписями на дисплее. переделка так работает

я пробовал для UTFT делать инит в соответствии с рабочей AdafruiSPFD5408, вроде всё верно, но всё равно белый экран

а почему именно белый экран горит? что это значит? почему не абракадабру выводит?

самое интересное что я пробовал в соответствии с инструкцией рабочей переделки исправить оргинал Adafrui, но всё равно белый экран, вот это и странно

а есть ли какаято статья обучающая про это всё про битность способы передачи регистры и тп, именно при работе с дисплеями такими а то ничего почти не понятно? вот этим было бы интерсно заняться, там бы исам разобрался

slider
Offline
Зарегистрирован: 17.06.2014

releyshic пишет:

по поводу подключения - я не вижу смысла подключать дисплей иначе как у него штырьки стоят, прям на плату втыкаешь и всё. зачем огород городить, если можно пины переназначить в программе. или это только для проверки ?

так уновские дисплеи на проводках никто и не собирается использовать, невнимательно читали. Это подключение только для удобного считывания ID программе. и если что удобного и понятного управления. И как стандартное подключение меговских шилдов. Читалку специально для уновского дисплея напрямую воткнутого в мегу , нету надобности делать , ибо не всегда у них реально выведен RD, да и по некоторым адресам сама адафруитская либа умеет считывать и выводит в монитор порта. 

Для использования же Уновских Адафруитских шилдов на меге и уно, подходят либы и адафруит и UTFT-подшаманенная. В теме про 3.5" явный пример использования UTFT для связки Уно+адафруитский уновский шилд к примеру на базе ili9327 - решение UTFT_v2.77b2_uno_ili9327_8bit_turbo.    Для связки Мега+адафруитский уновский шилд - http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=6#comment-90708 разбирался сам в работе библиотеки , и на форуме обсуждалось что и как, изучите внимательней. там же народ нашёл методы ещё ускорения работы UTFT.

// на адафруитском уновском шилде DB0 DB1 заведены на пины ардуиновские D8 D9 . Для UTFT в уновском шилде по умолчанию они должны быть физически на пинах D0 D1 (на которых находится сериал порт, адафруит их высвобождает) . 

slider
Offline
Зарегистрирован: 17.06.2014

№11  

3,0"  400x240 дисплей Fly E155,   HX8352A  tft lcd 37pin 4led  SR7791493 

картинки кликабельны:

распиновка:

nc
xl
yu
xr
yd
GND
IOVCC
VCC
nc (fmark)
CS
RS
WR
RD
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DB8
DB9
DB10
DB11
DB12
DB13
DB14
DB15
RESET
GND
LEDA
K1
K2
K3
K4
nc

по R00h вычитывается ID 0x52  что соответствует HX8352A . В UTFT он есть . вызов UTFT myGLCD(HX8352A,38,39,40,41); . Дисплейчик 16бит. Перевод в 8бит на шлейфе не предусмотрен (разве что чем нибудь острым перекоммутировать дорожки со стекла в шлейф).

пришли стабилизаторы 3,3в 0.25-0.5A  XC6206P332MR , маркировка 662K  , теперь по питанию лучше их ставить . 

Вот такой вот шилд получился. Габариты дисплея не загораживают верхний и нижний ряд выводов ардуино. 

углы обзора вверх вниз вправо хорошие , влево не очень . Попробовал пины длинные long , поэтому можно под шилдом разместить обычную плату или шилд. 

slider
Offline
Зарегистрирован: 17.06.2014

№12  

3,2"  320x240 дисплей Fly IQ230, tft lcd 41pin 6led  FPC-FRD32181A

картинки кликабельны:

распиновка:

LEDA
K1
K2
K3
K4
GND
IOVCC
nc (fmark)
RESET
DB15
DB14
DB13
DB12
DB11
DB10
DB9
DB8
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
nc
RD
WR
RS (DC)
CS
yu
xl
yd
xr
nc (id)
VCC
GND
GND
K5
K6
nc

по R00h вычитолась ID 6809h , изучение даташитов дало что это контроллер RM68090 , причём в старой версии rev01 этот контроллер имеет ID 6807h , в новой версии rev04 - ID 6809h .

На шлейфе есть даже подписанная перемычка R1-16bit R2-8bit (используютсяDB0-DB7) .
Методом подбора подошли инициализации UTFT для 16бит: ILI9325D_16 ,  ILI9325D_16ALT . для 8 бит: ILI9325D_8  ILI9325C  . Время теста UTFT на 16бит = 41сек. , на 8бит = 45сек.. Углы обзора хорошие . 
дисплей пока некуда приспособить, изучал на одной из макеток (резисторы 10ком), по питанию такая вот такое исследование получилось: при стабилитроне 3,3в и резисторе 
- 300ом , при запуске инита напряжение с 3,3в падает до 2,5в(эт уже мало) ,
- 200ом , с 3,5в до 2,9в 
- 150 ом , с 3,6в(эт уже много) до 3,1в 
так что вывод , лучше либо ставить стабилитрон 3,0в и резистор 100-150ом , либо ставить микросхему стабилизатор  3,3в . 

slider
Offline
Зарегистрирован: 17.06.2014
№13  
2,8"  320x240 дисплей Alcatel OT-905,   HX8347D , tft lcd 39pin , 4led  TFT8K4669FPC-A2-E
 
инет находит еще соответствия OT-906  A906  A919  8K4669  FPC706-10  W939 , но подобных распиновок не было найдено.
 
картинки кликабельны:
собрал макетку для исследования дисплеев с плоским разъемом , с шагом пинов 0.3мм
исследование дорожек в шлейфе и вход и в кристалл выявило ШинуДанных 18бит .и непонятные управляющие вывода ШиныУправления. Толстые дорожки - это VCC . 
  Методика дальше такова : устанавливаем на упр. вывода (через резисторы 10к) лог.0 , и по одному выводу, потом по 2 выводу подавать лог1. . Смотреть на несколько подключенных на ШД белых светодиодов, через 10к на +3,3в . Т.о. если свечение тускло - это Zсост , если ярко - это лог.1 , если тухнет - лог.0 .
 Это выявило
 - DC (RS) - лог 1 вызывает смену ШД с Z-сост в лог0 
 - CS и RD - лог.1 на них переводят оюратно шину данных с лог.0 на Z-состояние.  
 - при подаче разных лог. уровней на 39 38 вывод , на ШД появляются лог. на разных пинах , а именно 00 - 16бит  10 - 8бит 10 - 18бит  11 - 9бит . И теперь понятна очередность бит с пин11по пин28 соостветствие c DB0  по DB17 .
методом подбора ШУ вычиталось с r00h ID 0x47 . Путем пересмотра PDF нашелся такой ID в HX8347D 
 
и это можно было предположить и по редко встечающемуся распределению ШД , а именно вывода очередности DB0-DB17 не друг за дружкой, а по паре ,
пересматривая PDF наткнуться на HX8347D  
и уже по дорожкам в шлейфе прослеживаем  более точное распределение  im0-3 ШД ШУ на разъеме.
получилась такая распиновка:
GND
A
K1
K2
K3
K4
GND
VCC
VCC
GND
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DB8
DB9
DB10
DB11
DB12
DB13
DB14
DB15
DB16
DB17
GND
RD
WR
DC
CS
nc (выход чего-то: te или pwm_out)
RESET
GND
GND
IM3
IM0
im3,0 соответственно 00 - 16бит(DB0-DB15) , 01 - 8бит(DB0-7) , 10 - 18бит , 11 - 9бит.
 
установка UTFT всё на 16бит и перебор всех инитов не завёл дисплей. Значит в поиск по инету родной init code HX8347D . пришлось зарегаться на китайском хранилище и от туда его взять . ( есть ещё какое-то еще иностранное, так там вообще попандос, платить деньги) 
найденный расчитанный для напряжения питания 2,8в (как показала практика и на 3,1в тож хорошо кажет) :
/*********************************************************  
  Controller: HX8347D  
  Panel:      CMO2.2  
  Reslution:   
  VDD: 2.8v  
  Interface: 8080--16bit/1-8 10-17  
  Dataport: P2  -->DB8-DB15  
            P0  -->DB0-DB7  
*********************************************************/   
   
#include"reg51.h"   
#include <absacc.h>   
#include <intrins.h>   
#define CtrPort P3   
sbit  P10         =P1^0;   
sbit  P11         =P1^1;   
sbit  P12         =P1^2;   
sbit  P13         =P1^3;   
sbit  P14         =P1^4;   
sbit  P16         =P1^6;   
sbit  P17         =P1^7;   
//sbit  Ram_chip_select1  =P1^4;   
sbit  Ram_chip_select2  =P1^5;   
//sbit  Ram_chip_select3  =P1^3;   
//unsigned char code pic[];   
const   
//                       /RESET   /CS    /RD   /WR   /RS   
cwrite       =0xf4;   //    1      0      1     0     0   
cwrite_set   =0xf6;   //    1      0      1     1     0   
dwrite       =0xf5;   //    1      0      1     0     1   
dwrite_set   =0xf7;   //    1      0      1     1     1   
   
/**********************************************************/   
void delay(unsigned int para)   
{   
    for(;para;para--);   
}   
   
void LCD_Index_Out(unsigned char Index)   
{   
 CtrPort=cwrite_set;   
 P2=0x00;   
 P0=Index;   
    
 CtrPort=cwrite;   
 CtrPort=cwrite_set;   
}   
   
void LCD_Data_Out(unsigned char set_dbH,unsigned char set_dbL)   
{   
 P2=set_dbH;   
 P0=set_dbL;   
   
 CtrPort=dwrite;   
 CtrPort=dwrite_set;   
}   
   
void control_out(unsigned char x,unsigned char y)   
{   
 unsigned char m,n;   
 m=y>>8;   
 n=y;   
 LCD_Index_Out(x);   
 LCD_Data_Out(m,n);   
}   
   
void LCD_Data_Out1(unsigned int y)   
{   
 unsigned char m,n;   
 m=y>>8;   
 n=y;   
 LCD_Data_Out(m,n);   
}   
   
   
void RESET(void)   
{   
 CtrPort=0xff;   
 delay(50);   
 CtrPort=0xef;   
 delay(300);   
 CtrPort=0xff;   
 delay(150);   
}   
   
void MainAddset()   
{   
LCD_Index_Out(0x20);   
LCD_Data_Out(0x00,0x00);   
   
LCD_Index_Out(0x21);   
LCD_Data_Out(0x00,0x00);   
   
LCD_Index_Out(0x22);   
}   
   
void Init_LCD(void)   
{   
 RESET();   
delay(150); // After Inter-MicroP Program (load OTP)   
control_out(0x00EA,0x0000); //PTBA[15:8]   
control_out(0x00EB,0x0020); //PTBA[7:0]   
control_out(0x00EC,0x000C); //STBA[15:8]   
control_out(0x00ED,0x00C4); //STBA[7:0]   
control_out(0x00E8,0x0040); //OPON[7:0]   
control_out(0x00E9,0x0038); //OPON1[7:0]   
control_out(0x00F1,0x0001); //OTPS1B   
control_out(0x00F2,0x0010); //GEN   
control_out(0x0027,0x00A3); //   
//Gamma 2.2 Setting   
control_out(0x0040,0x0000); //   
control_out(0x0041,0x0000); //   
control_out(0x0042,0x0001); //   
control_out(0x0043,0x0012); //   
control_out(0x0044,0x0010); //   
control_out(0x0045,0x0026); //   
control_out(0x0046,0x0008); //   
control_out(0x0047,0x0053); //   
control_out(0x0048,0x0002); //   
control_out(0x0049,0x0015); //   
control_out(0x004A,0x0019); //   
control_out(0x004B,0x0019); //   
control_out(0x004C,0x0016); //   
control_out(0x0050,0x0019); //   
control_out(0x0051,0x002F); //   
control_out(0x0052,0x002D); //   
control_out(0x0053,0x003E); //   
control_out(0x0054,0x003F); //   
control_out(0x0055,0x003F); //   
control_out(0x0056,0x002C); //   
control_out(0x0057,0x0077); //   
control_out(0x0058,0x0009); //   
control_out(0x0059,0x0006); //   
control_out(0x005A,0x0006); //   
control_out(0x005B,0x000A); //   
control_out(0x005C,0x001D); //   
control_out(0x005D,0x00CC); //   
//Power Voltage Setting   
control_out(0x001B,0x001B); //VRH=4.65V   
control_out(0x001A,0x0001); //BT (VGH~15V,VGL~-10V,DDVDH~5V)   
control_out(0x0024,0x002F); //VMH(VCOM High voltage ~3.2V)   
control_out(0x0025,0x0057); //VML(VCOM Low voltage -1.2V)   
//****VCOM offset**///   
control_out(0x0023,0x0097); //for Flicker adjust //can reload from OTP   
//Power on Setting   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz   
control_out(0x0019,0x0001); //OSC_EN='1', start Osc   
control_out(0x0001,0x0000); //DP_STB='0', out deep sleep   
control_out(0x001F,0x0088);// GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0080);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0090);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x00D0);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0   
delay(5);   
//262k/65k color selection   
control_out(0x0017,0x0005); //default 0x0006 262k color // 0x0005 65k color   
//SET PANEL   
control_out(0x0036,0x0000); //SS_P, GS_P,REV_P,BGR_P   
//Display ON Setting   
control_out(0x0028,0x0038); //GON=1, DTE=1, D=1000   
delay(40);   
control_out(0x0028,0x003C); //GON=1, DTE=1, D=1100   
//Set GRAM Area   
control_out(0x0002,0x0000);   
control_out(0x0003,0x0000); //Column Start   
control_out(0x0004,0x0000);   
control_out(0x0005,0x00EF); //Column End   
control_out(0x0006,0x0000);   
control_out(0x0007,0x0000); //Row Start   
control_out(0x0008,0x0001);   
control_out(0x0009,0x003F); //Row End   
//WR_8B_FORMAT(0x0022); //Start GRAM write   

// Power Off Setting   
control_out(0x0028,0x0038); //GON=ЎЇ1ЎЇ DTE=ЎЇ1ЎЇ D[1:0]=ЎЇ10ЎЇ   
delay(40);   
control_out(0x001F,0x0089); // GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=1   
delay(40);   
control_out(0x0028,0x0004); //GON=ЎЇ0ЎЇ DTE=ЎЇ0ЎЇ D[1:0]=ЎЇ01ЎЇ   
delay(40);   
control_out(0x0019,0x0000); //OSC_EN=ЎЇ0ЎЇ   
delay(5);   
//M51_WR_REG(U05_LCD_POWER_ON, 0x0000); //VCI & IOVCC OFF  


 
//##################################################################   
// ENTER IDLE mode Setting   
control_out(0x0018,0x0034); //I/P_RADJ,N/P_RADJ, IDLE mode 55Hz   
control_out(0x002F,0x0011); //IDLE mode line inversion   
control_out(0x0001,0x0004); //IDLE='1' , enter IDLE mode   
// EXIT IDLE mode Setting   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz   
control_out(0x002F,0x0011); //Normal mode line inversion   
control_out(0x0001,0x0000); //IDLE='0', EXIT IDLE mode   
//##################################################################   
// ENTER Partial mode Setting 32line   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ Partial mode 75Hz   
control_out(0x002F,0x0011); //Partial mode line inversion   
control_out(0x0001,0x0001); //PTL='1', Enter Partial mode   
control_out(0x000A,0x0000); //PSL[15:8]=0x0000   
control_out(0x000B,0x0020); //PSL[7:0]=0x0020   
control_out(0x000C,0x0000); //PEL[15:8]=0x0000   
control_out(0x000D,0x0047); //PEL[7:0]=0x0047   
control_out(0x0026,0x0001); //refresh cycle=5frame   
// EXIT Partial mode Setting   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz   
control_out(0x002F,0x0011); //Normal mode, line inversion   
control_out(0x0001,0x0000); //PTL='0', EXIT Partial mode   
// ENTER Partial + IDLE mode Setting 32line   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ, Partial mode 55Hz   
control_out(0x002F,0x0011); // Partial + IDLE mode line inversion   
control_out(0x0001,0x0009); // PTL='1' IDLE=ЎЇ1ЎЇ, Enter Partial + IDLE mode   
control_out(0x000A,0x0000); //PSL[15:8]=0x0000   
control_out(0x000B,0x0020); //PSL[7:0]=0x0020   
control_out(0x000C,0x0000); //PEL[15:8]=0x0000   
control_out(0x000D,0x0047); //PEL[7:0]=0x0047   
control_out(0x0026,0x0001); //refresh cycle=5frame   
// EXIT Partial + IDLE mode Setting   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ ,Normal mode 75Hz   
control_out(0x002F,0x0011); //Normal mode, line inversion   
control_out(0x0001,0x0000); // PTL='0' IDLE=ЎЇ0ЎЇ, EXIT Partial + IDLE mode   
//##################################################################   
// Enter Sleep mode Setting   
control_out(0x0028,0x00B8); //GON=ЎЇ1ЎЇ DTE=ЎЇ1ЎЇ D[1:0]=ЎЇ10ЎЇ   
delay(40);   
control_out(0x001F,0x0089); // GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=1   
delay(40);   
control_out(0x0028,0x0004); //GON=ЎЇ0ЎЇ DTE=ЎЇ0ЎЇ D[1:0]=ЎЇ01ЎЇ   
delay(40);   
control_out(0x0019,0x0000); //OSC_EN=ЎЇ0ЎЇ   
delay(5);   
// Exit Sleep mode Setting   
control_out(0x0018,0x0036); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz   
control_out(0x0019,0x0001); //OSC_EN='1', start Osc   
control_out(0x001F,0x0088);// GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0080);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0090);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x00D0);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0   
delay(5);   
control_out(0x0028,0x0038); //GON=1, DTE=1, D=1000   
delay(40);   
control_out(0x0028,0x003F); //GON=1, DTE=1, D=1100   
// Enter Deep Sleep mode Setting   
control_out(0x0028,0x00B8); //GON=ЎЇ1ЎЇ DTE=ЎЇ1ЎЇ D[1:0]=ЎЇ10ЎЇ   
delay(40);   
control_out(0x001F,0x0089); // GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=1   
delay(40);   
control_out(0x0028,0x0004); //GON=ЎЇ0ЎЇ DTE=ЎЇ0ЎЇ D[1:0]=ЎЇ01ЎЇ   
delay(40);   
control_out(0x0019,0x0000); //OSC_EN=ЎЇ0ЎЇ   
delay(5);   
control_out(0x0001,0x00C0); //DP_STB[1:0]=ЎЇ11ЎЇ   
// Exit Deep Sleep mode Setting   
control_out(0x0001,0x0000); //DP_STB='0', out deep sleep   
delay(10);   
control_out(0x0019,0x0001); //OSC_EN='1', start Osc   
control_out(0x001F,0x0088);// GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0080);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x0090);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
control_out(0x001F,0x00D0);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0   
delay(5);   
control_out(0x0028,0x0038); //GON=1, DTE=1, D=1000   
delay(40);   
control_out(0x0028,0x003F); //GON=1, DTE=1, D=1100   
       
   
   
   
     
   
     
  LCD_Index_Out(0x22); // Write Data Register   
   
   
   
}   
   
void show_rgb(unsigned int t,unsigned int b)   
{   
 unsigned int i,j;   
 LCD_Index_Out(0x22);   
 for(i=0;i<1;i++)   
 {   
  for(j=0;j<240;j++)   
  LCD_Data_Out1(t);   
 }   
 {   
  for(i=0;i<318;i++)   
 {   
  for(j=0;j<1;j++)   
  LCD_Data_Out1(t);   
  for(j=0;j<238;j++)   
  LCD_Data_Out1(b);   
  for(j=0;j<1;j++)   
  LCD_Data_Out1(t);   
 }   
 }   
 for(i=0;i<1;i++)   
 {   
  for(j=0;j<240;j++)   
  LCD_Data_Out1(t);   
 }   
}   
   
   
void  show_Gray_scale(void)   
{      
 unsigned char Gray[]={          
                       
                       0x08, 0x41,  // level 0      black   
                       0x18, 0xc3,  // level 1   
                       0x29, 0x65,  // level 2   
                       0x39, 0xe7,  // level 3   
                       0x4a, 0x69,  // level 4   
                       0x5a, 0xeb,  // level 5   
                       0x6b, 0x6d,  // level 6   
                       0x7b, 0xef,  // level 7   
                       0x8c, 0x71,  // level 8   
                       0x9c, 0xf3,  // level 9   
                       0xad, 0x75,  // level 10   
                       0xbd, 0xf7,  // level 11   
                       0xce, 0x79,  // level 12   
                       0xde, 0xfb,  // level 13   
                       0xef, 0x7d,  // level 14   
                       0Xff, 0Xff,  // level 15     white    
   
                         
    
                                      
                      };       
    int page = 0;   
    int count = 0;     
    int level = 0;   
    LCD_Index_Out(0x22);   
       
    for (page = 0; page < 320; page++)   
    {           
       //int i=0 ;   
           
        for (level = 0; level < 16; level++)   
        {      
            for (count = 0; count < 15; count++)   
            {    
   
                LCD_Data_Out(Gray[level*2], Gray[level*2 + 1]);   
                   
            }   
   
        }      
                    
    }   
   
}   
   
   
void Window(void)   
{   
    unsigned int page,col;   
   
//--------------------------------------------------------   
//          First Line                                                           
//--------------------------------------------------------   
   
    LCD_Index_Out(0x22);   
   
      for(col = 0;col < 240;col++)    
{   
   
        LCD_Data_Out(0xff,0xff);   
}   
//--------------------------------------------------------   
        LCD_Data_Out(0xff,0xff);   
      for(col = 0;col < 238;col++)    
      LCD_Data_Out(0x00,0x00);   
         
        LCD_Data_Out(0xff,0xff);             
             
for(page = 0;page < 106;page++)   
    {   
   
          LCD_Data_Out(0xff,0xff);   
          LCD_Data_Out(0x00,0x00);   
             
      for(col = 0;col < 236;col++)    
          LCD_Data_Out(0xff,0xff);   
             
          LCD_Data_Out(0x00,0x00);   
          LCD_Data_Out(0xff,0xff);   
    
    }   
       
   
//--------------------------------------------------------    
//          windows                                                          
//--------------------------------------------------------   
       
       
    for(page = 0;page < 104;page++)   
    {   
   
          LCD_Data_Out(0xff,0xff);   
          LCD_Data_Out(0x00,0x00);   
             
      for(col = 0;col < 78;col++)    
          LCD_Data_Out(0xff,0xff);   
             
      for(col = 0;col < 80;col++)    
          LCD_Data_Out(0x00,0x00);   
             
      for(col = 0;col < 78;col++)    
          LCD_Data_Out(0xff,0xff);   
             
          LCD_Data_Out(0x00,0x00);   
          LCD_Data_Out(0xff,0xff);   
    
    }   
   
   
   
       
//--------------------------------------------------------   
//                                                                       
//--------------------------------------------------------   
   
       
    for(page = 0;page < 106;page++)   
    {   
   
          LCD_Data_Out(0xff,0xff);   
          LCD_Data_Out(0x00,0x00);   
             
      for(col = 0;col < 236;col++)    
          LCD_Data_Out(0xff,0xff);   
             
          LCD_Data_Out(0x00,0x00);   
          LCD_Data_Out(0xff,0xff);   
   
    }              
               
   
   
          LCD_Data_Out(0xff,0xff);   
          for(col = 0;col < 238;col++)    
          LCD_Data_Out(0x00,0x00);   
          LCD_Data_Out(0xff,0xff);   
           
         
      for(col = 0;col < 240;col++)    
{   
        
   
          LCD_Data_Out(0xff,0xff);   
}   
}   
/*  
void show_photo(void)  
{  
  
    unsigned char j;  
    unsigned int i;  
    unsigned long s=0;  
  
 LCD_Index_Out(0x22);  
  
    for (i=0;i<90;i++)  
    {  
    for (j=0;j<240;j++)  
  
        LCD_Data_Out(0XFF,0XFF);  
          
  
    }  
  
  
    for (i=0;i<130;i++)  
    {  
    for (j=0;j<240;j++)  
  
        LCD_Data_Out(pic[s++],pic[s++]);  
          
  
    }  
  
  
  
    for (i=0;i<100;i++)  
    {  
    for (j=0;j<240;j++)  
  
        LCD_Data_Out(0XFF,0XFF);  
          
  
    }  
  
  
  
  
}  
  
  
*/   
void picc2()   
{        
       int Row,Column,Addr=0X0000;   
       int I=0;   
       int RamData1,RamData2;   
       MainAddset();   
//////////////////////////////////////////   
       //BankSelect(Pic_number1);   
   
          
       P10=0;P11=0;P12=0;   
          
       for(Column=0;Column<320;Column++)   
          
             {   
                  for(Row=0;Row<240;Row++)   
   
                   { Ram_chip_select2=0;   
                     RamData1=XBYTE[Addr++];   
                     RamData2=XBYTE[Addr++];   
                     Ram_chip_select2=1;   
                     LCD_Data_Out(RamData1,RamData2);   
                        
                     if ((Column==136)&&(Row==126))   
                         {P10=1;Addr=Addr-65536;}    
                     if ((Column==273)&&(Row==16))   
                        { P10=0;P11=1;Addr=Addr-65536;}         
                     //if ((Column=136)&(Row=126))   
                      //  { P10=1;P11=1;P12=0;}     
}}       
        //WaitKey();   
/*  
        for(Column=0;Column<320;Column++)  
         
             {  
                  for(Row=0;Row<240;Row++)  
  
                   { Ram_chip_select2=0;  
                     RamData1=XBYTE[Addr++];  
                     RamData2=XBYTE[Addr++];  
                     Ram_chip_select2=1;  
                     LCD_Data_Out(RamData1,RamData2);  
                     if ((Column==89)&&(Row==144))  
                         {P10=1;P11=1;P12=0;Addr=Addr-65536;}   
                     if ((Column==226)&&(Row==32))  
                        { P10=0;P11=0;P12=1;Addr=Addr-65536;}        
                    // if ((Column=136)&(Row=126))  
                      //  { P10=1;P11=0;P12=1;}    
}}  
          
        //WaitKey();  
        //Addr=0x1780;  
        //P10=0;P11=0;P12=1;  
        for(Column=0;Column<320;Column++)  
         
             {  
                  for(Row=0;Row<240;Row++)  
  
                   { Ram_chip_select2=0;  
                     RamData1=XBYTE[Addr++];  
                     RamData2=XBYTE[Addr++];  
                     Ram_chip_select2=1;  
                     LCD_Data_Out(RamData1,RamData2);  
                     if ((Column==42)&&(Row==160))  
                         {P10=1;P11=0;P12=1;Addr=Addr-65536;}   
                     if ((Column==179)&&(Row==48))  
                        { P10=0;P11=1;P12=1;Addr=Addr-65536;}        
                     if ((Column==315)&&(Row==176))  
                        { P10=1;P11=1;P12=1;Addr=Addr-65536;}    
}}  
        //WaitKey();  
*/         
        Addr=0X0000;   
        }    
      
   
   
   
void main(void)   
{   
 Init_LCD();   
 LCD_Index_Out(0x22);   
 while(1)   
 {   
  show_rgb(0x0000,0x0000);   
  show_rgb(0xffff,0xffff);   
  delay(800);   
  show_rgb(0x07e0,0xf800);   
  show_rgb(0x001f,0x07e0);     
  show_rgb(0xf800,0x001f);   
   
  show_Gray_scale();   
  Window();   
//  show_photo();   
     picc2();   
   
  }   
}   
   
вот переделал под UTFT, замена \Arduino\libraries\UTFT\tft_drivers\hx8347a : 
initlcd.h 
case HX8347A:

// HX8347D
/*
   // After Inter-MicroP Program (load OTP)   
   control_out(0x00EA,0x0000); //PTBA[15:8]   
   control_out(0x00EB,0x0020); //PTBA[7:0]   
   control_out(0x00EC,0x000C); //STBA[15:8]   
   control_out(0x00ED,0x00C4); //STBA[7:0]   
   control_out(0x00E8,0x0040); //OPON[7:0]   
   control_out(0x00E9,0x0038); //OPON1[7:0]   
   control_out(0x00F1,0x0001); //OTPS1B   
   control_out(0x00F2,0x0010); //GEN   
   control_out(0x0027,0x00A3); //   
*/

//Power Voltage Setting   
LCD_Write_COM_DATA(0x1B,0x001B); //VRH=4.65V   
LCD_Write_COM_DATA(0x1A,0x0001); //BT (VGH~15V,VGL~-10V,DDVDH~5V)   
LCD_Write_COM_DATA(0x24,0x002F); //VMH(VCOM High voltage ~3.2V)   
LCD_Write_COM_DATA(0x25,0x0057); //VML(VCOM Low voltage -1.2V)   
//****VCOM offset**///   
LCD_Write_COM_DATA(0x23,0x0097); //for Flicker adjust //can reload from OTP   
//Power on Setting   
LCD_Write_COM_DATA(0x18,0x0036); //I/P_RADJ,N/P_RADJ, Normal mode 75Hz   
LCD_Write_COM_DATA(0x19,0x0001); //OSC_EN='1', start Osc   
LCD_Write_COM_DATA(0x01,0x0000); //DP_STB='0', out deep sleep   
LCD_Write_COM_DATA(0x1F,0x0088);// GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
LCD_Write_COM_DATA(0x1F,0x0080);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
LCD_Write_COM_DATA(0x1F,0x0090);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0   
delay(5);   
LCD_Write_COM_DATA(0x1F,0x00D0);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0   
delay(5);   
//262k/65k color selection   
LCD_Write_COM_DATA(0x17,0x0005); //default 0x0006 262k color // 0x0005 65k color   
//SET PANEL   
LCD_Write_COM_DATA(0x36,0x0000); //SS_P, GS_P,REV_P,BGR_P   
//Display ON Setting   
LCD_Write_COM_DATA(0x28,0x0038); //GON=1, DTE=1, D=1000   
delay(40);   
LCD_Write_COM_DATA(0x28,0x003C); //GON=1, DTE=1, D=1100   
//Set GRAM Area   
LCD_Write_COM_DATA(0x02,0x0000);   
LCD_Write_COM_DATA(0x03,0x0000); //Column Start   
LCD_Write_COM_DATA(0x04,0x0000);   
LCD_Write_COM_DATA(0x05,0x00EF); //Column End   
LCD_Write_COM_DATA(0x06,0x0000);   
LCD_Write_COM_DATA(0x07,0x0000); //Row Start   
LCD_Write_COM_DATA(0x08,0x0001);   
LCD_Write_COM_DATA(0x09,0x003F); //Row End   
//WR_8B_FORMAT(0x0022); //Start GRAM write   

/*
   // Power Off Setting   
   control_out(0x0028,0x0038); //GON=ЎЇ1ЎЇ DTE=ЎЇ1ЎЇ D[1:0]=ЎЇ10ЎЇ   
   delay(40);   
   control_out(0x001F,0x0089); // GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=1   
   delay(40);   
   control_out(0x0028,0x0004); //GON=ЎЇ0ЎЇ DTE=ЎЇ0ЎЇ D[1:0]=ЎЇ01ЎЇ   
   delay(40);   
   control_out(0x0019,0x0000); //OSC_EN=ЎЇ0ЎЇ   
   delay(5);   
   //M51_WR_REG(U05_LCD_POWER_ON, 0x0000); //VCI & IOVCC OFF  
*/

	LCD_Write_COM(0x22);   
	break;

setxy.h

case HX8347A:
	LCD_Write_COM_DATA(0x02,x1>>8);
	LCD_Write_COM_DATA(0x03,x1);
//	LCD_Write_COM_DATA(0x04,x2>>8);
	LCD_Write_COM_DATA(0x05,x2);
	LCD_Write_COM_DATA(0x06,y1>>8);
	LCD_Write_COM_DATA(0x07,y1);
//	LCD_Write_COM_DATA(0x08,y2>>8);
//	LCD_Write_COM_DATA(0x09,y2);
	LCD_Write_COM(0x22);      
	break;
вызов  UTFT myGLCD(0,38,39,40,41);  либо UTFT myGLCD(HX8347A,38,39,40,41); 
 
для справки замечу из PDF серии HX8347x соответствие контроллеров -
              регистр - ID  
HX8347A r67h   ID 0x47 
HX8347B r00h   ID 0x9325 (ID1 ID2 ID3 м.б. в rDAh rDBh rDCh - программируется в OTP режиме)
HX8347D r00h   ID 0x47
HX8347G r00h   ID 0x75
HX8347I   pdf бесплатный не найден . возможно ID 0x9595
дисплей разгадан и запущен:
Время теста UTFT в режимах 8бит -  45сек и 16бит - 40 сек. (при закомменте в setxy.h  // LCD_Write_COM_DATA(0x04,x2>>8); ещё немного быстрее, т.к. разрешение экрана не большое)
 
slider
Offline
Зарегистрирован: 17.06.2014
№14  
2,8"  320x240 дисплей Alcatel OT-890 OT-891,   ILI9338 ILI9338B , tft lcd 39pin , 4led  CTO28TN09 V.8 V.B
 
На этот дисплейчик больше всего дней ушло. распиновка кристалла таже (шина данных выводится попарно в шлейф) , но инит от hx8347d не хотел подходить. оказался ili9338 .  На 16бит запустился , на 8 нивкакую. Читалкой(без сбросов аппаратных и командных) потом смотрю после инита UTFT - параметры записывались с чередованием 0x00 . Помогла только UTFT_v2.77b2_uno_ili9327_8bit_turbo . Да и редкий контроллер оказался ili9338 ( ili9338b ) . его ID в регистре D3h   xx 00 xx 38  ( читалка выдает  register D3    00 00 93 38 38 38 38 38  * )
полный опрос  00-FF читалкой :
               1p 2p 3p 4p 5p 6p 7p 8parameter(byte)
      
register 00    00 00 00 00 00 00 00 00  *
      
register 00    00 00 00 00 00 00 00 00  *
register 01    00 00 00 00 00 00 00 00
register 02    00 00 00 00 00 00 00 00
register 03    00 00 00 00 00 00 00 00
register 04    00 54 80 66 00 00 00 00  *
register 05    00 00 00 00 00 00 00 00
register 06    00 00 00 00 00 00 00 00
register 07    00 00 00 00 00 00 00 00
register 08    00 00 00 00 00 00 00 00
register 09    00 00 61 00 00 00 00 00
register 0A    00 08 00 00 00 00 00 00
register 0B    00 00 00 00 00 00 00 00
register 0C    00 06 00 00 00 00 00 00
register 0D    00 00 00 00 00 00 00 00
register 0E    00 00 00 00 00 00 00 00
register 0F    00 00 00 00 00 00 00 00
register 10    00 00 00 00 00 00 00 00
register 11    00 00 00 00 00 00 00 00
register 12    00 00 00 00 00 00 00 00
register 13    00 00 00 00 00 00 00 00
register 14    00 00 00 00 00 00 00 00
register 15    00 00 00 00 00 00 00 00
register 16    00 00 00 00 00 00 00 00
register 17    00 00 00 00 00 00 00 00
register 18    00 00 00 00 00 00 00 00
register 19    00 00 00 00 00 00 00 00
register 1A    00 00 00 00 00 00 00 00
register 1B    00 00 00 00 00 00 00 00
register 1C    00 00 00 00 00 00 00 00
register 1D    00 00 00 00 00 00 00 00
register 1E    00 00 00 00 00 00 00 00
register 1F    00 00 00 00 00 00 00 00
register 20    00 00 00 00 00 00 00 00
register 21    00 00 00 00 00 00 00 00
register 22    00 00 00 00 00 00 00 00
register 23    00 00 00 00 00 00 00 00
register 24    00 00 00 00 00 00 00 00
register 25    00 00 00 00 00 00 00 00
register 26    00 00 00 00 00 00 00 00
register 27    00 00 00 00 00 00 00 00
register 28    00 00 00 00 00 00 00 00
register 29    00 00 00 00 00 00 00 00
register 2A    00 00 00 00 00 00 00 00
register 2B    00 00 00 00 00 00 00 00
register 2C    00 00 00 00 00 00 00 00
register 2D    00 00 00 00 00 00 00 00
register 2E    00 54 54 54 54 54 54 54
register 2F    00 00 00 00 00 00 00 00
register 30    00 00 00 00 00 00 00 00
register 31    00 00 00 00 00 00 00 00
register 32    00 00 00 00 00 00 00 00
register 33    00 00 00 00 00 00 00 00
register 34    00 00 00 00 00 00 00 00
register 35    00 00 00 00 00 00 00 00
register 36    00 00 00 00 00 00 00 00
register 37    00 00 00 00 00 00 00 00
register 38    00 00 00 00 00 00 00 00
register 39    00 00 00 00 00 00 00 00
register 3A    00 00 00 00 00 00 00 00
register 3B    00 00 00 00 00 00 00 00
register 3C    00 00 00 00 00 00 00 00
register 3D    00 00 00 00 00 00 00 00
register 3E    00 00 00 00 00 00 00 00
register 3F    00 00 00 00 00 00 00 00
register 40    00 00 00 00 00 00 00 00
register 41    00 00 00 00 00 00 00 00
register 42    00 00 00 00 00 00 00 00
register 43    00 00 00 00 00 00 00 00
register 44    00 00 00 00 00 00 00 00
register 45    00 00 00 00 00 00 00 00
register 46    00 00 00 00 00 00 00 00
register 47    00 00 00 00 00 00 00 00
register 48    00 00 00 00 00 00 00 00
register 49    00 00 00 00 00 00 00 00
register 4A    00 00 00 00 00 00 00 00
register 4B    00 00 00 00 00 00 00 00
register 4C    00 00 00 00 00 00 00 00
register 4D    00 00 00 00 00 00 00 00
register 4E    00 00 00 00 00 00 00 00
register 4F    00 00 00 00 00 00 00 00
register 50    00 00 00 00 00 00 00 00
register 51    00 00 00 00 00 00 00 00
register 52    00 00 00 00 00 00 00 00
register 53    00 00 00 00 00 00 00 00
register 54    00 00 00 00 00 00 00 00
register 55    00 00 00 00 00 00 00 00
register 56    00 00 00 00 00 00 00 00
register 57    00 00 00 00 00 00 00 00
register 58    00 00 00 00 00 00 00 00
register 59    00 00 00 00 00 00 00 00
register 5A    00 00 00 00 00 00 00 00
register 5B    00 00 00 00 00 00 00 00
register 5C    00 00 00 00 00 00 00 00
register 5D    00 00 00 00 00 00 00 00
register 5E    00 00 00 00 00 00 00 00
register 5F    00 00 00 00 00 00 00 00
register 60    00 00 00 00 00 00 00 00
register 61    00 00 00 00 00 00 00 00
register 62    00 00 00 00 00 00 00 00
register 63    00 00 00 00 00 00 00 00
register 64    00 00 00 00 00 00 00 00
register 65    00 00 00 00 00 00 00 00
register 66    00 00 00 00 00 00 00 00
register 67    00 00 00 00 00 00 00 00
register 68    00 00 00 00 00 00 00 00
register 69    00 00 00 00 00 00 00 00
register 6A    00 00 00 00 00 00 00 00
register 6B    00 00 00 00 00 00 00 00
register 6C    00 00 00 00 00 00 00 00
register 6D    00 00 00 00 00 00 00 00
register 6E    00 00 00 00 00 00 00 00
register 6F    00 00 00 00 00 00 00 00
register 70    00 00 00 00 00 00 00 00
register 71    00 00 00 00 00 00 00 00
register 72    00 00 00 00 00 00 00 00
register 73    00 00 00 00 00 00 00 00
register 74    00 00 00 00 00 00 00 00
register 75    00 00 00 00 00 00 00 00
register 76    00 00 00 00 00 00 00 00
register 77    00 00 00 00 00 00 00 00
register 78    00 00 00 00 00 00 00 00
register 79    00 00 00 00 00 00 00 00
register 7A    00 00 00 00 00 00 00 00
register 7B    00 00 00 00 00 00 00 00
register 7C    00 00 00 00 00 00 00 00
register 7D    00 00 00 00 00 00 00 00
register 7E    00 00 00 00 00 00 00 00
register 7F    00 00 00 00 00 00 00 00
register 80    00 00 00 00 00 00 00 00
register 81    00 00 00 00 00 00 00 00
register 82    00 00 00 00 00 00 00 00
register 83    00 00 00 00 00 00 00 00
register 84    00 00 00 00 00 00 00 00
register 85    00 00 00 00 00 00 00 00
register 86    00 00 00 00 00 00 00 00
register 87    00 00 00 00 00 00 00 00
register 88    00 00 00 00 00 00 00 00
register 89    00 00 00 00 00 00 00 00
register 8A    00 00 00 00 00 00 00 00
register 8B    00 00 00 00 00 00 00 00
register 8C    00 00 00 00 00 00 00 00
register 8D    00 00 00 00 00 00 00 00
register 8E    00 00 00 00 00 00 00 00
register 8F    00 00 00 00 00 00 00 00
register 90    00 00 00 00 00 00 00 00
register 91    00 00 00 00 00 00 00 00
register 92    00 00 00 00 00 00 00 00
register 93    00 00 00 00 00 00 00 00
register 94    00 00 00 00 00 00 00 00
register 95    00 00 00 00 00 00 00 00
register 96    00 00 00 00 00 00 00 00
register 97    00 00 00 00 00 00 00 00
register 98    00 00 00 00 00 00 00 00
register 99    00 00 00 00 00 00 00 00
register 9A    00 00 00 00 00 00 00 00
register 9B    00 00 00 00 00 00 00 00
register 9C    00 00 00 00 00 00 00 00
register 9D    00 00 00 00 00 00 00 00
register 9E    00 00 00 00 00 00 00 00
register 9F    00 00 00 00 00 00 00 00
register A0    00 00 00 00 00 00 00 00
register A1    00 00 00 00 00 00 00 00
register A2    00 00 00 00 00 00 00 00
register A3    00 00 00 00 00 00 00 00
register A4    00 00 00 00 00 00 00 00
register A5    00 00 00 00 00 00 00 00
register A6    00 00 00 00 00 00 00 00
register A7    00 00 00 00 00 00 00 00
register A8    00 00 00 00 00 00 00 00
register A9    00 00 00 00 00 00 00 00
register AA    00 00 00 00 00 00 00 00
register AB    00 00 00 00 00 00 00 00
register AC    00 00 00 00 00 00 00 00
register AD    00 00 00 00 00 00 00 00
register AE    00 00 00 00 00 00 00 00
register AF    00 00 00 00 00 00 00 00
register B0    00 00 00 00 00 00 00 00
register B1    00 00 10 10 10 10 10 10
register B2    00 00 10 10 10 10 10 10
register B3    00 00 10 10 10 10 10 10
register B4    00 02 00 00 00 00 00 00
register B5    00 02 02 0A 14 14 14 14
register B6    00 0A 02 27 27 27 27 27
register B7    00 06 06 06 06 06 06 06
register B8    00 89 11 7A 7A 7A 7A 7A
register B9    00 2C 9A 7A 7A 7A 7A 7A
register BA    00 00 00 00 00 00 00 00
register BB    00 00 00 00 00 00 00 00
register BC    00 00 00 00 00 00 00 00
register BD    00 00 00 00 00 00 00 00
register BE    00 00 00 00 00 00 00 00
register BF    00 00 00 00 00 00 00 00  *
register C0    00 26 01 01 01 01 01 01
register C1    00 10 10 10 10 10 10 10
register C2    00 32 32 32 32 32 32 32
register C3    00 32 32 32 32 32 32 32
register C4    00 32 32 32 32 32 32 32
register C5    00 16 28 28 28 28 28 28
register C6    00 00 00 00 00 00 00 00
register C7    00 40 40 40 40 40 40 40
register C8    00 00 00 00 00 00 00 00
register C9    00 15 C0 02 70 70 70 70
register CA    00 03 00 00 00 00 00 00
register CB    00 01 A4 00 6A 6A 6A 6A
register CC    00 39 0A 0A 0A 0A 0A 0A
register CD    00 07 07 07 07 07 07 07
register CE    00 10 70 70 70 70 70 70
register CF    00 00 00 00 00 00 00 00
register D0    00 00 00 00 00 00 00 00
register D1    00 00 00 00 00 00 00 00
register D2    00 00 00 00 00 00 00 00
register D3    00 00 93 38 38 38 38 38  *
register D4    00 00 00 00 00 00 00 00
register D5    00 00 00 00 00 00 00 00
register D6    00 00 00 00 00 00 00 00
register D7    00 00 00 00 00 00 00 00
register D8    00 00 00 00 00 00 00 00
register D9    00 00 00 00 00 00 00 00
register DA    00 54 00 00 00 00 00 00
register DB    00 80 00 00 00 00 00 00
register DC    00 66 00 00 00 00 00 00
register DD    00 00 00 00 00 00 00 00
register DE    00 04 04 04 04 04 04 04
register DF    00 FF 0F FF 0F FF 0F FF
register E0    00 0F 22 1B 05 0C 03 49
register E1    00 00 23 26 05 10 04 39
register E2    00 00 00 00 00 00 00 00
register E3    00 00 00 00 00 00 00 00
register E4    00 00 00 00 00 00 00 00
register E5    00 00 00 00 00 00 00 00
register E6    00 00 00 00 00 00 00 00
register E7    00 00 00 00 00 00 00 00
register E8    00 00 00 00 00 00 00 00
register E9    00 00 00 00 00 00 00 00
register EA    00 00 00 00 00 00 00 00
register EB    00 00 00 00 00 00 00 00
register EC    00 00 00 00 00 00 00 00
register ED    00 00 00 00 00 00 00 00
register EE    00 00 00 00 00 00 00 00
register EF    00 00 00 00 00 00 00 00  *
register F0    00 00 00 00 00 00 00 00
register F1    00 00 00 00 00 00 00 00
register F2    00 00 00 00 00 00 00 00
register F3    00 07 07 07 07 07 07 07
register F4    00 00 00 00 00 00 00 00
register F5    00 00 00 00 00 00 00 00
register F6    00 00 00 00 00 00 00 00
register F7    00 00 00 00 00 00 00 00
register F8    00 00 00 00 00 00 00 00
register F9    00 00 00 00 00 00 00 00
register FA    00 00 00 00 00 00 00 00
register FB    00 00 00 00 00 00 00 00
register FC    00 00 00 00 00 00 00 00
register FD    00 00 00 00 00 00 00 00
register FE    00 00 00 00 00 00 00 00
register FF    00 00 00 00 00 00 00 00

здесь видим характерные для больших дисплеев 0x80

register 04    00 54 80 66      ( 0x54 0x80 0x66 ) и 

register DA    00 54 00 00 00 00 00 00
register DB    00 80 00 00 00 00 00 00
register DC    00 66 00 00 00 00 00 00
но они оказались не имели отношения к ili9338 . Значащий ответ оказалсяв D3h  - 93 38
 
распиновка немного другая, 37пин VCC , а не GND :
GND
A
K1
K2
K3
K4
GND
VCC
VCC
GND
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DB8
DB9
DB10
DB11
DB12
DB13
DB14
DB15
DB16
DB17
GND
RD
WR
DC
CS
nc (выход чего-то: te или pwm_out)
RESET
GND
VCC
IM3
IM0

инит и даташит толком небыло в инете

init code ili9338 ili9338b переписанный с PDF , уже переделал в формат UTFT, для файла initlcd.h

LCD_Write_COM(0x11);
delay(100);
LCD_Write_COM(0x13);

	    LCD_Write_COM(0xCB);
	    LCD_Write_DATA(0x01);
	
	    LCD_Write_COM(0xC0);
	     LCD_Write_DATA(0x26);
	     LCD_Write_DATA(0x01);

	    LCD_Write_COM(0xC1);
	     LCD_Write_DATA(0x10);

	    LCD_Write_COM(0xC5);
	    LCD_Write_DATA(0x16);
	    LCD_Write_DATA(0x28);
	
	    LCD_Write_COM(0x26);
	    LCD_Write_DATA(0x01);

	    LCD_Write_COM(0xE0);
	    LCD_Write_DATA(0x0F);
	    LCD_Write_DATA(0x22);
	    LCD_Write_DATA(0x1B);
	    LCD_Write_DATA(0x01);
	    LCD_Write_DATA(0x08);
	    LCD_Write_DATA(0x01);
	    LCD_Write_DATA(0x49);
	    LCD_Write_DATA(0x41);
	    LCD_Write_DATA(0x3D);
	    LCD_Write_DATA(0x01);
	    LCD_Write_DATA(0x17);
	    LCD_Write_DATA(0x04);
	    LCD_Write_DATA(0x13);
	    LCD_Write_DATA(0x0E);
	    LCD_Write_DATA(0x00);

	    LCD_Write_COM(0xE1);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x23);
	    LCD_Write_DATA(0x22);
	    LCD_Write_DATA(0x05);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x39);
	    LCD_Write_DATA(0x20);
	    LCD_Write_DATA(0x49);
	    LCD_Write_DATA(0x03);
	    LCD_Write_DATA(0x0B);
	    LCD_Write_DATA(0x0B);
	    LCD_Write_DATA(0x33);
	    LCD_Write_DATA(0x37);
	    LCD_Write_DATA(0x0F);
	
	    LCD_Write_COM(0x29);
delay(50);

	    LCD_Write_COM(0x2A);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0xEF);
	
	    LCD_Write_COM(0x2B);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x00);
	    LCD_Write_DATA(0x01);
	    LCD_Write_DATA(0x3F);
	

	    LCD_Write_COM(0x36);
	    LCD_Write_DATA(0x08);  //e8
	
	    LCD_Write_COM(0x3A);
	    LCD_Write_DATA(0x06);  //05

LCD_Write_COM(0x2C); //memory write

setxy.h

	LCD_Write_COM(0x2A); //column
	LCD_Write_DATA(x1>>8);
	LCD_Write_DATA(x1);
	LCD_Write_DATA(x2>>8);
	LCD_Write_DATA(x2);
	LCD_Write_COM(0x2B); //page
	LCD_Write_DATA(y1>>8);
	LCD_Write_DATA(y1);
	LCD_Write_DATA(y2>>8);
	LCD_Write_DATA(y2);
	LCD_Write_COM(0x2C); //write

вот еще один  инит: 

diff --git a/drivers/video/jz4740_slcd_panels.c b/drivers/video/jz4740_slcd_panels.c
index a42a54b..c48e4fa 100644
--- a/drivers/video/jz4740_slcd_panels.c
+++ b/drivers/video/jz4740_slcd_panels.c
@@ -367,24 +367,24 @@ static void ili9338_enable(struct jzfb *jzfb)
 	gpio_set_value(ILI9338_GPIO_CS_N, 0);
 
 	/* Black magic */
-	send_panel_command(jzfb, 0x11);
+	send_panel_command(jzfb, 0x11); //sleepout
 	mdelay(100);
 
-	send_panel_command(jzfb, 0xCB);
+	send_panel_command(jzfb, 0xCB); //nvram (write?)
 	send_panel_data(jzfb, 0x01);
 
-	send_panel_command(jzfb, 0xC0);
+	send_panel_command(jzfb, 0xC0); //power ctrl 1
 	send_panel_data(jzfb, 0x26);
 	send_panel_data(jzfb, 0x01);
-	send_panel_command(jzfb, 0xC1);
+	send_panel_command(jzfb, 0xC1); //power ctrl 2
 	send_panel_data(jzfb, 0x10);
-	send_panel_command(jzfb, 0xC5);
+	send_panel_command(jzfb, 0xC5); //VCOM ctrl 1
 	send_panel_data(jzfb, 0x10);
 	send_panel_data(jzfb, 0x52);
 
-	send_panel_command(jzfb, 0x26);
-	send_panel_data(jzfb, 0x01);
-	send_panel_command(jzfb, 0xE0);
+	send_panel_command(jzfb, 0x26); //gamma set
+	send_panel_data(jzfb, 0x01); //first gamma curve loaded
+	send_panel_command(jzfb, 0xE0); //positive gamma correction
 	send_panel_data(jzfb, 0x10);
 	send_panel_data(jzfb, 0x10);
 	send_panel_data(jzfb, 0x10);
@@ -400,7 +400,7 @@ static void ili9338_enable(struct jzfb *jzfb)
 	send_panel_data(jzfb, 0x13);
 	send_panel_data(jzfb, 0x0E);
 	send_panel_data(jzfb, 0x0C);
-	send_panel_command(jzfb, 0XE1);
+	send_panel_command(jzfb, 0XE1); //negative gamma correction
 	send_panel_data(jzfb, 0x0C);
 	send_panel_data(jzfb, 0x23);
 	send_panel_data(jzfb, 0x26);
@@ -417,27 +417,157 @@ static void ili9338_enable(struct jzfb *jzfb)
 	send_panel_data(jzfb, 0x37);
 	send_panel_data(jzfb, 0x0F);
 
-	send_panel_command(jzfb, 0x2a);
+	send_panel_command(jzfb, 0x2a); //caset (column address set)
 	send_panel_data(jzfb, 0x00);
 	send_panel_data(jzfb, 0x00);
 	send_panel_data(jzfb, 0x01);
 	send_panel_data(jzfb, 0x3f);
 
-	send_panel_command(jzfb, 0x2b);
+	send_panel_command(jzfb, 0x2b); //paset (page address set)
 	send_panel_data(jzfb, 0x00);
 	send_panel_data(jzfb, 0x00);
 	send_panel_data(jzfb, 0x00);
 	send_panel_data(jzfb, 0xef);
 
-	send_panel_command(jzfb, 0x36);
+	send_panel_command(jzfb, 0x36); //MADCTL
 	send_panel_data(jzfb, 0xe8);
 
-	send_panel_command(jzfb, 0x3A);
+	send_panel_command(jzfb, 0x3A); //pixel format set
 	send_panel_data(jzfb, 0x05);
 
-	send_panel_command(jzfb, 0x29);
+	send_panel_command(jzfb, 0x2D); //color set
+	send_panel_data(jzfb, 0x00); //R 0 (5 bit->6 bit)
+	send_panel_data(jzfb, 0x02);
+	send_panel_data(jzfb, 0x04);
+	send_panel_data(jzfb, 0x06);
+	send_panel_data(jzfb, 0x08);
+	send_panel_data(jzfb, 0x0A);
+	send_panel_data(jzfb, 0x0C);
+	send_panel_data(jzfb, 0x0E);
+	send_panel_data(jzfb, 0x10);
+	send_panel_data(jzfb, 0x12);
+	send_panel_data(jzfb, 0x14);
+	send_panel_data(jzfb, 0x16);
+	send_panel_data(jzfb, 0x18);
+	send_panel_data(jzfb, 0x1A);
+	send_panel_data(jzfb, 0x1C);
+	send_panel_data(jzfb, 0x1E);
+	send_panel_data(jzfb, 0x20);
+	send_panel_data(jzfb, 0x22);
+	send_panel_data(jzfb, 0x24);
+	send_panel_data(jzfb, 0x26);
+	send_panel_data(jzfb, 0x28);
+	send_panel_data(jzfb, 0x2A);
+	send_panel_data(jzfb, 0x2C);
+	send_panel_data(jzfb, 0x2E);
+	send_panel_data(jzfb, 0x30);
+	send_panel_data(jzfb, 0x32);
+	send_panel_data(jzfb, 0x34);
+	send_panel_data(jzfb, 0x36);
+	send_panel_data(jzfb, 0x38);
+	send_panel_data(jzfb, 0x3A);
+	send_panel_data(jzfb, 0x3C);
+	send_panel_data(jzfb, 0x3E); //R 31
+	send_panel_data(jzfb, 0x00); //G 0 (6 bit-> 6 bit)
+	send_panel_data(jzfb, 0x01);
+	send_panel_data(jzfb, 0x02);
+	send_panel_data(jzfb, 0x03);
+	send_panel_data(jzfb, 0x04);
+	send_panel_data(jzfb, 0x05);
+	send_panel_data(jzfb, 0x06);
+	send_panel_data(jzfb, 0x07);
+	send_panel_data(jzfb, 0x08);
+	send_panel_data(jzfb, 0x09);
+	send_panel_data(jzfb, 0x0A);
+	send_panel_data(jzfb, 0x0B);
+	send_panel_data(jzfb, 0x0C);
+	send_panel_data(jzfb, 0x0D);
+	send_panel_data(jzfb, 0x0E);
+	send_panel_data(jzfb, 0x0F);
+	send_panel_data(jzfb, 0x10);
+	send_panel_data(jzfb, 0x11);
+	send_panel_data(jzfb, 0x12);
+	send_panel_data(jzfb, 0x13);
+	send_panel_data(jzfb, 0x14);
+	send_panel_data(jzfb, 0x15);
+	send_panel_data(jzfb, 0x16);
+	send_panel_data(jzfb, 0x17);
+	send_panel_data(jzfb, 0x18);
+	send_panel_data(jzfb, 0x19);
+	send_panel_data(jzfb, 0x1A);
+	send_panel_data(jzfb, 0x1B);
+	send_panel_data(jzfb, 0x1C);
+	send_panel_data(jzfb, 0x1D);
+	send_panel_data(jzfb, 0x1E);
+	send_panel_data(jzfb, 0x1F);
+	send_panel_data(jzfb, 0x20);
+	send_panel_data(jzfb, 0x21);
+	send_panel_data(jzfb, 0x22);
+	send_panel_data(jzfb, 0x23);
+	send_panel_data(jzfb, 0x24);
+	send_panel_data(jzfb, 0x25);
+	send_panel_data(jzfb, 0x26);
+	send_panel_data(jzfb, 0x27);
+	send_panel_data(jzfb, 0x28);
+	send_panel_data(jzfb, 0x29);
+	send_panel_data(jzfb, 0x2A);
+	send_panel_data(jzfb, 0x2B);
+	send_panel_data(jzfb, 0x2C);
+	send_panel_data(jzfb, 0x2D);
+	send_panel_data(jzfb, 0x2E);
+	send_panel_data(jzfb, 0x2F);
+	send_panel_data(jzfb, 0x30);
+	send_panel_data(jzfb, 0x31);
+	send_panel_data(jzfb, 0x32);
+	send_panel_data(jzfb, 0x33);
+	send_panel_data(jzfb, 0x34);
+	send_panel_data(jzfb, 0x35);
+	send_panel_data(jzfb, 0x36);
+	send_panel_data(jzfb, 0x37);
+	send_panel_data(jzfb, 0x38);
+	send_panel_data(jzfb, 0x39);
+	send_panel_data(jzfb, 0x3A);
+	send_panel_data(jzfb, 0x3B);
+	send_panel_data(jzfb, 0x3C);
+	send_panel_data(jzfb, 0x3D);
+	send_panel_data(jzfb, 0x3E);
+	send_panel_data(jzfb, 0x3F); //G 63
+	send_panel_data(jzfb, 0x00); //B 0 (5 bit->6 bit)
+	send_panel_data(jzfb, 0x01);
+	send_panel_data(jzfb, 0x03);
+	send_panel_data(jzfb, 0x04);
+	send_panel_data(jzfb, 0x06);
+	send_panel_data(jzfb, 0x07);
+	send_panel_data(jzfb, 0x09);
+	send_panel_data(jzfb, 0x0A);
+	send_panel_data(jzfb, 0x0C);
+	send_panel_data(jzfb, 0x0D);
+	send_panel_data(jzfb, 0x0F);
+	send_panel_data(jzfb, 0x10);
+	send_panel_data(jzfb, 0x12);
+	send_panel_data(jzfb, 0x13);
+	send_panel_data(jzfb, 0x15);
+	send_panel_data(jzfb, 0x16);
+	send_panel_data(jzfb, 0x18);
+	send_panel_data(jzfb, 0x19);
+	send_panel_data(jzfb, 0x1B);
+	send_panel_data(jzfb, 0x1C);
+	send_panel_data(jzfb, 0x1E);
+	send_panel_data(jzfb, 0x1F);
+	send_panel_data(jzfb, 0x21);
+	send_panel_data(jzfb, 0x22);
+	send_panel_data(jzfb, 0x24);
+	send_panel_data(jzfb, 0x25);
+	send_panel_data(jzfb, 0x27);
+	send_panel_data(jzfb, 0x28);
+	send_panel_data(jzfb, 0x2A);
+	send_panel_data(jzfb, 0x2B);
+	send_panel_data(jzfb, 0x2D);
+	send_panel_data(jzfb, 0x2E); //b 31
+
+	send_panel_command(jzfb, 0x29); //display on
 
-	send_panel_command(jzfb, 0x2c);
+	send_panel_command(jzfb, 0x2c); //memory write
 }
 
 /* TODO(IGP): make sure LCD power consumption is low in these conditions */

но самый короткий инит получился:

LCD_Write_COM(0x11);// обязательно
delay(100);

 //LCD_Write_COM(0x13);

    LCD_Write_COM(0x3A);  //  Pixel Format Set
    LCD_Write_DATA(0x05);  //0x05-65k color565

	 LCD_Write_COM(0x36);  // Memory Acces Control 
	 LCD_Write_DATA(0x48);  //e8-orig ,  48-ili9327 16bit! ,

LCD_Write_COM(0x29); // обязательно

LCD_Write_COM(0x2C); // обязательно

Вот архив , где собрал datasheet ili9338 ( ili9338b ) , hx8347d  , hx8347a hx8347b hx8347g ili9335 ili9340 ili9342 , подготовленные UTFT для 16 и 8 битного режимов.

https://yadi.sk/d/7eSf9jMXqsFuX

эти экраны, как и все остальные, ещё есть в магазинах в разных городах по смешным 50руб ценам.

на здоровье :) . благодарение принимается :)

 

//не отвечать, не цитировать, инфу буду дополнять по мере свободного времени