PWM programado manualmente

Hola, requiero hacer una aplicación para controlar la intensidad de muchos leds. El problema es que quiero controlar la intensidad de cada led independientemente, y son muchos (como 20) y no tengo tantos PWM en un microcontrolador, así que pensé que podría programar un pwm manual para cada pin de salida del micro.

Usaría un pic 18f452. y mi idea es programar lo siguiente para cada pin de salida (por ejemplo para el pin B0)
while(1){
output_bit( PIN_B0, 1);
delay_ms(9);
output_bit( PIN_B0, 0);
delay_ms(1);
}

Así tendría un periodo de 10 ms, (o 100 hz de frecuencia) con un 90% de ciclo de trabajo.
Obvio también podría hacer lo con delay_us y diversos valores para tener una frecuencia de pwm más alta, sin embargo, no se si ésta solución vaya a funcionar.

Quisiera su opinión.
 
Hola buclez.

Usando un timer y la interrupción del mismo puedes generar varios PWM por soft.
Código:
#int_RTCC
void  RTCC_isr(void) 
{
ticks++;
      if(ticks==0){
         ledverde=1;
         ledrojo=1;
         ledazul=1;
      };
      if(ticks==rojo)
         ledrojo=0;
      if(ticks==verde)
         ledverde=0;
      if(ticks==azul)
         ledazul=0;
      set_timer0(140);
}
La fuente aquí.
http://www.micropic.es/index.php?option=com_content&view=article&id=59%3Ageneracion-de-3-pwm-probamos-led-rgb&catid=38%3Atecnicas&Itemid=65〈=es

Saludos.
Javi.
 
Atrás
Arriba