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

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

    28 14.66%
  • Да.

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

    34 17.80%
Страница 63 из 91 ПерваяПервая ... 13535758596061626364656667686973 ... ПоследняяПоследняя
Показано с 621 по 630 из 921

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    10.10.2011
    Возраст
    60
    Сообщений
    7
    Вес репутации
    173

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

    Привет всем. Респект Chip за столь обстоятельный ПОСТ.
    Хочу собрать сеё уст-во на 6 зон 18 каналов(судя по посту одна ардуина справится?), Не дадите скейч, или он единый, для разного кол-ва зон и отличие только в настройке Win-приложения?
    В программировании не силен.

  2. #2
    Пользователь
    Регистрация
    23.09.2011
    Возраст
    36
    Сообщений
    37
    Вес репутации
    180

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

    Цитата Сообщение от Userrex Посмотреть сообщение
    Привет всем. Респект Chip за столь обстоятельный ПОСТ.
    Хочу собрать сеё уст-во на 6 зон 18 каналов(судя по посту одна ардуина справится?), Не дадите скейч, или он единый, для разного кол-ва зон и отличие только в настройке Win-приложения?
    В программировании не силен.
    Ардуинка какая? Nano Uno?
    п.с. схема нужна с регистрами
    PHP код:
    #define TCNT2_Const 250 //256-9 
    #define BrightnessSize 18 //число каналов 

    unsigned long blank=0//таймер простоя  

    uint8_t volatile PWM_Counter=0
    uint8_t Brightness[BrightnessSize]; 

    void setup()   
    {  
              
    pinMode(10OUTPUT);   //SS SPI вывод для управления защелкой 
            
    pinMode(11OUTPUT);    // SPI DATA 
            
    pinMode(13OUTPUT);   // 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++) //обнулить массив 
        

            
    Brightness[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 0BrightnessSizei++)   
                 {                  
                   
    Brightness[i] = Serial.read();  // прочитать данные о цветах из порта в массив  
                 
    }          
                 
    blank=0;  
            }  
      } else {   
               if(
    blank>100000) { blank=0; for (byte i 0BrightnessSizei++)  Brightness[i] = 15;}   
              
    blank++;   
             }    


    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=0bt<8bt++) 

    byte_shift byte_shift<<1
    if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
    i++; 

    SPDR byte_shift//отправляем в шину SPI  
    //************************************** 
    byte_shift 0
    for (
    uint8_t bt=0bt<8bt++) 

    byte_shift byte_shift<<1
    if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
    i++; 

    SPDR byte_shift//отправляем в шину SPI  
    //************************************** 
    byte_shift 0
    for (
    uint8_t bt=0bt<8bt++) 

    byte_shift byte_shift<<1
    if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
    i++; 

    SPDR byte_shift//отправляем в шину SPI  

        
    PORTB |= (1<<PIN2); //формируем положительный импульс защелки 
            
    PWM_Counter++; 
            while(!(
    SPSR & (1<<SPIF)));   // Ожидание завершения передачи данных 
        
    PORTB &= ~(1<<PIN2); 

    Последний раз редактировалось asuz; 11.10.2011 в 17:22.

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

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

    Забросил я мороку с софт шимом. Поехал в Чип и дип и купил регистров.
    Но и тут у меня грабли всё собрал по схеме только ардуинка не нано а мега1280, нашел я ноги 10(нано)-53(мега), 11-51, 13-52.
    Вот этот скей с сайта ардуино работает.
    Зачем тебе на меге с регистрами заморачиватся у тебя же огромное количество выходов? Достаточно будет описать все выходы(#define D2_High PORTD |=B00000100
    #define D2_LOW PORTD &= B11111011) и настроить таймер
    Последний раз редактировалось Chip; 11.10.2011 в 17:25.

  4. #4
    Пользователь
    Регистрация
    23.09.2011
    Возраст
    36
    Сообщений
    37
    Вес репутации
    180

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

    Цитата Сообщение от Chip Посмотреть сообщение
    Зачем тебе на меге с регистрами заморачиватся у тебя же огромное количество выходов?
    Выходов много, а шимов всего 12 (аппаратных). А совместить софт и аппаратно у меня не получилось, и передать софт на 30 шимов тоже (и блиотека softPWM расчитана на 15 ) вот и набрал регистров.....
    Последний раз редактировалось asuz; 11.10.2011 в 17:28.

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

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

    Цитата Сообщение от asuz Посмотреть сообщение
    Выходов много, а шимов всего 12 (аппаратных). А совместить софт и аппаратно у меня не получилось, и передать софт на 30 шимов тоже (и блиотека softPWM расчитана на 15 ) вот и набрал регистров.....
    У Arduino Nano всего 6 аппаратных ШИМ выходов, но я их и не использую
    Посмотри внимательно на выше выложенный мной скетчь и сравни со скетчем из шапки и поймешь что тебе нужно править
    Если что то будет не понятно спрашивай не стесняйся
    Последний раз редактировалось Chip; 11.10.2011 в 17:56.

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

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

    Цитата Сообщение от Userrex Посмотреть сообщение
    Привет всем. Респект Chip за столь обстоятельный ПОСТ.
    Хочу собрать сеё уст-во на 6 зон 18 каналов(судя по посту одна ардуина справится?), Не дадите скейч, или он единый, для разного кол-ва зон и отличие только в настройке Win-приложения?
    В программировании не силен.
    Попробуй вот этот скетчь и отпишись
    Я его еще не проверял
    Не забудь настройки в программе сделать на 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=219i++){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;

    Последний раз редактировалось Chip; 11.10.2011 в 17:44.

  7. #7
    Новичок
    Регистрация
    10.10.2011
    Возраст
    60
    Сообщений
    7
    Вес репутации
    173

    По умолчанию 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=219i++){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;

    Спасибо, 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 Герц, что думаю маловато, буду вообщем эксперементировать, когда все соберу.

  8. #8
    Новичок
    Регистрация
    10.10.2011
    Возраст
    60
    Сообщений
    7
    Вес репутации
    173

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

    Цитата Сообщение от Chip Посмотреть сообщение
    Попробуй вот этот скетчь и отпишись
    Я его еще не проверял
    Не забудь настройки в программе сделать на 18 каналов
    Привет Chip и сообщество. Извините за долгое молчание, пока Все получил, пока с командировками, пока все собрал и вот могу констатировать, что Скейч на 18 каналов (6 зон) благополучно заработал.
    Скейч Chip-а http://www.compcar.ru/forum/showthre...6833#post86833
    Программа Eraser http://www.compcar.ru/forum/showthread.php?t=5869
    Плата моя http://www.compcar.ru/forum/showthre...t=5869&page=67

    Один нюанс с работой WMP 11(где то в теме поднимался), во вкладке
    Параметры\Быстродействие, ползун Ускорение видео надо переместить в среднее положение(или было написано отключить аппаратный 3D), в противном случае при проигрывании "Во весь экран" вся подсветка выключается.
    Теперь по железу и быстродействию. У меня Нетбук Acer на Atom-е.
    При 6 зонах и толщине каждой зоны 5% задержка очень небольшая и смотрится достаточно комфортно.
    Еще раз огромное спасибо Chip-у и Eraser-у за сей программно аппаратный комплекс.
    Как и говорил, лучше вынести основные моменты в шапку темы, для удобства нахождения инфы пользователями.
    Последний раз редактировалось Userrex; 06.12.2011 в 18:51.

  9. #9
    Пользователь
    Регистрация
    23.09.2011
    Возраст
    36
    Сообщений
    37
    Вес репутации
    180

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

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

Название:	IMG_5987.JPG 
Просмотров:	1188 
Размер:	334.9 Кб 
ID:	13557Нажмите на изображение для увеличения. 

Название:	IMG_5989.JPG 
Просмотров:	1189 
Размер:	281.1 Кб 
ID:	13558
    плата готова.
    пока упёрся в прошивку.

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

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

    Вот тебе в помощь распиновку контроллера
    Будет выглядеть примерно так

    PHP код:
    #define  D2_High PORTE |=B00010000  //red  
    #define  D2_LOW PORTE &= B11101111  
    #define  D3_High PORTE |=B00100000  //green  
    #define  D3_LOW PORTE &= B11011111  
    #define  D4_High PORTG |=B00100000  //blue  
    #define  D4_LOW PORTG &= B11011111 
    PE4 означает 4-й бит порта E, соответственно мы включаем этот бит B00010000 и выключаем B11101111 , не забывай что отсчет битов начинается с 0
    PG5 означает 5-й бит порта G и т.д.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	MEGA1280.jpg 
Просмотров:	17177 
Размер:	287.7 Кб 
ID:	13146  
    Последний раз редактировалось Chip; 11.10.2011 в 18:23.

Страница 63 из 91 ПерваяПервая ... 13535758596061626364656667686973 ... ПоследняяПоследняя

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

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

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

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

Ваши права

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