Результаты опроса: Нужна ли вам такая функция на телевизоре?

Голосовавшие
191. Вы ещё не голосовали в этом опросе
  • Нет.

    28 14.66%
  • Да.

    129 67.54%
  • Нужна , только руки кривые, самому не осилить

    34 17.80%
Страница 1 из 93 12345671151 ... ПоследняяПоследняя
Показано с 1 по 10 из 921
  1. #1
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    Лампочка Фоновая подсветка телевизора Ambilight

    Собираем Ambilight своими руками

    Название проекта Ardulight.
    Идею я вынашивал давно , но как всегда не хватало времени.
    Несколько дней назад Krusty подкинул ссылку на один форум , на котором давно обсуждается подсветка работающая с HTPC.
    Так как я для просмотра и закачки фильмов использую HTPC на базе Acer Revo, то сразу загорелся немедленной реализацией этой идеи . Для меня как всегда возникает проблема с травлением платы, это что то сравнимо с капитальным ремонтом двигателя в автомобиле на улице И тут как всегда на помощь приходит arduino Nano V.7 и макетная плата. На сборку устройства ушло всего пол часа. Конечно в этом есть и свои минусы , так как приходится все элементы соединять проводками, но так как мне требовалось экспериментировать то это был самый подходящий вариант.

    За пол часа спаял на макетке ардуино + ключи. За 15 мин. написал скетчь для Arduino , работающий с двумя зонами(6 каналов аппаратного ШИМ)
    Но уперся в настройки программы в Win 7, программа ни как не хотела передавать синхронно данные, наблюдалось отставание до 10 сек.
    Оказалось все просто, нужно было сменить тему AERO на упрощенную, и все сразу заработало.
    Для работы программы нужно в ее конфиге указать сом порт на котором сидит Arduino. Запускать нужно файлом Start_Ambilight

    Другая проблема возникла при написании четырех зонового скетча.
    Все уперлось в аппаратный PWM и прерывания по таймеру.
    Вообщем при программировании прерывания по таймеру автоматом отключается две ножки аппаратного ШИМ, так как все 6 выходов ШИМ используют все три тамера, по две ноги PWM на каждый таймер, пришлось отказаться от аппаратного ШИМ и сделать софтверный ШИМ.
    Теперь все отлично работает смотрите на видео.
    Для увеличения зон до восьми можно использовать еще один arduino и связать их между собой по I2C или сделать на регистрах 74HC595. Погонял пару дней программу Boblight , понял что мне многово не хватает, регулировки яркости, температуры цвета и насыщенности. К то муже у этой программы куча недостатков, таких как отставание от реальной картинки от 1 до 10 сек. Программа не работает с темами AERO в Windows 7 и многое другое.
    Решил написать свою программу.
    Моя программа умеет выводить от 1 до 42 каналов, есть регулировка яркости , насыщенности и баланса белого.
    Корректно работает с Windows 7 и темой AERO , не тормозит на разрешениях 1900х1080, корректно выходит из Сна и Hibernation , имеется конфигурационный фаил, с возможностью отключения не нужных каналов и настройкой областей сканирования, изменения времени сканирования и т.д. Проверял программу с 4-мя зонами, то есть 12 каналов, все отлично работает

    Подсветку установил на плазму 50' , использовал светодиодные ленты RGB двойной плотности. Всего ушло 2м 60 см. Данная лента потребляет ток 800мА на один метр, так что БП от моего монитора Lilliput мне хватило для питания светодиодных лент. Расчет простой 2,6*0,8=2А при максимально открытых ключах.

    На фото RGB светодиодная лента.
    Нажмите на изображение для увеличения. 

Название:	RGB_LED.jpg 
Просмотров:	5299 
Размер:	16.1 Кб 
ID:	7676

    Еще два варианта AmbiLight: на 84 канала от crazydnb и вариант на 42 канала собраный SBorovkov


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




    Собрал на скорую руку на мекетке

    Нажмите на изображение для увеличения. 

Название:	adulight.jpg 
Просмотров:	5398 
Размер:	143.4 Кб 
ID:	7651Нажмите на изображение для увеличения. 

Название:	ardulite1.jpg 
Просмотров:	5111 
Размер:	83.3 Кб 
ID:	7652


    Sketch для Arduino на 18 каналов(6 зон)
    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=220i++){pinMode(iOUTPUT);}    
            
    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 018i++)   
                 {                  
                   
    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 018i++)  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_timeD12_High; else D12_LOW;          
        if(
    color[11] > pwm_timeD13_High; else D13_LOW;  
         
        if(
    color[12] > pwm_timeD14_High; else D14_LOW;   
        if(
    color[13] > pwm_timeD15_High; else D15_LOW;          
        if(
    color[14] > pwm_timeD16_High; else D16_LOW
         
        if(
    color[15] > pwm_timeD17_High; else D17_LOW;   
        if(
    color[16] > pwm_timeD18_High; else D18_LOW;          
        if(
    color[17] > pwm_timeD19_High; else D19_LOW

    Вариант расположения 6 зон


    Плата от Userrex на arduino nano на 18 каналов (6 зон)
    Название: Ardulightp.png
Просмотров: 45324

Размер: 10.2 Кб


    По схеме железу:
    Транзисторы использовал с запасом на будущее, так что можно и по слабее поставить. Транзисторы без драйверов в полне справляются на частоте 31000гц, происходит полное открывание , при использовании на протяжении нескольких часов они не нагрелись , остались холодными.


    Нажмите на изображение для увеличения. 

Название:	CARDUINO_ARDULIGHT-4.png 
Просмотров:	7586 
Размер:	64.2 Кб 
ID:	13561

    Бюджет:
    arduino Nano V.7 - 1шт. 780руб.
    Транзисторы IRLR2905 - 9шт. по 20руб. = 180руб.
    Резисторы 0,25W - 9шт. по 1руб. = 9руб.
    Макетка 1шт. 40 руб.
    Клеммная колодка на 2 провода 6шт. по 3руб. = 18руб
    Лента светодиодная RGB двойной плотности - 3м по 750руб = 2250руб.
    Для тех кому кажется что подсветка сильно яркая , можно купить светодиодную ленту обычную не двойной плотности цена 400руб. за 1м

    Ардуино следит за тем когда заснет комп и выключает подсветку.
    Нажмите на изображение для увеличения. 

Название:	Ardulight.jpg 
Просмотров:	6538 
Размер:	11.6 Кб 
ID:	7728

    P.S.
    Эффект классный , на динамических сценах создается ощущение что объект выходит за пределы экрана. При взрывах и вспышках эффект удваивается
    Короче говоря супер !!! Всем рекомендую.

    Еще одна программа от пользователя Eraser
    Программа поддерживает двухмониторный режим, визуальны настройки зон и т.д.
    Также программа для Linux от Eraser

    Есть еще программа для работы этой подсветки с музыкой .

    Схема с регистрами


    Будут вопросы спрашивайте.
    Вложения Вложения
    Последний раз редактировалось Chip; 04.04.2017 в 10:49.

  2. #2
    Местный Аватар для Krusty
    Регистрация
    26.09.2008
    Сообщений
    116
    Вес репутации
    228

    По умолчанию Re: Фоновая подсветка телефизора Ambilight

    Эдуард, а ты еще видео обещал того что получилось...

  3. #3
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Видео выложил

  4. #4
    Модератор
    Регистрация
    06.07.2008
    Возраст
    45
    Сообщений
    414
    Вес репутации
    435

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Chip, если задача только в том, чтобы мигать светодиодами, то спокойно можно использовать таймер и вручную мигать.
    Простейший расчет:
    16МГц (тактовая частота процессора)/100Гц (допустимая частота мигания светодиодов)/256(уверен, что 256 градаций яркости - больше, чем надо) = максимум 625 тактов на прерывание. Для обслуживания 6 каналов - больше чем достаточно. В прерывании достали переменную по каждому каналу, сравнили с счетчиком, если равно - перекинули соответствующую ногу.

    Примерно как написано ниже (не проверял на синтаксис, но суть понятна, думаю).

    #define PWM_Count 6
    uint8_t volatile Counter;
    uint8_t volatile PWM_Data[PWM_Count];
    uint8_t volatile PWM_Pins[PWM_Count];

    void Timer(void)
    {
    uint8_t i;
    if (Counter==0)
    {
    for (i=0;i<PWM_Count;i++)
    Pin[PWM_Pins[i]]=1;
    }

    for (i=0;i<PWM_Count;i++)
    {
    if (PWM_Data[i]==i)
    Pin[PWM_Pins[i]]=0;
    }

    }


    UPD.
    Интересно было бы если бы подсветка горела именно там, где надо, а не вся сторона. Но чую, что это реализовать будет уже сильно посложнее. Хотя почти уверен, что ардуинки хватит и для этого. Повесить динамическую индикацию, можно еще сдвиговые регистры использовать...
    Последний раз редактировалось SBorovkov; 24.02.2010 в 03:12.

  5. #5
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Спасибо за помощь , будет время попробую твой вариант софтового PWM.

    Колличество зон можно увеличить до 7, но при этом число шлейфов за телевизором увеличится и будет паутина
    А как на сдвиговых регистрах ты собираешся ШИМ-ить?
    Последний раз редактировалось Chip; 24.02.2010 в 10:56.

  6. #6
    Модератор
    Регистрация
    06.07.2008
    Возраст
    45
    Сообщений
    414
    Вес репутации
    435

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    если в сдвиговый регистр выгружать данные через SPI (595 региитр совместим с SPI, насколько я помню), то выгрузка происходит со скоростью 1 бит за такт. При максимально допустимых 600 тактах как единицу взмаргивания, в сдвиговые регистры можно много чего выбросить, главное данные успеть подготовить.
    Хотя думаю, было бы лучше просто использовать какие-нить параллельные регистры (тут я названия не знаю), чтобы выгружать сразу по 8 бит одним портом МК.

    Еще можно оптимизировать ШИМ, сделав не 256 возможных яркостей, я штук 16. Но при этом можно сделать паузу между последовательными шагами ШИМ яркости увеличивающуюся экспоненциально. Это ведь разницу между яркостями 1 и 2 на глаз можно отличить, а разницу между 254 и 255, да еще в динамике - нельзя.
    То есть можно сделать яркости примерно такие:
    0 1 2 3 5 8 11 15 20 27 40 55 80 110 145 190 255.

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

    В общем, имхо все совершенно реально, если заморочиться и есть откуда данные брать. Но это за час-два не сваять :-)

  7. #7
    Новичок
    Регистрация
    25.02.2010
    Возраст
    38
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Если автор еще жив и вдруг увидит это сообщение, то я с радостью куплю готовое устройство для себя. Самостоятельно паять/собирать нет ни возможности, ни сил, ни времени, так что, готов оплатить затраты Ваших сил и времени + материалы.

    Пишите: petr@zelkol.ru

    хабра-хабр)

  8. #8
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Цитата Сообщение от SBorovkov Посмотреть сообщение
    если в сдвиговый регистр выгружать данные через SPI (595 региитр совместим с SPI, насколько я помню), то выгрузка происходит со скоростью 1 бит за такт. При максимально допустимых 600 тактах как единицу взмаргивания, в сдвиговые регистры можно много чего выбросить, главное данные успеть подготовить.
    Хотя думаю, было бы лучше просто использовать какие-нить параллельные регистры (тут я названия не знаю), чтобы выгружать сразу по 8 бит одним портом МК.

    Еще можно оптимизировать ШИМ, сделав не 256 возможных яркостей, я штук 16. Но при этом можно сделать паузу между последовательными шагами ШИМ яркости увеличивающуюся экспоненциально. Это ведь разницу между яркостями 1 и 2 на глаз можно отличить, а разницу между 254 и 255, да еще в динамике - нельзя.
    То есть можно сделать яркости примерно такие:
    0 1 2 3 5 8 11 15 20 27 40 55 80 110 145 190 255.

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

    В общем, имхо все совершенно реально, если заморочиться и есть откуда данные брать. Но это за час-два не сваять :-)
    Спасибо за инфу!
    Действительно хороший регистр .
    Информация по последовательно параллельному регистру 74HC595
    Беру на вооружение.
    Последний раз редактировалось Chip; 25.02.2010 в 15:35.

  9. #9
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,376
    Вес репутации
    10

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Цитата Сообщение от Peter Посмотреть сообщение
    Если автор еще жив и вдруг увидит это сообщение, то я с радостью куплю готовое устройство для себя. Самостоятельно паять/собирать нет ни возможности, ни сил, ни времени, так что, готов оплатить затраты Ваших сил и времени + материалы.

    Пишите: petr@zelkol.ru

    хабра-хабр)
    Жив я еще
    Хотим заказать для пробы несколоко печатных плат и коробочки подобрать под них. Но это не раньше чем через 1 мес. получится
    Последний раз редактировалось Chip; 25.02.2010 в 19:46.

  10. #10
    Новичок
    Регистрация
    27.02.2010
    Возраст
    69
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Фоновая подсветка телевизора Ambilight

    Купил бы с удовольствием, Москва.
    На таких же условиях как и Peter.

    Пишите, если вдруг решите продать I@shir-man.com
    Было бы очень здорово)

    хабр

Страница 1 из 93 12345671151 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 5 (пользователей: 0 , гостей: 5)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •