RSS
people

Ambilight для HTPC TV

Не прошло и трех лет, как у меня появилась свободная минутка написать небольшой пост про подсветку  своего телевизора, тем более, что давно люди просили и спрашивали, что да как, но все не было времени написать.

Ambilight

И так. Начнем с того, что у меня есть комп, который я использую как HTPC, на базе openelec Linux c XBMC в качестве GUI. Под XBCM есть плагин, называется boblight.

Почитав внимательно про этот плагин, и как он работает, я подумал, что дело то плевое, и состряпал, значит, свою подстветку на базе RGB светодиодов с драйверами, если мне не изменяет память, ws2811. Описание драйверов находится в интернете на ура.

Так вот. Этот плагин настраивается через конфигурационный файлик, в котором надо описать все светодиоды, которые будут применены. Для одного светодиода конфигурация выглядит так:

 

[light]
name left01
color red ambilight 1
color green ambilight 2
color blue ambilight 3
hscan 0 8.00
vscan 94.44 100.00

 

Это для одного! Для моего телика у меня вышло 65 RGB светиков. Набирать 6 строк для всех 65 светиков как-то было в лом. Потому нарисовал небольшую программку, которая генерит сама это самый конфиг.

AmbiLightEmu

Там помимо самих светиков есть еще некоторая другая информация, которую можно включить в генерацию тоже. Но boblight для Винды и boblight для Линукс — разные вещи, как выяснилось, и если один поддерживает какие то конфигурационные слова, другой не знает про них ничего, так что надо пробовать.

Так же эта программка может выступать в качестве эмулятора светодиодной ленты. Работает не так шустро, но вроде как работает. Этот режим помог мне отладить протокол коммуникации с boblight по протоколу LTBL (чтобы это не означало).

Сейчас я не смог найти нормального описания самого протокола. Той страницы больше нет. Но из собственного кода я мог кое что вспомнить.

И так сам протокол выглядит примерно так:

Сначала идут два байта синхронизации 0×55, 0xAA.

Затем байт команды, в котором если 8й бит равен 1, то это команда, иначе — данные.

По какой то причине у меня в коде ответ на все запросы закоментирован, и boblight ничего не получает в ответ. Но оно работает и без этого.

По идее, boblight шлет запрос, чтобы определить максимальное значение цвета для канала. Но, как я уже сказал, ответ на этот запрос у меня заблокирован (почему — сейчас уже не вспомню).

Следом за командой идет количество данных. Если в этом пакете шла команда — то этот байт показывает количество байт. А если в этом пакете были данные цветов, то этот байт показывает количество цветов, каждый из которых состоит из двух байт.

Ну и потом идут эти самые данные.

Вот собственно и весь протокол.

С самого начала я выбрал, как обычно, микроконтроллер ATMega128 по причине наличия большого количества памяти. В первых версиях этого количества мне было не нужно, но потом я добавил интересную фичу...

Но по порядку. С начала я запихивал в светики цвета, как их получал от boblight. Это давало довольно сильное мерцание цветов, особенно при быстрой смене кадров, как, например, при просмотре музыкальных клипов. По этому я добавил фичу, в которой смена цветов идет плавно от старого значения к новому. Теперь цвета не так мерцают, а плавно переливаются. Т.е. мне понадобилось во первых два буфера, чтобы исключить ошибку мультизадачности, когда идет прием данных от boblight и их запись в светики,  и еще один буфер для текущих значений, чтобы знать, от какого цвета производить плавный переход к новому цвету.

Так что почти все 4 кб РАМы были успешно освоены.

Вот примерно так.

А, еще один момент. На фотках платы в старых постах нет реле, управление которым есть в коде, и оно есть на схеме. Это так же недавнее усовершенствование, чтобы в «выключенном» состоянии отключать светодиодную ленту. Хоть светики и не светятся, но лента продолжает жрать свои 100 мА, примерно. Так что пришлось добавить небольшую релюшку.

Управление светиками довольно простое, нужно прощелкать все цвета по двум проводам: данных и тактовой, и в конце сделать паузу в 500 микросекунд.

Я это делаю через SPI интерфейс, настроенный так: MSB first, rising clock, first edge. Частота 2 MHz.

Ну вот собственно и все.

И как обычно в конце, ссылочки на прошивку, эмулятор и схему:

PS: Может так случиться, что эмулятор не запустится по причине отсутствия некоторых библиотек — напишите в комментах, я доложу их тут, хотя я вроде уже когда то их выкладывал.

Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.