Banner publicitario de PCBWay

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