МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

Фоторамка. Часть2. TFT-панели с LVDS интерфейсом.

Подключение TFT панели с LVDS интерфейсом к плате Марсоход

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

Подробно о нем, и о подключении TFT-панелей к FPGA, написано вот в этом документе: icon Подключение TFT панелей к FPGA (603.09 Кбайт)

А я попробую коротко описать его принципы на картинке из этого документа.

FPD Link interface

Для связи с панелью используются четыре дифференциальных пары. По одной из них передается тактовая частота (CLOCK), по трем другим, последовательно, и с частотой в 7 раз выше тактовой - данные и управляющие сигналы. Пакет сигналов для одного пикселя начинается с середины положительного импульса клока, заканчивается в середине следующего положительного импульса и содержит 18 бит данных (по 6 на каждый цвет) и 3 управляющих DE, VS и HS.

В среднем , значение тактовой частоты у разных панелей лежит в пределах 50-80 мГц, а скорость передачи данных по одной паре, соответственно, 350-560 Мбит/с.

При подключении панели к FPGA, таких частот можно достичь при помощи PLL. К сожалению,  MAX2 не имеет внутреннего PLL, поэтому подключить LVDS-панель  к нашей платке (по крайней мере просто и правильно ) - нельзя.
Но, как говорят - "нельзя, но очень хочется ...", и "из любого правила могут быть исключения", мы будем подключать нашу панель "неправильно".

Начну с "исключений". Значительная часть  TFT-панелей, в том числе и та, на которой мы будем делать свои эксперименты (icon WXGA Color TFT-LCD (1.67 Мбайт)),  имеет режим управления разверткой - "DE mode only".

Замечу, что далеко не во всех даташитах это свойство указывается "явно". В некоторых, например, приводятся временные характеристики только для сигнала DE, в некоторых бывает подобная картинка:

Подключение TFT панелей к CPLD

"DE mode only" означает, что в паре, содержащей управляющие сигналы (RxIN2), имеет реальное действие только один - DE. Таким образом, если подать на панель необходимую тактовую частоту, а на RxIN2 "не сериализованный" DE, то панель начнет нормально функционировать.

Обратите внимание, что пара RxIN1 содержит, в основном, биты зеленого цвета, а RxIN0 - красного. Поэтому, если подавать на каждый из них одно битный видеосигнал, в итоге можно получить четырехцветное изображение на синем фоне.

В своих экспериментах мы пошли дальше, и подключили RxIN2 через мультиплексор,подавая во время положительного периода клока сигнал DE, а во время отрицательного сигнал управления синим цветом. Описанным методом можно получить палитру из 8 цветов, может не совсем идеальную, но очень близкую к настоящей. Конечно такой метод не подходит для получения картинки "фотографического" качества, но для какого нибудь самодельного осциллографа или
тех-же часиков - вполне.

Для подключения к платке понадобилось 8 пинов, по 2 на каждый из 4-х дифференциальных сигналов:

wires

В самом проекте для платы Марсоход (icon Проект подключение TFT панели с LVDS интерфейсом к плате Марсоход (85.03 Кбайт)) выводить просто цветные полосочки мне показалось как-то скучно,поэтому я добавил вывод картинки из небольшой (на один кадр) ПЗУ (icon AT45DB041D - Atmel Data Flash (1.31 Мбайт)).

Правда зашивать ее нужно каким-нибудь отдельным программатором. Я сделал несколько "шилдов" с флешками. На этом видео видно, как я, прямо на лету подключаю другую флешку к плате Марсоход - и картинка на экране меняется!

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

 

Комментарии  

0 #43 ВасилийЗ 21.04.2016 11:26
Можете скинуть проект по работе с флешкой?
0 #42 WolfTheGrey 02.09.2014 12:37
Цитирую Ю р и й:

Ну так "флаг в руки" :-)

А тяжело осилить это флаг, то мои познания крайне скудны. Всего один проект на epm3128 в схемотехнике.
+1 #41 Ю р и й 02.09.2014 12:28
Цитирую WolfTheGrey:
http://www.beyondinfinite.com/lcd/Library/Auo/B154EW02_V6.pdf
Скоро придет циклон четвертый на сорок киловентилей, вот бы его с этой матрицей подружить.

Ну так "флаг в руки" :-)
На циклоне можно гораздо лучше и правильнее сделать,
не то , что мои извращения на MAXII.
0 #40 WolfTheGrey 02.09.2014 12:19
http://www.beyondinfinite.com/lcd/Library/Auo/B154EW02_V6.pdf
Скоро придет циклон четвертый на сорок киловентилей, вот бы его с этой матрицей подружить.
0 #39 Ю р и й 02.01.2014 10:29
Цитирую kisly:
Господа, добрый вечер. С наступившим всех. Подскажите, есть ли методика определения распиновки lvds в рабочем девайсе ? Нашел тут панель, 30pin разьем. 6,12,18,24,30,13,15, 21,22 и 29 pin подтянуты к земле (GND). Как определить всё остальное ?

Какого-то универсального способа конечно нет.Могу только посоветовать два метода:
первый - внимательно изучить плату матрицы.Возможн ы какие-то надписи,
особенности разводки (пары , обычно, хорошо просматриваются ), легко найти питание(по блокировочным конденцаторам) и т.д.
второй - попытаться нйти ПДФ на , по каким-то признакам, похожую матрицу.
Признаки могут быть разные- количетво пинов коннектора, производитель размер и т.д.
Затем можно пытаться результаты обоих методов как-то связать.
0 #38 kisly 01.01.2014 16:23
Господа, добрый вечер. С наступившим всех. Подскажите, есть ли методика определения распиновки lvds в рабочем девайсе ? Нашел тут панель, 30pin разьем. 6,12,18,24,30,1 3,15, 21,22 и 29 pin подтянуты к земле (GND). Как определить всё остальное ?
0 #37 dron 11.12.2012 15:35
Тоха мне схемку проекта в квартусе , а контакты под ПЛИСину 100-Pin TQFP сам рисовал в layoute?
спасибо за ответ.
0 #36 Toxa 10.12.2012 14:28
отбой, ложная тревога) знал же что где то косяк, сегодня пришел, свежим взглядом просмотрел и обнаружил ошибку. теперь читается 4 слова, а пишется одно. жалко не хватает мощей у моей плиски, что бы в ней сконфигурить буфер на 8 слов, а то приходится писать данные во время "обратного хода луча" в TFT матрице)
dronу:
тебе какую схемку? проект в квартусе или самой платы? схемку проекта на недельке доделаю и скину на почту, контроллер экранчика получился конечно не ахти какой, но для моей задачи годится, а вот самой схемы платы нет, я ее сразу в layoute рисовал) могу разводку тоже скинуть, если нужно.
ps
Юрию и dronу особая благодарность за оперативную помощь :lol:
0 #35 Ю р и й 10.12.2012 06:36
Цитирую Toxa:
привет) у меня опять проблемка. на данный момент спаял платку с плисой EPM3128ATC100-10, sdramкой NP33S1616256K-7.5 спаянной с DIMM-планки и микрухой-преобразователем в lvds FIN3383. все заработало с полпинка, sdramка читается где то на 60-80 мгцах и с такой же скоростью данные кидаются в экран. на данный момент чтение/запись происходит пакетами по 4 слова. но мне нужно записывать только 1 слово. я выставил бит M9 конф-регистра в 1 но это ни чего не дало, запись также осуществляется пакетами, в чем проблема? пдфки перевожу гуглом, может не так что-то понял( или все же придется для записи одного слова сразу после подачи команды WRITE подавать BURST TERMINATE, а после нее PRECHARGE?

Возможно, не пишется в "MRS", изменение "Burst length" должно было помочь.
"BURST TERMINATE" - как вариант.
0 #34 dron 09.12.2012 18:27
привет Тоха . может тебе поможет сайт (http://yusoft.kulichki.com/russian/doc/epos-sdram_pc133.htm) регистр управления m0,m1,m2 должен быть 0
0 #33 dron 09.12.2012 17:38
привет Тоха . может тебе поможет pdf SDRAM M12L64164a (http://www.alldatasheet.com/datasheet-pdf/pdf/128313/ESMT/M12L64164A.html) стр 28 . если вам не трудно можете скинуть вашу схему SDRAM на микрухе EPM3064ATC100-1 0 на почту dronva@yandex.ru . заранее благодарен вам и Юрию.
0 #32 Toxa 09.12.2012 08:49
привет) у меня опять проблемка. на данный момент спаял платку с плисой EPM3128ATC100-1 0, sdramкой NP33S1616256K-7 .5 спаянной с DIMM-планки и микрухой-преобр азователем в lvds FIN3383. все заработало с полпинка, sdramка читается где то на 60-80 мгцах и с такой же скоростью данные кидаются в экран. на данный момент чтение/запись происходит пакетами по 4 слова. но мне нужно записывать только 1 слово. я выставил бит M9 конф-регистра в 1 но это ни чего не дало, запись также осуществляется пакетами, в чем проблема? пдфки перевожу гуглом, может не так что-то понял( или все же придется для записи одного слова сразу после подачи команды WRITE подавать BURST TERMINATE, а после нее PRECHARGE?
0 #31 Ю р и й 28.11.2012 08:15
Цитирую dron:
все ни как не получается подключить sdramку . пытаюсь повторить проект Тохи ( http://pixs.ru/showimage/shemagif_9827280_6375229.gif) .
на микрухе EPM3128ATC100-1 , других у нас нет . если вам не сложно, Юрий, можете подсказать вы посоветали :( Может неправильно работать из-за триггера "inst38".
Поставте вместо "DFF" - "DFFE" , на клок - "clk40", а
на "enable" - выход с "lpm_and2"). При таком включении тригер постоянно защёлкивается в =1 . Огромное спасибо Тохе и вашему сайту.

Посмотрите здесь - http://marsohod.org/forum/index.php?option=com_kunena&func=view&catid=8&id=1364&Itemid=2#1365
0 #30 dron 27.11.2012 08:20
все ни как не получается подключить sdramку . пытаюсь повторить проект Тохи ( http://pixs.ru/showimage/shemagif_9827280_6375229.gif) .
на микрухе EPM3128ATC100-1 , других у нас нет . если вам не сложно, Юрий, можете подсказать вы посоветали :( Может неправильно работать из-за триггера "inst38".
Поставте вместо "DFF" - "DFFE" , на клок - "clk40", а
на "enable" - выход с "lpm_and2"). При таком включении тригер постоянно защёлкивается в =1 . Огромное спасибо Тохе и вашему сайту.
0 #29 Toxa 24.11.2012 17:19
все заработало, как надо! и пишется и читается на 40мгц, но на 80 уже помехи проскакивают по линии данных... наверное провода длинные. кст узнал для себя прикольную вещь: если питание sdramке отрубить на 10 сек то данные в ней сохраняются без повреждений! а вот на минуту, и половина данных теряется и выводится в виде мусорных вкраплений на экране. щас пробую доделать схемку, чтобы можно было мегу прикрутить и будут часы/термометр/ календарь в гараж :lol:
0 #28 Ю р и й 22.11.2012 07:24
Цитирую Toxa:
все ни как не получается проинициализировать sdramку :sad: . если вам не сложно, Юрий, можете указать на ошибки в схеме. схема должна инициализировать sdrsm, а именно выждать более 100мкс, шлепая nopы, после следует команда PRECHARGE с установленным в единицу A10 (ALL BANKS), спустя 16 nopов идет AUTO REFRESH, и с ново 16 nopов + AUTO REFRESH, после приличного количества nopов происходит запись в регистр 0000100010 и конец инициализации. далее схема должна тупо читать с sdram пакеты по 4 слова циклами по 8 тактов. с начало идет активация ряда, спустя один nop следует команда read с установленным в единицу A10 (AUTO PRECHARGE), после следует 5 nopов и цикл повторяется заново. уже 3 день мучаюсь... вот схема, микруха EPM3064ATC100-10, частота после делителя на триггерах ~20мгц

Может неправильно работать из-за триггера "inst38".
Поставте вместо "DFF" - "DFFE" , на клок - "clk40", а
на "enable" - выход с "lpm_and2".
0 #27 Ю р и й 22.11.2012 05:06
Цитирую Toxa:
все ни как не получается проинициализировать sdramку :sad: . если вам не сложно, Юрий, можете указать на ошибки в схеме. схема должна инициализировать sdrsm, а именно выждать более 100мкс, шлепая nopы, после следует команда PRECHARGE с установленным в единицу A10 (ALL BANKS), спустя 16 nopов идет AUTO REFRESH, и с ново 16 nopов + AUTO REFRESH, после приличного количества nopов происходит запись в регистр 0000100010 и конец инициализации. далее схема должна тупо читать с sdram пакеты по 4 слова циклами по 8 тактов. с начало идет активация ряда, спустя один nop следует команда read с установленным в единицу A10 (AUTO PRECHARGE), после следует 5 nopов и цикл повторяется заново. уже 3 день мучаюсь... вот схема, микруха EPM3064ATC100-10, частота после делителя на триггерах ~20мгц http://i.pixs.ru/thumbs/2/2/9/shemagif_9827280_6375229.jpg: http://pixs.ru/showimage/shemagif_9827280_6375229.gif

Пришлите ваш *.bdf на info@marsohod.org, попробую отдебужить.
0 #26 Toxa 21.11.2012 13:42
все ни как не получается проинициализиро вать sdramку :sad: . если вам не сложно, Юрий, можете указать на ошибки в схеме. схема должна инициализироват ь sdrsm, а именно выждать более 100мкс, шлепая nopы, после следует команда PRECHARGE с установленным в единицу A10 (ALL BANKS), спустя 16 nopов идет AUTO REFRESH, и с ново 16 nopов + AUTO REFRESH, после приличного количества nopов происходит запись в регистр 0000100010 и конец инициализации. далее схема должна тупо читать с sdram пакеты по 4 слова циклами по 8 тактов. с начало идет активация ряда, спустя один nop следует команда read с установленным в единицу A10 (AUTO PRECHARGE), после следует 5 nopов и цикл повторяется заново. уже 3 день мучаюсь... вот схема, микруха EPM3064ATC100-1 0, частота после делителя на триггерах ~20мгц http://i.pixs.ru/thumbs/2/2/9/shemagif_9827280_6375229.jpg: http://pixs.ru/showimage/shemagif_9827280_6375229.gif
0 #25 Toxa 11.11.2012 11:09
Цитирую Toxa:
а все же выводить цветные полосочки это очень даже не скучно :lol: . мой первый проект на плис (не считая моргание светодиодом) и все работает. ваши стать Юрий про квартус мне помогают осваивать плис, низкий поклон вам за это ;-) . кстати вопрос: для тактирования экранчика я частоту генератора делю на два, но для управления DE использую частоту самого генератора, и возникла мысль, что в одном периоде можно уместить 4 бита, вместо 1го. таким образом цветовую палитру можно расширить до 15 бит вместо 3, а в фреймбуффере вместо 3 ног шины данных сдрамки задействовать 15.

сори за кривую арифметику, не 15 а 11 бит :oops:
0 #24 Toxa 11.11.2012 11:06
а все же выводить цветные полосочки это очень даже не скучно :lol: . мой первый проект на плис (не считая моргание светодиодом) и все работает. ваши стать Юрий про квартус мне помогают осваивать плис, низкий поклон вам за это ;-) . кстати вопрос: для тактирования экранчика я частоту генератора делю на два, но для управления DE использую частоту самого генератора, и возникла мысль, что в одном периоде можно уместить 4 бита, вместо 1го. таким образом цветовую палитру можно расширить до 15 бит вместо 3, а в фреймбуффере вместо 3 ног шины данных сдрамки задействовать 15.
0 #23 Toxa 09.11.2012 16:53
Цитирую Ю р и й:
Цитирую Toxa:
в вашем проекте какой частоты клок подан на экран? у меня в даташите на матрицу LT133XB указан клок в 65мгц, будет ли работать матрица на 40 или 20 мгц и есть ли максимальная и минимальная границы частоты клока матриц? и еще с какой скоростью вы считываете данные с пзушки?

Если в даташите не указана минимальная тактовая частота, то должно работать на любой. Только с какого-то момента будет заметно мерцание экрана.
В проекте 33м и мерцания еще не заметно.
На ПЗУ подается 100м.

большое спасибо за скорый ответ,
больше вопросов нет. :-)
+1 #22 Ю р и й 09.11.2012 13:22
Цитирую Toxa:
в вашем проекте какой частоты клок подан на экран? у меня в даташите на матрицу LT133XB указан клок в 65мгц, будет ли работать матрица на 40 или 20 мгц и есть ли максимальная и минимальная границы частоты клока матриц? и еще с какой скоростью вы считываете данные с пзушки?

Если в даташите не указана минимальная тактовая частота, то должно работать на любой. Только с какого-то момента будет заметно мерцание экрана.
В проекте 33м и мерцания еще не заметно.
На ПЗУ подается 100м.
0 #21 Toxa 09.11.2012 11:16
в вашем проекте какой частоты клок подан на экран? у меня в даташите на матрицу LT133XB указан клок в 65мгц, будет ли работать матрица на 40 или 20 мгц и есть ли максимальная и минимальная границы частоты клока матриц? и еще с какой скоростью вы считываете данные с пзушки?
0 #20 Simn 08.04.2012 12:31
Цитирую Ю р и й:
Цитирую Simn:
А где можно достать исходник трансмитера 18 бит LVDS на VHDL??? :sad:

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


так я про FPD-Link 18 bit serializer
0 #19 Ю р и й 22.03.2012 10:38
Цитирую Simn:
А где можно достать исходник трансмитера 18 бит LVDS на VHDL??? :sad:

Честно говоря не очень понял вопрос.
Каждый выход LVDS, это два обычных пина, только на один
подан прямой сигнал, а на другой тот-же сигнал через инвертор.
0 #18 Simn 22.03.2012 10:01
А где можно достать исходник трансмитера 18 бит LVDS на VHDL??? :sad:
+2 #17 Виталий 08.01.2012 15:36
Цитирую Ю р и й:
Цитирую Vitaly:
А не могли бы вы выложить проект с датафлешой? Интересно было бы посмотреть на реализацию)

"с датафлешой" в этом-же проекте,
или я что-то не так понял ?


Хотелось бы какой-то простой проект (чтения/записи) на датафлеш и вывод на порт информации с флешки.
0 #16 Ю р и й 06.12.2011 06:58
Цитирую Vitaly:
А не могли бы вы выложить проект с датафлешой? Интересно было бы посмотреть на реализацию)

"с датафлешой" в этом-же проекте,
или я что-то не так понял ?
0 #15 Vitaly 05.12.2011 21:26
А не могли бы вы выложить проект с датафлешой? Интересно было бы посмотреть на реализацию)
0 #14 Имя 26.09.2011 18:16
Цитирую Пётр:
Вот же ж барыги в нашем городе !
Был в 2-х радиомагазинах из 3-х, разъема D-SUB(для подключения через VGA) нет.
Пойду еще в третий, но не думаю, что он там будет ((

за три рубля купи дохлую видеокарту или мать со встроенным видео и сдуй разъем с нее. проблем-то...
0 #13 Ю р и й 26.09.2011 09:17
Цитирую intl:
А можно схему этого чуда ( в смысле подключения)
я вот просто весь в замешательстве как же вы подключили LVDS, согласование уровней и все такое.

Подробно о том как это делать правильно, описано
здесь: http://www.siliconbluetech.com/media/downloads/SiliconBlue_AN008_LVDS.pdf
Мы обошлись просто двумя противофазными выходами,
даже без резиков.
0 #12 intl 25.09.2011 23:30
А можно схему этого чуда ( в смысле подключения)
я вот просто весь в замешательстве как же вы подключили LVDS, согласование уровней и все такое.
0 #11 Пётр 25.09.2011 04:05
Вот же ж барыги в нашем городе !
Был в 2-х радиомагазинах из 3-х, разъема D-SUB(для подключения через VGA) нет.
Пойду еще в третий, но не думаю, что он там будет ((
+2 #10 Krevs 24.09.2011 10:42
"Описанный в предыдущей статье параллельный интерфейс"
Вы просто упомянули про него в прошлой статье. Не приведя не примеры временных диаграмм, ни принципов работы, ни кусков исходного кода, касаемых именно работы с ним. Так нельзя. Для обучающего проекта
0 #9 Пётр 20.09.2011 06:50
Цитирую fifan:
Только что просматривал статью про реализацию DVI. Вот ссылка - журнал Радио №4, 2008, стр. 30...32. Там подробно описано как сделать на ПЛИС и TFP410PAP.

Спасибо, ознакомился, очень интересно ! Получается, тайминги для VGA и DVi не отличаются, как я понял. Надо только организовать T.M.D.S.
0 #8 Пётр 20.09.2011 06:48
Цитирую Ю р и й:

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

Ага, я тоже так думаю
0 #7 fifan 19.09.2011 06:43
Только что просматривал статью про реализацию DVI. Вот ссылка - журнал Радио №4, 2008, стр. 30...32. Там подробно описано как сделать на ПЛИС и TFP410PAP.
0 #6 Ю р и й 18.09.2011 09:09
У нас нет практического опыта использования этого интерфейса. Всегда довольствовалис ь обычным VGA.
Для увеличения количества цветов можно поставить
ЦАП на резиках, я думаю,это будет гораздо проще.
0 #5 Пётр 18.09.2011 07:02
У меня есть идея заюзать DVI(аппаратные ресурсы есть, плата с Cyclone IV, так что всё потянет), только вот всё не могу раскурить протокол. Не могли бы вы помочь ?
Сам стандарт DVI описывает физическую среду передачи данных(разъемы, T.M.D.S. и прочее). Этот T.M.D.S. реализуется вроде несложно, да и у циклона есть дифференциальны е выходы(с этим тоже пока не разбирался). А где взять сами тайминги ? Вижу по описанию T.M.D.S., что там нужно те же цвета пикселя, HSYNC и VSYNC. Для 640х480 60 гц будет то же, что и для обычного VGA ? Или там другие тайминги ? Если не затруднит, может пнёте в нужный стандарт ? А то готовой реализации не нашел...
И еще, там вроде как видеоадаптер у монитора должен спросить, какие режимы он поддерживает... Интересно, будет ли работать, как в случае с VGA(ну посылай сигналы синхронизации да и всё), или нужно еще какую-нибудь инициализацию проводить..
-1 #4 Глазастер 14.09.2011 13:52
:lol: Зачем такие сложности с шилдами ? Еще пять ног не использовано, прицепить еще пять ПЗУшек, и использовать #CS -шесть картинок сразу будет :-*
0 #3 Ю р и й 14.09.2011 10:44
Цитирую Александр:
А в каком формате картинку во флешке храните?

3 бита на точку, 1440 точек в строке (540 байт) х 800 строк.
0 #2 Александр 14.09.2011 10:18
А в каком формате картинку во флешке храните?
+2 #1 Алексей 11.09.2011 17:40
спасибо за статью

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Фоторамка. Часть2. TFT-панели с LVDS интерфейсом.