Jump to content

    

Странное поведение дисплея

Господа, пытаюсь запустить дисплей на самодельной плате с  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 */

}

 

Share this post


Link to post
Share on other sites
1 час назад, MementoMori сказал:

Но все же спустя примерно 5 секунд после включения наблюдается странный эффект вот он на видео

https://cloud.mail.ru/public/CMYp/4G9cxAC2X

PixelCLock 25MHz

1. вместо видео открывается картинка

2. откуда 25МГц, если в доке 51.2 - см аттач

fiti.jpg

Share this post


Link to post
Share on other sites

Надо же,  я думал нижнего предела нет. Снизил частоту, чтобы посмотреть осциллографом есть ли сигналы на линиях.

Исправил на 50 МГц. Ура, дисплей стал показывать вот такое кино

https://cloud.mail.ru/public/35hx/2HvGy9PrN

Опять таки, что-то с дисплеем, а не с контроллером LTDC - если я в цикле переинициализирую LTDC - движение полос замирает на время, но полосы не исчезают.

 

По ходу вопрос - vertical synchronisation height, vertical block porch, vertical fron porch и прочие параметры - в даташите их нет, я так понимаю их нужно подбирать экспертиментально. Но если они неправильно подобраны - изображение должно просто съехать куда-то или же возможны артефакты, как на видео?

Share this post


Link to post
Share on other sites
11 minutes ago, MementoMori said:

По ходу вопрос - vertical synchronisation height, vertical block porch, vertical fron porch и прочие параметры - в даташите их нет, я так понимаю их нужно подбирать экспертиментально. Но если они неправильно подобраны - изображение должно просто съехать куда-то или же возможны артефакты, как на видео?

Тут или названия и смысл параметров уяснить, или перейти в DE mode. Второе, пожалуй, даже предпочтительнее.

Share this post


Link to post
Share on other sites

	/* 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 */
	};

 

Share this post


Link to post
Share on other sites
1 minute ago, MementoMori said:

А если я перейду в DE - VSYNC и HSYNC будут не нужны что ли?

Внезапно, да?

Share this post


Link to post
Share on other sites
1 minute ago, aaarrr said:

Внезапно, да?

Для меня да) Раздел-то для начинающих. Сейчас попробуем

Перевел в DE режим - на экране  справа заливка с тем цветом, который я и хотел, но с бегущими полосами, слева тоже какие-то полосы.

Скажите, если я перехожу в DE режим, все упомянутые мной выше параметры - что с ними делать? Оставить как есть? Или в нули? 

Share this post


Link to post
Share on other sites

Проконтролируйте полярности того что наформировали.
Если что, вот тут работающий и в DE MODE и в SYNC MODE код. На инициализацию синхры не влияет, только на установку в статические состояния (0 и 1 - читайте док) сигналов.

Share this post


Link to post
Share on other sites

Правильно ли  понял из даташита, что PCLK должен быть инвертированный?

Share this post


Link to post
Share on other sites

Чудны дела твои, господи....

Вот что говорит даташит про DE и полярность DE сигнала

ZsZLHRb9.png

 

То есть, я так понял, полярность его положительная.

В коде пишу

Quote

  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AH;

Заработало только тогда, когда поставил   hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;

Share this post


Link to post
Share on other sites

А LTDC выход de сам по себе добавлякт инверсию. О чем прямо говорят в главе даташита про щвидеоконтроллер. И что я процитировал в комментариях кода, ссылку на который кинул.

Edited by GenaSPB

Share this post


Link to post
Share on other sites
7 minutes ago, GenaSPB said:

А LTDC ввход de сам по себе добавлякт инверсию. О чем прчмо говорят в главе двтвшита про видеоконтроллкр

Век живи, век учись)

Но, боюсь, это не последний вопрос в этой теме).

 

Quote

И что я процитировал в комментариях кода, ссылку на который кинул.

Я видел, но почему-то подумал, что это относится к конкретной модели дисплея, а не к LTDC

Share this post


Link to post
Share on other sites

Господа, все же что-то странное с дисплеем....

Сначала я поигрался, заливая его разными цветами, экспериментировал со слоями, альфой и пр... Дисплей производил впечатление рабочего.  Единственное, что смущало - когда в слой попадал мусор (незаписанные области из SDRAM), то мусор мерцал.

Картина стала яснее, когда я попытался нарисовать широкую линию. Начало первой строки этой линии-прямоугольника и конец последней строки постоянно резко дрейфовали на 10-20 пикселей (на видео, если присмотреться, можно увидеть).  А мусор все так же мерцал. 

 

https://cloud.mail.ru/public/4eFT/5wpgB2Xym

Решил что SDRAM (какие-то непонятные у меня были проблемы с ее запуском). Потом выделил очень маленький буфер в RAM и указал его адрес в настройках слоя. 

Проблема не исчезла.

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

 

В чем может быть проблема?

Share this post


Link to post
Share on other sites

ЗАбыл сказать - точно такой же код замечательно и без мерцания работает на 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);	 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now