CCP – Guía Rápida (Modo PWM)¶
Para más detalles sobre el módulo CCP, su configuración y funcionamiento, consultar la guía completa.
Cálculos Previos¶
Periodo PWM¶
Fórmula de verificación7
Fuente de reloj
Es menester que la fuente de reloj del timer sea \(\frac{F_{osc}}{4}\) para el correcto funcionamiento del módulo CCP. El PostScaler no afecta el periodo PWM.
Duty Cycle (Tiempo en alto)¶
Fórmula de verificación8
- Si
FMT = 0(derecha):CCPRx value = CCPRxH[1:0]:CCPRxL - Si
FMT = 1(izquierda):CCPRx value = CCPRxH:CCPRxL[7:6]
Registros a usar¶
| Registro | Función | Banco |
|---|---|---|
CCPTMRS1 |
Selección del timer asociado al CCPx | Access |
RxyPPS2 |
Asigna pin de salida al módulo CCPx | 0x0E |
TRISx |
Dirección del pin (entrada/salida) | Access |
TxPR |
Cuenta máxima del timer → define periodo PWM | Access |
CCPxCON3 |
Control del CCP: habilitar (EN), modo (MODE), formato (FMT) |
Access |
CCPRxH:L |
Valor de 10 bits que define el duty cycle | Access |
TxCLKCON |
Fuente de reloj del timer (TxCLKCON=1 → \(F_{osc}/4\)) |
Access |
TxCON5 |
Control del timer: habilitar (ON), prescaler (CKPS) |
Access |
PIR44 |
Banderas de interrupción TMR2/4/6 (TMR2IF bit 1) |
0x0E |
CCPTMRS: Bits CxTSEL¶
| Bits 3:2 | Bits 1:0 |
|---|---|
| C2TSEL[1:0] | C1TSEL[1:0] |
- Seleccionar TMR2 (
CxTSEL = 00), TMR4 (CxTSEL = 10) o TMR6 (CxTSEL = 11)
PPS: Códigos de salida CCP¶
| RxyPPS | Módulo | Puertos destino |
|---|---|---|
| 0x05 | CCP1 | RB, RC |
| 0x06 | CCP2 | RB, RC |
CCPxCON¶
| Bit 7 | Bit 5 | Bit 4 | Bits 3:0 |
|---|---|---|---|
| EN | OUT (RO) | FMT | MODE[3:0] |
- Modo PWM:
MODE = 11xx FMT = 1: justificado a la izquierda /FMT = 0: derecha
TxCON¶
| Bit 7 | Bits 6:4 | Bits 3:0 |
|---|---|---|
| ON | CKPS[2:0] | OUTPS[3:0] |
ON = 1: habilitar timerCKPS: prescaler (000 = 1:1, 001 = 1:2, …, 111 = 1:128)
PIR4: Banderas TMR2/4/6¶
| Bit 5 | Bit 3 | Bit 1 |
|---|---|---|
| TMR6IF | TMR4IF | TMR2IF |
Configuración rápida¶
No evita "pulsos basura" durante la configuración.
- Seleccionar timer (TMR2/4/6) con
CCPTMRS1. - Asignar vía PPS un pin al CCP1 (
RxyPPS=5) o al CCP2 (RxyPPS=6) 2. - Configurar el pin como salida (
TRISxbits.TRISxy = 0). - Cargar el periodo calculado en
TxPR. - Configurar
CCPxCON: modo PWM + formato (EN,MODE,FMT)3. - Cargar duty cycle calculado (10 bits) en
CCPRxH:L. - Seleccionar reloj del timer:
TxCLKCON = 1(\(\frac{F_{osc}}{4}\)). - Configurar prescaler y habilitar timer:
TxCON(ON = 1)5.
Configuración segura¶
Evita "pulsos basura" configurando el pin como entrada hasta que el timer esté listo6.
- Seleccionar timer (TMR2/4/6) con
CCPTMRS1. - Asignar vía PPS un pin al CCP1 (
RxyPPS=5) o al CCP2 (RxyPPS=6) 2. - Configurar el pin como entrada (
TRISxbits.TRISxy = 1). - Cargar el periodo calculado en
TxPR. - Configurar
CCPxCON: modo PWM + formato (EN,MODE,FMT)3. - Cargar duty cycle calculado (10 bits) en
CCPRxH:L. - Bajar bandera
TMRxIFenPIR44. - Seleccionar reloj del timer:
TxCLKCON = 1(\(\frac{F_{osc}}{4}\)). - Configurar prescaler y habilitar timer:
TxCON(ON = 1)5. - Esperar a que
TMRxIF == 1. - Habilitar salida del pin (
TRISxbits.TRISxy = 0).
Referencias¶
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.6.4, "CCPTMRS". Ver PDF (Pág. 359). ↩↩↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 18.2, "PPS Outputs". Ver PDF (Pág. 287). ↩↩↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.6.1, "CCPxCON". Ver PDF (Pág. 356). ↩↩↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 15.13.6, "PIR4". Ver PDF (Pág. 203). ↩↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 21.9.3, "TxCON". Ver PDF (Pág. 341). ↩↩↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.2, "Setup for PWM Operation". Ver PDF (Pág. 351). ↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.4, "PWM Period". Ver PDF (Pág. 352). ↩
-
Microchip Technology Inc. (2020). PIC18F27/47Q10 Microcontroller Data Sheet. Sección 22.4.5, "PWM Duty Cycle". Ver PDF (Pág. 353). ↩