-
Re: Фоновая подсветка телевизора Ambilight
вот, выкладываю сурсы.
Соединение такое:
PortD Pin7 (Arduino digital 7) соединен с RCK 74hc595 (Pin 12)
PortB Pin3 (Arduino digital 11) соединен с SI 74hc595 (Pin 14)
PortB Pin5 (Arduino digital 13) соединен с SCK 74hc595 (pin 11)
Код выполнен в AVR Studio, поэтому в нем нет
void Setup(void)
и
void loop(void)
вместо них единый
void main(void)
Brightness[48] - массив яркостей, который нужно показать.
Для примера яркость меняется по циклическому закону - увеличивается.
for (i=0;;i++)
{
_delay_ms(1);
for (uint8_t j=0;j<48;j++)
Brightness[j]++;
}
bitdata[6] (48 бит) побитово хранит то, что нужно выдать в 595-ые. Параллельно подключенные светодиоды одного цвета одной зоны соответствуют одному биту.
Когда начинается новая итерация ШИМ (PWM_Counter==0) bitdata заполняется битовыми единицами - 0xFF.
if (PWM_Counter==0)
{
// по умолчанию при PWM_Counter==0 все светодиоды горят, а затем гаснут по мере необходимости.
for (uint8_t l=0;l<6;l++)
bitdata[l]=0xff;
Затем, каждый элемент Brightness[] проверяется и если он меньше или равен PWM_Counter, то соответствующий бит в bitdata[] сбрасывается и этим гасится одна зона одного цвета.
Таким образом, из 256 итераций цикла (PWM_Counter от 0 до 255) каждый из 48 битов в bitdata[] установлен в 1 ровно столько итераций, сколько установлено в байтах яркости Brightness[].
Код тут оптимизирован, но несмотря на это код из таймера жрет порядка 70% процессорного времени. _delay_ms(1) реально длится 2.5 мс.
Если же повторяющийся кусок убрать в цикл, то быстродействие падает еще почти в полтора раза - _delay_ms(1) ждет уже 3.5 мс...
Замеры производились при оптимизации -O3.
Если же проводить замеры со стандартной для Arduino оптимизации -O2
то приведенный код дает
3.5 мс вместо _delay_ms(1)
а в случае замены повторяющегося куска циклом, таймер начинает потреблять 100% процессорного времени.
PHP код:
#define TCNT2_Const 256-9
uint8_t volatile PWM_Counter_v;
uint8_t Brightness[48];
uint8_t bitdata[6];
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB |= (1<<3)|(1<<5);
/* Enable SPI, Master, set clock rate fck/2 */
SPSR =(1<<SPI2X);
SPCR = (1<<SPE)|(1<<MSTR);
}
void SPI_MasterTransmit(char cData)
{
uint8_t a=SPSR;
a=SPDR; // очищаем SPIF перед отправкой данных, чтобы этот бит выставился только после завершения отправки
SPDR = cData;
}
void Out(void)
{
while(!(SPSR & (1<<SPIF)));// ждем пока не завершится передача данных
uint8_t a=SPDR;
PORTD |= (1<<PIN7);
PORTD &= ~(1<<PIN7);
PORTD = PORTD ^ (1<<PIN3);
}
SIGNAL(TIMER2_OVF_vect)
{
TCNT2 = TCNT2_Const;
Out();
uint8_t PWM_Counter=PWM_Counter_v;
{
if (PWM_Counter==0)
{
// по умолчанию при PWM_Counter==0 все светодиоды горят, а затем гаснут по мере необходимости.
for (uint8_t l=0;l<6;l++)
bitdata[l]=0xff;
}
uint8_t * Bright;
Bright= &Brightness[0];
for (uint8_t j=0;j<6;j++)
{
uint8_t CurrData=bitdata[j];
uint8_t bit=1;
// for (uint8_t k=0;k<8;k++)
// 0
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 1
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 2
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 3
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 4
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 5
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 6
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
// 7
{
if (*Bright<=PWM_Counter)
CurrData &= ~bit;
bit=bit<<1;
Bright++;
}
bitdata[j]=CurrData;
SPI_MasterTransmit(CurrData); // выводим очередные 8 бит
}
}
PWM_Counter_v++;
}
int main(void)
{
PWM_Counter_v=255;// первым делом копируем данные в CurrBrihgtness
uint8_t i;
for (i=0;i<48;i++)
{
Brightness[i]=(1<<(i&7));
// Brightness[i]=0;
}
PORTB = 0;
PORTD = 0;
DDRD |= (1<<PIN3);
DDRD |= (1<<PIN7);
SPI_MasterInit();
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
TCCR2B |= (1<<CS22);
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
TCNT2 = TCNT2_Const; // 16000000/256/100/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
sei();
for (;;)
{
_delay_ms(1);
for (uint8_t j=0;j<48;j++)
Brightness[j]++;
}
}
UPD: код я у себя тут еще оптимизировал, но выигрыш копеечный.
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Я тут подумал , нужно все таки делать на одной плате все делать, а к разьемам подключать лены светодиодные.
Предлагаю свой вариант разбивки Ambilight подсветки на зоны
Вложение 7747
Моя одобряет ! :-)
-
Вложений: 2
Re: Фоновая подсветка телевизора Ambilight
Какой из вариантов подключения предпочтительней? Я склоняюсь к последнему
Вложение 7759
Вложение 7760
-
Re: Фоновая подсветка телевизора Ambilight
второй вариант почти правильный. Почти - потому, что когда я использовал 12-й вывод, были проблемы. Этот вывод является выводом SPI, видимо поэтому не получается им дергать когда хочется. Вот я и переключил на 7 вывод.
Еще бы надо найти аналог uln2003 на полевиках. Я посмотрел, у них при токе в районе 500 мА, на ключах падает порядка вольта. Надо считать токи и тепловыделение.
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
По токам , если использовать светодиодную ленту двойной плотности, то 800мА на 1 метр , я думаю что такой зоны у тебя не будет.
Вот смотри что нашел Вложение 7769
и вот еще драйвер светодиодов с ШИМ и на 24 канала
Еще один драйвер
-
Re: Фоновая подсветка телевизора Ambilight
tle6020 - какая-то хитрая штука, пока не вкурил
драйверы светодиодов - штука прикольная, надо посмотреть, может есть такие с мощными выходами. У них наоборот - светодиоды включаются не параллельно, а последовательно.
По поводу uln2x03: несмотря на заявленные 500мА на каждый вывод, у этой микрухи есть ограничение на 1W суммарного тепловыделения. И получается, что максимум, что можно протащить - примерно по 100мА на каждый канал одновременно при 100% яркости.
По твоей схеме расположения линеек, получаем порядка 25-30 см на каждую полоску. Это согласуется только с линейкой однократной плотности и то на пределе :-(.
Паять 42 транзистора (и развести плату еще) - это пипец. Но, что самое интересное, если взять банальные самые дешевые bc817, то можно на каждую линию отвести уже более 400мА, хотя транзисторы в мелком корпусе - sot23.
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
Цитата:
По поводу uln2x03: несмотря на заявленные 500мА на каждый вывод, у этой микрухи есть ограничение на 1W суммарного тепловыделения. И получается, что максимум, что можно протащить - примерно по 100мА на каждый канал одновременно при 100% яркости.
По твоей схеме расположения линеек, получаем порядка 25-30 см на каждую полоску. Это согласуется только с линейкой однократной плотности и то на пределе :-(.
Согласен.
При падении 1в х 0,5А=0,5Ватт тепла на один канал умножаем на 7 и получаем 3,5 ватта.
Вот микруха TLE 6244X на 18 каналов при токе 1.1А, работает с SPI. Только у нас в России они под заказ :(
-
Re: Фоновая подсветка телевизора Ambilight
Выложил в шапке программу работающую от 1 до 42 каналов, в зависимости от настроек
-
Re: Фоновая подсветка телевизора Ambilight
я как-бы на форуме нечесно - ни ардуины нету, ни машины, но рискну поспрашивать ;)
тоже ношусь давно с идеей задней подсветки для телевизора, подошел совсем близко (нашел rgb-светодиоды, сделал лампу с подсветкой, которая плавно меняет цвет со временем и подошел плотно к тестам с источниками света), и встает вопрос с софтом; можно у автора поста узнать принцип, по которому его программа работает?
когда обдумывал - как бы я это делал - то пока придумал только вариант с direct-show фильтром, который бы ставился перед рендерером, анализировал бы зоны и передавал бы инфу для подсветки
только тут вижу 2 проблемы: всю эту светотень хочу добавить к хтпс-компьютеру, который подключен к 32" тв
На компе стоит W7 + xbmc + eventGhost для управления пультом; xbmc - кросплатформенный проект, который не использует directshow для проигрывания - вот и первая моя проблема
Но последнее время стали появлятся сборки, в которых на винде используется directshow - для того, чтобы использовать возможности видеокарт для аппаратного декодирования видео, т.е. теоретически идея с фильтром как-бы срабатывает - но тут свои заморочки - между фильтром-декодером и рендерером нельзя вставлять ничего (видимо декодер работает прямо с памятью видеокарты, не курил сильно причину) - т.е. если есть ускорение (а я комп специально собирал со встроенным видео, которое умеет аппаратно декодить), то снова мой план не срабатывает
Т.е. пока вариант только такой - использовать ds-сборки и отказаться от ускорения; собственно комп и так тянет 720p, ускорение вроде не очень и надо - но во-1, "заплачено уже ж", во-2 проц грузится сильнее -> кулер его крутится быстрее -> а летом так еще быстрее, а значит шумит
В общем, самому изобретать велосипед не обязательно, если (я тему очень бегло по диагонали пока просмотрел и все) протокол программы топикстартера документирован, то можно и ею попользоваться - но уже интерес взыграл, у меня приятель (работает с 3д в игрушках) говорит, что в directX не так просто влезть.. Так что стало просто интересно, тычек бы в нужную сторону..
спсб
-
Re: Фоновая подсветка телевизора Ambilight
Использую BitBlt и ScanLine
-
Re: Фоновая подсветка телевизора Ambilight
чото я немного недопонял
BitBlt - апишная ф-ция, но она рисует; ScanLine вроде метод дельфовского TBitmap
и как они могут помочь в получении инфы о точках на экране?..
у меня есть одна мысль, но не рискну ее озвучивать, бо еще прослыву дураком.. надо попробовать потестить чтоли....
з.ы. и да, я удивлен и благодарен за быстрый ответ :)
-
Re: Фоновая подсветка телевизора Ambilight
я в глубоком *%№"*?;№
работает.. по крайней мере быстрый тест показал, что работает с десктопом, с kmplayer-ом оконным и в фулскрине
проверю сейчас еще с хардварным декодированием, но даже если оно не сработает, то пофиг, для начала пойдет..
никогда бы не додумался даже так попробовать, респект..
upd: MPC HC в фулскрине с включенным аппаратным декодированием тоже отлично капчурится.. у меня сомнения насчет того, будет ли это работать на виндах младше висты/7, но для меня они не актуальны
ура!
-
Re: Фоновая подсветка телевизора Ambilight
Сорри за оффтоп - не удержался :)
Привет тебе, старший толстый брат! :) :) :)
-
Re: Фоновая подсветка телевизора Ambilight
:)
щас дезинсекторы придут и вытравят за оффтоп ;)
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
fat.hamster
я в глубоком *%№"*?;№
работает.. по крайней мере быстрый тест показал, что работает с десктопом, с kmplayer-ом оконным и в фулскрине
проверю сейчас еще с хардварным декодированием, но даже если оно не сработает, то пофиг, для начала пойдет..
никогда бы не додумался даже так попробовать, респект..
upd: MPC HC в фулскрине с включенным аппаратным декодированием тоже отлично капчурится.. у меня сомнения насчет того, будет ли это работать на виндах младше висты/7, но для меня они не актуальны
ура!
В младших виндах тоже работает, проверял.
Не работает при фулскрине в виндовс медиа центре, хотя если в оконном режимето тоже работает.
-
Re: Фоновая подсветка телевизора Ambilight
Эдуард, когда твоя софтина в медиа центре заработает?(((
-
Re: Фоновая подсветка телевизора Ambilight
Нужно сначала понять почему так происходит.
-
Re: Фоновая подсветка телевизора Ambilight
видьмо медиа-плеер в фулскрине оверлей использует или какой-то его вариант.. на двух мониторах видно, что при переключении в фулскрин у монитора типа как режим меняется и на нем принт-скрин перестает работать
хотя fraps-у например все равно, фул, не фул скрин, так что способ конечно есть, но видьмо не тривиальный какой-то :(
-
Re: Фоновая подсветка телевизора Ambilight
Добрый день.
Заинтересовался собрать сей девайс.
Расскажите пожалуйста поподробней о светодиодных лентах
(или где о них можно почитать или где вы их приобретали)
-
Re: Фоновая подсветка телевизора Ambilight
Приобретал в Митино на радиорынке , цокольный этаж.
Называется "Светодиодная влагозащитная лента двойной плотности"
Но как показывает практика , двойная плотность не нужна, я все равно яркость светодиодов уменьшаю, потому что очень ярко светит.
-
Re: Фоновая подсветка телевизора Ambilight
схема на 4ре зоны, плата 100х100
http://s39.radikal.ru/i085/1003/27/1fafa8bcaa19.jpg
кому надо могу выложить для sprint layout
-
Re: Фоновая подсветка телевизора Ambilight
тоже хотел бы приобрести такую плату, так как сам с паяльником не дружу, купил ambx philips светильник но не то, запихал за телевизор, по бокам не хватает подсветки , а сверху норм, когда включается в win 7 сразу слетает aero glass тема на упрощенную, в медиа центре семерки тоже не работатет, может кто помочь достать такую штуковину, за денежки спаяете ?
-
Re: Фоновая подсветка телевизора Ambilight
2renesanseg: а самому, пару-тройку выходных потратить?.. зато ж fun какой ;)
-
Re: Фоновая подсветка телевизора Ambilight
потоптался сегодня с пол-дня по граблям - пишу/тестю на w7, монитор 1900*1200 скоко-то там, опрос экрана 25 фпс - поэтому и заметил: с включенной аеро процесс dwm жрет память как за себя бросает, доходит до паты сотен мгабайт, потом кол-во памяти падает до парыдесятков и снова начинает расти..
msdn оказывается предупреждала, что не надо копировать с/в GetDC(0) как раз из соображений производительности (а я для анализа весь экран и копировал, так быстрее всего получается)
почти придумал финт ушами с dwm -> он же используется чтобы "живые тхумбнейлы" делать, можно ему заказать делать эскиз указанного окна с указанным размером - и он в реалтайме делает скажем эскиз 5*4 точки - т.е. уже и цвета усреднив - и это практически бесплатно, потому что делается усилиями процессора и (я так понимаю в основном) видеокарты
облом наступил, когда я понял, что dwm шустренько эскизы делает и выводит их - но рисует их прямо в видеопамять, Bitblt их не копирует :)
потом еще один финт придумал и копировать копировал - но только если окно видимо - а на кой оно мне, если у меня в фул-скрине видео должно играться?..
в общем, обламался.. хотя та же msdn опять же предупреждала, что dwm-функции не для того, чтобы писать проги типа флип-3д (это переключение между задачами по Win-Tab)
в общем хватит экспериментировать, спать пора
уже с праздником кстати :)
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
потоптался сегодня с пол-дня по граблям - пишу/тестю на w7, монитор 1900*1200 скоко-то там, опрос экрана 25 фпс - поэтому и заметил: с включенной аеро процесс dwm жрет память как за себя бросает, доходит до паты сотен мгабайт, потом кол-во памяти падает до парыдесятков и снова начинает расти..
Может быть в коде деструкцию забыл сделать?
Цитата:
msdn оказывается предупреждала, что не надо копировать с/в GetDC(0) как раз из соображений производительности (а я для анализа весь экран и копировал, так быстрее всего получается)
Есть более универсальная функция GetDcEx
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Может быть в коде деструкцию забыл сделать?
не, не мой косяк точно - у меня даже PrintScreen нажимаю - сразу +8 метров у dwm .. просто видьмо это как раз то, что не рекомендовано msdn-ом
забил пока, для htpc и без аеро никакой же разницы (правда может оказаться, что с аеро ж графическая подсистема быстрее, потому что gpu задействован).. подумаю позже, может что-то придумается, а пока отключу аеро..
-
Re: Фоновая подсветка телевизора Ambilight
Так моя прога с AERO работает.
Или я что то не понял ?
-
Re: Фоновая подсветка телевизора Ambilight
та моя тоже работает, и все нормально - пока не посмотришь во время работы на диспетчер задач
_если_ задать обработку экрана 20 раз/сек и _с моим разрешением_ 1920*1080 диспетчер задач показывает, что процесс dwm хавает немеряно памяти, которую периодически отдает
то же самое можно наблюдать, если просто часто понажимать кнопку PrintScreen клавиатуры
вообще то некритично, не бага, все работает.. но сам факт раздражает :)
а если аеро отключена - то этого эффекта нет; но начитавшись теории понятен процесс - с аеро desktop window manager использует для прозрачных участков окон, размытия позади окна, эскизов для приложений в панели задач мощность видеокарты, которая все это рисует и накладывает "эффекты" прямо в видеопамять
(например, если функциями dwm* вывести эскиз любого окна себе на окно - все замечательно, в моем окне играется чужое окно (даже перекрытое другими окнами), но как только я хочу сделать скриншот моего окна (getdc - bitblt) - упс, на скриншоте только мое окно, а картинка чужого окна пропала.. что-то типа оверлейного видео получается)
но если делать скриншот десктопа (getdc(0) - bitblt), или нажать кнопку PrintSCreen - видьмо винда вдупляется, что от нее хотят, и копирует картинку из видеопамяти - а как известно обмен между видеопамятью и обычной небыстрый плюс видьмо dwm выделяет для этого память, имеем теоретическое (потому что "на глаз" пока не заметно) проседание производительности, о котором предупреждает msdn и практический выплеск в размере используемой памяти, которая через время отдается назад
но можно подобрать условия - скажем скриншотить 35 fps - когда память будет жраться быстрее, чем отдаваться; собственно я только что это пронаблюдал, система сказала, шо ей существенно не хватает графических ресурсов и предложила переключится в упрощенный режим :)
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Я тут подумал , нужно все таки делать на одной плате все делать, а к разьемам подключать лены светодиодные.
Предлагаю свой вариант разбивки Ambilight подсветки на 14 зон 42 канала
Вложение 7747
А есть надежда что в ближайшее время, схемка и плата появитсо 14 зон 42 канала?
-
Re: Фоновая подсветка телевизора Ambilight
На кардуино можно сделать максимум 20 каналов
-
Re: Фоновая подсветка телевизора Ambilight
Тыкните плиз носом в мануал как прошить Sketch в Carduino/Arduino...
-
Re: Фоновая подсветка телевизора Ambilight
-
Re: Фоновая подсветка телевизора Ambilight
Уффф, наконец получил свой Carduino :rolleyes:, бум собирать :),
назрел вопрос... какую лучше использовать светодиодную линейку: обычной или двойной плотности..?
-
Re: Фоновая подсветка телевизора Ambilight
Как показала практика двойной плотности сильно яркая, я убывляю вечером на 70%
-
Re: Фоновая подсветка телевизора Ambilight
всем привет, собрал данную штуковину, на удивление - заработала сразу!!!
вся семья в восторге, трое знакомых слезно умоляют сделать и им такое же! Респект вам Chip! Скажите от куда фрагмент на первом видео?
-
Re: Фоновая подсветка телевизора Ambilight
Если не секрет какие светодиодные ленты применил? Кокое значение имеет яреость и насыщенность?
Фильм "Стар трек-2"
-
Re: Фоновая подсветка телевизора Ambilight
http://www.dealextreme.com/details.dx/sku.14965
правда ждать пришлось 3-4 недели
ткните ссылкой, все облазил, не могу найти этот фильм ( или фрагмент который на видео )
-
Re: Фоновая подсветка телевизора Ambilight
-
Re: Фоновая подсветка телевизора Ambilight
А кто нибудь может посоветовать отечественный интернет магазин с этой лентой и с вменяемой ценой?
-
Re: Фоновая подсветка телевизора Ambilight
Был бы очень признателен за исходные коды программы. (Собрал плату немного по другой схеме и хотелось бы подружить их друг с другом)