Professional Documents
Culture Documents
Mdulos CCP
Caractersticas generales
Dos mdulos con idntico funcionamiento. Registro de captura de 16 bits. Registro de comparacin de 16 bits. Registro de ciclo de trabajo PWM. Mdulo CCP1. Consta de dos registros de 8 bits: CCPR1H y CCPR1L. Registro de control: CCP1CON. Accin especial: Generada mediante una comparacin. Resetea Timer1. Mdulo CCP2. Consta de dos registros de 8 bits: CCPR2H y CCPR2L. Registro de control: CCP2CON. Accin especial: Generada mediante una comparacin. Resetea Timer1. Lanza una conversin A/D.
Mdulos CCP
Condiciones de funcionamiento
Temporizadores necesarios. Modo captura Modo comparacin PWM TMR1 TMR1 TMR2
Comparacin Ninguna
Mdulos CCP
Registro CCP1CON / CCP2CON (17h / 1Dh)
CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0
bit 5-4
bit 3-0
1000 = Modo de comparacin, CCPx=1 al igualarse (CCPxIF=1) 1001 = Modo de comparacin, CCPx=0 al igualarse (CCPxIF=1) 1010 = Modo de comparacin, genera interrupcin al igualarse (CCPx invariable, CCPxIF=1) 1011 = Modo de comparacin, lanza accin especial (CCPxIF=1, CCPx invariable) CCP1 resetea TMR1 / CCP2 resetea TMR1 y lanza una conversin A/D 11xx = Modo PWM
Mdulos CCP
Modo captura
Captura en CCPRxH:CCPRxL los 16 bits de TMR1. Cada flanco de bajada en CCPx Cada flanco de subida en CCPx Cada 4 flanco de subida en CCPx Cada 16 flanco de subida en CCPx Diagrama de bloques del modo de captura.
RCy / CCPx
CCPxIF 1
CCPRxH CCPRxL
Habilita Captura
TMR1H TMR1L
Qs CCPxCON<3:0>
Mdulos 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 sncrono.
En modo contador asncrono puede que la captura no funcione.
Se evitan estas situaciones reseteando el mdulo CCP (CCPxCON 0) antes de llevar a cabo un cambio de modo y/o un cambio de prescaler.
Tambi n podra generarse una falsa interrupcin al cambiar el no resetea la cuenta de flancos. prescaler. Adems, un cambio
Mdulos CCP
Modo comparacin
Cuando CCPRx coincide con TMR1 (en sus 16 bits): El pin RCy/CCPx se pone a 1 El pin RCy/CCPx se pone a 0 Se genera una interrupcin Lanza una accin especial Diagrama de bloques del modo comparacin.
TMR1 0 (no alza flag TMR1F) GO/DONE 1 Lanza accin especial CCPxIF 1
RCy / CCPx
CCPRxH CCPRxL
S R
Lgica de salida
Coincidencia
TRISC<2> CCPxCON<3:0>
Mdulos CCP
Condiciones de funcionamiento en el modo comparacin El pin CCPx debe configurarse como salida. TMR1 debe funcionar en modo temporizador o en modo contador sncrono.
En modo contador asncrono puede que la comparacin no funcione.
Cuando se selecciona generar interrupcin, el pin CCPx no se ve afectado. Se puede generar una accin especial por hardware.
CCP1: Resetea TMR1. CCP2: Resetea TMR1 y lanza una conversin A/D (si est activado).
Mdulos CCP
Modo PWM
Genera una salida PWM de 10 bits de resolucin
D TMR2 = PR2 T
TMR2 = 0
TMR2 = D
CCPRxL
CCPxCON<5:4>
CCPRxH
(esclavo)
Comparador TMR2
(* )
R S
RCy / CCPx
TRISC<2>
(*) TMR2 se concatena con un reloj interno de 2 bits con frecuencia fosc para poder crear una base de tiempos de 10 bits
Comparador PR2
TMR2 0 CCPx 1 (si D0) CCPRxH CCPRxL
Mdulos CCP
Condiciones de funcionamiento en el modo PWM El periodo T se indica en el registro PR2.
T = (PR2 + 1) 4 TOSC PRESCALERTMR2
Existe una resolucin (nmero de bits) mxima que se puede obtener con el funcionamiento en modo PWM. f osc log f PSTMR 2 PWM Res = log 2
bits
Mdulos CCP
f PWM PRESCALER TMR2 PR2 Resolucin mxima 1,22kHz 16 0xFFh 10 bits 4,88kHz 4 0xFFh 10 bits 19,53kHz 78,12kHz 156,3kHz 208,3kHz 1 0xFFh 10 bits 1 0x3Fh 8 bits 1 0x1Fh 7 bits 1 0x17h 5,5 bits (fosc = 20MHz)
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 mdulo CCP para funcionar en modo PWM.
(T2CON)
Mdulos CCP
Mdulos CCP en el compilador C de CCS
Configuracin del mdulo CCP setup_ccp1 (modo);
modo: CCP_OFF CCP_CAPTURE_FE CCP_CAPTURE_RE CCP_CAPTURE_DIV_4 CCP_CAPTURE_DIV_16 CCP_COMPARE_SET_ON_MATCH CCP_COMPARE_CLR_ON_MATCH CCP_COMPARE_INT CCP_COMPARE_RESET_TIMER CCP_PWM CCP_PWM_PLUS_1 CCP_PWM_PLUS_2 CCP_PWM_PLUS_3
setup_ccp2 (modo);
(CCPxCON 00h) (CCPxCON (CCPxCON (CCPxCON (CCPxCON 04h) 05h) 06h) 07h)
(CCPxCON 08h) (CCPxCON 09h) (CCPxCON 0Ah) (CCPxCON 0Bh) (CCPxCON 0Ch) (CCPxCON 1Ch) (CCPxCON 2Ch) (CCPxCON 3Ch)
Mdulos CCP
Definicin del ciclo de trabajo en modo PWM set_pwm1_ duty (valor);
valor:Dato (8 16 bits) que fija el valor XXXXXXXX Y Y Y Y Y YXXXXXXXXXX
Variables definidas en 16F877.h long CCP_1; #byte CCP_1 = 0x15 #byte CCP_1_LOW = 0x15 #byte CCP_1_HIGH = 0x16 long CCP_2; #byte CCP_2 = 0x15 #byte CCP_2_LOW = 0x15 #byte CCP_2_HIGH = 0x16
Mdulos CCP
Configuracin del pin CCPy como entrada/salida set_tris_C (valor);
valor: Entero de 8 bits, cada uno de los cuales representa la la configuracin de un pin del puerto. (1E / 0S)
(T1CON 08h) (T1CON 00h) (T1CON 10h) (T1CON 20h) (T1CON 30h)
Mdulos CCP
Configuracin del temporizador TMR2 setup_timer_2 (modo,periodo,postscaler);
modo: T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 PR2 periodo necesarios para generar una Nmero de interrupcin. Es un valor entre 1 y 16.
(T2CON (T2CON (T2CON (T2CON 00h) 04h) 05h) 06h)
periodo: postscaler:
Mdulos CCP
Ejemplo 1 setup_timer_2 (T2_DIV_BY_1 , 224 , 1);
300s 224 100s W 00000000 W W | 00000100 T2CON W W E0h Banco 1 PR2 W Banco 0
(f osc = 3MHz)
setup_ccp1 (CCP_PWM_PLUS_1);
#use standard_io (C) W 111111 011 Banco 1 TRISC W Banco 0 RC2 0 CCP1CON 0 W 0001 1100 CCP1CON W CCPR1L 01001011
01 001 01 1 CCPR1L
01 CCP1CON<5:4>
Mdulos CCP
Ejemplo 1 (cont.) setup_timer_2 (T2_DIV_BY_1 , 224 , 1);
W 00000000 W W | 00000100 T2CON W W E0h Banco 1 PR2 W Banco 0 RC2 0 CCP1CON 0 W 00001100 CCP1CON W CCPR1L 01001011 W CCP1CON W W & 11 001111 W W | 00010000 CCP1CON W
224
ATENCIN!! ATENCIN!! La instruccin La instruccin setup_ccpx (modo); setup_ccpx (modo); siempre borra el siempre borra el registro registro CCPxCON CCPxCON setup_ccp1 (CCP_PWM);
#use fast_io (C)
Mdulos CCP
Ejemplo 2 setup_timer_1 (T1_INTERNAL | T1_DIV_ BY_1);
W 100001 01 T1CON W
Configurar uno de Configurar uno de los mdulos CCP los mdulos CCP para lanzar para lanzar de manera de manera automtica automtica una conversin A/D una conversin A/D cada 1ms. cada 1ms.
f osc = 3MHz TMR1 = 750 (sin prescaler)
set_timer1 (0);
TMR1H 0 TMR1L 0
CCP2 = 750;
750
setup_ccp2 (CCP_COMPARE_RESET_TIMER);
CCP2CON 0 W 00001011 CCP2CON W