Simple, pensa que es un PWM y como realizarlo. Es como una onda cuadrada en el que varia el pulso que esta en alto.
La frecuencia es constante.
Si quisiera un PWM con 100 pasos y una frecuencia de 100Hz por ejemplo. necesitaria: Tpwm = 1 / 100Hz = 10ms , y necesito 100 pasos, por lo cual necesito 10ms/100 = una interrupcion cada 100us.
En la interrupcion voy a tener una variable que cuente ( Va a ir de 0 a 100 ). y un if comparandolo con el duty que yo seleccione, en este caso es simple por que el 0 al 100 del contador, responden a lo mismo que 0% al 100% del duty.
Puede haber errores en el codigo, pero es algo asi:
uint8_t contador = 100;
void funcionDeInterrupcionTMRx(void)
{
if(contador == 0 )
{
// Se completo todos los pasos en esa frecuencia? Apago todo
contador = 100;
salida = 0;
}
if(PWM1 >= contador )
{
//Activo la salida cuando se necesite
salida = 1;
}
contador--;
}
Tambien se puede hacer de otras formas, con contador que sea ascendente en ves de descendente, etc.