Upload
ericsoncruz
View
42
Download
0
Embed Size (px)
Citation preview
MMÓDULOÓDULOSS DEDE
CCOMPARACOMPARACIÓNIÓN
CCAPTURA Y APTURA Y PWMPWM
1
Módulos CCP
Características generalesDos módulos con idéntico funcionamiento.
Módulo CCP1.Consta de dos registros de 8 bits: CCPR1H y CCPR1L.Registro de control: CCP1CON.Acción especial: Generada mediante una comparación.
Resetea Timer1.
Registro de captura de 16 bits.Registro de comparación de 16 bits.Registro de ciclo de trabajo PWM.
Módulo CCP2.Consta de dos registros de 8 bits: CCPR2H y CCPR2L.Registro de control: CCP2CON.Acción especial: Generada mediante una comparación.
Resetea Timer1.Lanza una conversión A/D.
Módulos CCP
Condiciones de funcionamientoTemporizadores necesarios.
Modo captura ⇒ TMR1Modo comparación ⇒ TMR1PWM ⇒ TMR2
Interacción entre los dos módulos CCP.
CCPxCaptura
Captura
Comparación
PWM
PWM
PWM
CCPyCaptura
Comparación
Comparación
PWM
Captura
Comparación
Interacción
Misma base de tiempos definida en TMR1La comparación debe configurarse con la acción especial, queborra TMR1La(s) comparación(es) deben configurarse con la acciónespecial, que borra TMR1Las PWMs tendrán la misma frecuencia y tasa de actualización(interrupción TMR2)Ninguna
Ninguna
2
Módulos CCP
Registro CCP1CON / CCP2CON (17h / 1Dh)
CCPxX CCPxY CCPxM2 CCPxM1CCPxM3-
bit 5-4 CCPxX:CCPxY: Bits menos significativos del PWM
bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar0000 = Comparación/Captura/PWM desactivada (reset del módulo CCP)
0100 = Modo de captura, cada flanco descendente0101 = Modo de captura, cada flanco ascendente0110 = Modo de captura, cada 4º flanco ascendente0111 = Modo de captura, cada 16º flanco ascendente
1000 = Modo de comparación, CCPx=1 al igualarse (CCPxIF=1)1001 = Modo de comparación, CCPx=0 al igualarse (CCPxIF=1)1010 = Modo de comparación, genera interrupción al igualarse (CCPx invariable,
CCPxIF=1)1011 = Modo de comparación, lanza acción especial (CCPxIF=1, CCPx invariable)
CCP1 resetea TMR1 / CCP2 resetea TMR1 y lanza una conversión A/D
11xx = Modo PWM
- CCPxM0
En modo PWM:Los dos bits menos significativos del ciclo de trabajo.Los ocho bits más significativos están en CCPRxL.
Módulos CCP
Modo capturaCaptura en CCPRxH:CCPRxL los 16 bits de TMR1.
Cada flanco de bajada en CCPxCada flanco de subida en CCPxCada 4º flanco de subida en CCPxCada 16º flanco de subida en CCPx
Diagrama de bloques del modo de captura.
Prescaler� 1 , 4 , 16
Detección deflanco y
CCPRxH CCPRxL
TMR1H TMR1L
CCPxCON<3:0>Qs
CCPxIF � 1RCy / CCPx
Habilita
Captura
3
Módulos CCP
Condiciones de funcionamiento en el modo captura
El pin CCPx debe configurarse como entrada.
TMR1 debe funcionar en modo temporizador o en modo contador síncrono.
En modo contador asíncrono puede que la captura no funcione.
Podría generarse una falsa interrupción de captura al cambiar el modo de captura.
Se aconseja deshabilitar CCPxIE al cambiar el modo de captura.
También podría generarse una falsa interrupción al cambiar el prescaler. Además, un cambio no resetea la cuenta de flancos.
Se evitan estas situaciones reseteando el módulo CCP (CCPxCON ← 0)antes de llevar a cabo un cambio de modo y/o un cambio de prescaler.
Módulos CCP
Modo comparaciónCuando CCPRx coincide con TMR1 (en sus 16 bits):
El pin RCy/CCPx se pone a 1El pin RCy/CCPx se pone a 0Se genera una interrupciónLanza una acción especial
Diagrama de bloques del modo comparación.
Q S
R
Lógica desalida
CCPRxH CCPRxL
TMR1H TMR1LCCPxCON<3:0>
TRISC<2>
CCPxIF � 1
RCy / CCPx
Coincidencia Comparador
Lanza acciónespecial
TMR1 ← 0 (no alza flag TMR1F)GO/DONE ← 1
4
Módulos CCP
Condiciones de funcionamiento en el modo comparación
El pin CCPx debe configurarse como salida.
TMR1 debe funcionar en modo temporizador o en modo contador síncrono.
En modo contador asíncrono puede que la comparación no funcione.
Cuando se selecciona generar interrupción, el pin CCPx no se ve afectado.
Se puede generar una acción especial por hardware.CCP1: Resetea TMR1.CCP2: Resetea TMR1 y lanza una conversión A/D (si está activado).
TRISC<2>
RCy / CCPx
Módulos CCP
Modo PWMGenera una salida PWM de 10 bits
de resolución
Diagrama de bloques del modo PWM.
R Q
S
CCPRxL
CCPxCON<5:4>
TMR2 � 0CCPx � 1 (si D�0)CCPRxH � CCPRxL
(*) TMR2 se concatena conun reloj interno de 2 bitscon frecuencia fosc parapoder crear una base detiempos de 10 bits
Registros de
TMR2 = 0
TMR2 = PR2
TMR2 = D
T
D
Comparador
TMR2 (*)
Comparador
PR2
CCPRxH (esclavo)
5
Módulos CCP
Condiciones de funcionamiento en el modo PWM
El periodo T se indica en el registro PR2.
T = (PR2 + 1) · 4 · TOSC · PRESCALERTMR2
El ciclo de trabajo D se indica en CCPRxL y en CCPxCON<5:4>.
D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALERTMR2
CCPRxH es de sólo lectura en PWM.
Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx← 0.
Existe una resolución (número de bits) máxima que se puede obtener con el funcionamiento en modo PWM.
bits2log
logRes 2
⎟⎟⎠
⎞⎜⎜⎝
⎛
⋅= TMRPWM
osc
PSff
Módulos CCP
Pasos a seguir para definir una PWM
1. Establecer el periodo T escribiendo en el registro PR2.
2. Establecer el ciclo de trabajo D en CCPRxL y en CCPxCON<5:4>.
3. Configurar el pin CCPx como salida.
4. Fijar el prescaler de TMR2 y activar el temporizador.
5. Configurar el módulo CCP para funcionar en modo PWM.
fPWM
PRESCALERTMR2
PR2
Resoluciónmáxima
1,22kHz
16
0xFFh
10 bits
4,88kHz
4
0xFFh
10 bits
19,53kHz
1
0xFFh
10 bits
78,12kHz
1
0x3Fh
8 bits
156,3kHz
1
0x1Fh
7 bits
208,3kHz
1
0x17h
5,5 bits
(T2CON)
(fosc = 20MHz)
6
Módulos CCP
Configuración del módulo CCP
setup_ccp1 (modo); setup_ccp2 (modo);modo : CCP_OFF (CCPxCON ← 00h)
CCP_CAPTURE_FE (CCPxCON ← 04h)CCP_CAPTURE_RE (CCPxCON ← 05h)CCP_CAPTURE_DIV_4 (CCPxCON ← 06h)CCP_CAPTURE_DIV_16 (CCPxCON ← 07h)
CCP_COMPARE_SET_ON_MATCH (CCPxCON ← 08h)CCP_COMPARE_CLR_ON_MATCH (CCPxCON ← 09h)CCP_COMPARE_INT (CCPxCON ← 0Ah)CCP_COMPARE_RESET_TIMER (CCPxCON ← 0Bh)
CCP_PWM (CCPxCON ← 0Ch)CCP_PWM_PLUS_1 (CCPxCON ← 1Ch)CCP_PWM_PLUS_2 (CCPxCON ← 2Ch)CCP_PWM_PLUS_3 (CCPxCON ← 3Ch)
Módulos CCP en el compilador C de CCS
Módulos CCP
Definición del ciclo de trabajo en modo PWM
set_pwm1_ duty (valor); set_pwm2_ duty (valor);valor:Dato (8 ó 16 bits) que fija el de la PWM.
valor CCPRxL:CCPxCON<5:4>0 0XXXXXXXXXXXXXXXX
X XXXXXXXXXXXXXXXXXXXYYYYYY
Variables definidas en 16F877.h
long CCP_1; long CCP_2;#byte CCP_1 = 0x15 #byte CCP_2 = 0x15#byte CCP_1_LOW = 0x15 #byte CCP_2_LOW = 0x15#byte CCP_1_HIGH = 0x16 #byte CCP_2_HIGH = 0x16
7
Módulos CCP
Configuración del temporizador TMR1
setup_timer_1 (modo);modo : T1_DISABLED (T1CON ← 00h)
T1_INTERNAL (T1CON ← 85h)T1_EXTERNAL (T1CON ← 87h)T1_EXTERNAL_SYNC (T1CON ← 83h)
T1_CLK_OUT (T1CON ← 08h)
T1_DIV_BY_1 (T1CON ← 00h)T1_DIV_BY_2 (T1CON ← 10h)T1_DIV_BY_4 (T1CON ← 20h)T1_DIV_BY_8 (T1CON ← 30h)
Se pueden agrupar constantes de distintos grupos con |.
Configuración del pin CCPy como entrada/salida
set_tris_C (valor);valor: Entero de 8 bits, cada uno de los cuales representa la
la configuración de un pin del puerto. (“1”⇒E / “0”⇒S)
Módulos CCP
Configuración del temporizador TMR2
setup_timer_2 (modo,periodo,postscaler);modo : T2_DISABLED (T2CON ← 00h)
T2_DIV_BY_1 (T2CON ← 04h)T2_DIV_BY_4 (T2CON ← 05h)T2_DIV_BY_16 (T2CON ← 06h)
periodo: PR2 ← periodo
postscaler: Número de necesarios para generar unainterrupción. Es un valor entre 1 y 16.
8
Módulos CCP
Ejemplo 1setup_timer_2 (T2_DIV_BY_1 , 224 , 1);
W ← 111111011Banco 1TRISC ← WBanco 0RC2 ← 0CCP1CON ← 0W ← 00011100CCP1CON ← W
300µs
100µs
(fosc = 3MHz)
T = 300µs ⇒ PR2 = 224D = 100µs ⇒ carga = 301
CCPR1L ← 01001011
W ← 00000000W ← W | 00000100T2CON ← WW ← E0hBanco 1PR2 ← WBanco 0
setup_ccp1 (CCP_PWM_PLUS_1);
set_pwm1_ duty (0x4B);
Carga = 3010 1 0 0 1 0 1 1 0 1
CCPR1L CCP1CON<5:4>0 1 0 0 1 0 1 1 0 1
224
#use standard_io (C)
Módulos CCP
Ejemplo 1 (cont.)
setup_timer_2 (T2_DIV_BY_1 , 224 , 1);
-RC2 ← 0CCP1CON ← 0W ← 00001100CCP1CON ← W
CCPR1L ← 01001011W ← CCP1CONW ← W & 11001111W ← W | 00010000CCP1CON ← W
W ← 00000000W ← W | 00000100T2CON ← WW ← E0hBanco 1PR2 ← WBanco 0
setup_ccp1 (CCP_PWM);
set_pwm1_ duty (301);
224
#use fast_io (C)
¡¡ATENCIÓN!!
La instrucciónsetup_ccpx (modo);siempre borra el
registroCCPxCON
¡¡ATENCIÓN!!¡¡ATENCIÓN!!
La instrucciónsetup_ccpx (modo);siempre borra el
registroCCPxCON
4Bh
9
Módulos CCP
Configurar uno delos módulos CCP
para lanzarde maneraautomática
una conversión A/Dcada 1ms.
Configurar uno delos módulos CCP
para lanzarde maneraautomática
una conversión A/Dcada 1ms.
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
CCP2CON ← 0W ← 00001011CCP2CON ← W
W ← 10000101T1CON ← W
TMR1H ← 0TMR1L ← 0
W ← 02hCCPR2H ← WW ← EEhCCPR2L ← W
setup_ccp2 (CCP_COMPARE_RESET_TIMER);
750fosc = 3MHz
TMR1 = 750(sin prescaler)
set_timer1 (0);
CCP2 = 750;
Ejemplo 2