Перейти к содержанию
    

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

42 minutes ago, zombi said:

А можно как-то остановить процессор? что бы к памяти никто кроме контроллера LCD не обращался.

Записал всё что надо (бело синие полоски) и остановился. Будет дёргаться изображение?

Не знаю. По идее, если где-то поставить точку останова, процессор останавливается. Пробовал, к положительному результату со стороны дисплея это не приводит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запустил тест на 100 циклов.

Ни одной ошибки SDRAM. 10 раз сработало прерывание ошибки LTDC. Всего 10 раз. 

Да черт возьми, что ж там с чтением адреса? Может быть контроллер дефективным? Неохота его перепаивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЕСТЬ НЕБОЛЬШОЙ РЕЗУЛЬТАТ!!!!

Выяснено, что если располагать буфер в SRAM по адресу 0x2000FF00, то дрожание полностью прекращается. На единицу меньше - появляются глюки. 

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

Вот где в этом чужом коде была собака зарыта

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

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

Просветите невежду, может быть так, что в процессе создания и уничтожения локальных переменных образующиеся пустые места не остаются без внимания системы и происходит "уплотнение" памяти? ПОнятно теперь, почему начало буфера плавало.

 

Но..... проблемы то со SDRAM это не решает. Ладно, пытаясь разместить код в SRAM, я рисковал разворошить осиное гнездо. Но по адресу 0xD0000000 должно быть спокойно. Продолжаю копать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, MementoMori said:

Просветите невежду, может быть так, что в процессе создания и уничтожения локальных переменных образующиеся пустые места не остаются без внимания системы и происходит "уплотнение" памяти? ПОнятно теперь, почему начало буфера плавало.

Локальные переменные, когда не помещаются в регистрах или требуется их адресация, выделяются на стеке. Поэтому при каждом вызове приведенного фрагмента адрес буфера может быть новым.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, aaarrr said:

выделяются на стеке

Опять таки, простите мне мою необразованность - но разве верхушка стека не в старших адресах располагается?

Вот как выглядит красный прямоугольник  на экране, если расположить буфер по адресу 0x2000FF00

 

libcL5kp.png

 

 

А вот, как его корежит, если в качестве адреса буфера указать 0xD0000000, то есть SDRAM (это картинка, в динамике изображение дрожит и шумит)

 

IKqEfg7X.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, MementoMori said:

разве верхушка стека не в старших адресах располагается?

Стек располагается там, где его явным образом расположили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вникаю в предмет... Скажите, а MPU может помочь?

Я сделал как в одной статье

 

Image13-4.png

Правда там почему-то адрес SRAM (хотя статья про настройку SDRAM), но я попробовал поменять адрес на 0x20010000 - не помогло. Что-то не так или это тупиковый путь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, MementoMori said:

Скажите, а MPU может помочь?

А вы прочитайте для чего используется Memory Protection Unit. Он всего-лишь вызовет вам исключение при попытке доступа в запрещённую область памяти. А диапазоны памяти и их аттрибуты вы сами настраиваете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При указании в качестве адреса буфера FLASH памяти тоже дрожание. Какой бы я адрес ни указал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа это абсурд!!!!!

 

Картинка перестала дрожать лишь тогда, когда я уменьшил пиксельклок до 30 МГц, а размер окна до 200х200 пикселей, формат цвета RGB565. Правда даже в этом случае есть какой-от глюк, цвет 0xF800 дает розовый квадрат, хотя по идее это чистый красный.

 

Так.... скажите мне, какова пропускная способность памяти SDRAM 32 бит на частоте 108 МГц?

Можно ли как-то практически средствами контроллера измерить ее?

 

Ну не может такого быть чтобы SDRAM+LTDC не мог потянуть кадр больше 80 кб...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки до конца проблемы с дисплеем не решены.

Когда он у меня худо бедно заработал, я забил на частоту пиксельклока. Но теперь все же хочу получить законно (по даташиту) причитающиеся мне мегагерцы.  А по факту не получается завести дисплей более чем на 30 МГц.

Итак, напомню - контроллер STM32F746.

Дисплей  https://www.buydisplay.com/download/manual/ER-TFT070-6_Datasheet.pdf

Контроллер дисплея  https://www.buydisplay.com/download/ic/EK79001.pdf

Согласно даташиту дисплей может работать с пиксельклоком до до 65 МГц

У меня же после 30 МГЦ черный экран, с артефактами и прочим. Иногда есть неяркие мутные вспышки, во время которых на линиях питания VGL и VGH есть плавные просадки напряжения примерно 0.5 вольт (не ниже нижнего предела питания по даташиту).

Для того, чтобы полностью исключить LTDC я принудительно настроил загнал ножки интерфейса как GPIO_Output и настроил на красный цвет. То есть в отправляемой информации на дисплей я уверен. Остается только клок.

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

Насчтет просадок напряжения -мне кажется что они являются не причиной, а следствием. В противном случае, если бы они зависели от контролера питания, поведение дисплея не зависело бы от частоты клока.  Более того - просадки и вспышки - нечастое явление, в остальные 90% времени на линиях питания нет никаких просадок, но экран черный.

 

Куда копать?

 

Вот видео

https://cloud.mail.ru/public/42Ba/DpBw5umNp

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня роооовно такое было когда преобразователь напряжения для питания панели возбуждался и мерцал. Скорее всего выходным напряжением. Для уменьшения помех на плате дисплея была своя цепь земли, соединявшаяся с землей дисплпя перемычкой. В одном изделии вместо 0 ом резистора оказался  фееритовый блочёк blm21pg331. И все мерцало. Хотя вроде не должно.... все обратные связи замыкались в пределах локального участка схемы и наружу шёл только постоянный ток.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...