You are on page 1of 10

MDULOS DE COMPARACIN CAPTURA Y PWM

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

Interaccin entre los dos mdulos CCP.


CCPx Captura Captura CCPy Captura Comparacin Interaccin Misma base de tiempos definida en TMR1 La comparacin debe configurarse con la accin especial, que borra TMR1 La(s) comparacin(es) deben configurarse con la accin especial, que borra TMR1 Las PWMs tendrn la misma frecuencia y tasa de actualizacin (interrupcin TMR2) Ninguna

Comparacin Comparacin PWM PWM PWM PWM Captura

Comparacin Ninguna

Mdulos CCP
Registro CCP1CON / CCP2CON (17h / 1Dh)
CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

bit 5-4

CCPxX:CCPxY: Bits menos significativos del PWM


En modo PWM: Los dos bits menos significativos del ciclo de trabajo. Los ocho bits ms significativos estn en CCPRxL.

bit 3-0

CCPxM3:CCPxM0: Bits de seleccin del modo CCP a utilizar


0000 = Comparacin/Captura/PWM desactivada (reset del mdulo CCP) 0100 0101 0110 0111 = = = = Modo Modo Modo Modo de de de de captura, captura, captura, captura, cada cada cada cada flanco descendente flanco ascendente 4 flanco ascendente 16 flanco ascendente

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

Prescaler 1 , 4 , 16 Deteccin de flanco y

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.

Podra generarse una falsa interrupcin de captura al cambiar el modo de captura.


Se aconseja deshabilitar CCPxIE al cambiar el modo de captura.

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

Comparador TMR1H TMR1L

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

Diagrama de bloques del modo PWM.


Registros de

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

El ciclo de trabajo D se indica en CCPRxL y en CCPxCON<5:4>.


D = (CCPRxL:CCPxCON<5:4>) TOSC PRESCALER TMR2 CCPRxH es de slo lectura en PWM. Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx 0.

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

set_pwm2_ duty (valor);


de la PWM. CCPRxL:CCPxCON<5:4> XXXXXXXX 0 0 XXXXXXXXXX

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)

Configuracin del temporizador TMR1 setup_timer_1 (modo);


modo: T1_DISABLED T1_INTERNAL T1_EXTERNAL T1_EXTERNAL_SYNC T1_CLK_OUT T1_DIV_BY_1 T1_DIV_BY_2 T1_DIV_BY_4 T1_DIV_BY_8
(T1CON (T1CON (T1CON (T1CON 00h) 85h) 87h) 83h)

(T1CON 08h) (T1CON 00h) (T1CON 10h) (T1CON 20h) (T1CON 30h)

Se pueden agrupar constantes de distintos grupos con |.

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

T = 300s PR2 = 224 D = 100s carga = 301


Carga = 301
01 001 01 1 01

set_pwm1_ duty (0x4B);

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)

set_pwm1_ duty (301);


4Bh

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

W 02h CCPR2H W W EEh CCPR2L W

setup_ccp2 (CCP_COMPARE_RESET_TIMER);
CCP2CON 0 W 00001011 CCP2CON W

You might also like