hd44780 0 4 мая, 2016 Опубликовано 4 мая, 2016 · Жалоба Приветствую всех. Подключаю дисплей (ДШ приложил) 800x480 к LTDC. Проц - F439IIT6, LQFP176, дисплей подключен по полной схеме RGB888 +4 сигнала (HSYNC, VSYNC, DE, DCLK). На основе примеров написал прошивку (приложил) - просто инициализирует LTDC и всё. Но пока дальше невнятных полосок на экране ничего не увидел. Полоски напоминают советский телек со сбитыми частотой кадров и всем остальным. Если забить фреймбуфер нулями (чёрный цвет) - полоски исчезают (что вполне естественно), но вверху и внизу мигают и бегают светлые строки. Буфер лежит в SDRAM. Сам SDRAM проверен миллион раз - STemWin с буфером 2 МБ в SDRAM + SSD1963 - работает великолепно. Посмотрите, пожалуйста, кто может. Хотя после откровенной неправды в ДШ насчёт напряжения подсветки (указано 9.9в, оказалось 18-19в), я вообще сильно сомневаюсь в его корректности. Спасибо. F439_SDRAM_LTDC.zip LCD_Datasheet.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hiehachi 0 5 мая, 2016 Опубликовано 5 мая, 2016 (изменено) · Жалоба Делал для 800x600 в палитровом режиме 8-бит цвет, фреймбуфер на внешнюю SDRAM указывает, дисплей аналогичный по интерфейсу, процессор 429 . Посмотри может Ты чего пропустил, код инициализации рабочий. void LCD_Config(void) { LTDC_InitTypeDef LTDC_InitStruct; LTDC_Layer_InitTypeDef LTDC_Layer_InitStruct; RCC_PLLSAICmd (DISABLE); RCC_PLLSAIConfig(320, 7, 2); RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4); RCC_PLLSAICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET) { } RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE); InitTFTPinout(); LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL; LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL; LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL; LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC; LTDC_InitStruct.LTDC_HorizontalSync = 40; LTDC_InitStruct.LTDC_VerticalSync = 20; LTDC_InitStruct.LTDC_AccumulatedHBP = 46; LTDC_InitStruct.LTDC_AccumulatedVBP = 23; LTDC_InitStruct.LTDC_AccumulatedActiveW = 1056; LTDC_InitStruct.LTDC_AccumulatedActiveH = 635; LTDC_InitStruct.LTDC_TotalWidth = 1058; LTDC_InitStruct.LTDC_TotalHeigh = 637; LTDC_InitStruct.LTDC_BackgroundRedValue = 0; LTDC_InitStruct.LTDC_BackgroundGreenValue = 0; LTDC_InitStruct.LTDC_BackgroundBlueValue = 0; LTDC_Init(<DC_InitStruct); LTDC_Layer_InitStruct.LTDC_HorizontalStart = 46; LTDC_Layer_InitStruct.LTDC_HorizontalStop = (800 + 45); LTDC_Layer_InitStruct.LTDC_VerticalStart = 23; LTDC_Layer_InitStruct.LTDC_VerticalStop = (600 + 22); LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_L8;//LTDC_Pixelformat_AL44;//LTDC_Pixelformat_ARGB4444; LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255; LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA; LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA; LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0; LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0; LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0; LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0; //LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (uint32_t)&L8BIT; LTDC_Layer_InitStruct.LTDC_CFBStartAdress = VideoAdress; //FillMems (&L8BIT[0],10000,80); //FillMems (&L8BIT[10000],10000,20); //FillMems (&L8BIT[20000],10000,50); //FillMems (&L8BIT[30000],10000,70); //FillMems ((unsigned char*)VideoAdress,10000,80); //FillMems ((unsigned char*)(VideoAdress+10000),10000,20); //FillMems ((unsigned char*)(VideoAdress+20000),10000,50); //FillMems ((unsigned char*)(VideoAdress+30000),10000,70); LTDC_Layer_InitStruct.LTDC_CFBLineLength = (803); LTDC_Layer_InitStruct.LTDC_CFBPitch = (800); LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 600; LTDC_LayerInit(LTDC_Layer1, <DC_Layer_InitStruct); LTDC_colorkeying_InitStruct.LTDC_ColorKeyBlue = 0; LTDC_colorkeying_InitStruct.LTDC_ColorKeyGreen = 0; LTDC_colorkeying_InitStruct.LTDC_ColorKeyRed = 0; TFT_CLUT_Init ((unsigned char*)resname_pal_f); LTDC_LayerCmd(LTDC_Layer1,ENABLE); LTDC_ReloadConfig (LTDC_IMReload); LTDC_Cmd (ENABLE); } Если SDRAM настроил хотя-бы на максимум - 85 Мгц, вроде, то должно работать. В любом случае по трафику програмного доступа к SDRAM у тебя остается от 5-10 мегабайт, так как 36 у тебя отнял дисплей. Память не забывай, работает 8-ми байтными пакетами, надеюсь 16-ти битная шина ?! Были полосы у меня при экспериментах пропускной способности и арбитража, когда я еще хотел на внешнюю SDRAM - с камеры грузить, она тоже 40 Мгц, тогда все сразу потухло, с полосами все было. Хотел посмотреть что будет. Если у тебя какой-нибудь периферийный модуль с DMA настроен на настроен на внешнюю SDRAM, то тогда это причины. Изменено 5 мая, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 5 мая, 2016 Опубликовано 5 мая, 2016 · Жалоба Спасибо за ответ. Память у меня работает на 60 MHz, 90 на моей плате глючит, видимо, из-за разводки. DMA никаких нету, это тестовая прошивка, чтобы этот LTDC оживить, если возможно. Из доп периферии только SDRAM и светодиодик моргает. SDRAM 16-битный MT48LC16M16A2. Тайминги придётся подбирать через комп и уарт, иначе флэш проца подохнет раньше на перепрошивках, чем я их подберу. Грёбаные китайцы ДШ левый подсунули - http://www.ebay.com/itm/7-inch-800x480-TFT...#ht_3554wt_1034 :( на шлейфе, где у них схемка спаяна, написано LY7040B, в интернете доки я не нашёл, только ссылки на али-бабу, где его купить можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 5 мая, 2016 Опубликовано 5 мая, 2016 · Жалоба Полоски напоминают советский телек со сбитыми частотой кадров и всем остальным. Если забить фреймбуфер нулями (чёрный цвет) - полоски исчезают (что вполне естественно), но вверху и внизу мигают и бегают светлые строки. У меня для LPC1788+LCD подобный эффект был.у клоков,горизонтальной синхронизации и пр. полярностями попробуйте поиграть.. какая-нибудь все равно подойдет..да,еще нюанс-поставьте самый наинизший приоритет DMA для доступа к видеопамяти(ну если в STM есть такая возможность) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 5 мая, 2016 Опубликовано 5 мая, 2016 · Жалоба Чтобы просто оживить дисплей, я размещал видеопамять во внутреннем озу. Еще можно что попробовать - увеличить ток (или частоту?) пинов ltdc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skripach 5 5 мая, 2016 Опубликовано 5 мая, 2016 · Жалоба У меня для LPC1788+LCD подобный эффект был.у клоков,горизонтальной синхронизации и пр. полярностями попробуйте поиграть.. какая-нибудь все равно подойдет +1, нужно контроллер LCD настроить в соответствии с документацией на LCD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 6 мая, 2016 Опубликовано 6 мая, 2016 (изменено) · Жалоба По моему в структуре настройки слоя нужно писать координаты окна например 0-800 0-480. Но главное чтобы окно слоя не вылазило за границы видимой части дисплея ( например LTDC_Layer_InitStruct.LTDC_HorizontalStop не больше 800). В общем попробуйте проинициализировать с такой структурой. LTDC_Layer_InitStruct.LTDC_HorizontalStart = 0 //LCD_HSYNC + LCD_HBP; LTDC_Layer_InitStruct.LTDC_VerticalStart = 0 //LCD_VSYNC + LCD_VBP; LTDC_Layer_InitStruct.LTDC_HorizontalStop =800 // LCD_PIXEL_WIDTH + LCD_HSYNC + LCD_HBP - 1; LTDC_Layer_InitStruct.LTDC_VerticalStop =480 // LCD_PIXEL_HEIGHT + LCD_VSYNC + LCD_VBP - 1; Поторопился .... все таки слой у Вас правильно настраивается. Делал через структуру hal драйвера и там записываешь просто числа 0-800 например. А дальше когда вызывается функция инита там как раз и добавляются LCD_HSYNC + LCD_HBP. Сам запутался с 1 цами там в одном случае добавляют +1 в другом отнимают 1 хотел написать чтоб проверили это но нет.Как раз как было так правильно. LTDC_Layer_InitStruct.LTDC_HorizontalStart =LCD_HSYNC + LCD_HBP; LTDC_Layer_InitStruct.LTDC_VerticalStart =LCD_VSYNC + LCD_VBP; LTDC_Layer_InitStruct.LTDC_HorizontalStop =LCD_PIXEL_WIDTH + LCD_HSYNC + LCD_HBP - 1; LTDC_Layer_InitStruct.LTDC_VerticalStop = LCD_PIXEL_HEIGHT + LCD_VSYNC + LCD_VBP - 1; Изменено 6 мая, 2016 пользователем pvo125 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 6 мая, 2016 Опубликовано 6 мая, 2016 (изменено) · Жалоба Приветствую всех. Подключаю дисплей (ДШ приложил) 800x480 к LTDC. Проц - F439IIT6, LQFP176, дисплей подключен по полной схеме RGB888 +4 сигнала (HSYNC, VSYNC, DE, DCLK). На основе примеров написал прошивку (приложил) - просто инициализирует LTDC и всё. Но пока дальше невнятных полосок на экране ничего не увидел. Полоски напоминают советский телек со сбитыми частотой кадров и всем остальным. Померяйте частоту PixelClock, посмотрите тайминги HSync, VSync, DE - они в реальности соответствуют тому, что Вы запрограммировали? Попробуйте частоту PixelClock уменьшить (пусть будет меньше, чем в датащите, например 15МГц) - может память не справляется. Хотя после откровенной неправды в ДШ насчёт напряжения подсветки (указано 9.9в, оказалось 18-19в), я вообще сильно сомневаюсь в его корректности. Как по мне, то очевидно, что шесть белых светодиодов включенных последовательно (так нарисовано в датащите) не могут питаться от 9.9В. Подобные ошибки мне не первый раз встречаются в датащитах на TFT. Изменено 6 мая, 2016 пользователем Шаманъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 6 мая, 2016 Опубликовано 6 мая, 2016 · Жалоба Хотя после откровенной неправды в ДШ насчёт напряжения подсветки (указано 9.9в, оказалось 18-19в), я вообще сильно сомневаюсь в его корректности. По докам этот дисплей имеет весьма оригинальную последовательность подачи напряжений при запуске и гашении. Для таких типов дисплеев существуют спец чипы: с собственной двойной-тройной экранной памятью, куче "аппаратных" графических функций, и множество типов входных сигналов (от 8080 до композитного). Чип аккуратно на аппаратном уровне регулирует подачей-снятием напряжений с матрицы. Сама матрица весьма нежная в этом плане, управляющие полевики в пикселах умудряются сдохнуть миллионом вариантов. Хотя обычно выдерживают разряд статики в экран. Чего собственно у меня и произошло. RGB матрица без контролёра. Питание шимом двумя полевиками от ног st, с обратной связью. И такой облом, в режиме отладки забыл разрешить тиканье именно этого таймера. В результате, пока жахал кнопку нехт на отладчике - дисплей терял целостность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 6 мая, 2016 Опубликовано 6 мая, 2016 · Жалоба Благодарю всех за ответы. Продолжаю разборки, уарт прикрутил, написал на компе прогу, которая пуляет туда параметры HSYNC, HBP, и прочеею Дисплей на такое управление реагирует. Буду подбирать параметры. Про частоту DCLK мне непонятно. Это тактовая модуля LTDC или ещё что-то? Из ДШ проца не понял. Осциллом на выходных посмотрю. DMA у LTDC как такового нету. DMA2D - как я понимаю, Приблуда только для граф функций. Включал/отключал его - пофигу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 6 мая, 2016 Опубликовано 6 мая, 2016 · Жалоба Про частоту DCLK мне непонятно. Это тактовая модуля LTDC или ещё что-то? Из ДШ проца не понял. По идее да. P.S. А мы оказывается почти соседи. Я около Донецка :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 6 мая, 2016 Опубликовано 6 мая, 2016 · Жалоба Вернее, даже не нужно использовать никакое озу. Достаточно просто разрешить ltdc и задать цвет фона. Потом уже подбирать размер поля и его смещение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 8 мая, 2016 Опубликовано 8 мая, 2016 · Жалоба Посмотрел осциллом: 1. DCLK == тактовой LTDC модуля. 2. Если выключить (либо не инициализировать) слои, сигналов VSYNC/HSYNC вообще нет. Они всегда висят в 1 (при настройке Active Low). 3. Длительности HSYNC/VSYNC процом формируются верно. P.S. А мы оказывается почти соседи. Я около Донецка :) :rolleyes: Ещё одна муть в ДШ дисплея: есть 2 набора временных диаграмм: DE mode и SYNC mode. Как осуществить выбор между ними - непонятно. Знакомы купил другой дисплей AT070TN92 (но ещё не спаял его) - у него есть спец нога - MODE, которая переключает эти режимы. Здесь такой ноги (либо чего-то ещё) нет. Да и как выбирать эти режимы в самом проце тоже пока не понял. В DE режиме вообще HSYNC/VSYNC нету (или я неправильно это понимаю?). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 8 мая, 2016 Опубликовано 8 мая, 2016 · Жалоба Посмотрел осциллом: 1. DCLK == тактовой LTDC модуля. Пробовали запускать на более низкой частоте? Да и как выбирать эти режимы в самом проце тоже пока не понял. В DE режиме вообще HSYNC/VSYNC нету (или я неправильно это понимаю?). У некоторых TFT режим выбирается подачей сигналов: - в DE режиме на VSYNC HSYNC подается высокий уровень, а на DE синхронизация - в HSYNC/VSYNC режиме на DE подается низкий уровень, а на HSYNC/VSYNC синхронизация Некоторые нормально работают если подавать все сигналы :), у некоторых, как Вы уже заметили есть специальная нога для выбора режима. P.S. А что это за плата такая, что SDRAM только на 60МГц работает - домашнего изготовления? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 8 мая, 2016 Опубликовано 8 мая, 2016 (изменено) · Жалоба Пробовали запускать на более низкой частоте? Осциллом смотрел на 8МГц - мой UT-81B больше не понимает :) Синхра, если точно, 8.25МГц получается, он и их в изуродованном виде показывает. Частоту, правда, правильно меряет. Ещё на 16 включал - при уменьшении частоты картинка (точнее какой-то цветной мусор, меняющийся при записи в видеобуфер) сжимается. Правильно это или нет - я пока не осознал .... Этот мусор растягивается на всю ширину дисплея при частотах типа 30 МГц. Но на "бегание строк" изменение частоты никак не влияет. Наверное всё-таки что-то с синхронизацией... У некоторых TFT режим выбирается подачей сигналов: - в DE режиме на VSYNC HSYNC подается высокий уровень, а на DE синхронизация - в HSYNC/VSYNC режиме на DE подается низкий уровень, а на HSYNC/VSYNC синхронизация Некоторые нормально работают если подавать все сигналы :), у некоторых, как Вы уже заметили есть специальная нога для выбора режима. DE посмотрел осциллом - там 0. P.S. А что это за плата такая, что SDRAM только на 60МГц работает - домашнего изготовления? Разводка домашняя, из альтиума, саму плату в Кировограде заказывали, на фирме какой-то.[DELETED] Но разводка точно кривая. SDIO там тоже практически всегда с Timeout error вываливается. Хорошо хоть SDRAM/FSMC-дисплей и оба USB хоста (оба FS) нормально пашут :) . Ну не считая 60 МГц вместо 90. Так что левые наводки на LTDC сигналы совсем не исключены. Изменено 8 мая, 2016 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться