Млин перепробовал все и решил слепить из 2-х 1
и сделал вот так
теперь все работает
ISR(SIG_OVERFLOW1)
{
TCNT1 = TMR; //начальное значение таймера
// Канал 0
if (Tic ‹ Ch_0) sbi(PORTA,0);
else cbi(PORTA,0);
// Канал 1
if (Tic ‹ Ch_1) sbi(PORTA,1);
else cbi(PORTA,1);
// Канал 2
if (Tic ‹ Ch_2) sbi(PORTA,2);
else cbi(PORTA,2);
// Канал 3
if (Tic ‹ Ch_3) sbi(PORTA,3);
else cbi(PORTA,3);
// Канал 4
if (Tic ‹ Ch_4) sbi(PORTA,4);
else cbi(PORTA,4);
// Канал 5
if (Tic ‹ Ch_5) sbi(PORTA,5);
else cbi(PORTA,5);
// Канал 6
if (Tic ‹ Ch_6) sbi(PORTA,6);
else cbi(PORTA,6);
// Канал 7
if (Tic ‹ Ch_7) sbi(PORTA,7);
else cbi(PORTA,7);
// Канал 8 - здесь переходим к следующему порту
if (Tic ‹ Ch_
sbi(PORTC,7);
else cbi(PORTC,7);
// Канал 9
if (Tic ‹ Ch_9) sbi(PORTC,6);
else cbi(PORTC,6);
// Канал 10
if (Tic ‹ Ch_10) sbi(PORTC,0);
else cbi(PORTC,0);
// Канал 11
if (Tic ‹ Ch_11) sbi(PORTD,7);
else cbi(PORTD,7);
// Канал 12
if (Tic ‹ Ch_12) sbi(PORTD,5);
else cbi(PORTD,5);
// Канал 13
if (Tic ‹ Ch_13) sbi(PORTD,6);
else cbi(PORTD,6);
// Канал 14
if (Tic ‹ Ch_14) sbi(PORTC,1);
else cbi(PORTC,1);
Tic++; //увеличиваем счетчик тиков
if(Tic==12
{
Tic=0; //начинаем все сначала
//и только теперь переходим к новым значениям яркости
Ch_0=PWM_buffer[0];
Ch_1=PWM_buffer[1];
Ch_2=PWM_buffer[2];
Ch_3=PWM_buffer[3];
Ch_4=PWM_buffer[4];
Ch_5=PWM_buffer[5];
Ch_6=PWM_buffer[6];
Ch_7=PWM_buffer[7];
Ch_8=PWM_buffer[8];
Ch_9=PWM_buffer[9];
Ch_10=PWM_buffer[10];
Ch_11=PWM_buffer[11];
Ch_12=PWM_buffer[12];
Ch_13=PWM_buffer[13];
Ch_14=PWM_buffer[14];
}
}
//************************************************** *
// Начало программы
//************************************************** *
int main(void)
{
unsigned char Counter_chanel=0;
unsigned char PWM_value=0;
DDRA=0xFF; //порты - на выход
DDRC=0xFF;
DDRD=0xFF;
PORTA=0x00;
PORTC=0x00;
PORTD=0x00;
delay_ms(1000);
TCNT1 = TMR; //начальное значение счетчика
TIMSK &= ~(1‹‹TOIE1); //запрещаем Ovf1
cli(); //запрещаем прерывания
TIMSK |= 1‹‹TOIE1; //Разрешить Ovf1
TCCR1B |= 0x2; //включить таймер 1 с делителем 8
sei(); //разрешить прерывания
while(1)
{
for(Counter_chanel=0;Counter_chanel‹15;Counter_cha nel++)
{
for(PWM_value=0;PWM_value‹128;PWM_value++)
{
PWM_buffer[Counter_chanel]=PWM_value;
delay_ms(3);
}
delay_ms(1);
}
}}