Tengo una asignación en la que el PIC está sincronizado a 16kHz y la salida del PWM debe estar en el canal dos. La frecuencia PWM tiene que ser de 400Hz y el ciclo de trabajo es del 10%
Siguiendo el manual, obtuve los siguientes valores para los registros PR2 (período PWM) y luego el CCPRIL: CCP1CON < 5: 4 > registros (ciclo de trabajo PWM) con respeto.
PERÍODO PWM:
$$ \ \ PR2 = (\ frac {PWM Period} {(T_ {OSC} \ times 4 \ times \ TMR2 \ Prescale \ Value)}) - 1 $$
$$ \ \ PR2 = (\ frac {0.0025 } {(0.0000625 \ times 4 \ times \ 1)}) - 1 = 9 $$
Ciclo de trabajo de PWM en% = 10
Ciclo de trabajo de PWM (en el tiempo):
$$ \ \ small CCPRIL: CCP1CON < 5: 4 > = \ grande (\ frac {0.1 \ veces \ 0.0025 } {(0.0000625 \ times \ 1)}) = 4 $$
Entonces, PR2 = 0000 1001 y CCPRIL: CCP1CON < 5: 4 > = 00 0000 0100
Pero mi problema es que usé una calculadora en línea y obtuve el siguiente resultado en su lugar.
/*
* PWM registers configuration
* Fosc = 16000 Hz
* Fpwm = 400.00 Hz (Requested : 400 Hz)
* Duty Cycle = 10 %
* Resolution is 5 bits
* Prescaler is 1
* Ensure that your PWM pin is configured as digital output
* see more details on http://www.micro-examples.com/
* this source code is provided 'as is',
* use it at your own risks
*/
PR2 = 0b00001001 ;
T2CON = 0b00000100 ;
CCPR1L = 0b00000000 ;
CCP1CON = 0b00111100 ;
Habría esperado que el LSB en CCPIR1L fuera 1 y CCP1CON < 5: 4 > para ser 00 Dado que el valor calculado es 4 y 4 en binario es 100 CCP1CON < 5: 4 > contiene los dos LSB del valor del ciclo de trabajo. Sin embargo, no está de acuerdo con esta calculadora y me pregunto dónde me equivoqué.