te lo paso. mi idea es hacer que 3 lineas de lamparas esten comandadas simultaneamente con los dimer del pic via adc,o sea potes en ao a1 a2 regulando el brillo de las mismas
void crescendo ( void )
{
R = read_adc () ;
set_adc_channel ( 0 ) ;
delay_us ( 10 ) ;
if ( sinc == 0 )
{
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;
IR = DR = 1 ; delay_us ( 30 ) ;
IR = DR = 0 ;
}
R = read_adc () ;
set_adc_channel ( 1 ) ;
delay_us ( 10 ) ;
if ( sinc == 0 )
{
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;
IB = DB = 1 ; delay_us ( 30 ) ;
IB = DB = 0 ;
}
R = read_adc () ;
set_adc_channel ( 2 ) ;
delay_us ( 10 ) ;
if ( sinc == 0 )
{
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;delay_us ( R ) ;
delay_us ( R ) ; delay_us ( R ) ; delay_us ( R ) ;
IB = DB = 1 ; delay_us ( 30 ) ;
IB = DB = 0 ;
}
}
el motivo de tantos delay es que no toma variables de mas de 255 en su argumento

el if sinc== 0 es la deteccion de paso por cero, con ir dr ig dg ib db le doy el disparo al moc que lo transmite al triac.
con un solo canal anda barbaro, le agrego los otros y empieza a temblar