-
Re: Фоновая подсветка телевизора Ambilight
Ура!!! У меня прогресс, 23 нога заработала.
Щас соберу 30 каналов попробую :)
Чип спасибо огромное, за то что всё разжевал и обьяснил!!!!!!
п.с. а почему интересно с регистрами не заработало....через месяц с гонкогга посылка придёт а там и ардуинка НАНо и блюпуп :) буду ковырять.
-
Re: Фоновая подсветка телевизора Ambilight
Готовый скейч для ArduinoMEGA 30 каналов (10 зон)
Выводы arduino с 22 по 51.
PHP код:
#define D22_High PORTA |=B00000001 //red line-1 on
#define D22_LOW PORTA &= B11111110 //red line-1 off
#define D23_High PORTA |=B00000010 //green line-1 on
#define D23_LOW PORTA &= B11111101 //green line-1 off
#define D24_High PORTA |=B00000100 //blue line-1 on
#define D24_LOW PORTA &= B11111011 //blue line-1 off
#define D25_High PORTA |=B00001000 //red line-2 on
#define D25_LOW PORTA &= B11110111 //red line-2 off
#define D26_High PORTA |=B00010000 //green line-2 on
#define D26_LOW PORTA &= B11101111 //green line-2 off
#define D27_High PORTA |=B00100000 //blue line-2 on
#define D27_LOW PORTA &= B11011111 //blue line-2 off
#define D28_High PORTA |=B01000000 //red line-3 on
#define D28_LOW PORTA &= B10111111 //red line-3 off
#define D29_High PORTA |=B10000000 //green line-3 on
#define D29_LOW PORTA &= B01111111 //green line-3 off
#define D30_High PORTC |=B10000000 //blue line-3 on
#define D30_LOW PORTC &= B01111111 //blue line-3 off
#define D31_High PORTC |=B01000000 //red line-4 on
#define D31_LOW PORTC &= B10111111 //red line-4 off
#define D32_High PORTC |=B00100000 //green line-4 on
#define D32_LOW PORTC &= B11011111 //green line-4 off
#define D33_High PORTC |=B00010000 //blue line-4 on
#define D33_LOW PORTC &= B11101111 //blue line-4 off
#define D34_High PORTC |=B00001000 //red line-4 on
#define D34_LOW PORTC &= B11110111 //red line-4 off
#define D35_High PORTC |=B00000100 //green line-4 on
#define D35_LOW PORTC &= B11111011 //green line-4 off
#define D36_High PORTC |=B00000010 //blue line-4 on
#define D36_LOW PORTC &= B11111101 //blue line-4 off
#define D37_High PORTC |=B00000001 //red line-4 on
#define D37_LOW PORTC &= B11111110 //red line-4 off
#define D38_High PORTD |=B10000000 //green line-4 on
#define D38_LOW PORTD &= B01111111 //green line-4 off
#define D39_High PORTG |=B00000100 //blue line-4 on
#define D39_LOW PORTG &= B11111011 //blue line-4 off
#define D40_High PORTG |=B00000010 //red line-4 on
#define D40_LOW PORTG &= B11111101 //red line-4 off
#define D41_High PORTG |=B00000001 //green line-4 on
#define D41_LOW PORTG &= B11111110 //green line-4 off
#define D42_High PORTL |=B10000000 //blue line-4 on
#define D42_LOW PORTL &= B01111111 //blue line-4 off
#define D43_High PORTL |=B01000000 //red line-4 on
#define D43_LOW PORTL &= B10111111 //red line-4 off
#define D44_High PORTL |=B00100000 //green line-4 on
#define D44_LOW PORTL &= B11011111 //green line-4 off
#define D45_High PORTL |=B00010000 //blue line-4 on
#define D45_LOW PORTL &= B11101111 //blue line-4 off
#define D46_High PORTL |=B00001000 //red line-4 on
#define D46_LOW PORTL &= B11110111 //red line-4 off
#define D47_High PORTL |=B00000100 //green line-4 on
#define D47_LOW PORTL &= B11111011 //green line-4 off
#define D48_High PORTL |=B00000010 //blue line-4 on
#define D48_LOW PORTL &= B11111101 //blue line-4 off
#define D49_High PORTL |=B00000001 //red line-4 on
#define D49_LOW PORTL &= B11111110 //red line-4 off
#define D50_High PORTB |=B00001000 //green line-4 on
#define D50_LOW PORTB &= B11110111 //green line-4 off
#define D51_High PORTB |=B00000100 //blue line-4 on
#define D51_LOW PORTB &= B11111011 //blue line-4 off
volatile unsigned int tcnt2;
volatile byte pwm_time;
//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[30]; //массив храннения цветов 12-ть каналов
void setup()
{
for (int i=2; i < 52; i++){pinMode(i, OUTPUT);}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 250; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 30)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 30; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
// if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else {
if(blank>100000) { blank=0; for (byte i = 0; i < 30; i++) color[i] = 0;}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D22_High; else D22_LOW;
if(color[1] > pwm_time ) D23_High; else D23_LOW;
if(color[2] > pwm_time ) D24_High; else D24_LOW;
if(color[3] > pwm_time ) D25_High; else D25_LOW;
if(color[4] > pwm_time ) D26_High; else D26_LOW;
if(color[5] > pwm_time ) D27_High; else D27_LOW;
if(color[6] > pwm_time ) D28_High; else D28_LOW;
if(color[7] > pwm_time ) D29_High; else D29_LOW;
if(color[8] > pwm_time ) D30_High; else D30_LOW;
if(color[9] > pwm_time ) D31_High; else D31_LOW;
if(color[10] > pwm_time) D32_High; else D32_LOW;
if(color[11] > pwm_time) D33_High; else D33_LOW;
if(color[12] > pwm_time ) D34_High; else D34_LOW;
if(color[13] > pwm_time) D35_High; else D35_LOW;
if(color[14] > pwm_time) D36_High; else D36_LOW;
if(color[15] > pwm_time ) D37_High; else D37_LOW;
if(color[16] > pwm_time) D38_High; else D38_LOW;
if(color[17] > pwm_time) D39_High; else D39_LOW;
if(color[18] > pwm_time ) D40_High; else D40_LOW;
if(color[19] > pwm_time) D41_High; else D41_LOW;
if(color[20] > pwm_time) D42_High; else D42_LOW;
if(color[21] > pwm_time ) D43_High; else D43_LOW;
if(color[22] > pwm_time) D44_High; else D44_LOW;
if(color[23] > pwm_time) D45_High; else D45_LOW;
if(color[24] > pwm_time ) D46_High; else D46_LOW;
if(color[25] > pwm_time) D47_High; else D47_LOW;
if(color[26] > pwm_time) D48_High; else D48_LOW;
if(color[27] > pwm_time ) D49_High; else D49_LOW;
if(color[28] > pwm_time) D50_High; else D50_LOW;
if(color[29] > pwm_time) D51_High; else D51_LOW;
}
Огромное спасибо Чип'у за помощь!!!!!
-
Re: Фоновая подсветка телевизора Ambilight
Заметил такую штуку
если разрешение экрана стоит 1920на 1080 то частота обновления 8 герц :) смотреть можно но напряжно(переключение между цветами как будто переключателем,нет плавности) а если ставлю 1280на768 то всё пучком 33 герца. Комп вот такой http://www.nix.ru/autocatalog/mother...MM_115253.html 4Gb памяти.
хотя процессор загружен на 25 процентов. Win7 32bit, aero отключено.
-
Re: Фоновая подсветка телевизора Ambilight
в настройках программы сколько процентов захватываешь? Попробуй уменьшить
-
Re: Фоновая подсветка телевизора Ambilight
И аэро отключать совсем, не обязательно, достаточно в свойствах экзешника эмбилайта, во вкладке совместимость, поставить галочку, Отключить композицию рабочего стола.
Тогда при запуске программы, аэро будет отключатсо автоматически.
8 герц это ахтунг, уменьшай размеры зон однозначно.
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
Вложение 13154
файлик с настройками.....зоны вроде не большие.
-
Re: Фоновая подсветка телевизора Ambilight
Учитавая то что проц у тебя слабенький и большое количество зон тд 10% от 1920х1080 пикс. это очень много тебе нужно 3-5 процентов не больше
-
Re: Фоновая подсветка телевизора Ambilight
Здравствуйте!
Я разработчик софта для ардулайта.
Как вы заметили софт давно не обновлялся. Причина тому - мое участвие в проекте схожим с этим.
Спешу сообщить, что софт из этого проекта может работать с arduino! Возможно найдутся те, кто решится попробовать этот софт и написать скетч для работы с ним. Если возникнут вопросы или проблемы с программой буду рад вам помочь.
-
Re: Фоновая подсветка телевизора Ambilight
Вообще-то разработчик программы - Chip.
Насколько я помню - Вас он попросил сделать тоже самое для линукса, для этого он и отправил Вам устройство и программу, что бы Вы ее перенесли под линукс и опробовали.
Это я к тому, что правильнее написать не разработчик, а оптимизатор что-ли... ;)
А вообще спасибо за то, что следите за нашим проектом :)
-
Re: Фоновая подсветка телевизора Ambilight
Андрей я отправил не программу , а исходник полностью перед отправкой расписал каждую строчку кода коментариями
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Eraser
Спешу сообщить, что софт из этого проекта может работать с arduino! Возможно найдутся те, кто решится попробовать этот софт и написать скетч для работы с ним. Если возникнут вопросы или проблемы с программой буду рад вам помочь.
Проект комерческий/платный ? выкладывай хотя бы демо версию :)
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
CarMonitor.ru
Вообще-то разработчик программы -
Chip.
Насколько я помню - Вас он попросил сделать тоже самое для линукса, для этого он и отправил Вам устройство и программу, что бы Вы ее перенесли под линукс и опробовали.
Это я к тому, что правильнее написать не разработчик, а оптимизатор что-ли... ;)
А вообще спасибо за то, что следите за нашим проектом :)
С этим я не могу согласиться.
Из программы Chip я взял лишь протокол работы с устройством. Спасибо ему за предоставленные исходники и устройство, это сильно упростило задачу.
Я же написал кроссплатформенную программу, с удобным интерефейсом настройки, те написал с нуля, кроме алгоритма. Это никак не оптимизация! :)
Цитата:
Сообщение от
crazydnb
Проект комерческий/платный ? выкладывай хотя бы демо версию :)
Проект opensource!! Т.е. программы, исходники, схемы, все открыто.
Прикладываю скомпиленную программу с поддержкой работы с com портом.
PS Если не заинтересует, то поднимать эту тему не буду. :( Просто хотелось предложить более удобную программу, чем та прежняя.
-
Re: Фоновая подсветка телевизора Ambilight
неполучилось запустить, при подключени к virtual значек говорит что включено, но ничего неработает. ком порт я выставил в файле lightpackmain.conf, но при запуске програмы компорт остается свободен тоесть я могу запустить старую версию и она начинает работать.
ps: меня интересует, просто старая программа у меня при 1920x1080 выдает 13гц и при этом пропадает синхронизация видео с частотой экрана (рвет кадр), поэтому очень ждал улудшений в следующих версиях.
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
crazydnb
неполучилось запустить, при подключени к virtual значек говорит что включено, но ничего неработает. ком порт я выставил в файле lightpackmain.conf, но при запуске програмы компорт остается свободен тоесть я могу запустить старую версию и она начинает работать.
ps: меня интересует, просто старая программа у меня при 1920x1080 выдает 13гц и при этом пропадает синхронизация видео с частотой экрана (рвет кадр), поэтому очень ждал улудшений в следующих версиях.
Для работы с СОМ портом в файле файле lightpackmain.conf должна быть выставлена такая настройка
ConnectedDevice=Adalight
virtual - он на то и virtual, в этом режиме связь к устройством не устанавливается, программа просто выполняет захват, но данные никуда не передает
PS Старой программой заниматься у меня не хватает времени, поэтому я врядли продолжу ее развитие
-
Re: Фоновая подсветка телевизора Ambilight
удалось запустить , но так как у меня 28 зон получил разноцветную гирлянду :).... программа стала кушать меньше ресурсов компа 8% против 25%, частота кадров у меня так и осталась 10-15кд/c, кадр также как и прежде рвет (возможно дело у меня в железе). если будет поддержка большего количества зон буду очень рад :)
-
Re: Фоновая подсветка телевизора Ambilight
увеличение количества зон в планах, работа над этим идет
а вот насчет гирлянды
протокол передачи данных немного другой (отличный от того что был ранее):
Код:
первые три байта "Ada"
еще три байта служебной информации
три байта цвета зоны 1
....
три байта цвета зоны 10
вы можете подправить свой скетч, и хотябы оценить работу программы на 10 зонах
зы я давал ранее ссылку на скетч который обрабатывает данный протокол, но его удалили (видимо посчитав что это реклама)
-
Re: Фоновая подсветка телевизора Ambilight
ясно попробую попоже, у меня чтоб перепрошить телек снимать надо со стены. поповоду протокола... 65 100 97 служ служ служ r1 g1 b1 и тд. я правильно понел ?
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
crazydnb
ясно попробую попоже, у меня чтоб перепрошить телек снимать надо со стены. поповоду протокола... 65 100 97 служ служ служ r1 g1 b1 и тд. я правильно понел ?
да, именно так
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Попробуй вот этот скетчь и отпишись
Я его еще не проверял
Не забудь настройки в программе сделать на 18 каналов
PHP код:
#define D2_High PORTD |=B00000100 //red
#define D2_LOW PORTD &= B11111011
#define D3_High PORTD |=B00001000 //green
#define D3_LOW PORTD &= B11110111
#define D4_High PORTD |=B00010000 //blue
#define D4_LOW PORTD &= B11101111
#define D5_High PORTD |=B00100000
#define D5_LOW PORTD &= B11011111
#define D6_High PORTD |=B01000000
#define D6_LOW PORTD &= B10111111
#define D7_High PORTD |=B10000000
#define D7_LOW PORTD &= B01111111
#define D8_High PORTB |=B00000001
#define D8_LOW PORTB &= B11111110
#define D9_High PORTB |=B00000010
#define D9_LOW PORTB &= B11111101
#define D10_High PORTB|=B00000100
#define D10_LOW PORTB &=B11111011
#define D11_High PORTB |=B00001000
#define D11_LOW PORTB &= B11110111
#define D12_High PORTB |=B00010000
#define D12_LOW PORTB &= B11101111
#define D13_High PORTB |=B00100000
#define D13_LOW PORTB &= B11011111
#define D14_High PORTC |=B00000001
#define D14_LOW PORTC &= B11111110
#define D15_High PORTC |=B00000010
#define D15_LOW PORTC &= B11111101
#define D16_High PORTC |=B00000100
#define D16_LOW PORTC &= B11111011
#define D17_High PORTC |=B00001000
#define D17_LOW PORTC &= B11110111
#define D18_High PORTC |=B00010000
#define D18_LOW PORTC &= B11101111
#define D19_High PORTC |=B00100000
#define D19_LOW PORTC &= B11011111
volatile unsigned int tcnt2;
volatile byte pwm_time;
//byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[18]; //массив храннения цветов 12-ть каналов
void setup()
{
for (int i=2; i < 19; i++){pinMode(i, OUTPUT);}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 252; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 18)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 18; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
// if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else {
if(blank>100000) { blank=0; for (byte i = 0; i < 18; i++) color[i] = 0;}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D2_High; else D2_LOW;
if(color[1] > pwm_time ) D3_High; else D3_LOW;
if(color[2] > pwm_time ) D4_High; else D4_LOW;
if(color[3] > pwm_time ) D5_High; else D5_LOW;
if(color[4] > pwm_time ) D6_High; else D6_LOW;
if(color[5] > pwm_time ) D7_High; else D7_LOW;
if(color[6] > pwm_time ) D8_High; else D8_LOW;
if(color[7] > pwm_time ) D9_High; else D9_LOW;
if(color[8] > pwm_time ) D10_High; else D10_LOW;
if(color[9] > pwm_time ) D11_High; else D11_LOW;
if(color[10] > pwm_time) D12_High; else D12_LOW;
if(color[11] > pwm_time) D13_High; else D13_LOW;
if(color[12] > pwm_time) D14_High; else D14_LOW;
if(color[13] > pwm_time) D15_High; else D15_LOW;
if(color[14] > pwm_time) D16_High; else D16_LOW;
if(color[15] > pwm_time) D17_High; else D17_LOW;
if(color[16] > pwm_time) D18_High; else D18_LOW;
if(color[17] > pwm_time) D19_High; else D19_LOW;
}
Спасибо, Chip, Ардину седня получил (Arduino Nano V3.0 (http://www.dealextreme.com/p/arduino-nano-v3-0-81877)), попробовал оба скейча, все завелось, вот только ленты придут на этой неделе.
По работе 6 зон, куда цеплять выходы порта С? D14-D19, это на ноги А0-А5 платы Ардуины, так? Когда вживую буду проверять отпишусь.
Пока на проге Eraser, при 6 зонах шириной 10% (4 по контуру и 2 просто внутри) и разрешайке монитора 1920*1080 частота упала до 9 Герц, что думаю маловато, буду вообщем эксперементировать, когда все соберу.
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
D14-D19 это ноги А0-А5
ПРи разрешении 1920*1080 10% это много, сделай 5%
6 зон расположи вот так
Вложение 13230
-
Вложений: 2
Re: Фоновая подсветка телевизора Ambilight
Да именно так зоны и сделаю, даже с небольшим перекрытием. Седня разведу плату и потом после тестов выложу. 27 октября уеду, не будет 1,5 недели, так что я не потерялся :) .
И, думаю, все значительные изменения и добавления(конечно после проверки) стоит вынести в шапку, дабы люди не шарились по 70 страницам.
-
Re: Фоновая подсветка телевизора Ambilight
Тут поднималсо вопрос о изготовлении эмбилайта без компьютера. А нельзя ли для этого использовать какой нибудь выход телевизора, например компонентный, там как раз три цвета :-)
-
Re: Фоновая подсветка телевизора Ambilight
Можно, но процессор для обработки нужен более мощный, к тому же компонентный это не выход, а вход
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Userrex
Да именно так зоны и сделаю, даже с небольшим перекрытием. Седня разведу плату и потом после тестов выложу. 27 октября уеду, не будет 1,5 недели, так что я не потерялся :) .
И, думаю, все значительные изменения и добавления(конечно после проверки) стоит вынести в шапку, дабы люди не шарились по 70 страницам.
Как все отладишь , я выложу в шапку
-
Re: Фоновая подсветка телевизора Ambilight
-
Re: Фоновая подсветка телевизора Ambilight
Документация на LED у тебя есть?
-
Re: Фоновая подсветка телевизора Ambilight
Общее описание по светодиодным лентам с контроллерами на каждый светодиод двух типов
http://cxem.net/sound/light/light46.php
на этой страничке есть ссылка на даташиты используемых контроллеров.
Описание законченного решения амбилайт на этих лентах
http://cxem.net/arduino/arduino26.php
Сам только недавно увидел тему с самодельным амбилайтом, загорелся. :) Пока вот только набираю информацию о разных способа реализации.
Последнее решение считаю самым оптимальным, т.к. получается очень простым по программированию и реализацию электрической части.
Хотелось бы узнать мнение уважаемого сообщества на данный способ.
-
Re: Фоновая подсветка телевизора Ambilight
привет
Я нашел эти кассеты привели:
http://www.adafruit.com/products/306
http://www.sklep.semics.pl/tasma-chi...ip65-p-58.html
Они описаны. Может быть, кто-то получает приятный и удобный способ.
-
Re: Фоновая подсветка телевизора Ambilight
На этих лентах можно сделать Ambilight, можно даже сделать пиксельную графику.
-
Re: Фоновая подсветка телевизора Ambilight
привет
И как вы думаете, может быть забавный проект сделать Ambilight.
Есть ли у вас какие-нибудь идеи?
-
Re: Фоновая подсветка телевизора Ambilight
Идеи есть, лент пока нету, как приедут буду пробовать.
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Chip
Идеи есть, лент пока нету, как приедут буду пробовать.
А ты откуда ленту заказал? Если уже заказал и если не секрет :)
Я видел эти ленты на aliexpress по 20$ за метр, но доставка больше 100$
Либо по ссылке в предыдущих сообщениях с adafruit но там с контроллером LPD8806 без ШИМ.
Пока приемлемых цен на комплект ленты с доставкой к сожалению не нашел :(
-
Re: Фоновая подсветка телевизора Ambilight
Я еще не заказал, тоже в поиске
Я гдето вычитал что LPD8806 имеет ШИМ 7 бит на цвет
-
Re: Фоновая подсветка телевизора Ambilight
Извиняюсь, дезинформировал.
По ссылке на adafruit используется контроллер LPD8806, он со встроенным ШИМ. Спутал по описанию в статье на cxem.net про светодиоды с контроллером LPD6803, который не имеет ШИМ, и про который в статье также написано будьте внимательны что возможен такой вариант при приобретении.
Сорри за невнимательность :(
-
Re: Фоновая подсветка телевизора Ambilight
Цитата:
Сообщение от
Userrex
Да именно так зоны и сделаю, даже с небольшим перекрытием. Седня разведу плату и потом после тестов выложу. 27 октября уеду, не будет 1,5 недели, так что я не потерялся :) .
И, думаю, все значительные изменения и добавления(конечно после проверки) стоит вынести в шапку, дабы люди не шарились по 70 страницам.
Как успехи? Жду тестов , что бы в шапку выложить скетч и плату
-
Вложений: 3
Re: Фоновая подсветка телевизора Ambilight
Вот что у меня получилось с DIP корпусами. Изначально делал под односторонний текстолит с перемычками, потом нашёл кусок двухсторонний и кое что допилил.
размеры получились высота90 ширина 170(примерно)
п.с. строго не судите первый раз делал.
в планах сегодня: разведу хлорное железо, фотки выложу.
кстати как его с водой бодяжить какие пропорции? железо безводное.
Вложение 13465
Вложение 13466
и исходник с картинками в одном архиве
Вложение 13467
-
Вложений: 2
Re: Фоновая подсветка телевизора Ambilight
вот что вышло.... Травил плату первый раз в жизни... :) Технология ЛУТ рулит :) щас просвердю отверстий, пролужу глицерином соберу и покажу конечный результат.
Вложение 13468
Вложение 13469
-
Re: Фоновая подсветка телевизора Ambilight
появилась проблема не могу переделать скей для 42ух зон
работает всё равно 30 :) а остальные не хотят.
делаю вот так
Код:
//нужно нужно заменить 60 на по возможности меньшее значение.
//Начиная с какого-то значения, программу начнет не по-деццки глючить.
//Нужно выбрать значение процентов на 10 больше, чем пороговое. Чем меньше значение, тем выше частота мигания светодиодов.
#define TCNT2_Const 256-15 //256-8
#define BrightnessSize 42 //число каналов
unsigned long blank=0; //таймер простоя
uint8_t volatile PWM_Counter=0;
uint8_t color[BrightnessSize];
int mode = 0;
//Текущий цвет
int currentColorR = 0;
int currentColorG = 0;
int currentColorB = 0;
//новый цвет
int nextColorR = 0;
int nextColorG = 0;
int nextColorB = 0;
int R,G,B,switchTime;
void setup()
{
pinMode(10, OUTPUT); //SS SPI вывод для управления защелкой
pinMode(11, OUTPUT); // SPI DATA
pinMode(13, OUTPUT); // SPI Clock
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(13,LOW);
SPSR = (1<<SPI2X); // SPI set clock rate fck/2
SPCR = (1<<SPE)|(1<<MSTR); // Enable SPI, Master
for (int i=0;i<BrightnessSize;i++) //обнулить массив
{
color[i]=0;
}
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
TCCR2B |= (1<<CS22); //установка предделителя 64
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
TCNT2 = TCNT2_Const; // 16000000/256/100/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
sei();
}
void loop()
{
if (Serial.available() >= BrightnessSize)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < BrightnessSize; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
blank=0;
mode = 0;
}
} else { if (mode==0)
{
if(blank>50000) {
blank=0;
mode =1;
for (byte i = 0; i < BrightnessSize; i++) color[i] = 0;
}
blank++;
}
if (mode == 1)
{
if(currentColorR==nextColorR && currentColorG==nextColorG && currentColorB==nextColorB)
{
//Генерируем новый цвет, исключая похожий на белый, иначе генерируем еще раз
do {
nextColorR = random(256);
nextColorG = random(256);
nextColorB = random(256);
}
while(abs(nextColorR-nextColorG)<50 && abs(nextColorR-nextColorB)<50);
//Время перехода
switchTime = random(10,50);
//Случайно отключаем один из каналов
//1,2,3 - красный, зеленый, синий соответственно.
switch(random(1,9)) {
case 1:
nextColorR = 0;
break;
case 2:
nextColorG = 0;
break;
case 3:
nextColorB = 0;
break;
case 4:
nextColorB = 0;
nextColorR = 0;
break;
case 5:
nextColorB = 0;
nextColorG = 0;
break;
case 6:
nextColorR = 0;
nextColorG = 0;
}
}
//Выясняем на каком канале увеличивать яркость, а на каком уменьшать
if(nextColorR>currentColorR) R=1;
else R=-1;
if(nextColorG>currentColorG) G=1;
else G=-1;
if(nextColorB>currentColorB) B=1;
else B=-1;
//Переходим к нужному цвету
if(currentColorR!=nextColorR){
currentColorR+=R;
}
if(currentColorG!=nextColorG){
currentColorG+=G;
}
if(currentColorB!=nextColorB){
currentColorB+=B;
}
for (int i=0;i<BrightnessSize;i=i+3)
{
color[i]=currentColorR;
color[i+1]=currentColorG;
color[i+2]=currentColorB;
}
delay(switchTime);
}
}
}
SIGNAL(TIMER2_OVF_vect)
{
uint8_t PWM_Counter_v=PWM_Counter; // поскольку PWM_Counter объявлена как valotile, обращение к ней - всегда обращение в память. Поэтому создаем локальную копию, она будет храниться в регистре.
TCNT2 = TCNT2_Const;
uint8_t i = 0;
uint8_t byte_shift;
uint8_t nbit; // делаем переменную для хранения сдвинутого бита, чтобы у компилятора не возникало желания каждый раз в цикле сдвигать 1 на bt бит влево
byte_shift = 0;
for (uint8_t bt=0; bt<8; bt++)
{
byte_shift = byte_shift<<1;
if(color[i]>PWM_Counter_v) byte_shift|= 1; // тут соответственно использщуем nbit
i++;
}
SPDR = byte_shift; //отправляем в шину SPI
//**************************************
byte_shift = 0;
for (uint8_t bt=0; bt<8; bt++)
{
byte_shift = byte_shift<<1;
if(color[i]>PWM_Counter_v) byte_shift|= 1; // тут соответственно использщуем nbit
i++;
}
SPDR = byte_shift; //отправляем в шину SPI
//**************************************
//**************************************
byte_shift = 0;
for (uint8_t bt=0; bt<8; bt++)
{
byte_shift = byte_shift<<1;
if(color[i]>PWM_Counter_v) byte_shift|= 1; // тут соответственно использщуем nbit
i++;
}
SPDR = byte_shift; //отправляем в шину SPI
//**************************************
byte_shift = 0;
for (uint8_t bt=0; bt<8; bt++)
{
byte_shift = byte_shift<<1;
if(color[i]>PWM_Counter_v) byte_shift|= 1; // тут соответственно использщуем nbit
i++;
}
SPDR = byte_shift; //отправляем в шину SPI
//**************************************
byte_shift = 0;
for (uint8_t bt=0; bt<8; bt++)
{
byte_shift = byte_shift<<1;
if(color[i]>PWM_Counter_v) byte_shift|= 1; // тут соответственно использщуем nbit
i++;
}
SPDR = byte_shift; //отправляем в шину SPI
//**************************************
PORTB |= (1<<PIN2); //формируем положительный импульс защелки
PWM_Counter++;
while(!(SPSR & (1<<SPIF))); // Ожидание завершения передачи данных
PORTB &= ~(1<<PIN2);
}
Всё что жирным я поменял каналов было 30 сделал 42 и внизу было числа 6 сделал 8(чисто эксперементально)
Первые 4 регистра работают нормально а 5 и 6 путают выводы. работать вроде работает но на разьёмах ерунда.
п.с. в печатке ошибка!!! как запущу всё целиком выложу подробный отчёт.
-
Вложений: 1
Re: Фоновая подсветка телевизора Ambilight
В ранее упоминаемой мной программе появилась поддержка Ardulight.
Программа позволяет выставлять требуемое количество зон.
Если кому будет интересно, пишите!
PS Раз хоть кому-то интересно, то выкладываю
PSS Для работы с Ardulight не забудьте cнять галку "Посылать данные только при обновлении цвета" на вкладке "Отладка".
-
Re: Фоновая подсветка телевизора Ambilight