![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
MementoMori
Свой-
Постов
1 340 -
Зарегистрирован
-
Посещение
Весь контент MementoMori
-
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Вот настройки тактирования -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
ЗАбыл сказать - точно такой же код замечательно и без мерцания работает на 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); -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Господа, все же что-то странное с дисплеем.... Сначала я поигрался, заливая его разными цветами, экспериментировал со слоями, альфой и пр... Дисплей производил впечатление рабочего. Единственное, что смущало - когда в слой попадал мусор (незаписанные области из SDRAM), то мусор мерцал. Картина стала яснее, когда я попытался нарисовать широкую линию. Начало первой строки этой линии-прямоугольника и конец последней строки постоянно резко дрейфовали на 10-20 пикселей (на видео, если присмотреться, можно увидеть). А мусор все так же мерцал. https://cloud.mail.ru/public/4eFT/5wpgB2Xym Решил что SDRAM (какие-то непонятные у меня были проблемы с ее запуском). Потом выделил очень маленький буфер в RAM и указал его адрес в настройках слоя. Проблема не исчезла. Я грешил на пиксельклок - но тот факт что дрожит не все изображение, а его отдельные, с постоянным координатами, участки с этой версией не вяжется. В чем может быть проблема? -
Не могу подружить SDRAM и LTDC
MementoMori опубликовал тема в ARM
.... кажется нашел решение -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Век живи, век учись) Но, боюсь, это не последний вопрос в этой теме). Я видел, но почему-то подумал, что это относится к конкретной модели дисплея, а не к LTDC -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Чудны дела твои, господи.... Вот что говорит даташит про DE и полярность DE сигнала То есть, я так понял, полярность его положительная. В коде пишу Заработало только тогда, когда поставил hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Правильно ли понял из даташита, что PCLK должен быть инвертированный? -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Для меня да) Раздел-то для начинающих. Сейчас попробуем Перевел в DE режим - на экране справа заливка с тем цветом, который я и хотел, но с бегущими полосами, слева тоже какие-то полосы. Скажите, если я перехожу в DE режим, все упомянутые мной выше параметры - что с ними делать? Оставить как есть? Или в нули? -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
А если я перейду в DE - VSYNC и HSYNC будут не нужны что ли? -
Странное поведение дисплея
MementoMori ответил MementoMori тема в В помощь начинающему
Надо же, я думал нижнего предела нет. Снизил частоту, чтобы посмотреть осциллографом есть ли сигналы на линиях. Исправил на 50 МГц. Ура, дисплей стал показывать вот такое кино https://cloud.mail.ru/public/35hx/2HvGy9PrN Опять таки, что-то с дисплеем, а не с контроллером LTDC - если я в цикле переинициализирую LTDC - движение полос замирает на время, но полосы не исчезают. По ходу вопрос - vertical synchronisation height, vertical block porch, vertical fron porch и прочие параметры - в даташите их нет, я так понимаю их нужно подбирать экспертиментально. Но если они неправильно подобраны - изображение должно просто съехать куда-то или же возможны артефакты, как на видео? -
Странное поведение дисплея
MementoMori опубликовал тема в В помощь начинающему
Господа, пытаюсь запустить дисплей на самодельной плате с 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 */ } -
Вот здесь человек делал печку из духовки. Даже выкладывал картинку с термопрофилем. Правда он выкинул ТЭНы и поставил ИК лампы. Можете поинтересоваться, как оно вышло на практике.
-
Смирился с поясками.
-
Моя ошибка была. В теме про китайцев и меня-дурака, я уже понял свою ошибку. Во внутренних слоях ничего нет, а во внешних так и должно быть. Да и в Гиперлинксе прогнал с новыми ВИА - ничего не поменялось.
-
Вопрос снят. Разобрался.
-
Зато есть про мою переписку с производителем. Впрочем, я написал уже - выяснилось, что во-первых о внутренних слоях такого косяка нет, а во внешних альтиум сам генерирует нечто, что я привел на картинке. Я любитель. Признаю, погорячился, не знал этой тонкости. Но, простите, Альтиум же дает мне возможность сделать ширину пояска нулевой во внешних слоях. Это меня и дезориентировало. А потом оказывается Альтиум молча делает герберы такими, что пояски при производстве появляются. То есть, я правильно понял, что можно даже не пытаться убрать медь вокруг VIA с внешних слоев, а просто принять это как данность?
-
Некорректный экспорт VIA в герберы.
MementoMori опубликовал тема в Altium Designer, DXP, Protel
Господа, есть у меня на плате куча VIA, вокруг которых ширина пояска из меди равна нулю. То есть на плате должно быть голое отверстие, не окруженное медью (относящиеся к нему дорожки проходят в других слоях). В проекте все выглядит нормально. Но вот экспортирую я через Fabrication output->Gerbers, и получаю следующую картину группа точек малого диаметра - это VIA, вокруг которых не должно быть меди. Диаметр этих точек - это диаметр отверстия. Я не заметил этой тонкости, не знал о ней, заказал платы. На платах на уровне этих точек наросли пояски из меди (такой же ширины, как и остальные нормальные VIA). Видимо софт производителя, видя что медь как бы должна быть, но ширина ее близка к нулю (там ведь сверловка того же диаметра), наращивает пояски до минимальной ширины. Как отключить генерацию этих точек в герберах? -
мммм... все-таки на этот раз дурак я... Скачал я герберы, которые загрузил на их сайт..... И увидел интересное. Во всех внутренних слоях поясков нет. В TOP и BOTTOM есть круги, меньше по диаметру, чем VIA с пояском, по диаметру они соответствуют отверстиям. Именно на таких отверстиях на плате появились пояски. Почему так получается в альтиуме при экспорте через Fabrication Ouput? Я попытался поиграться с настройками экспорта - картинка либо такая как на скриншоте, либо дорожки заканчиваются ничем, то есть не имеют на уровне VIA поясков. Что я делаю не так? ПОясню - на картинке круги алого диаметра - это VIA, вокруг которых меди быть не должно. Но она есть и шире, чем на картинке.
-
Я предположил, что подход един ко всем слоям. А даже если это и не так - видите в слое bottom бесхозные ВИА с поясками? Значит в TOP и внутреннем сигнале на этот ВИА прицеплены дорожки. И если в BOTTOM рядом с таким VIA проходит дорожка-жертва, то поясок, увеличивает влияние агрессора, обитающего в других слоях, так как является его продолжением.. Но это в теории. Пришел я домой, открыл проект, сделал VIA как у них, прогнал в HyperLynx. Не изменилось ничего. 95% VIA, на которых вдруг появились пояски, и которые расположены не посреди земли, а вблизи сигнальных трасс, принадлежат либо VCC, либо GND. Есть несколько пар сигнальных линий, которые за счет поясков стали ближе друг к другу, но все равно клиренс между ними в пределах 3W, либо перекрестная помеха не выше 50 мВ.
-
Ну зачем так грубо? Я же написал - когда мне друзья посоветовали убрать медь с ВИА в тех слоях, где она не нужна, я в первую очередь написал производителю плат, как они к этому относятся. И мне ответили - делай, это допустимо. Впрочем почитайте то, что я написал ниже.
-
Видите на плате, в земляном полигоне, есть ВИА, которые отделены от земли, но все же окружены пояском меди? У меня в оригинале было просто отверстие, с круглым дефектом меди, с радиусом, соответственно клиренсу. Во внутренних слоях от этих Виа отходят трассы. Так вот китайцы добавили пояски. И расстояния между ними уменьшились. 90 МГц "Опять же если всё тестировалось то можно повторить тесты с новыми данными и увидеть разницу." - понимаете в чем дело. Я смогу это сделать только вечером, а китаец спрашивает - отправлять или переделывать. Я не хочу терять день, а то и два иначе я не обратился бы на форум, а просто пртестировал. я обратился на форум, с другим вопросом - влияние помех при слишком близком расстоянии между проводниками подобно короткому замыканию (фатально даже при малой протяженности участка контакта), или же подобно конденсатору (еслм не на всем протяжении, а на небольшом участке, то несущественно). Это ведь теоретический вопрос, на него нет ответа?
-
Бяда.... Очень долго разрабатывал плату, двигал дорожки, отверстия, тестировал в гиперлинксе.... получил неплохую целостность сигналов и отсутствие значимых перекрестных помех. В виду высокой плотности монтажа, по совету друзей, я убрал медные пояски с виа в тех слоях, в которых они не имеют соединений. Получил дополнительное пространство, которое и заполнил. С соблюдением правила 3w как для дорожек, так и для виа. Загодя спросил у китайцев, смогут ли они сделать так как я задумал, то есть не окружать медью отверстия, там где это не надо. Получил ответ "Hello,Thank you for your help and it is ok to delete all copper around this VIA ." И что вы думаете.... получаю фото платы - а они добавили медь вокруг отверстий. Запас по клиренсу был - у них заявлено 3.5 мильс, я себе выставил 6. Но вот правило 3 w в это не вписывается. В связи с этим вопрос. Я понимаю, если две дорожки идут рядом и расстояние между ними меньше 3w. Оно меньше на всем протяжении, где эти трассы идут бок о бок. Это влечет за собой перекрестную помеху. А если у меня это правило нарушено только на узеньком участке, не превышающем диаметр виа? Помехи будут меньше? Или такими же? С чем здесь провести аналогию - с конденсатором, емкость которого зависит от площади, где обкладки пересекаются, или же с коротким замыканием, при котором неважна площадь контакта? Вообще, стоит ли бить тревогу? Господи.. я даже боюсь представить себе, как этот финт ушами порезал землю и питание во внутренних слоях...
-
Гребаные китайцы! У меняя было плотное расположение компонентов, в связи с чем я убрал кольцо меди с тех виа, которые не имеют соединений в соответствующих слоях. Причем прямо спросил их - можете делать такие лысые отверстия? Был ответ "Hello,thank you for your help and it is ok to delete all copper around this VIA ." а они взяли и добавили медь. Как они умудрились сделать плату, учитывая, что такие отверстия у меня располагались впритык к дорожкам, а за счет меди клиренс уменьшился... видимо хватило заложенного запаса - у меня минимальный клиренс 6 mils, у них 3.5 mils. Но на тот факт, что я при трассировке высокоскоростных цепей соблюдал правило 3W, а теперь оно похерено....
-
Спасибо. Кстати, размышления натолкнули на интересную мысль. Ось вращения рамки должна находиться в одной плоскости с трафаретом. Иначе при отрыве трафарет будет как бы ехать вперед.