Перейти к содержанию
    

LCD + stm32f4 discovery

Как можно определить тип контроллера в LCD?

 

Когда-то давно прикупил себе такой LCD:

845110928_786.jpg

Model Number: TK1105# 2.4" TFT LCD Module Display + Touch Panel Screen

Driver IC: SSD1289 (Note: The old Version <Come with HX8347 Controller> will be out of manufacture)

 

Сейчас не могу запустить этот дисплей. После инициализации экран чистый, даже не мигает.

Есть подозрение что контроллер не SSD1289. Но как это проверить?

Нашел что: SSD1289 должен вернуть 8989h из регистра 00h, а HX8347 возвращает 47h из регистра 67h.

Проверил оба регистра - возвращают не то.

 

Запускаю на stm32f4 discovery, светодиоды выпаял, линию от USB PWR fault отключил.

Подключен к FSMC 16bit. Провода по 10 см.

Примеры брал от сюда:

https://hubstub.ru/display/61-podklyuchenie...89-ili9341.html

https://www.element14.com/community/groups/...y-hy32d-tft-lcd

 

И еще - можете подсказать пример инициализации HX8347?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем светодиоды выпаял и USB ?

У меня и так все заработало.

 

Я тоже такой покупал примерно 3 года назад, там был SSD1289

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем светодиоды выпаял и USB ?

 

Уже неделю вожусь. Все пробовал.

 

В ugfx есть оба дисплея

Спасибо за идею.

Нашел нужный код. Теперь оказалось есть два контроллера HX8347-A и HX8347-D

https://www.rockbox.org/wiki/pub/Main/Irive..._v02_090324.pdf

http://www.displayfuture.com/Display/datas...ller/HX8347.pdf

 

И они отличаются. У HX8347-D id-контроллера хранится в 00h регистре, а у HX8347-A в регистре 67h.

У меня оба регистра возвращают не то что нужно.. Значит проблема в другом..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется что у тебя всетаки SSD1289

 

Я посмотрю что у меня возвращает, правда дома буду только завтра вечером

А инициализация из тех источников что ты указал у меня тоже не заработала )

Я там менял и тайминги и этот кусок где много writereg вначале, там тоже кстати тайминги между writereg увеличивал

Давно это было уже. Код тоже дома на ноуте, но у меня все работает.

 

 

Еще с проводами засада была. Вначале подключил шлейфом около 5-и сантиметров, но работало через раз

потом этот шлейф распушил по одному проводку и заработало стабильно.

 

Вобщем тоже долго мучался )

 

 

Изменено пользователем kumle

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вот тоже однажды долго ковырялся с одним экраном, с подключением через параллельный интерфейс, все найденные инициализации перепробовал, в итоге, когда стал в отладчике проверять, что же у меня на шину идёт, выловил соплю между двумя линиями шины. Убрал - и заработало :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобщем у меня возвращает id=0 !

но тем не менее все работает

вот моя инициализация (весь файл прикрепить форум не дает)

void LCD_Init(void)
{ 
 static uint16_t DeviceCode;
 LCD_CtrlLinesConfig(); 
 Delay(3000);
 LCD_FSMCConfig();
 Delay(3000);
 TIM_Config();
 LCD_BackLight(0);

 LCD_Reset();


 DeviceCode = LCD_ReadReg(0x0000);

 asm("NOP");
 asm("NOP");
 asm("NOP");

   LCD_WriteReg(0x0000,0x0001);    Delay(100); 
   LCD_WriteReg(0x0003,0xA8A4);    Delay(100);  
   LCD_WriteReg(0x000C,0x0000);    Delay(100);   
   LCD_WriteReg(0x000D,0x080C);    Delay(100);   
   LCD_WriteReg(0x000E,0x2B00);    Delay(100);   
   LCD_WriteReg(0x001E,0x00B0);    Delay(100);   
   LCD_WriteReg(0x0001,0x2B3F);    Delay(100);   
   LCD_WriteReg(0x0002,0x0600);    Delay(100);
   LCD_WriteReg(0x0010,0x0000);    Delay(100);
   LCD_WriteReg(0x0011,0x6070);    Delay(100);            
   LCD_WriteReg(0x0005,0x0000);    Delay(100);
   LCD_WriteReg(0x0006,0x0000);    Delay(100);
   LCD_WriteReg(0x0016,0xEF1C);    Delay(100);
   LCD_WriteReg(0x0017,0x0003);    Delay(100);
   LCD_WriteReg(0x0007,0x0233);    Delay(100);            
   LCD_WriteReg(0x000B,0x0000);    Delay(100);
   LCD_WriteReg(0x000F,0x0000);    Delay(100);      
   LCD_WriteReg(0x0041,0x0000);    Delay(100);
   LCD_WriteReg(0x0042,0x0000);    Delay(100);
   LCD_WriteReg(0x0048,0x0000);    Delay(100);
   LCD_WriteReg(0x0049,0x013F);    Delay(100);
   LCD_WriteReg(0x004A,0x0000);    Delay(100);
   LCD_WriteReg(0x004B,0x0000);    Delay(100);
   LCD_WriteReg(0x0044,0xEF00);    Delay(100);
   LCD_WriteReg(0x0045,0x0000);    Delay(100);
   LCD_WriteReg(0x0046,0x013F);    Delay(100);
   LCD_WriteReg(0x0030,0x0707);    Delay(100);
   LCD_WriteReg(0x0031,0x0204);    Delay(100);
   LCD_WriteReg(0x0032,0x0204);    Delay(100);
   LCD_WriteReg(0x0033,0x0502);    Delay(100);
   LCD_WriteReg(0x0034,0x0507);    Delay(100);
   LCD_WriteReg(0x0035,0x0204);    Delay(100);
   LCD_WriteReg(0x0036,0x0204);    Delay(100);
   LCD_WriteReg(0x0037,0x0502);    Delay(100);
   LCD_WriteReg(0x003A,0x0302);    Delay(100);
   LCD_WriteReg(0x003B,0x0302);    Delay(100);
   LCD_WriteReg(0x0023,0x0000);    Delay(100);
   LCD_WriteReg(0x0024,0x0000);    Delay(100);
   LCD_WriteReg(0x0025,0x8000);    Delay(100);
   LCD_WriteReg(0x004f,0);       
   LCD_WriteReg(0x004e,0); 

   Delay(100);

}

 

 

и у меня еще вывод RESET дисплея подтянут к +3.3V 1ком и подключен к PD12, вывод TP_IRQ к PC1 и вывод BL_CNTL подключен к пину PA8 (TIM1_CH1_PWM)

Изменено пользователем kumle

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобщем у меня возвращает id=0 !

 

Попробуй читать ID после первой записи в рег 00

-------

LCD_WriteReg(0x0000,0x0001); Delay(100);

DeviceCode = LCD_ReadReg(0x0000);

-------

 

У меня LCD не заработал. Пришли еще функции:

LCD_CtrlLinesConfig();

LCD_FSMCConfig();

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

void LCD_CtrlLinesConfig(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOG | 
					   RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, 
					   ENABLE);

 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //sasha

 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);

 GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);		// D2
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);		// D3
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);		// NOE -> RD
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);		// NWE -> WR
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);		// NE1 -> CS
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);		// D13
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);		// D14
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);		// D15
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);		// A16 -> RS
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);		// D0
 GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);		// D1

 GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FSMC);		// D4
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FSMC);		// D5
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FSMC);		// D6
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC);		// D7
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC);		// D8
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC);		// D9
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC);		// D10
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC);		// D11
 GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC);		// D12

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
                                 GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                 GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 //GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
 GPIO_Init(GPIOD, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                 GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
                                 GPIO_Pin_15;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 //GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

 GPIO_Init(GPIOE, &GPIO_InitStructure);

 //for RESET HY32D
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOD, &GPIO_InitStructure);


}

 

 

void LCD_FSMCConfig(void)
{
 FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
 FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
 FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0;  //0
 FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;   //0   
 FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 2;     //3   
 FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
 FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1
 FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
 FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;

 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Enable;//disable
 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;

 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
 FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 0;    //0  
 FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;	//0   
 FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 4;	//3   
 FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
 FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 1;//1
 FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
 FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;	
 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}

 

Платка дома, вечером попробую изменить и считать еще раз ID

 

А подсветка то у тебя включается ?

 

У меня в основном модуле еще после инициализации есть строка

LCD_BackLight(50); Она включает шим на половинную яркость подсветки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А подсветка то у тебя включается ?

 

У меня в основном модуле еще после инициализации есть строка

LCD_BackLight(50); Она включает шим на половинную яркость подсветки

 

Подсветка - это просто светодиод.

Светодиодный "Hello World!" через ШИМ - это не проблема :)

 

Про определение ID контроллера я нашел интересную статью - http://elty.pl/pl/n/3

 

Most controllers LCD displays allows you to read the Product ID (DeviceCode) is a number that specifies what type of controller is used to operate the display. Product ID's address 0x00.

What this gives us? We can write a program so that it is universal - ie. Read the code of the controller display and, depending on the code accordingly initiates service.

 

Codes of typical controllers:

 

Device code Controller display

0x9320 ILI9320

0x9325 ILI9325

0x9328 ILI9328

0x9331 ILI9331

0x8999 SSD1298

0x8989 SSD1289 ITDB02-3.2S, HY32D

0x7783 ST7781

0x4531 LGDP4531

0x5408 SPFD5408B

0x1505 0x0505 R61505U

0x0046 HX8346A

0x0047 HX8347D

0x0047 HX8347A

0x4535 LGDP4535

0x9919 SSD2119

0x0052 HX8352-A ITDB02-3.2WD

0x1121 S1D19122 ITDB02-2.4E

Там же есть пример с определением и инициализацией разных дисплеев.

Доверия не внушает, но может кому-то поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй читать ID после первой записи в рег 00

 

попробовал, все рано нули считывает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробовал, все рано нули считывает

 

В документации на ssd1289 на стр. 72, я нашел "DISPLAY SETTING SEQUENCE". Тут пример есть

И эта последовательность отличается от твоей :)

Чудеса с этими контролерами..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И эта последовательность отличается от твоей :)

 

Это не совсем моя последовательность, я покупал дисплей через ebay и продавец там прикрепил эту инициализацию,

они же заинтересованы чтобы у людей все работало.

Я ее просто немного изменил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...