Доброго времени суток! Решил сделать подсветку на 42 канала, используя 74HC595 и ULN2004. Развел платку, запаял, прошил, вроде как работает, светодиоды загораются, но не так как надо. не загорается красный из 3 зоны, зелёный из 5 зоны, красный из 10 зоны, зелёный из 12 зоны, а синего из 7 зоны и синего из 14 зоны вообще нету. То есть походу не правильная отправка потока в SPI. Код который заливаю в мегу написанный в ArduinoIDE:

Код:
#define TCNT2_Const 247 
#define BrightnessSize 42//число каналов 

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

uint8_t volatile PWM_Counter=0; 
uint8_t Brightness[BrightnessSize]; 

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++) //обнулить массив 
    { 
      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())   
  {   
      if (Serial.read() == 255)  //проверка прификса        
        { 
         for (int i = 0; i < BrightnessSize; i++)   
         {                  
          for (;(Serial.available()==0)&&(blank<=Max_Blank);blank++);
            if (Serial.available())
              {
               Brightness[i] = Serial.read();  // прочитать данные о цветах из порта в массив  
               blank=0;  
              }
         }
        }  
  } else
    {   
     if(blank>Max_Blank)
       {
         blank=0;
         for (byte i = 0; i < BrightnessSize; i++)
         Brightness[i] = 15;
       }   
      blank++;   
    }    
}

SIGNAL(TIMER2_OVF_vect) 
{  
  uint8_t PWM_Counter_v=PWM_Counter; // поскольку PWM_Counter объявлена как valotile, обращение к ней - всегда обращение в память. Поэтому создаем локальную копию, она бeдет храниться в регистре. 
  TCNT2 = TCNT2_Const;

  uint8_t byte_shift; 
  uint8_t * CBright;
  CBright = (uint8_t *)&Brightness[0];
  
  uint8_t j=0;
  for (j=6;j>0;j--)
  {
   byte_shift = 0;
        
   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
        CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   if(*CBright>PWM_Counter_v) byte_shift|= 1; 
   	CBright++;  
    	byte_shift = byte_shift<<1; 

   SPDR = byte_shift; //отправляем в шину SPI  
  }
  PORTB |= (1<<PIN2); //формируем положительный импульс защелки 
  PWM_Counter++; 
  while(!(SPSR & (1<<SPIF)));   // Ожидание завершения передачи данных 
  PORTB &= ~(1<<PIN2);
}
Помогите пожалуйста разобраться с этой ситуацией.
P.S. софт использую Ambilight - 2011 - Eraser Soft c.1.1.11 и Лайтпак 5.8.6-1