Полная версия этой страницы:
G45 - Работа с видеопамятью
DpInRock
Oct 24 2011, 00:19
Процессор AT91SAM9G45. Видеопамять с 70000000, DDr2x16. 24 битный цвет.
1. Делаем черный экран записью нулей.
2. Пишем, рисуем, что хотим делаем - но не белым цветом.
3. Стоит хоть одну точку сделать белой - весь экран становится белым. (Хотя видеопамять как таковая содержит верные данные).
4. Ставим в ЛЮБОМ месте "НЕ БЕЛУЮ" точку. Изображение восстанавливается.
5. Ставим белую куда-нибудь опять. Весь экран белый.
Перестройка DMA LCD, целиком самого LCD ничего не дает - экран остается белым (в смысле, при отклюении и перенастройке он становится черным, но после окончания инициалзации - белый).
Примечание 1 Программа, которая всем этим управляет находится в той же самой памяти.
Примечание 2. "НЕ БЕЛАЯ" точка, которая восстанавливает изображение ДОЛЖНА СОДЕРЖАТЬ В КАЖДОМ БАЙТЕ ЦВЕТА не менее двух единичных битов. К примеру, точка цветом 88 88 88 не восстанавливает изображение, а точка 33 33 33 - восстанавливает. (33 00 33 - не восстанавливает, 53 35 75 - восстанавливает).
-------------------
Этот глюк не определяется в обычных условиях, когда на экране многоцветие и мельтешение.
А вот попробовал сменить фон калибровки экрана на черный, на котором рисовал чисто белый крестик - и получил этот эффект.
Ума не хватает помыслить что это. К сожалению плата в единственном экземпляре.
---
Белая точка ничему не вредит, если на экране полноцветная картинка реальная.
Но если 90% экрана одного цвета, причем простого цвета - черный, чисто синий например, то белая точка работает....
Что говорит эррата про lcd ? (это еще надо очень творчески домыслить)
Наоборот эффект есть, т.е. белый экран и черная точка ?
Скопом есть возможность глянуть, там действительно начинает идти белый цвет на весь экран ?
DpInRock
Oct 24 2011, 08:27
Общем, в копилку мирового опыта.
Описанный эффект существует, повторяется строго. Чтобы специально такое сделать, надо долго потрудиться.
Причина в самом LCD. Вернее, в шлейфе. Стоит его немного изогнуть - нормальное изображение появляется без всякого программного вмешательства.
Но как трабл со шлейфом может давать четкий триггерный эффект, абсолютно четкий и абсолютно триггерный - пока не представляю.
Рад этому несказанно, ибо уже привинтил к PutPixel фичу, которая ставит серую точку в конец видеопамяти.
В общем, пока все равно чудо.
Вы случайно не используети коды, которые нужны для синхронизации. В цифровом ТВ нельзя давать код в 8 старших разрядах 00 или FF.
DpInRock
Oct 24 2011, 09:56
Не. Это обычный TFT, 24 битный интерфейс.
Уже железно дело в шлейфе. Поставил новый экран - все работает нормально.
Но по характеру неисправности - не в жисть не подумал бы на шлейф. И щас не думаю. Пойти в церву, воды купить и попрыскать вокруг. Других мыслей пока нет.
Попробуйте фазу клока подвигать относительно данных - часто помогает.
DpInRock
Oct 25 2011, 08:55
В общем, вдруг интересно.
Не в шлейфе дело.
Когда программируешь - часто включаешь выключаешь, а когда просто ничего не делаешь - то не выключаешь.
И вот тогда LCD начинает нагреваться.
И действительно, в зависимости от картинки - начинает глючить.
Уменьшение тактовой частоты убирает глюк. Который вновь возникает от дальнейшего прогрева.
Кто греется, LCD или проц пока сказать трудно. Проц пока недоступен для охлаждения.
---
Скорее всего LCD виноват. Если просто подуть на него слегка глюк прекращается сразу.
Что удивительно, этот же LCD уже использовал в серии. Все нормально было. Но управлялся он LPC2478.
DmitryM
Oct 25 2011, 09:16
Ох, а не может там быть что уровни не согласованы?? TTL <-> LVTTL, может защитные диоды подрабатывают вот он и греется.
DpInRock
Oct 25 2011, 12:18
Теперь выяснил все бесповоротно и окончательно (надеюсь на это сильно, но тестирование занимает долгое время, надо ждать пока нагреется)
Снижение тактовой частоты к хорошему не приводит. Просто глючить начинает позже.
А вот существенное увеличение Vertical Porch (c 5 линий до 127 - как переднего так и заднего) - решило проблему.
Полагаю, что 128 линий до и после хватает, чтобы LCD транзисторы чуток перекурили от дерганий туда-сюда.
Т.е. реально хватило и 10 линий порча, но я взял чксло линий при котором видно дрожание и поделил на 2. Типа с запасом.
Вот пока так. Почему я сразу не поставил 127 линий - не помню. Обычно я ставлю большие порчи, чтобы не так сильно загружать память прямым доступом.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.