Не прошло и трех лет, как у меня появилась свободная минутка написать небольшой пост про подсветку своего телевизора, тем более, что давно люди просили и спрашивали, что да как, но все не было времени написать.
И так. Начнем с того, что у меня есть комп, который я использую как 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 светиков как-то было в лом. Потому нарисовал небольшую программку, которая генерит сама это самый конфиг.
Там помимо самих светиков есть еще некоторая другая информация, которую можно включить в генерацию тоже. Но 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.
Ну вот собственно и все.
И как обычно в конце, ссылочки на прошивку, эмулятор и схему:
- Схема: AmbilightSchematic.pdf
- Прошивка: AmbilightSrc.rar
- Эмулятор/ КонфигГенератор: AmbiLightEmu.rar
PS: Может так случиться, что эмулятор не запустится по причине отсутствия некоторых библиотек — напишите в комментах, я доложу их тут, хотя я вроде уже когда то их выкладывал.
Оставить комментарий или два
Пожалуйста, зарегистрируйтесь для комментирования.