
Описанный в предыдущей статье параллельный интерфейс чаще всего бывает у панелей небольшого размера, до 7-10 дюймов. У панелей большего размера значительное распространение получил другой, более сложный интерфейс, называемый "в народе" - "LVDS". Хочу отметить, что под этим обычно подразумевают не только способ электрического подключения (при помощи дифференциальных сигналов), но и простенький протокол, в совокупности, я бы назвал это "методом". Он называется FPD-Link. Изначально FPD-Link использовался в ноутбуках, а сейчас таким методом подключают панели даже в больших плоских телевизорах.
Подробно о нем, и о подключении TFT-панелей к FPGA, написано вот в этом документе:
А я попробую коротко описать его принципы на картинке из этого документа.

Для связи с панелью используются четыре дифференциальных пары. По одной из них передается тактовая частота (CLOCK), по трем другим, последовательно, и с частотой в 7 раз выше тактовой - данные и управляющие сигналы. Пакет сигналов для одного пикселя начинается с середины положительного импульса клока, заканчивается в середине следующего положительного импульса и содержит 18 бит данных (по 6 на каждый цвет) и 3 управляющих DE, VS и HS.
В среднем , значение тактовой частоты у разных панелей лежит в пределах 50-80 мГц, а скорость передачи данных по одной паре, соответственно, 350-560 Мбит/с.
При подключении панели к FPGA, таких частот можно достичь при помощи PLL. К сожалению, MAX2 не имеет внутреннего PLL, поэтому подключить LVDS-панель к нашей платке (по крайней мере просто и правильно ) - нельзя.
Но, как говорят - "нельзя, но очень хочется ...", и "из любого правила могут быть исключения", мы будем подключать нашу панель "неправильно".
Начну с "исключений". Значительная часть TFT-панелей, в том числе и та, на которой мы будем делать свои эксперименты (
), имеет режим управления разверткой - "DE mode only".Замечу, что далеко не во всех даташитах это свойство указывается "явно". В некоторых, например, приводятся временные характеристики только для сигнала DE, в некоторых бывает подобная картинка:

"DE mode only" означает, что в паре, содержащей управляющие сигналы (RxIN2), имеет реальное действие только один - DE. Таким образом, если подать на панель необходимую тактовую частоту, а на RxIN2 "не сериализованный" DE, то панель начнет нормально функционировать.
Обратите внимание, что пара RxIN1 содержит, в основном, биты зеленого цвета, а RxIN0 - красного. Поэтому, если подавать на каждый из них одно битный видеосигнал, в итоге можно получить четырехцветное изображение на синем фоне.
В своих экспериментах мы пошли дальше, и подключили RxIN2 через мультиплексор,подавая во время положительного периода клока сигнал DE, а во время отрицательного сигнал управления синим цветом. Описанным методом можно получить палитру из 8 цветов, может не совсем идеальную, но очень близкую к настоящей. Конечно такой метод не подходит для получения картинки "фотографического" качества, но для какого нибудь самодельного осциллографа или
тех-же часиков - вполне.
Для подключения к платке понадобилось 8 пинов, по 2 на каждый из 4-х дифференциальных сигналов:

В самом проекте для платы Марсоход (
) выводить просто цветные полосочки мне показалось как-то скучно,поэтому я добавил вывод картинки из небольшой (на один кадр) ПЗУ ().Правда зашивать ее нужно каким-нибудь отдельным программатором. Я сделал несколько "шилдов" с флешками. На этом видео видно, как я, прямо на лету подключаю другую флешку к плате Марсоход - и картинка на экране меняется!
Для того, чтобы наша фоторамка приобрела какую-то законченность, для нее, конечно-же, нужен фреймбуффер. Это будет темой следующей статьи.

что если подать с микроконтроллер а сигналы
заторможенны относительно нормы в 10- 100раз
прорисует ли матрица картинку ..диф пару можносформирова ть обычным кмоп инвертором
от пина любого котнролера
Можете попробовать все варианты
Похоже, что кадрового все-таки нет. Тогда нужно посмотреть, если VS отрицательный, то домешать его к этому сигналу элементом 2И. Если положительный, то сначала проинвертировать.
Должна получиться похожая картинка, только в промежутке где нет строчных, должен быть "0".
Если на вашем осцилографе сделать развертку в несколько милисекунд и сделать синхронизацию по НЧ (если есть), то должно быть видно "кадровый"
yadi.sk/i/_KAoGTZZ3KMWU3
А кадровый "бланк" видно? Что-то в районе 50Гц.
Полярность правильная?
И что на нем видно осцилографом? Чем он не подходит в качестве DE для панели?
Если нет, то можно объединять HS и VS внешней логикой.
Проверяйте сигнал DE, он должен соответствовать даташиту матрицы.
6.5.2 Input Timing Diagram
Попробуйте красный и зеленый сигналы (до LVDS)посадить на "0". Останутся ли только синие точки?
А с сигналом?
Видеорежим правильный?. В сигнале DE есть и строчный и кадровый "бланк"?Полярно сть правильная?
Подсветка работает? Если других сигналов не подключать , экран должен светится синим.Не светится?
С вашего контроллера на дисплей нужно обязательно подать клок и сигнал DE, но я не знаю выдает ли он этот сигнал.
Если не выдает, то можно , в принципе пробовать его делать его "логикой" из других (VS,HS), но это уже морока и может не получиться.
"не сериализованный" означает, что сигнал DE будет активен на всем периоде пиксельклока, а не на 1/7 как долхно быть. Выводить, кодечно, нужно диффиренциально, на положительный выход - DE, на отрицательный, его инверсию.
Цитирую Alex01:
Да куда направите, туда и будут направляться.
Вопрос 1. Что значит "не сериализованный "? RxIN2 - витая пара, значит разностный сигнал RxIN2 всегда будет равен нулю.
Вопрос 2. Биты синего цвета, что на RxIN2 "висят", куда направляются?
А тяжело осилить это флаг, то мои познания крайне скудны. Всего один проект на epm3128 в схемотехнике.
Ну так "флаг в руки"
На циклоне можно гораздо лучше и правильнее сделать,
не то , что мои извращения на MAXII.
Скоро придет циклон четвертый на сорок киловентилей, вот бы его с этой матрицей подружить.
Какого-то универсального способа конечно нет.Могу только посоветовать два метода:
первый - внимательно изучить плату матрицы.Возможн ы какие-то надписи,
особенности разводки (пары , обычно, хорошо просматриваются ), легко найти питание(по блокировочным конденцаторам) и т.д.
второй - попытаться нйти ПДФ на , по каким-то признакам, похожую матрицу.
Признаки могут быть разные- количетво пинов коннектора, производитель размер и т.д.
Затем можно пытаться результаты обоих методов как-то связать.
спасибо за ответ.
dronу:
тебе какую схемку? проект в квартусе или самой платы? схемку проекта на недельке доделаю и скину на почту, контроллер экранчика получился конечно не ахти какой, но для моей задачи годится, а вот самой схемы платы нет, я ее сразу в layoute рисовал) могу разводку тоже скинуть, если нужно.
ps
Юрию и dronу особая благодарность за оперативную помощь
Возможно, не пишется в "MRS", изменение "Burst length" должно было помочь.
"BURST TERMINATE" - как вариант.
Посмотрите здесь - marsohod.org/.../
на микрухе EPM3128ATC100-1 , других у нас нет . если вам не сложно, Юрий, можете подсказать вы посоветали :( Может неправильно работать из-за триггера "inst38".
Поставте вместо "DFF" - "DFFE" , на клок - "clk40", а
на "enable" - выход с "lpm_and2"). При таком включении тригер постоянно защёлкивается в =1 . Огромное спасибо Тохе и вашему сайту.
Может неправильно работать из-за триггера "inst38".
Поставте вместо "DFF" - "DFFE" , на клок - "clk40", а
на "enable" - выход с "lpm_and2".
Пришлите ваш *.bdf на info
сори за кривую арифметику, не 15 а 11 бит
большое спасибо за скорый ответ,
больше вопросов нет.
Если в даташите не указана минимальная тактовая частота, то должно работать на любой. Только с какого-то момента будет заметно мерцание экрана.
В проекте 33м и мерцания еще не заметно.
На ПЗУ подается 100м.
так я про FPD-Link 18 bit serializer
Честно говоря не очень понял вопрос.
Каждый выход LVDS, это два обычных пина, только на один
подан прямой сигнал, а на другой тот-же сигнал через инвертор.
Хотелось бы какой-то простой проект (чтения/записи) на датафлеш и вывод на порт информации с флешки.
"с датафлешой" в этом-же проекте,
или я что-то не так понял ?
за три рубля купи дохлую видеокарту или мать со встроенным видео и сдуй разъем с нее. проблем-то...
Подробно о том как это делать правильно, описано
здесь: siliconbluetech.com/.../...
Мы обошлись просто двумя противофазными выходами,
даже без резиков.
я вот просто весь в замешательстве как же вы подключили LVDS, согласование уровней и все такое.
Был в 2-х радиомагазинах из 3-х, разъема D-SUB(для подключения через VGA) нет.
Пойду еще в третий, но не думаю, что он там будет ((
Вы просто упомянули про него в прошлой статье. Не приведя не примеры временных диаграмм, ни принципов работы, ни кусков исходного кода, касаемых именно работы с ним. Так нельзя. Для обучающего проекта
Спасибо, ознакомился, очень интересно ! Получается, тайминги для VGA и DVi не отличаются, как я понял. Надо только организовать T.M.D.S.
Ага, я тоже так думаю
Для увеличения количества цветов можно поставить
ЦАП на резиках, я думаю,это будет гораздо проще.
Сам стандарт DVI описывает физическую среду передачи данных(разъемы, T.M.D.S. и прочее). Этот T.M.D.S. реализуется вроде несложно, да и у циклона есть дифференциальны е выходы(с этим тоже пока не разбирался). А где взять сами тайминги ? Вижу по описанию T.M.D.S., что там нужно те же цвета пикселя, HSYNC и VSYNC. Для 640х480 60 гц будет то же, что и для обычного VGA ? Или там другие тайминги ? Если не затруднит, может пнёте в нужный стандарт ? А то готовой реализации не нашел...
И еще, там вроде как видеоадаптер у монитора должен спросить, какие режимы он поддерживает... Интересно, будет ли работать, как в случае с VGA(ну посылай сигналы синхронизации да и всё), или нужно еще какую-нибудь инициализацию проводить..
3 бита на точку, 1440 точек в строке (540 байт) х 800 строк.