El 18F4550 tiene generadores PWM incorporados, por lo que es fácil. Una vez que configura el hardware, continúa generando la forma de onda PWM por su cuenta. El hardware para hacer esto se llama módulo "CCP", que significa comparación, captura y modulación de ancho de pulso. En su caso, desea utilizarlo en modo PWM.
Configuró el temporizador 2 para proporcionar el período PWM, luego el ciclo de trabajo se escribe en CCPRxL. En realidad, el ciclo de trabajo tiene 2 bits de fracción adicionales por debajo del período del temporizador 2. Estos bits de fracción se escriben en el registro CCPxCON en el lugar correcto. Es un poco squirrely, pero todo funciona.
Si desea cambiar el ciclo de trabajo de PWM en cada período, es probable que desee interrumpir el temporizador 2. Tenga en cuenta que con su escalador posterior, puede interrumpir cada N períodos, donde N es 1 a 16. En la interrupción, cambie CCPRxL y CCPxCON (si desea usar los bits de fracción extra) al nuevo ciclo de trabajo. El ciclo de trabajo en estos registros es en unidades de conteo del temporizador 2, que es el tiempo de activación absoluto por impulso, no la fracción de tiempo de activación por impulso. La fracción de tiempo es el tiempo absoluto absoluto dividido por el período.
Una vez que sepa cómo cambia el ciclo de trabajo de PWM, puede activarse desde cualquier decisión en el código. Para cambiarlo en función de un interruptor externo, presione significa detectar que presione y luego realice el cambio.