Utyff 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Как можно определить тип контроллера в 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба А зачем светодиоды выпаял и USB ? У меня и так все заработало. Я тоже такой покупал примерно 3 года назад, там был SSD1289 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 4 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба В ugfx есть оба дисплея Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Utyff 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба А зачем светодиоды выпаял и 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. У меня оба регистра возвращают не то что нужно.. Значит проблема в другом.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 10 января, 2017 Опубликовано 10 января, 2017 (изменено) · Жалоба Мне кажется что у тебя всетаки SSD1289 Я посмотрю что у меня возвращает, правда дома буду только завтра вечером А инициализация из тех источников что ты указал у меня тоже не заработала ) Я там менял и тайминги и этот кусок где много writereg вначале, там тоже кстати тайминги между writereg увеличивал Давно это было уже. Код тоже дома на ноуте, но у меня все работает. Еще с проводами засада была. Вначале подключил шлейфом около 5-и сантиметров, но работало через раз потом этот шлейф распушил по одному проводку и заработало стабильно. Вобщем тоже долго мучался ) Изменено 10 января, 2017 пользователем kumle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 10 января, 2017 Опубликовано 10 января, 2017 · Жалоба Я вот тоже однажды долго ковырялся с одним экраном, с подключением через параллельный интерфейс, все найденные инициализации перепробовал, в итоге, когда стал в отладчике проверять, что же у меня на шину идёт, выловил соплю между двумя линиями шины. Убрал - и заработало :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 11 января, 2017 Опубликовано 11 января, 2017 (изменено) · Жалоба вобщем у меня возвращает 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) Изменено 11 января, 2017 пользователем kumle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Utyff 0 11 января, 2017 Опубликовано 11 января, 2017 · Жалоба вобщем у меня возвращает id=0 ! Попробуй читать ID после первой записи в рег 00 ------- LCD_WriteReg(0x0000,0x0001); Delay(100); DeviceCode = LCD_ReadReg(0x0000); ------- У меня LCD не заработал. Пришли еще функции: LCD_CtrlLinesConfig(); LCD_FSMCConfig(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба 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); Она включает шим на половинную яркость подсветки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Utyff 0 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба А подсветка то у тебя включается ? У меня в основном модуле еще после инициализации есть строка 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 Там же есть пример с определением и инициализацией разных дисплеев. Доверия не внушает, но может кому-то поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 12 января, 2017 Опубликовано 12 января, 2017 · Жалоба Попробуй читать ID после первой записи в рег 00 попробовал, все рано нули считывает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Utyff 0 13 января, 2017 Опубликовано 13 января, 2017 · Жалоба попробовал, все рано нули считывает В документации на ssd1289 на стр. 72, я нашел "DISPLAY SETTING SEQUENCE". Тут пример есть И эта последовательность отличается от твоей :) Чудеса с этими контролерами.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kumle 0 15 января, 2017 Опубликовано 15 января, 2017 · Жалоба И эта последовательность отличается от твоей :) Это не совсем моя последовательность, я покупал дисплей через ebay и продавец там прикрепил эту инициализацию, они же заинтересованы чтобы у людей все работало. Я ее просто немного изменил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Utyff 0 16 января, 2017 Опубликовано 16 января, 2017 · Жалоба китайцы много интересного пишут. Про работу с LCD нашел тут и тут Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться