Está en la página 1de 20

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODULO CCP (Captura/Comparacin/PWM)


Un microcontrolador de la familia 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 dato al producirse un e vento. Como registro de 16 bits para comparacin, provocando un evento cuando se alcanza el valor contenido en este registro. Como registro de 10 bits del ciclo de trabajo de una seal PWM. Los 2 mdulos CCP disponibles se comportan 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 con sus propios registros (ver tabla adjunta).

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 1

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODULO CCP (Captura/Comparacin/PWM)


La siguiente tabla muestra que temporizadores utiliza el mdulo CCP en cada uno de sus modos de funcionamiento:

La siguiente tabla muestra las posibles interacciones entre los mdulos CCP, donde CCPx es uno de los mdulos y CCPy es el otro:

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 2

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO


CCPxCON -- CCP1CON (17h) Y CCP2CON (1Dh): REGISTRO DE CONTROL DEL MODULO CCP

bit 7-6 No implementados: Leidos como 0. bit 5-4 DCxB1:DCxB0: Bits 0 y 1 del valor que fija el ciclo de trabajo en el modo PWM. Modo Captura: No se usa Modo Comparacin: No se usa Modo PWM: Estos bits son los 2 LSBs para el ciclo de trabajo. Los 8 bits ms significativos estn en el registro CCPRxL. bit 3-0 CCPxM3:CCPxM0: Bits de seleccin del modo de funcionamiento del mdulo CCPx:

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 3

0000= Captura/Comparacin/PWM off (resetea el mdulo CCPx) 0100= Modo Captura, cada flanco de bajada 0101= Modo Captura, cada flanco de subida 0110= Modo Captura, cada 4 flancos de subida 0111= Modo Captura, cada 16 flancos de subida 1000= Modo comparacin, el pin CCPx se pone a 1 cuando TMR1 alcanza el valor del registro de 16 bits (CCPRxH:CCPRxL). El bit CCPIF se pone a 1. 1001= Modo comparacin, el pin CCPx se pone a 0 cuando TMR1 alcanza el valor del registro de 16 bits (CCPRxH:CCPRxL). El bit CCPIF se pone a 1. 1010= Modo comparacin, generacin de interrupcin software cuando se produce la igualdad. CCPIF se pone a 1. El pin CCPx no se ve afectado. 1011= Modo comparacin, generacin de disparo de evento especial (special event trigger). CCPIF se pone a 1. El pin CCPx no se ve afectado. CCP1 resetea el TMR1; CCP2 resetea el TMR1 y lanza una conversin A/D nueva (si el mdulo del conversor A/D est habilitado. 11xx= modo PWM

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO CAPTURA
En modo Captura, los registros CCPRxH:CCPRxL toman el valor de 16 bits que tenga el TMR1 cuando se produzca 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 flanco de subida. Cada 16 flanco de subida. Como hemos visto 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 pudiendo provocar un salto a la rutina de interrupcin. 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 (se pierde). 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 puede originar una captura.
LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 4

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO CAPTURA
FUNCIONAMIENTO DEL TMR1 PARA EL MODO 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. CAMBIO ENTRE MODOS CAPTURA: 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. El cambio entre dos modos captura debe realizarse segn el siguiente subprograma: CLRF CCP1CON MOVLW NEW_CAPT_PS MOVWF CCP1CON ; Apaga el mdulo CCP ; Preparo en W el nuevo prescaler y preparo CCP ON ; Cargo CCP1CON el valor

CONTADOR DE FLANCOS DEL CCP (PRESCALER DEL CCP): 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. FUNCIONAMIENTO EN MODO DORMIDO: En modo dormido, el TMR1 no se incrementa (esta en modo sncrono temporizador). Pero, el prescaler del CCP si continua incrementndose y cuando llega al valor configurado pone el bit CCPxF a 1 provocando que el micro se despierte. No obstante, el contenido del TMR1 no se transfiere a los CCPR pues el TMR1 no se ha visto incrementado y por tanto, el valor cargado no tiene significado.
LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 5

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

EJEMPLO DE INICIALIZACIN EN MODO CAPTURA


CLRF CCP1CON ; Modulo CCP1 OFF CLRF TMR1H ; limpio TMR1H CLRF TMR1L ; limpio TMR1L CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BSF TRISC, CCP1 ; Pin RC2/CCP1 entrada CLRF PIE1 ; Deshabilito interrupciones de perifericos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; limpio flags de interrupciones de perifricos MOVLW 0x06 ; Modo captura, cada 4 flanco de subida MOVWF CCP1CON ; BSF T1CON, TMR1ON ; Timer 1 ON ; En este ejemplo no usamos la interrupciones del CCP1 ; se muestrea el flag de CCP para detectar cuando se produce una captura ; Si se quisiera utilizar interrupciones habra que habilitarlas en el proceso de ; inicializacin ; Evento que provoca una captura Evento_captura BTFSS PIR1, CCP1IF GOTO Evento_captura ; ; Si llegamos aqu es que se han producido 4 flancos de subida en el pin CCP1 ; BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparacin
LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 6

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

REGISTROS ASOCIADOS CON EL MODULO CCP EN MODO CAPTURA

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 7

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

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 sufre un evento que puede ser: Puesta a 1. Puesta a 0. No se produce cambio. El evento viene fijado por el valor de los bits CCPxM3:CCPxM0 (CCPxCON<3:0>) (ver 2 transparencia de esta leccin). Al mismo tiempo que se produce un evento en el pin se puede producir un salto a la rutina de 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.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 8

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO COMPARACION
CONFIGURACION DEL PIN CCPx PARA MODO COMPARACION: Los pines CCPx deben configurarse como salidas, limpiando los bits del registro TRISC correspondientes. 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 genera 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 tuviera ants de entrar en modo SLEEP y despertar con ese valor. TRAS UN RESET: El mdulo CCP est apagado.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 9

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

EJEMPLO DE INICIALIZACIN EN MODO COMPARACION


CLRF CCP1CON ; Modulo CCP1 OFF CLRF TMR1H ; limpio TMR1H CLRF TMR1L ; limpio TMR1L ;aqu podriamos cargar el valor de la comparacin en CCPR1H y CCPR1L CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BCF TRISC, CCP1 ; Pin RC2/CCP1 SALIDA CLRF PIE1 ; Deshabilito interrupciones de perifericos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; limpio flags de interrupciones de perifricos MOVLW 0x08 ; Modo comparacin, pone a 1 el pin CCP1 cuando se iguale MOVWF CCP1CON ; BSF T1CON, TMR1ON ; Timer 1 ON ; En este ejemplo no usamos la interrupciones del CCP1 ; se muestrea el flag de CCP para detectar cuando se produce la igualdad de la comparacin ; Si se quisiera utilizar interrupciones habra que habilitarlas en el proceso de inicializacin Evento_comparacion BTFSS PIR1, CCP1IF GOTO Evento_comparacin ; ; Si llegamos aqu es que se ha producido una igualdad entre TMR1 y CCP1RH:CCP1RL ; BCF PIR1, CCP1IF ; Se debe limpiar el flag para una nueva comparacin

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 10

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

REGISTROS ASOCIADOS CON EL MODULO CCP EN MODO COMPARACION

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 11

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

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 adjunta. Donde 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 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 (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.
LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 12

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO PWM
PERIODO DE LA ONDA PWM : Se calcula utilizando la siguiente formula:

Cuando TMR2 es igual a PR2, se producen 3 cosas en el siguiente incremento de ciclo: El TMR2 se resetea. El pin CCPx se pone a 1. Salvo si el ciclo de trabajp esta fijado a 0 donde el pin CCPx no se pondr a 1 nunca. 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.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 13

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO PWM
CICLO DE TRABAJO DE LA ONDA PWM: El ciclo de trabajo viene definido 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:

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. Si el ciclo de trabajo de la onda PWM es mayor que el periodo, la seal que sale por el la patilla CCPx est siempre a 1.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 14

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO PWM
La mxima resolucin (en bits) que se puede obtener para una onda PWM generada en este mdulo viene dada por la siguiente frmula:

La mxima resolucin (en tiempo) viene fijada por el prescaler escogido para el TMR2:

La siguiente tabla muestra frecuencias y resoluciones que se pueden obtener con un oscilador de 20 MHz

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 15

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO PWM
Pasos para configurar el mdulo CCP para funcionar en modo PWM: 1. Definir el periodo de la onda PWM escribiendo en el registro PR2. 2. Definir el ciclo de trabajo escribiendo en los registros CCPRxL y en los bits CCPxCON<5:4>. 3. Definir el pin CCPx como salida, poniendo a 0 el bit TRISC<2> (para CCP1) y/o el bit TRISC<1> (para CCP2). 4. Seleccionar el valor del prescaler del TMR2 y habilitar el TMR2 por puesta a 1 del nit TMR2ON (T2CON<2>). 5. Configurar el mdulo CCP1 para funcionar en modo PWM

En modo SLEEP, el TMR2 no se incrementa y por tano el estado del mdulo CCP no cambia. Si el pin CCPx est a un determinado nivel (0 1) cuando se ejecuta la instruccin SLEEP, el pin continuar en ese valor y se despertar con ese valor.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 16

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

MODO PWM
Ejemplo: Calcula PR2 para obtener una onda PWM cuya frecuencia sea de 78,125 kHz. La Fosc es de 20 MHz y el prescaler del TMR2 = 1. 1/78,125kHz = [(PR2)+1] * 4 * 1/20MHz * 1 12,8us = [(PR2)+1] * 4 * 50ns * 1 PR2 = 63 Encontrar la maxima resolucin del ciclo de trabajo que puede usarse con una frecuencia PWM de 78,125 KHz y un oscilador de 20 MHz TPWM = 2 N * T OSC 1/78,125kHz = 2N * 1/20MHz * 1 12,8 us = 2 N * 50 ns * 1 256 = 2 N N= 8 Por tanto, un ciclo de trabajo con una resolucin de 8 bits es la que se obtiene si se quiere obtener una onda PWM de 78,125 kHz de frecuencia con un oscilador de 20 MHz. Es decir los valores a cargar para el ciclo de trabajo estan en el margen 0 = DCxB9:DCxB0 = 255. Cualquier valor mayor de 255 provocar que el ciclo de trabajo sea del 100%. Fijarse que la resolucin ser mayor si la frecuencia de la onda PWM es menor. Si la frecuencia crece, la resolucin decrece.

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 17

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

EJEMPLO DE INICIALIZACIN EN MODO PWM


; Suponemos T2CON a 00h, por tanto, prescaler a 1 y apagado. Suponemos oscilador de 20 MHz CLRF CCP1CON ; Mdulo CCP off CLRF TMR2 ; limpio Timer2 MOVLW 0x7F ; PR2 = 7Fh = 127 MOVWF PR2 ; PeriodoPWM= (127 + 1) * 4 * 50ns * 1 = 25,6 us MOVLW 0x1F ; 8 bits altos del registro del duty a 00011111b MOVWF CCPR1L ; CLRF INTCON ; Deshabilito interrupciones BSF STATUS, RP0 ; Banco 1 BCF TRISC, PWM1 ; Pin RC2/CCP1 salida PWM CLRF PIE1 ; Deshabilito interrupciones de perifricos BCF STATUS, RP0 ; Banco 0 CLRF PIR1 ; Limpio flags de perifricos MOVLW 0x2C ; modo PWM, 2 LSbs del duty a 10b MOVWF CCP1CON ; registro del duty 0001111110b = 126d ;por tanto duty = 126 * 50ns * 1 = 6,3 us 6,3us/25,6us = 24,6% de duty BSF T2CON, TMR2ON ; Timer2 ON ; ; La interrupcin de CCP1 esta deshabilitada ; el final del periodo lo detecto por muestreo del TMR2IF ; Periodo_PWM BTFSS PIR1, TMR2IF GOTO Periodo_PWM ;OJO, solo se detecta el final del periodo si el postscaler del TMR2 esta a 1:1 BCF PIR1, TMR2IF

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 18

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

REGISTROS ASOCIADOS CON EL MODULO CCP EN MODO PWM

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 19

AREA DE TECNOLOGIA ELECTRONICA UNIVERSIDAD DE OVIEDO

CARACTERISTICAS ELECTRICAS DEL MODULO CCP

LECCION 12 MODULOS CCP (Captura/Comparacin/PWM)- 20