Ir al contenido

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. 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. 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. 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. 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. 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.

Antes de programar, repasa PWM / CCP: cálculo de PR2, duty cycle y configuración de Timer2.

  1. Calcular PR2 para la frecuencia PWM deseada (ej. ~1 kHz).
  2. Configurar T2CON, PR2 y CCP1CON en modo PWM.
  3. Escribir el duty en los bits adecuados de CCPR1L y CCP1CON.
  4. Conectar carga en RC2/CCP1 y variar el duty (potenciómetro + ADC opcional).

Panel de tutoriales · Ejercicios