Fallo mio al decir que era el mismo programa. Habia una "sutil" diferencia que provocaba esa distorsion. Lo estoy haciendo con un for y delays, ya se que no es el metodo optimo, pero es que con timer e interrupciones no consigo buenos resultados, ni siquiera utilizando el EPWM por hardware del 18F1220. Yo creo que el problema esta en que al cambiar el duty en cada ciclo del PWM, se alteran los tiempos del timer y se va todo al carajo.
Ahora la explicacion de esa distorsion con el 12F675, que acabo de solucionar. Como ya dije, el PIC genera un PWM con 4 salidas para activar un puente H. El tiempo en ON de cada ciclo del PWM lo selacciono de una tabla con 32 valores, el tiempo en OFF lo calculo restando al tiempo total, (312 uS), el valor del ON.
Esto genera el primer semiciclo de la señal de salida, mediante la activacion de dos transistores opuestos del puente. A continuacion cambio los transistores por los otros dos y repito el for, con lo que se genera el segundo semiciclo.
Transcurrido el tiempo de ON, desactivaba los dos transistores y activaba el delay del OFF, pero entonces la carga de AC quedaba flotante hasta la activacion de los otros transistores y de ahi la distorsion. La solucion es sencilla, desactivar solo el transistor de la parte alta y transcurrido el tiempo de OFF, desactivar el de la parte baja justo antes de cambiar a la otra pareja de transistores.
Esa modificacion la hice hace tiempo en el programa del 18F1220, pero me olvide de hacerla en el 12F675 y de ahi la diferencia.
Adjunto el programa y unas capturas.
Saludos.