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

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

    28 14.66%
  • Да.

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

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

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

    Я думаю что с SoftPWM , будет тормозить
    тебе нужно привести твои порты к такому виду
    #define D2_High PORTE |=B00010000 //red line-1 on
    #define D2_LOW PORTE &= B11101111 //red line-1 off
    #define D3_High PORTE |=B00100000 //green line-1 on
    #define D3_LOW PORTE &= B11011111 //green line-1 off
    #define D4_High PORTG |=B00100000 //blue line-1 on
    #define D4_LOW PORTG &= B11011111 //blue line-1 off

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

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

    не как не могу понять логику в этих портах.......может где нибудь табличка есть умная ???
    Последний раз редактировалось asuz; 23.09.2011 в 21:37.

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

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


    вот чего нануглил, но всё равно не могу с портми разобраться...
    п.с. весь день бьюсь с этой штукой.... не могу я с портами разобраться работают только 4 которые в готовом коде были... а остальные 6 не могу не как привязать...
    Последний раз редактировалось asuz; 23.09.2011 в 19:41.

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

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

    Разобрался я со своей мегой1280..... Вопщем Аппартный ШИМ есть только на выходах от 3 до 13 и на нижней площадке от 44 до 46.
    ПОлучаем только 15 выходов аппаратного ШИМа.
    п.с. Сегодня буду писать скейч Аппаратный + софтовый, у софтового максимум 16 и апаратный 15.... как раз на 30 выходов мне хватит.

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

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

    целый день бился с кодом... не как не могу его победить....
    может кто покажет где ошибка?

    #define D2_High PORTE |=B00010000 //red line-1 on
    #define D2_LOW PORTE &= B11101111 //red line-1 off
    #define D3_High PORTE |=B00100000 //green line-1 on
    #define D3_LOW PORTE &= B11011111 //green line-1 off
    #define D4_High PORTG |=B00100000 //blue line-1 on
    #define D4_LOW PORTG &= B11011111 //blue line-1 off

    #define D5_High PORTE |=B00001000 //red line-2 on
    #define D5_LOW PORTE &= B11110111 //red line-2 off
    #define D6_High PORTH |=B00001000 //green line-2 on
    #define D6_LOW PORTH &= B11110111 //green line-2 off
    #define D7_High PORTH |=B00010000 //blue line-2 on
    #define D7_LOW PORTH &= B11101111 //blue line-2 off

    #define D8_High PORTH |=B00100000 //red line-3 on
    #define D8_LOW PORTH &= B11011111 //red line-3 off
    #define D9_High PORTH |=B01000000 //green line-3 on
    #define D9_LOW PORTH &= B10111111 //green line-3 off
    #define D10_High PORTB |=B00010000 //blue line-3 on
    #define D10_LOW PORTB &= B11101111 //blue line-3 off

    #define D11_High PORTB |=B00100000 //red line-4 on
    #define D11_LOW PORTB &= B11011111 //red line-4 off
    #define D12_High PORTB |=B01000000 //green line-4 on
    #define D12_LOW PORTB &= B10111111 //green line-4 off
    #define D13_High PORTB |=B10000000 //blue line-4 on
    #define D13_LOW PORTB &= B01111111 //blue line-4 off

    #define D44_High PORTL |=B00100000 //red line-4 on
    #define D44_LOW PORTL &= B11011111 //red line-4 off
    #define D45_High PORTL |=B01000000 //green line-4 on
    #define D45_LOW PORTL &= B10111111 //green line-4 off
    #define D46_High PORTL |=B10000000 //blue line-4 on
    #define D46_LOW PORTL &= B01111111 //blue line-4 off

    volatile unsigned int tcnt2;
    volatile byte pwm_time;
    unsigned long blank=0;
    #include <SoftPWM.h>
    uint8_t leds[15] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36};
    byte volatile color[15];
    unsigned long night=0;

    void setup()
    {
    Serial.begin(115200);
    for (int i=2; i < 15; i++){pinMode(i, OUTPUT);}
    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.


    SoftPWMBegin();
    for (int n = 0; n < 15; n++)
    SoftPWMSet(leds[n], 0);
    SoftPWMSetFadeTime(ALL, 5, 5);
    }
    void loop()
    {
    if (Serial.available() > 15)
    {
    if (Serial.read() == 255) //проверка прификса
    {
    for (int i = 0; i < 15; 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 < 15; 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 ) D44_High; else D44_LOW;
    if(color[13] > pwm_time) D45_High; else D45_LOW;
    if(color[14] > pwm_time) D46_High; else D46_LOW;
    if (Serial.available() > 15)
    {
    if (Serial.read() == 255)
    {
    for (int n = 0; n < 15; n++)
    {
    color[n] = Serial.read();
    }
    night=0;
    }
    }
    else
    {
    if(night>30000) { night=0; for (byte n = 0; n < 15; n++) color[n] = 0;}
    night++;
    }
    for (int n = 0; n < 15; n++)
    SoftPWMSet(leds[n], color[n]);
    }

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

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

    Я уже писал что ошибка в SoftPWM

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

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

    Забросил я мороку с софт шимом. Поехал в Чип и дип и купил регистров.
    Но и тут у меня грабли всё собрал по схеме только ардуинка не нано а мега1280, нашел я ноги 10(нано)-53(мега), 11-51, 13-52.
    Вот этот скей с сайта ардуино работает.
    PHP код:
    //**************************************************************//
    //  Name    : shiftOutCode, Hello World                                
    //  Author  : Carlyn Maw,Tom Igoe, David A. Mellis 
    //  Date    : 25 Oct, 2006    
    //  Modified: 23 Mar 2010                                 
    //  Version : 2.0                                             
    //  Notes   : Code for using a 74HC595 Shift Register           //
    //          : to count from 0 to 255                           
    //****************************************************************

    //Pin connected to ST_CP of 74HC595
    int latchPin 53;
    //Pin connected to SH_CP of 74HC595
    int clockPin 52;
    ////Pin connected to DS of 74HC595
    int dataPin 51;



    void setup() {
      
    //set pins to output so you can control the shift register
      
    pinMode(latchPinOUTPUT);
      
    pinMode(clockPinOUTPUT);
      
    pinMode(dataPinOUTPUT);
    }

    void loop() {
      
    // count from 0 to 255 and display the number 
      // on the LEDs
      
    for (int numberToDisplay 0numberToDisplay 256numberToDisplay++) {
        
    // take the latchPin low so 
        // the LEDs don't change while you're sending in bits:
        
    digitalWrite(latchPinLOW);
        
    // shift out the bits:
        
    shiftOut(dataPinclockPinMSBFIRSTnumberToDisplay);  

        
    //take the latch pin high so the LEDs will light up:
        
    digitalWrite(latchPinHIGH);
        
    // pause before next value:
        
    delay(500);
      }

    А заливаю скей для эмбилайта

    PHP код:
    #define TCNT2_Const 250 //256-9 
    #define BrightnessSize 30 //число каналов 

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

    uint8_t volatile PWM_Counter=0
    uint8_t Brightness[BrightnessSize]; 

    void setup()   
    {  
              
    pinMode(53OUTPUT);   //SS SPI вывод для управления защелкой 
            
    pinMode(51OUTPUT);    // SPI DATA 
            
    pinMode(52OUTPUT);   // SPI Clock 
            
    digitalWrite(53,LOW); 
            
    digitalWrite(51,LOW); 
            
    digitalWrite(52,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++)  
      {  
        if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
         
    i++;  
         
    byte_shift byte_shift<<1
      } 
    SPDR byte_shift//отправляем в шину SPI  
    //************************************** 
    byte_shift 0
    for (
    uint8_t bt=0bt<8bt++)  
      {  
        if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
         
    i++;  
         
    byte_shift byte_shift<<1
      } 
    SPDR byte_shift//отправляем в шину SPI  
    //************************************** 
    byte_shift 0
    for (
    uint8_t bt=0bt<8bt++)  
      {  
        if(
    Brightness[i]>PWM_Counter_vbyte_shift|= 1// тут соответственно использщуем nbit 
         
    i++;  
         
    byte_shift byte_shift<<1
      } 
    SPDR byte_shift//отправляем в шину SPI  

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

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

    п.с.2. или лучше купить адрдуино нано? и не морочится с мегой
    Последний раз редактировалось asuz; 11.10.2011 в 17:25.

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

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

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

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

    По умолчанию 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.

  10. #630
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    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.

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

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

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

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

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

Ваши права

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