Фоновая подсветка HDMI-FPGA-LED. Часть 1: Введение
Существует множество проектов/статей о реализации фоновой подсветки для монитора/телевизора типа PC-USB-MCU-LED (ссылки в конце топика) и каждый раз, как поднимается данная тема, возникает мысль: а почему бы не сделать автономное устройство ни как не привязанное напрямую к вычислительным ресурсам PC, ну или что-то вроде того. А почему бы и нет?!
Для уверенного приема HDMI(DVI) сигнала существуют специализированные микросхемы типа ADV7611/ADV7612 производства Analog Device или TFP401 от Texas Instruments или микросхемы китайского производства EP903 от Explore Semiconductor. Все эти устройства осуществляют прием TMDS сигналов и преобразуют их в параллельный код, который затем может быть обработан на ПЛИС/DSP/MCU. Основной недостаток этих микросхем их цена, которая порой превышает цену хорошего ПЛИС или DSP, поэтому решил что использование reciever-ов TMDS сигналов в данной реализации устройства рассматривается не будет.
К наиболее распространенным ПЛИС относятся (по моему мнению) микросхемы производимые Xilinx и Altera. Среди них, приемники TMDS имеют лишь ПЛИС Xilinx, семейства Spartan-3AN и выше, поэтому ПЛИС Altera выпадают из рассмотрения, хотя для них и можно сделать преобразователь уровней, но сделать преобразователь уровней не вносящий искажений в полезный сигнал это уже сложнее. Плюсом в огород Xilinx, является наличие замечательных Application Note: Video Connectivity Using TMDS I/O in Spartan-3A FPGAs и Implementing a TMDS Video Interface in the Spartan-6 FPGA, которыми я и руководствовался.
Были выбраны 2 ПЛИС из разных семейств:

Плата дополнительно позиционируется как отладочная, поэтому на ней большинство ног ПЛИС выведены на PLS. К PLS подключаться будут светодиоды, UART и т.д. MiniUSB используется исключительно для подачи электропитания и ни какие данные по нему не передаются. Прошивка и отладка ПЛИС будет осуществляться по интерфейсу JTAG, через китайский клон Xilinx Platform USB Cable.
Lightpack. USB-подсветка монитора для усиления эффекта присутствия
Adalight Project Pack
Введение
Некоторые, возможные путей/методы реализации такого устройства:- Вклиниться в аналоговый видеоканал между PC и дисплеем, по быстрому его (видео сигнал) оцифровать, выдержав синхронизацию кадра, получить цвет каждого пикселя на дисплеи, затем по некоторому алгоритму расчитать какой цвет фоновой подсветки должен быть и выдать PWM сигнал на светодиоды. После всех этих манипуляций оцифрованный сигнал необходимо обратно конвертировать в аналоговый и отправить дальше на дисплей.
У данного метода одни только недостатки: аналоговая передача видеосигнала постепенно уходит в прошлое (спорный момент конечно, но все же); сложно и очень дорого оцифровывать быстро меняющийся видеосигнал; для обработки оцифрованного потока информации в реальном времени нужны производительные ПЛИС/DSP/MCU; возможны потери качества при обратном преобразовании цифрового в аналоговый сигнал; потребности в синхронизации кадра как принимаемого так и передаваемого видео сигналов; и т. д. Поэтому, предлагаю далее, варианты с обработкой аналогового сигнала не рассматривать вообще.
- Вклиниться в цифровой видеоканал между PC и дисплеем, выдержав синхронизацию кадра, получить цвет каждого пикселя на дисплеи, затем по некоторому алгоритму расчитать какой цвет фоновой подсветки должен быть и выдать PWM сигнал на светодиоды. После всех этих манипуляций принятый цифровой видео сигнал следует отправить дальше на дисплей.
Недостатки: скорость передачи информации по цифровым видеоканалам весьма высока, для обработки такого потока информации в реальном времени нужны производительные ПЛИС/DSP/MCU; возможны потери качества при дальнейшей передачи видеосигнала на дисплей; потребности в синхронизации кадра как принимаемого так и передаваемого видео сигналов; патентная чистота (с ней на самом деле все не до конца ясно) и т.д.
Преимущества: отпадает потребность в преобразователях аналоговый<->цифровой сигналы
- Множество современных видеокарт без особого труда осуществляют дублирование одного изображения на 2 монитора по независимым цифровым видеоканалам. Пользуясь данным режимом работы видеокарты можно осуществить следующее:
Выставить не большое разрешение на одном из каналов видеокарты, подключить его к ПЛИС/DSP/MCU, затем выдержав синхронизацию кадра, получить цвет каждого пикселя на дисплеи, затем по некоторому алгоритму рассчитать какой цвет фоновой подсветки должен быть и выдать PWM сигнал на светодиоды. И все!
Недостатки: потребность в видеокарте с двумя видеоканалами (в отличии от первых двух методов); вопрос с патентной чистотой остается открытым, но кажется не таким острым как в предыдущем методе
Аппаратная реализация
При выборе аппаратной реализации исходил из принципов: простоты (на сколько это возможно), дешевизны и доступности компонентов.HDMI(DVI)-reciever или все в одном?
На самом деле вопрос в выборе аппаратной платформы стоит очень остро: устройство должно успевать переваривание поток информации (для SVGA (800x600@60 Hz) 24 bits, Pixel Rate — 50 MHz) 500 Mb/s, а если разрешение будет больше то соответственно и поток информации будет еще больше. Также устройство должно иметь, желательно встроенные, дифференциальные приемки TMDS сигнала, которыми и являются сигналы передаваемые по HDMI или DVI видеоканалам.Для уверенного приема HDMI(DVI) сигнала существуют специализированные микросхемы типа ADV7611/ADV7612 производства Analog Device или TFP401 от Texas Instruments или микросхемы китайского производства EP903 от Explore Semiconductor. Все эти устройства осуществляют прием TMDS сигналов и преобразуют их в параллельный код, который затем может быть обработан на ПЛИС/DSP/MCU. Основной недостаток этих микросхем их цена, которая порой превышает цену хорошего ПЛИС или DSP, поэтому решил что использование reciever-ов TMDS сигналов в данной реализации устройства рассматривается не будет.
ПЛИС или DSP?
DSP-процессоры всем хороши и писать для них можно на С, и купить в розницу проблем нет, но они не имеют встроенных приемников TMDS, к тому же в цене они порядком отличаются от ПЛИС (или равны) и имеют на борту еще много чего совершенно не нужного. С ПЛИС все по другому: писать надо на Verilog или VHDL, некоторые ПЛИС имеют встроенные приемопередатчики TMDS сигналов, скорость обработки сигналов очень высокая, периферии почти никакой нет.К наиболее распространенным ПЛИС относятся (по моему мнению) микросхемы производимые Xilinx и Altera. Среди них, приемники TMDS имеют лишь ПЛИС Xilinx, семейства Spartan-3AN и выше, поэтому ПЛИС Altera выпадают из рассмотрения, хотя для них и можно сделать преобразователь уровней, но сделать преобразователь уровней не вносящий искажений в полезный сигнал это уже сложнее. Плюсом в огород Xilinx, является наличие замечательных Application Note: Video Connectivity Using TMDS I/O in Spartan-3A FPGAs и Implementing a TMDS Video Interface in the Spartan-6 FPGA, которыми я и руководствовался.
Были выбраны 2 ПЛИС из разных семейств:
- Xilinx Spartan 6, а именно XC6SLX9-2TQG144C. Подробнее здесь;
- Xilinx Spartan 3A, а именно XC3S200A-4VQG100C. Подробнее здесь.
Связь с ПК
Пока получается все красиво, но есть одно не большое но: от связи с ПК (помимо видеоканала) абсолютно и бесповоротно избавиться никак не получится. Так как необходимо задавать кол-во зон захвата, кол-во светодиодов, вводить ограничения на скорость смены цветов и т.д. По этому поводу, было решено что на стороне ПЛИС реализую асинхронный приемопередатчик (UART) и уже к нему подключаю все что угодно выдающие UART с уровнями TTLФункциональная схема
По причине не законченности устройства, принципиальную схему здесь не привожу, оставлю лишь функциональную схему:
Плата дополнительно позиционируется как отладочная, поэтому на ней большинство ног ПЛИС выведены на PLS. К PLS подключаться будут светодиоды, UART и т.д. MiniUSB используется исключительно для подачи электропитания и ни какие данные по нему не передаются. Прошивка и отладка ПЛИС будет осуществляться по интерфейсу JTAG, через китайский клон Xilinx Platform USB Cable.
В место заключения
В следующей части нас ждет:- Печатная плата: разводка, изготовление;
- Альтернативы;
- Hellow VGA;
- Галопом по Европам: Hellow TMDS.
Ссылки
Пиксельная подсветка просто и быстроLightpack. USB-подсветка монитора для усиления эффекта присутствия
Adalight Project Pack
17 комментариев
В вообще, проект отличный.
У меня только вопрос что такое ESD на блок схеме?
Автономное устройство должно включаться между источником и телевизором как бы в разрыв HDMI кабеля.
Думал о таком варианте:
— HDMI splitter ($15 на eBay)
— HDMI to S-Video converter ($60 на eBay)
— видеосигнал раскладывать на RGB как здесь:
www.unagel.de/pal2rgb/pal2rgb.htm
— капчерить RGB как сделано на AVR здесь:
forum.easyelectronics.ru/viewtopic.php?f=16&t=834
или здесь:
roboforum.ru/forum88/topic6822-15.html
(достаточно снять кадр в минимальном разрешении, хоть 160x120 )
— вывести всё на SPI ленту на WS2801 или WS2811.
В итоге прикинул, сколько это будет стоить (дороже Android miniPC) и сколько придётся разбираться — решил подождать, пока Lightpack выпустят своё ПО для Android, и после этого останется собрать только простейшее устройство на at90usb16 :)
Также в результате поисков по интернету нашел проект, который сделан как раз по варианту выше, на Cortex M-4:
www.keiang.de/Content-pid-32.html
автор его активно развивает.
Если же вы решили привязаться к dualhead видеокарте, тогда зачем связываться с HDMI/DVI? Слишком уж сложно это. Проще воткнуть переходник DVI2VGA и капчерить аналоговые RGB — не нужно разбирать цифровой поток, можно пропускать кучу пикселей в строке; Cortex-M4 должен справиться. К тому же у видеокарт обычно есть и s-video выход — что упрощает проект до минимума. Главное помнить, что для вычисления цвета зон не нужна картинка в полном разрешении.
Работает, но некоторые проблемы возникающие на PC принципиально на PC без вмешательства производителей компонентов PC или операционной системы или драйверов решить невозможно. Далеко ходить не надо — почитайте баг трекер Lightpack.
Сложности не пугают. При обработке HDMI/DVI функционал устройства шире + не стоит забывать про профит :)
PS Проект продвигается помаленьку
Еще вопрос, какую оперативку используете\будете использовать?
Пока получается сборная солянка из кусков кода. На самом деле писать там совсем немного — один коненчный автомат и логика местами. Гораздо сложнее правильно сконфигурировать периферию Spartan, со всеми особенностями камня и ISE.
PS Кста, новая статья готова на 90-95%