Hola
xootraoox, me e puesto a programas un poco en .asm y ya conseguí los tan ansiados 9 PWM, el programa no es muy complejo o sea que alguien que entienda los 2 idiomas podría llegar a traducirlo a C, en realidad lo realice de forma básica para que la traducción resulte más sencilla y con eso sacrifique un poco de memoria de programa, ya que sé que se puede reducir en una buena extensión el código, pero resultaría mas difícil de comprender para el traductor.
Las características son un poco diferentes al código que tu me as pasado por e-mail ya que este solo controlaba 1 salida por ves, o sea que nunca el PWM llegaría a un ciclo 100% efectivo, como este código provoca un desfasaje en el control de las salidas solo tendrá un duty-cicle máximo de 33.3%. En el programa que yo realice esto anterior no pasa ya que todas las salidas son controladas a la ves, por lo tanto están todas en fase y se consigue un duty-cicle máximo del 100% en todas las salidas.
Por otro lado después de realizar el programa, me e dado cuenta que para realizar varias rutinas de encendido distintas y seleccionarlas por medio de un pulsador, será necesario el uso de una memoria externa la cual tendrá que disponer en su interior las variadas secuencias de encendido para luego que el PIC leyendo de la misma pueda ejecutarlas, esto te lo comento por que recién después de que termine el control de las 9 salidas me e dado cuenta que para producir un ciclo con 10 pasos y un solo ciclo de encendido son necesarias 90 posiciones de memoria, por lo que para poder disponer de varios ciclos diferentes y de mas pasos no habrá PIC que le entre toda esta información dentro.
La frecuencia del PWM es de aproximadamente de 100 Hz con un cristal de 4 MHz para cada una de las salidas, la resolución es de 0-100, con esto ya se logra que el escalonado entre un duty-cicle y el próximo no sea notado por el ojo, así tampoco como la frecuencia de conmutación. O sea que para la vista resulta agradable y sin cambios bruscos.
El programa no esta terminado, lo que ya esta andando y probado es para que realice una sola secuencia de 10 pasos (la secuencia esta almacenada en la memoria de programa del PIC en forma de tabla) y el uso de 2 pulsadores para subir o bajar la velocidad del cambio de paso. Por lo que faltaría que en ves de estar en el PIC la secuencia, que lo lea de una memoria y el control de los 2 pulsadores para el cambio de secuencia.
Si alguien se siente capas de poder hacer la traducción al C le paso el .asm para que se guíe y luego lo pueda postear aquí para que todos dispongamos de esto.
Bueno, me e cansado de escribir

, espero que esto les sea de utilidad.
Suerte
Atte. CARLOS