MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Господа, пытаюсь запустить дисплей на самодельной плате с STM32F746 и LTDC Дисплей 7 дюймов с RGB интерфейсом, вот такой https://www.buydisplay.com/download/manual/ER-TFT070-6_Datasheet.pdf Контроллер его вот такой https://www.buydisplay.com/download/ic/EK79001.pdf Сгенерировал проект, для проверки что он работает - поставил в настройках заполнение экрана серым цветом. Пока что дисплей не реагирует, я на данном этапе списываю это на возможные ошибки настройки, возможные дефекты монтажа, ковыряюсь, проверяю Но все же спустя примерно 5 секунд после включения наблюдается странный эффект вот он на видео https://cloud.mail.ru/public/2wEd/3coCzE9 Этот эффект не проявляется, если LTDC не инициализирован. Что это может быть? Такое ощущение, что это какой-то глюк в самом дисплее... PixelCLock 25MHz HS,VS PCLK Polarity - в соответствии с даташитом на контроллер дисплея. Код инициализации дисплея static void MX_LTDC_Init(void) { /* USER CODE BEGIN LTDC_Init 0 */ /* USER CODE END LTDC_Init 0 */ LTDC_LayerCfgTypeDef pLayerCfg = {0}; /* USER CODE BEGIN LTDC_Init 1 */ /* USER CODE END LTDC_Init 1 */ hltdc.Instance = LTDC; hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AH; hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; hltdc.Init.HorizontalSync = 7; hltdc.Init.VerticalSync = 3; hltdc.Init.AccumulatedHBP = 14; hltdc.Init.AccumulatedVBP = 5; hltdc.Init.AccumulatedActiveW = 1038; hltdc.Init.AccumulatedActiveH = 605; hltdc.Init.TotalWidth = 1044; hltdc.Init.TotalHeigh = 607; hltdc.Init.Backcolor.Blue = 200; hltdc.Init.Backcolor.Green = 200; hltdc.Init.Backcolor.Red = 200; if (HAL_LTDC_Init(&hltdc) != HAL_OK) { Error_Handler(); } pLayerCfg.WindowX0 = 0; pLayerCfg.WindowX1 = 1024; pLayerCfg.WindowY0 = 0; pLayerCfg.WindowY1 = 600; pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB888; pLayerCfg.Alpha = 0; pLayerCfg.Alpha0 = 0; pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; pLayerCfg.FBStartAdress = 0; pLayerCfg.ImageWidth = 1024; pLayerCfg.ImageHeight = 600; pLayerCfg.Backcolor.Blue = 200; pLayerCfg.Backcolor.Green = 200; pLayerCfg.Backcolor.Red = 200; if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN LTDC_Init 2 */ /* USER CODE END LTDC_Init 2 */ } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба 1 час назад, MementoMori сказал: Но все же спустя примерно 5 секунд после включения наблюдается странный эффект вот он на видео https://cloud.mail.ru/public/CMYp/4G9cxAC2X PixelCLock 25MHz 1. вместо видео открывается картинка 2. откуда 25МГц, если в доке 51.2 - см аттач Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Надо же, я думал нижнего предела нет. Снизил частоту, чтобы посмотреть осциллографом есть ли сигналы на линиях. Исправил на 50 МГц. Ура, дисплей стал показывать вот такое кино https://cloud.mail.ru/public/35hx/2HvGy9PrN Опять таки, что-то с дисплеем, а не с контроллером LTDC - если я в цикле переинициализирую LTDC - движение полос замирает на время, но полосы не исчезают. По ходу вопрос - vertical synchronisation height, vertical block porch, vertical fron porch и прочие параметры - в даташите их нет, я так понимаю их нужно подбирать экспертиментально. Но если они неправильно подобраны - изображение должно просто съехать куда-то или же возможны артефакты, как на видео? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба 11 minutes ago, MementoMori said: По ходу вопрос - vertical synchronisation height, vertical block porch, vertical fron porch и прочие параметры - в даташите их нет, я так понимаю их нужно подбирать экспертиментально. Но если они неправильно подобраны - изображение должно просто съехать куда-то или же возможны артефакты, как на видео? Тут или названия и смысл параметров уяснить, или перейти в DE mode. Второе, пожалуй, даже предпочтительнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба /* AT070TNA2 panel (1024*600) - 7" display HV mode */ // HX8282-A01.pdf, page 38 enum { WIDTH = 1024, /* LCD PIXEL WIDTH */ HEIGHT = 600, /* LCD PIXEL HEIGHT */ /** * @brief AT070TN90 Timing * MODE=0 (DE) * When selected DE mode, VSYNC & HSYNC must pulled HIGH * MODE=1 (SYNC) * When selected sync mode, de must be grounded. */ HSYNC = 140, /* Horizontal synchronization 1..140 */ HFP = 160, /* Horizontal front porch 16..216 */ VSYNC = 20, /* Vertical synchronization 1..20 */ VFP = 12, /* Vertical front porch 1..127 */ /* Accumulated parameters for this display */ LEFTMARGIN = 160, /* horizontal blanking EXACTLY */ TOPMARGIN = 23, /* vertical blanking EXACTLY */ HFULL = LEFTMARGIN + WIDTH + HFP, /* horizontal full period */ VFULL = TOPMARGIN + HEIGHT + VFP, /* vertical full period */ // MODE: DE/SYNC mode select. // DE MODE: MODE="1", VS and HS must pull high. // SYNC MODE: MODE="0". DE must be grounded VSYNCNEG = 1, /* Negative polarity required for VSYNC signal */ HSYNCNEG = 1, /* Negative polarity required for HSYNC signal */ DENEG = 0, /* Negative DE polarity: (normal: DE is 0 while sync) */ BOARD_DEMODE = 0 /* 0: static signal, 1: DE controlled */ }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба А если я перейду в DE - VSYNC и HSYNC будут не нужны что ли? Quote Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба 1 minute ago, MementoMori said: А если я перейду в DE - VSYNC и HSYNC будут не нужны что ли? Внезапно, да? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба 1 minute ago, aaarrr said: Внезапно, да? Для меня да) Раздел-то для начинающих. Сейчас попробуем Перевел в DE режим - на экране справа заливка с тем цветом, который я и хотел, но с бегущими полосами, слева тоже какие-то полосы. Скажите, если я перехожу в DE режим, все упомянутые мной выше параметры - что с ними делать? Оставить как есть? Или в нули? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Проконтролируйте полярности того что наформировали. Если что, вот тут работающий и в DE MODE и в SYNC MODE код. На инициализацию синхры не влияет, только на установку в статические состояния (0 и 1 - читайте док) сигналов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Правильно ли понял из даташита, что PCLK должен быть инвертированный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба Чудны дела твои, господи.... Вот что говорит даташит про DE и полярность DE сигнала То есть, я так понял, полярность его положительная. В коде пишу Quote hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AH; Заработало только тогда, когда поставил hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 января, 2020 Опубликовано 19 января, 2020 (изменено) · Жалоба А LTDC выход de сам по себе добавлякт инверсию. О чем прямо говорят в главе даташита про щвидеоконтроллер. И что я процитировал в комментариях кода, ссылку на который кинул. Изменено 19 января, 2020 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 19 января, 2020 Опубликовано 19 января, 2020 · Жалоба 7 minutes ago, GenaSPB said: А LTDC ввход de сам по себе добавлякт инверсию. О чем прчмо говорят в главе двтвшита про видеоконтроллкр Век живи, век учись) Но, боюсь, это не последний вопрос в этой теме). Quote И что я процитировал в комментариях кода, ссылку на который кинул. Я видел, но почему-то подумал, что это относится к конкретной модели дисплея, а не к LTDC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба Господа, все же что-то странное с дисплеем.... Сначала я поигрался, заливая его разными цветами, экспериментировал со слоями, альфой и пр... Дисплей производил впечатление рабочего. Единственное, что смущало - когда в слой попадал мусор (незаписанные области из SDRAM), то мусор мерцал. Картина стала яснее, когда я попытался нарисовать широкую линию. Начало первой строки этой линии-прямоугольника и конец последней строки постоянно резко дрейфовали на 10-20 пикселей (на видео, если присмотреться, можно увидеть). А мусор все так же мерцал. https://cloud.mail.ru/public/4eFT/5wpgB2Xym Решил что SDRAM (какие-то непонятные у меня были проблемы с ее запуском). Потом выделил очень маленький буфер в RAM и указал его адрес в настройках слоя. Проблема не исчезла. Я грешил на пиксельклок - но тот факт что дрожит не все изображение, а его отдельные, с постоянным координатами, участки с этой версией не вяжется. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 22 января, 2020 Опубликовано 22 января, 2020 · Жалоба ЗАбыл сказать - точно такой же код замечательно и без мерцания работает на STM32F746DISCO. У меня и память и контроллер такие же (только не в BGA) Да ... тут мне в личку советуют посмотреть трассы от STM к дисплею на предмет наводок. Вряд ли это причина. Когда я настраиваю слой так, что он меньше экрана, а основной фон делаю, скажем зеленым - то появляется зеленая рамка, а в ней окно с мусором. Так вот границы рамки не дрожат. Рамку эту рисует контроллер LDTC и сам дисплей. Так что эта связка работает нормально. А вот с чтением данных из памяти, неважно какой, происходят пропуски. https://cloud.mail.ru/public/2D6c/5PPyr8o98 Меня что-то пугает, что глюк одинаков и для RAM и для SDRAM.... Скажите, вот этот код точно заставит LTDC работать не со SDRAM, а с RAM ? volatile uint32_t RGB565[5000] = {0x00000000}; uint32_t i; HAL_LTDC_SetAddress(&hltdc,(uint32_t) &RGB565,0); for(i=2000;i<4500;i++) { *(__IO uint16_t*) (hltdc.LayerCfg[0].FBStartAdress + (i*2)) = 0x00ff; } while (1); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться