реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LCD + stm32f4 discovery
Utyff
сообщение Jan 10 2017, 11:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



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

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

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?


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 10 2017, 12:36
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



А зачем светодиоды выпаял и USB ?
У меня и так все заработало.

Я тоже такой покупал примерно 3 года назад, там был SSD1289
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 10 2017, 12:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 214
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



В ugfx есть оба дисплея
Go to the top of the page
 
+Quote Post
Utyff
сообщение Jan 10 2017, 13:35
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



Цитата(kumle @ Jan 10 2017, 15:36) *
А зачем светодиоды выпаял и USB ?


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

Цитата(uriy @ Jan 10 2017, 15:45) *
В 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.
У меня оба регистра возвращают не то что нужно.. Значит проблема в другом..


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 10 2017, 14:04
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



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

Я посмотрю что у меня возвращает, правда дома буду только завтра вечером
А инициализация из тех источников что ты указал у меня тоже не заработала )
Я там менял и тайминги и этот кусок где много writereg вначале, там тоже кстати тайминги между writereg увеличивал
Давно это было уже. Код тоже дома на ноуте, но у меня все работает.


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

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



Сообщение отредактировал kumle - Jan 10 2017, 14:06
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Jan 10 2017, 19:25
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Я вот тоже однажды долго ковырялся с одним экраном, с подключением через параллельный интерфейс, все найденные инициализации перепробовал, в итоге, когда стал в отладчике проверять, что же у меня на шину идёт, выловил соплю между двумя линиями шины. Убрал - и заработало sm.gif
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 11 2017, 18:36
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



вобщем у меня возвращает id=0 !
но тем не менее все работает
вот моя инициализация (весь файл прикрепить форум не дает)
CODE
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 - Jan 11 2017, 18:40
Go to the top of the page
 
+Quote Post
Utyff
сообщение Jan 11 2017, 20:09
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



Цитата(kumle @ Jan 11 2017, 21:36) *
вобщем у меня возвращает id=0 !


Попробуй читать ID после первой записи в рег 00
-------
LCD_WriteReg(0x0000,0x0001); Delay(100);
DeviceCode = LCD_ReadReg(0x0000);
-------

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


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 12 2017, 09:59
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



CODE
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);


}



CODE
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); Она включает шим на половинную яркость подсветки
Go to the top of the page
 
+Quote Post
Utyff
сообщение Jan 12 2017, 10:54
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



Цитата(kumle @ Jan 12 2017, 12:59) *
А подсветка то у тебя включается ?

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


Подсветка - это просто светодиод.
Светодиодный "Hello World!" через ШИМ - это не проблема sm.gif

Про определение 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

Там же есть пример с определением и инициализацией разных дисплеев.
Доверия не внушает, но может кому-то поможет.


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 12 2017, 22:09
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Цитата(Utyff @ Jan 11 2017, 23:09) *
Попробуй читать ID после первой записи в рег 00


попробовал, все рано нули считывает
Go to the top of the page
 
+Quote Post
Utyff
сообщение Jan 13 2017, 08:20
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



Цитата(kumle @ Jan 13 2017, 01:09) *
попробовал, все рано нули считывает


В документации на ssd1289 на стр. 72, я нашел "DISPLAY SETTING SEQUENCE". Тут пример есть
И эта последовательность отличается от твоей sm.gif
Чудеса с этими контролерами..


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post
kumle
сообщение Jan 15 2017, 13:52
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Цитата(Utyff @ Jan 13 2017, 11:20) *
И эта последовательность отличается от твоей sm.gif


Это не совсем моя последовательность, я покупал дисплей через ebay и продавец там прикрепил эту инициализацию,
они же заинтересованы чтобы у людей все работало.
Я ее просто немного изменил.
Go to the top of the page
 
+Quote Post
Utyff
сообщение Jan 16 2017, 10:50
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 29-12-13
Из: Moscow
Пользователь №: 79 852



китайцы много интересного пишут.
Про работу с LCD нашел тут и тут


--------------------
Скудность мысли порождает легионы единомышленников.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th March 2017 - 10:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016