Tutorial — Práctica 4: PWM
Lo que vas a construir
Generar PWM con Timer2 y CCP1 para controlar brillo o velocidad de un motor.
-
1 Calcula PR2 para la frecuencia PWM
Con cristal 20 MHz y prescaler Timer2 = 4, la frecuencia PWM es `Fosc / (4 × prescaler × (PR2 + 1))`. Para ~1 kHz con PR2=249: verifica en papel antes de programar. Anota PR2 y prescaler en tu informe.Consejo: Teoría: /pwm/
-
2 Configura Timer2
Escribe T2CON (prescaler 1:4 o 1:16 según tu cálculo), carga PR2 y enciende Timer2. RC2/CCP1 debe estar como salida (`TRISC` bit 2 = 0).MOVLW D'249' MOVWF PR2 MOVLW B'00000101' ; T2CKPS prescaler, encender TMR2 MOVWF T2CON BCF TRISC, 2 -
3 Activa CCP1 en modo PWM
CCP1CON bits 3:0 = 1100 (PWM). Los bits 5:4 de CCP1CON + CCPR1L definen el duty (10 bits). Empieza con 50%: `CCPR1L = PR2 / 2`.MOVLW B'00001100' MOVWF CCP1CON MOVLW D'124' ; ~50% si PR2=249 MOVWF CCPR1L -
4 Varía el ciclo útil en tu aplicación
Conecta un LED o motor en RC2. Cambia `CCPR1L` desde el teclado, potenciómetro (ADC) o tabla. Observa brillo o velocidad. Adapta el pin si usas CCP2 en otro puerto. -
5 Mide y documenta en Proteus
Usa el osciloscopio virtual en RC2. Captura frecuencia y duty. Compara con tus cálculos teóricos. Incluye fórmulas en el informe.
Teoría de apoyo
Sección titulada «Teoría de apoyo»Antes de programar, repasa PWM / CCP: cálculo de PR2, duty cycle y configuración de Timer2.
Qué debes lograr en código
Sección titulada «Qué debes lograr en código»- Calcular
PR2para la frecuencia PWM deseada (ej. ~1 kHz). - Configurar
T2CON,PR2yCCP1CONen modo PWM. - Escribir el duty en los bits adecuados de
CCPR1LyCCP1CON. - Conectar carga en RC2/CCP1 y variar el duty (potenciómetro + ADC opcional).