You are on page 1of 20

PICmicro GAMA MEDIA: PIC16F87X

MODULOS CCP ( COMPARACION, CAPTURA Y PWM )

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP (COMPARACIN, CAPTURA Y PWM)
Un microcontrolador de la gama media de los PIC16 puede tener hasta 2 mdulos CCP. Cada mdulo CCP tiene un registro de 16 bits que se puede utilizar de 3 formas distintas: Como registro de 16 bits para captura de tiempo al producirse un evento. Como registro de 16 bits para compararlo con el valor de cuenta del temporizador TMR1, pudiendo provocar un evento cuando se alcanza el valor contenido en este registro. Como registro de 10 bits del ciclo de trabajo de una seal PWM generada por el microcontrolador. Los 2 mdulos CCP disponibles se comportan casi idnticamente, salvo el caso del funcionamiento por disparo de evento especial ( special event trigger) que tiene una pequea diferencia si se trata del mdulo CCP1 del mdulo CCP2. Tras un reset, el mdulo CCP est apagado (al forzar los bits de configuracin al valor 0). En las siguientes transparencias se describir el funcionamiento de CCP1. El funcionamiento de CCP2 es idntico (salvo la excepcin indicada anteriormente) pero cada uno tiene sus propios registros de carga y configuracin (vase tabla adjunta).

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP
Condiciones de funcionamiento Temporizadores necesarios. Modo captura TMR1 Modo comparacin TMR1 PWM TMR2 Interaccin entre los dos mdulos CCP.

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP
Registro CCP1CON / CCP2CON (17h / 1Dh)

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 = Modo de captura, cada flanco descendente 0101 = Modo de captura, cada flanco ascendente 0110 = Modo de captura, cada 4 flanco ascendente 0111 = Modo de captura, cada 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

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO CAPTURA
En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1 cuando se produce un determinado evento en el pin CCPx (RC2/CCP1 para el mdulo CCP1 y RC1/T1OSI/CCP2 para el mdulo CCP2). Los posibles eventos son: Cada flanco de bajada. Cada flanco de subida. Cada 4 flancos de subida. Cada 16 flancos de subida. El evento se configura con los bits CCPxM3:CCPxM0 de los registros CCP1CON y CCP2CON respectivamente. El bit CCP1IF (PIR1<2>) CCP2IF (PIR2<0>) se ponen a 1 cuando se produce el evento configurado, pudiendo provocar un salto a la rutina de interrupcin. El correspondiente flag debe limpiarse por software. Si se produce otra captura antes de que se lea el valor del registro CCPRx, el ltimo valor sobreescribe el valor anterior (que se pierde).

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO CAPTURA
En modo captura, el pin RC2/CCP1 y/o el pin RC1/T1OSI/CCP2 deben configurarse como entrada por puesta a uno de los bits TRISC<2> y TRISC<1> respectivamente. Si el bit RC2/TRISC1 y/o RC1/CCP2 se configura como salida, una escritura a este pin del puerto podra originar una captura. El TMR1 debe estar corriendo en modo temporizador en modo contador sncrono para que el mdulo CCP produzca la comparacin. No puede funcionar en modo contador asncrono. Si se cambia de un modo captura (p.e. de 4 flancos) a otro (p.e. de cada flanco), el cambio puede generar una falsa interrupcin. El usuario debe por software limpiar el bit CCPxIE para deshabilitar las interrupciones, limpiar el flag CCPxIF y luego cambiar el modo de captura. Si en medio de una cuenta de 4 16 flancos de subida se apaga el mdulo CCP o se pasa a un modo que no sea el modo Captura (mediante los bits CCPxM3:CCPxM0), el prescaler del CCP se resetea. En modo dormido, el TMR1 no se incrementa (esta en modo sncrono temporizador). Pero, el prescaler del CCP s puede continuar incrementando el contador de eventos y cuando llega al valor configurado pone el bit CCPxF a 1 provocando que el micro se despierte. No obstante, el contenido del TMR1 se transfiere a los CCPR pero el TMR1 no se ha visto incrementado y por tanto, el valor cargado no tiene un significado dado.

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO COMPARACION
En modo comparacin, el valor de 16 bits almacenado en los registros CCPRx es comparado continuamente con el valor de los registros del TMR1. Cuando se produce una igualdad, el pin CCPx puede experimentar o no un evento, que puede ser: Puesta a 1. Puesta a 0. Sin cambio. El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>) Al mismo tiempo que se produce un evento en el pin se puede producir una interrupcin ya que el flag CCPxIF (de PIR1 PIR2) se pone a 1. TMR1 debe estar funcionando en modo temporizador modo contador sncrono para que el mdulo CCP funcione correctamente en el modo comparacin. En modo contador asncrono, el modo comparacin no funciona.

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO COMPARACION
El pin CCPx que quiera verse modificado debe configurarse como salida, limpiando el bit del registro TRISC correspondiente. En el momento que se selecciona el modo de comparacin deseado, el pin CCP se pone al nivel contrario al que tiene que cambiar cuando se produzca la igualdad entre los registros CCPRx y TMR1. Si la igualdad no afecta al pin CCPx, este tendr el valor que se le haya dado previamente en el registro PORTC. MODO INTERRUPCION SOFTWARE: En este modo, el pin CCPx no se ve afectado, solo se activar al flag CCPxIF a 1 y se generar la interrupcin si est habilitada. MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1 se resetea convirtindose por tanto, en un registro que marca la periodicidad del evento. En el caso del mdulo CCP2, adems de resetear el TMR1 se lanza una nueva conversin A/D (si el mdulo de conversin A/D est activo) permitiendo programar la conversin A/D a periodos de tiempo fijos. FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo sncrono) en modo dormido, el mdulo CCP en modo comparacin no funciona. El pin CCPx tendr el valor que tena antes de entrar en modo SLEEP y despertar con ese valor. TRAS UN RESET: El mdulo CCP est apagado.

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO PWM
En modo PWM (MODULACIN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo es obtener a travs de alguna de las patillas CCPx una forma de onda como la mostrada en la figura donde tanto el periodo como el ciclo de trabajo (Duty cycle) puede variar con el objetivo, por ejemplo, de regular la velocidad de un motor, la luminosidad de una bombilla, etc.

El periodo de la seal viene fijado por la configuracin de TMR2 y por el contenido del registro PR2 (0x92). Este registro de 8 bits contiene los 8 bits ms significativos de una cuenta de 10 bits. El ciclo de trabajo o ciclo til (duty cycle) viene definido por el contenido del valor del registro CCPRxL junto con los bits CCP1CON<5:4> antes de comenzar un nuevo periodo. El temporizador base con el que se compara el contenido de estos registros es el TMR2.

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO PWM
PERIODO DE LA ONDA PWM. Se calcula utilizando la siguiente frmula: T = (PR2 + 1) ( 4 / TOSC ) PRESCALERTMR2 Cuando TMR2 es igual a PR2, en el siguiente incremento de ciclo se producen tres acciones: El TMR2 se resetea. El pin CCPx se pone a 1. Salvo si el ciclo de trabajo esta fijado a 0 donde el pin CCPx no se pondr a 1 nunca (el biestable RS es de borrado prioritario). El nuevo ciclo de trabajo es cargado desde el registro CCPRxL al registro CCPRxH que es el que realmente se compara con el TMR2 para fijar el ciclo ce trabajo.

10

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: MODO PWM
CICLO DE TRABAJO DE LA ONDA PWM: El ciclo de trabajo viene definido por el valor que se carga en el registro CCPR1L (8bits ms significativos) junto con los bits CCP1CON<5:4> (2 bits menos significativos). Por tanto se consigue una resolucin de 10 bits (DCxB9:DCxB0). La siguiente ecuacin se utiliza para calcular el ciclo de trabajo (duty cycle) de la onda PWM: D = (CCPRxL:CCPxCON<5:4>) TOSC PRESCALERTMR2 Los registros CCPR1L y los bits CCP1CON<5:4> pueden escribirse en cualquier instante de tiempo, pero no se cargan en CCPR1H y por tanto, no tiene efecto, hasta que finalice el periodo de la onda PWM actual. Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx 0. Si el ciclo de trabajo de la onda PWM es mayor que el periodo, la seal que sale por la patilla CCPx est siempre a 1.

11

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: COMPILADOR CCS
Configuracin del mdulo CCP setup_ccp1 (modo); setup_ccp2 (modo); modo: CCP_OFF (CCPxCON CCP_CAPTURE_FE (CCPxCON CCP_CAPTURE_RE (CCPxCON CCP_CAPTURE_DIV_4 (CCPxCON CCP_CAPTURE_DIV_16 (CCPxCON CCP_COMPARE_SET_ON_MATCH (CCPxCON CCP_COMPARE_CLR_ON_MATCH (CCPxCON CCP_COMPARE_INT (CCPxCON CCP_COMPARE_RESET_TIMER (CCPxCON CCP_PWM (CCPxCON CCP_PWM_PLUS_1 (CCPxCON CCP_PWM_PLUS_2 (CCPxCON CCP_PWM_PLUS_3 (CCPxCON

00h) 04h) 05h) 06h) 07h) 08h) 09h) 0Ah) 0Bh) 0Ch) 1Ch) 2Ch) 3Ch)

12

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: COMPILADOR CCS
Definicin del ciclo de trabajo en modo PWM set_pwm1_ duty (valor); set_pwm2_ duty (valor); valor: Dato (8 16 bits) que fija el DUTY CLICLE de la PWM.

Variables definidas en 16F876.h long CCP_1; #byte CCP_1 = 0x15 #byte CCP_1_LOW = 0x15 #byte CCP_1_HIGH = 0x16

long CCP_2; #byte CCP_2 = 0x1B #byte CCP_2_LOW = 0x1B #byte CCP_2_HIGH = 0x1C

13

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: COMPILADOR CCS
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. (1 E / 0 S) Configuracin 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 |.

14

PICmicro GAMA MEDIA: PIC16F87X


Modulo de CCP: COMPILADOR CCS
Configuracin 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: Nmero de overflows necesarios para generar una interrupcin. Es un valor entre 1 y 16 (para uso con los mdulos CCP se toma un postscaler de 1).

15

PICmicro GAMA MEDIA: PIC16F87X


Ejemplo: Modo Captura
Medir el ancho de un pulso mediante el TIMER1 y el modo CAPTURA del CCP. El TIMER1 es un contador de 16 bits que se incrementa cada 4 ciclos de Reloj (FOSC *4). A este tiempo le vamos a llamar PASO de TIMER1. Si el cristal de cuarzo es de 4 Mhz, entonces 1s se produce un PASO de TIMER1. Un ciclo completo del TIMER1, desde 0x0000 hasta 0xEFFF (65536 pasos), ocupa un tiempo total de 1s * 65.536 = 65,536ms. Podemos fijar un tipo de flanco a detectar y escribir un cierto cdigo para ejecutarlo cuando ese tipo de flanco, subida o bajada, es detectado. En este cdigo escrito para tratar la interrupcin del CCP podemos mantener o cambiar el flanco a detectar, cambindolo del de Subida al de Bajada o viceversa y leer o escribir el valor de TIMER1 que en ese momento tiene el contador.

16

PICmicro GAMA MEDIA: PIC16F87X


Ejemplo: Modo Captura
LCD2
LM016L U1(RC2/CCP1)

VSS VDD VEE

RS RW E 4 5 6

9 10 1 2 3 4 5 6 7

OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS

RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT

21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

PIC16F876

Simular y Montar

7 8 9 10 11 12 13 14

1 2 3

U1

D0 D1 D2 D3 D4 D5 D6 D7

17

PICmicro GAMA MEDIA: PIC16F87X


Ejemplo: Modo Comparacin, generador de onda cuadrada.
Generar un pulso de Periodo T con dos semiperiodos iguales, simtrico, y de unos 2 Khz de frecuencia: unos 0.25 ms en alto y otros 0.25 ms en bajo, total 0.5 ms de periodo. Utilizar el CCP en modo Compare para que el CCP vaya comparando automticamente el valor de TMR1 con un valor de referencia que le damos, CCP_x, y en cuanto lo alcance se realice la conmutacin del Pin asociado a l y nos dispare la Peticin de Servicio de Interrupcin (ISR) INT_CCPx correspondiente. En el cdigo de esta interrupcin volvemos a hacer lo mismo pero configurando el Compare para que cuando TMR1 alcance el valor de referencia conmute nuestro Pin CCP al estado contrario. Si ambos valores de TMR1 de referencia, para el Compare a Alto y el Compare a bajo, son iguales tendremos un tren de pulsos simtricos, estn el mismo tiempo en alto que en bajo, o sea que tienen un Duty Cycle del 50%. En caso contrario estarn mas tiempo en un estado que en otro y ser una onda asimtrica, o sea que tendr un Duty Cicle distinto del 50%. Calculando cuidadosamente dichos tiempos podremos generar una onda del periodo que deseamos. Pondremos a 0 siempre TRM1 y cargaremos CCP_x con el nmero de PASOS de TMR1 en que deseamos que se dispare nuestra conmutacin/interrupcin.

18

PICmicro GAMA MEDIA: PIC16F87X


Ejemplo: Modo Comparacin-PWM
Mediante la configuracin del mdulo CCP lanzar una conversin AD, automtica cada 1ms. Con el valor obtenido se realizar una conversin DA utilizando el PWM y un filtro paso-bajo.

Mediante los bit 3-0 CCPxM3:CCPxM0 (Bits de seleccin del modo CCP) se puede configurar Modo de comparacin: CCP2 resetea TMR1 y lanza una conversin A/D. Cargando el CCP2 con el valor adecuado se consigue que, cuando coincida con el valor de TMR1, se produzca una conversin AD (si est habilitada). Con el valor obtenido de la conversin (0 a 1023) se puede obtener una seal PWM proporcional ha este valor. Si dicha seal es filtrada con un filtro paso bajo se obtiene una continua proporcional al valor de la conversin. Como aplicacin se puede aplicar esta seal a una barra de leds y obtener una seal luminosa proporcional a la seal adquirida.

19

PICmicro GAMA MEDIA: PIC16F87X


Ejemplo: Modo Comparacin-PWM
A

RV2 BAT3
5 RV2(3) 1k

R3
10k 3 C1(1) 5

U1
10 9 8 7 6 5 4 3 2 1 10 11 12 13 14 15 16 17 18 1 20 19 18 17 16 15 14 13 12 11

U2
1 2 3 4 5 6 7 8 9 10 LED-BARGRAPH-GRN

SIG VRO RHI RLO ADJ MODE

V+

C1 U3
9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 1uF

7 6 4 8 9

BAT1
10

R1
1k

V-

LM3914

R2
2.7k

Simular en ISIS

PIC16F876

20

You might also like