Estoy tratando de crear una señal pwm de período de 100 ms (10 Hz) con un PIC18F4520, seguí la ecuación PR2 para ayudarme a crear esta señal
Tengo una frecuencia de reloj de 20MHz con un prescaler de 16 y un período de PWM de (100 x 10 -3 s) y cuando uso estos valores en esta ecuación:
\ $ \ Large PR2 = (\ frac {PWM Period} {(TOsc \ times 4 \ times TMR2 Prescaler)}) - 1 \ $
Obtengo 0x31249
También estoy intentando ejecutar esta señal PWM con un ciclo de trabajo del 50% [50 ms desactivado y 50 ms activado] mediante el uso de la ecuación del ciclo de trabajo:
Ciclo de trabajo = ((CCPR1L < < 7) | (CCP1CON bits < 5: 4 >)) \ $ \ times \ $ TOSC en MHz \ $ \ times \ $ Prescale
Lo que da 62500 como un valor para el ciclo de trabajo.
Todo este ejercicio es para que aprenda mejor sobre el uso de señales PWM. Estoy programando el PIC en C18 y simulándolo en PROTEUS VSM.
que es una imagen de lo que el osciloscopio está captando de la señal PWM que NO SE MIRA COMO 50% de ciclo de trabajo o frecuencia de 10 Hz.
Este es el código que estoy usando en PROTEUS VSM:
include p18cxxx.h
include pwm.h
include timers.h
pragma config OSC = HS
pragma config MCLRE = ON
pragma config WDT = OFF
pragma config LVP = OFF
pragma config DEBUG = OFF
pragma config PBADEN = OFF
unsigned char period = 0x31249; // assign PR2 to 31249 used to get 100ms period
unsigned int duty_cycle = 62500; // used to get 50ms on/off
void main(void)
{
OpenTimer2(TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_1);
OpenPWM1 (period);
SetDCPWM1 (duty_cycle);
while (1);
}
Como se puede ver, estoy usando la biblioteca de PWM porque escuché que era más fácil trabajar con él.
Lo siento si no estoy muy familiarizado con cómo se hacen las preguntas en este foro o sobre cómo presenté mi problema.