Dudo que puedan controlar 3 PWM con basic o C, yo e controlado 9 PWM independientes pero con .asm.
Un saludo.
Atte. CARLOS.
Creo que es posible manejar tantos PWM como uno quiera siempre y cuando la precisión no sea el primer punto.
No importa si es C o ensamblador, se puede hacer con ambos solo que en ensamlador (sobre todo en los 16F) como se es más directo uno aprovecha mucho mas los ciclos de reloj y puede obtener mas frecuencia de PWM funcionando a menos MHz.
Ejemplo
Cada PWM tendrá 3 variables.
PWMxCiclos --> contador de la cantidad de ciclos que pasaron desde que comenzó de nuevo el PWM
PWMxPreriodo --> cantidad de ciclos que dura el PWM
PWMxCicloActivo --> cantidad de ciclos que dura el PWM en alto.
Donde periodo y ciclo activo sean por ejemplo variables de 8 bits y donde CicloActivo sea <= a Periodo (porque cicloactivo no está expresado en procentaje sino en ciclos de instrucción).
Luego
1) Usar una interrupción con un timer, fijado por ejemplo en 500us
2) Al llegar ese tiempo se enciende un flag de otra variable
3) Ese flag de la variable es el encargado de incrementar todos los contadores PWMxCiclos de los PWM.
4) Se verifica si PWMxCiclos >= PWMxPeriodo en cuyo caso se pondra en 0 el contador y en Activo la SALIDA y sigue con el PWM siguiente, sino va a 5)
5) Se verifica si PWMxCiclos es > PWMxCicloActivo si es así lo pone en BAJO la salida por terminar el duty cycle
De esa forma se pueden tener un PWM por cada pin que se tenga en el PIC, pero por supuesto como dije antes a mas PWM menor será la frecuencia final que se podrá obtener y además la aplicación está prácticamente dedicada a esto.
Saludos