Главная arrow Программирование arrow AVR arrow Lightpack: система AMBILIGHT на мониторе домашнего компьютера Tuesday, October 24 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Lightpack: система AMBILIGHT на мониторе домашнего компьютера Версия для печати
Написал microsin   
01.03.2011

Открытая разработка lightpack позволяет сделать на мониторе компьютера заднюю динамическую подсветку, зависящую от изображения на экране. Принцип работы такой же, как у запатентованной системы AmbiLight компании Philips. Особенно полезна технология при просмотре фильмов, потому что усиливается эффект присутствия от происходящего действия. Исходники и описание проекта доступно для всеобщего доступа (см. Ссылки [1]).

Принцип работы довольно несложен - программа на компьютере анализирует цвета заданных областей экрана, и передает эти данные на устройство USB HID, которое и управляет светодиодами. В данные пакетов закодирована яркость каждого для каждого светодиода, и микроконтроллер устройства USB (применен чип AT90USB162) с помощью программно формируемой ШИМ регулирует яркость каждого светодиода RGB.

Мне тоже захотелось собрать себе такое же устройство, используя макетку AVR-USB162 (см. Ссылки [3, 4]). Работ по сборке будет совсем мало, так основная часть схемы (обвязка микроконтроллера, подключение по USB) уже готова. Но к сожалению, в оригинальном проекте (см. [1]) для подключения светодиодов используются дефицитные LED-драйверы MBI5026. Таких микросхем найти на радиорынке не удалось, сколько ни искал. Не оказалось даже близких по функциям аналогов - MBI5027, MBI5028, MBI5029, MIC4467, MIC4468, MIC4469, DM133, DM141, DM413, DM632. Поэтому решил микросхемы LED-драйверов выкинуть совсем, оставить только 4 RGB-светодиода (купил мощные сверхяркие KPTR-080, см. Ссылки [2]) и миниатюрные полевые ключевые транзисторы. Искал на рынке IRLML6401 (P-канал) и IRLML2402 (N-канал), удалось найти IRLML6401. После этого осталось начертить несложную схему и приступить к сборке "железа" и переделке firmware для него.

[lightpack hardware]

LP-AVR-USB162-01.png

Это измененная, упрощенная схема lightpack, рассчитанная для сборки на макетной плате AVR-USB162. Схема подробных пояснений не требует. Микроконтроллер управляет ключами на транзисторах IRLML6401. Чтобы открыть транзистор, микроконтроллеру нужно выставить на соответствующей ножке 0, при этом через сток транзистора и токоограничительный резистор 68 Ом на анод цветового канала RGB-светодиода потечет ток, и светодиод загорится. Транзистор может быть только в двух состояниях - открыто (светодиод горит) и закрыто (светодиод погашен). Все промежуточные состояния яркости достигаются быстрыми переключениями светодиода, незаметными для глаза человека - применяется широтно-импульсная модуляция (ШИМ, английская аббревиатура PWM). Благодаря наличию макетки AVR-USB162 осталось напаять только транзисторные ключи, внешний коннектор, и изготовить светодиодные модули, которые надо будет потом закрепить на углах монитора.

Я сделал 4 светодиодных модуля (на каждом установлен один RGB-светодиод и 3 токоограничительных резистора). Сначала были проведены небольшие испытания по подбору токоограничительного резистора на каждом из каналов R, G и B при напряжении питания 5 вольт. Номинал резистора примерно рассчитывался по максимально допустимому тока нагрузки для порта USB (500 ма примерно должны распределиться по всем 12 каналам). Сам микроконтроллер AT90USB162 потребляет совсем немного (около 15 ма).

LED-testing.PNG 

  R = 33 ом R = 51 ом R = 56 ом R = 68 ом
R, красный   60 мА   46 мА
G, зеленый   43 мА    
B, синий 69 мА 45 мА 42 мА 34 мА

По результатам испытаний было выяснено, что номинал резистора для всех каналов можно взять одинаковый - 68 Ом (несмотря на то, что ток при этом по цветовым каналам будет разный, яркость свечения примерно одинаковая). Ток через каждый канал R, G, B при этом получился в диапазоне 35..45 ма (в зависимости от цвета канала). Светодиоды могли бы работать при намного бОльшем токе, но тогда их понадобилось бы ставить на радиатор, и использовать для конструкции отдельный источник питания (порт USB больше 500 ма не потянет). Да это и не нужно, так как яркость оказалась и так слишком большая даже на токе 35..45 ма на канал.

lightpack_IMG_1145.JPG

На модуль припаял четырехпроводный кабель, и для прочности, чтобы не отломились медные жилы в местах пайки, закрепил его термоклеем. Длину кабеля отмерил по монитору, в расчете, что макетная плата AVR-USB162 будет закреплена примерно с правом нижнем углу монитора.

lightpack_IMG_1148.JPG

На обратную сторону каждого кабеля напаял стандартные четырехконтактные "мамы". Цоколевка у всех кабелей одинаковая, чтобы при необходимости каналы можно было менять местами, просто перетыкая разъемы - 1 GND (общий провод, земля, катоды светодиодов), 2 анод цвета R (красный), 3 анод цвета G (зеленый), 4 анод цвета B (синий).

lightpack_IMG_1155.JPG

Теперь осталось распаять ключи. Монтаж на макеной плате сделал разноцветным проводом МГТФ, чтобы было наглядно прохождение сигналов по каналам R, G, B. Для шин питания выбрал МГТФ потолще.

lightpack_IMG_1160.JPG lightpack_IMG_1157.JPG lightpack_IMG_1165.JPG

Подключение светодиодов к контактам P1..P22 (портам) макетки AVR-USB162:

№ контакта
порт
цвет
светодиод
P9
PC5
R
RGBLED1
P10
PC6
G
P11
PC7
B
P4
PB5
R
RGBLED2
P5
PB6
G
P6
PB7
B
P12 PD0 R
RGBLED3
P13 PD1
G
P14 PD2
B
P15
PD3
R
RGBLED4
P17
PD5
G
P22
PD7
B

Использование других ножек микроконтроллера:

  порт
сигнал (назначение)
 
  PB0
~SS (аппаратная выборка SPI)
 
  PB1 SCLK (тактирование бит SPI)
 
  PB2
MOSI (выход данных SPI)
 
  PB3
MISO (вход данных SPI)
 
  PD4
LED (макетка AVR-USB162)  
  PD6
LED (макетка AVR-USB162MU)  
  PD7
HWB (сигнал активизации DFU bootloader)
 

Для светодиодных модулей сделал отражатели из крышки банки из-под лимонных долек, для чего распилил её на 4 части. По замыслу, бордюрчик должен защищать глаза пользователя от бокового света светодиодов (которые, кстати говоря, светят настолько ярко, что слепят, если прямо на них смотреть). Модули приклеил к отражателям клеем "Момент", а сами отражатели налепил на двухсторонний скотч.

lightpack_IMG_1173.JPG lightpack_IMG_1176.JPG lightpack_IMG_1180.JPG

Навесил все хозяйство сзади на монитор.

lightpack_IMG_1184.JPG lightpack_IMG_1186.JPG lightpack_IMG_1188.JPG lightpack_IMG_1195.JPG

Теперь надо было приступить к переделке firmware, так как схема у меня отличается от оригинальной схемы lightpack.

[lightpack firmware]

Нужно, чтобы микроконтроллер управлял не микросхемами драйверов, как у оригинального lightpack, а напрямую управлял портами ввода/вывода микроконтроллера. Для этого скачал исходники с домашней странички проекта (см. Ссылки [1]). Все оказалось довольно просто - весь функционал по зажиганию светодиодов оказался сосредоточен в подпрограмме lightpack\Firmware\Lightpack.c -> void PWM(void). Эта подпрограмма вызывается в обработчике прерывания таймера 1, и программно формирует ШИМ для всех каналов светодиодов (данные для ШИМ поступают по USB). Выкинул модуль макросов управления микросхемами драйверов LedDriver.h, написал свои макросы управления портами в pins.h, и подпрограмму начальной инициализации портов. Скомпилировал, прошил через USB DFU бутлоадер Flip, попробовал. Все заработало сразу, как ни странно. В компьютере определилось новое устройство lightpack, драйвера не понадобились (т. к. это USB HID). Остальные части firmware (подсистема USB на библиотеке LUFA, дескрипторы, сервисные подпрограммы) переделок не потребовали.

Запустил ПО хоста Software_v4.0.9.exe. Программа увидела устройство, в трее зажегся желтый значок. Отлично, можно приступать к экспериментам. 

[lightpack software]

ПО хоста Software_v4.0.9.exe написана в кроссплатформенной среде разработки QT (см. Ссылки [5]). Я пока в этих исходниках не разбирался, просто попробовал скомпилировать - все компилируется.

[Результаты испытаний]

1. ПО хоста пока кривое (что, кстати, авторы и не скрывают) - сильно грузит комп (до 15 %), курсор мыши мигает. При уходе монитора в энергосберегающий режим программа зависает, и светодиоды на USB-устройстве остаются гореть в случайном состоянии (по идее они должны выключаться).

lightpack_host_soft_err01.PNG

После перезапуска exe-файла программы работа возобновляется нормально.

2. Светодиоды KPTR-080 как выяснилось, светят слишком ярко, раздражают глаза, и свет от них рассеивается и перемешивается плохо. При этом видны тени с разноцветной окантовкой - из-за того, что кристаллы R, G, B в одном светодиоде находятся друг от друга на некотором расстоянии, а линзы у светодиодов не рассеивают свет (они у меня не матовые, а прозрачные). Проблема разрешилась, когда я залепил светодиоды бумажным скотчем. После этого подсветка стала отличной, и смотреть кино стало приятно.

3. Не хватает ручной (или ручной + автоматической, в зависимости от внешнего освещения) регулировки общей яркости у светодиодов. Наверное, для этого можно использовать один аппаратный канал ШИМ микроконтроллера и один ключевой полевой транзистор. Идеальный вариант - добавить управление яркостью в протокол, и добавить в аппаратуру устройства USB датчик освещенности.

4. ПО хоста не поддерживает автоматическое отслеживание смены разрешения экрана (например, при запуске какой-нибудь игры в полноэкранный режим). 

5. ПО хоста не поддерживает двухмониторной и трехмониторной конфигурации. 

6. Применить дефицитные микросхемы драйверов для управления светодиодами, как сделали авторы в оригинальном проекте, да еще делать для них программный SPI - неудачная идея. Однозначно нужно использовать аппаратный SPI, и микросхемы драйверов выстраивать в цепочку. Таким способом можно подключить любое количество драйверов и любое количество светодиодов. Однако вообще использование драйвера хорошо подойдет только для коммерческой продукции, для радиолюбителя такой вариант труден для повторения, так как микросхемы драйвера достать практически невозможно. Поэтому лучше задействовать порты ввода/вывода для управления светодиодами. Тут возможны два варианта. Первый - сделать как в моей схеме, тогда можно поставить только 4 светодиода, и SPI использовать для подключения дополнительных модулей с драйверами (со своим источником питания, так как USB уже не потянет. Второй вариант - сделать матрицу светодиодов, тогда можно совсем отказаться от драйверов, и количество светодиодов можно значительно увеличить. Например, матрица 6x6 позволяет реализовать 36 каналов, т. е. 12 RGB светодиодов. Но тут другая сложность - нужно тщательно спроектировать систему, чтобы правильно кодировать цвета в матрице, и увеличивается количество проводов, идущих к каждому RGB-светодиоду (6 проводов вместо 4). Кроме того, нужен отдельный источник питания (USB уже не потянет) с защитой, и предусмотреть быстрый WDT в firmware, исключающий зависание матрицы - чтобы не спалить светодиоды или токоограничительные резисторы.

7. Наверное, изначально нужно было проектировать lightpack, используя уже готовые наработки по протоколу обмена (я имею в виду ardulight [6] и ambilight-alex-fox.spb.ru [9]), и делать USB CDC, а не USB HID. Это упростило бы написание ПО хоста для радиолюбителей, так как USB CDC - это тот же самый последовательный порт RS-232, а писать программы под него радиолюбители умеют. Для коммерческой же реализации лучше использовать USB HID, так как его проще сделать устойчивым к программным сбоям - не нужно переподключать устройство USB, если произошла какая-то проблема с ПО хоста и, наоборот, не надо перезапускать ПО хоста, если произошло случайное отключение кабеля от устройства USB.

8. Разъем miniUSB не надежен для питания устройства под большой нагрузкой. Лучше было взять розетку типа B, которую ставят, например, на принтеры.

9. В протокол обмена данными нужно добавить команду перехода в DFU bootloader Flip. Это позволит не перетыкать USB устройство, если его нужно перепрошить. 

Вывод - авторы задумывали устройство с прицелом в будущем поставить его на коммерческую основу, и воспользовались GPL для раскрутки и упрощения разработки проекта. Однако реализация железа взята неудачная. Нужно было применить аппаратный SPI для управления драйверами, и использовать порты ввода-вывода микроконтроллера, чтобы напрямую управлять ключами.

В целом впечатления от работы устройства lightpack положительные, киношки стало смотреть интереснее. В заключение - демонстрационный видеоролик авторов.

[Ссылки]

1. Подсветка ambilight на монитор - проект lightpack.
2. KPTR-080 - мощный RGB светодиод 3 Вт (RGB power led 3w).
3. Макетная плата AVR-USB162.
4. Макетная плата AVR-USB162MU.
5. Страничка загрузки Qt от Nokia.
6. Другая реализация ambilight на Arduino - ardulight.
7. Исходники, фото, схема облегченной версии lightpack, собранной на макетной плате AVR-USB162.
8. Промышленная реализация AMBILIGHT 4 PC.
9. Еще любительские разработки ambilight - ambilight-alex-fox.spb.ru, Atmo-plugin, BobLight.

Последнее обновление ( 01.03.2013 )
 

Комментарии  

  1. #2 вася
    2011-04-0523:40:39 1) поставить обычные эмиттерные повторители или просто цифровые транзисторы.
    2) убрать USB питание светодиодов. В конце концов есть +12в в компе. А это цепочки светодиодов и масштабирование до размеров 42-50".
    3) не делать отдельный USB датчик освещенности. А просто прикрутить фоторезистор серии VT91/93 к АЦП камня.
    4) имхо неплохо было бы добавить "фоновый" канал белого цвета.

    microsin:
    1) бред…
    3) никто не предлагал отдельный USB-датчик освещенности, и у чипа AT90USB162 нет АЦП.
  2. #1 Atarity
    2011-03-0201:08:46 Спасибо за обзор. Использовать жестяную банку для отражателей — необычное и, наверное, вполне эффективное решение. Рассеиватели вам всё-таки понадобились из-за низкого качества светодиодов.

    Буду благодарен, если вы добавите нам багрепорт по поводу зависания программы в спящем режиме: http://code.google.com/p/lightpack/issues/list с более-менее подробным описанием.

    Что касается яркости, то в свежих версиях исходников уже реализованы профили настроек, а управлять яркостью каждого отдельного канала можно через файл-конфиг (скоро задокументируем ).

    Ещё раз благодарю за описание ваших экспериментов.

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

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

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

< Пред.   След. >

Top of Page
 
microsin © 2017