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

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

    28 14.66%
  • Да.

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

    34 17.80%
Показано с 1 по 10 из 921

Древовидный режим

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

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

    Огромное спасибо за помощь SBorovkov
    PHP код:
    #define TCNT2_Const 250 //256-9
    #define BrightnessSize 24 //число каналов

    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++) 
      { 
        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);

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

Название:	24.jpg 
Просмотров:	1970 
Размер:	74.1 Кб 
ID:	10521

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

Название:	ardulight_14.png 
Просмотров:	1243 
Размер:	6.5 Кб 
ID:	10520
    Последний раз редактировалось Chip; 17.12.2010 в 02:18.

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

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

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

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

Ваши права

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