ок, сделал 2 зоны 10 на 10 и 10 в ширину , не чего не меняется.... сделал 2000мс диоды мерцают, и иногда подглючивают.....
если прошиваю ардуино прошивкой на 16 портов то работает всё замечательно, хоть зоны на весь экран ставь, а когда шью на 30 начинает лагать.... может этот softPWM не умеет на 30 каналов раскладывать, не простож там наверно стояло 16 максимальных каналов может кто нить скетч подкинет на 30 каналов без soft PWM?

я пробовал вот так шить
#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

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[12]; //массив храннения цветов 12-ть каналов


void setup()
{
for (int i=2; i < 14; i++){pinMode(i, OUTPUT);}
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() > 12)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 12; 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 < 12; 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;
}
но и тут всего 14 каналов......
в програмировании ардуин не силён, прошу помощи....