PICmicro GAMA MEDIA: MODULOS CCP ( COMPARACION, CAPTURA Y PWM )
1
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP (COMPARACIÓN, CAPTURA Y PWM) •
Un micro microcontro controlador lador de la gama media de los PIC1 PIC166 puede tener hasta 2 módulos CCP. CCP.
•
Cada mó Cada módu dulo lo CC CCPP titien enee un registro de 16 bits que se puede utilizar de 3 formas distintas: distintas: – Com Comoo re regis gistro tro de 16 bits par paraa captura de tiempo al producirse un evento. evento. – Co Como mo re regis gistr troo de 16 bi bits ts pa para ra compararlo con el valor de cuenta del temporizador TMR1, TMR1 , pudiendo provocar un evento cuando se alcanza el valor contenido en este registro. – Como regi regisstro de 10 bits de dell ciclo de traba bajjo de una señal PWM generada por el microcontrolador.
•
Los 2 mó Los móddulo loss CCP di disspo poni nibble less se com ompo port rtaan casi id idéént ntiica cam mente, salvo el caso de dell funcionamiento por disparo de evento especial ( special event trigger) que tiene una pequeña diferencia si se trata del módulo CCP1 ó del módulo CCP2.
•
Tras un reset, reset, el el módulo módulo CCP está apaga apagado do (al (al forzar forzar los los bits de configur configuración ación al al valor valor 0). 0).
•
En las las siguient siguientes es trans transpare parencias ncias se descr describirá ibirá el funcion funcionamiento amiento de CCP1. CCP1. El funciona funcionamiento miento de CCP2 es idéntico (salvo la excepción indicada anteriormente) pero cada uno tiene sus propios registros de carga y configuración (véase tabla adjunta).
2
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP •
Condiciones de funcionamiento – Temporizadores necesarios. → TMR1 Modo captura Modo comparación → TMR1 → TMR2 PWM –
n eracc n en re os os m
u os
.
3
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 más significativos están en CCPRxL. bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar = p r c n p ur e c v re e e u 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 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 4
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 módulo CCP1 y RC1/T1OSI/CCP2 para el módulo 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 interrupción. 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).
5
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 podría originar una captura.
•
El TMR1 debe estar corriendo en modo temporizador ó en modo contador síncrono para que el módulo CCP produzca la comparación. No puede funcionar en modo contador asíncrono.
•
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 interrupción. El usuario debe por software limpiar el bit CCPxIE para , .
•
Si en medio de una cuenta de 4 ó 16 flancos de subida se apaga el módulo 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 síncrono ó 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. 6
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO COMPARACION •
• •
En modo comparación, 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>) que el flag CCPxIF (de PIR1 ó PIR2) se pone a “1”. TMR1 debe estar funcionando en modo temporizador ó modo contador síncrono para que el módulo CCP funcione correctamente en el modo comparación. En modo contador asíncrono, el modo comparación no funciona.
7
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 comparación 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 interrupción si está habilitada.
•
MODO DISPARO DE EVENTO ESPECIAL: Cuando se produce la igualdad, el registro TMR1 se resetea convirtiéndose por tanto, en un registro que marca la periodicidad del evento. En el caso del módulo CCP2, además de resetear el TMR1 se lanza una nueva conversión A/D (si el módulo de conversión A/D está activo) permitiendo programar la conversión A/D a periodos de tiempo fijos.
•
FUNCIONAMIENTO EN MODO DORMIDO: Al no funcionar el TMR1 (modo síncrono) en modo dormido, el módulo CCP en modo comparación no funciona. El pin CCPx tendrá el valor que tenía antes de entrar en modo SLEEP y “despertará” con ese valor.
•
TRAS UN RESET: El módulo CCP está apagado. 8
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO PWM •
En modo PWM (MODULACIÓN DE ANCHO DE PULSO - Pulse Width Modulation), el objetivo es obtener a través 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 señal viene fijado por la configuración de TMR2 y por el contenido del registro PR2 (0x92). Este registro de 8 bits contiene los 8 bits más 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.
• •
9
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: MODO PWM • PERIODO DE LA ONDA PWM. Se calcula utilizando la siguiente fórmula: T = (PR2 + 1) ·( 4 / TOSC )· PRESCALER TMR2 – 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). • nuevo c c o e tra a o es carga o es e e reg stro x a reg stro x 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 más significativos) junto con los bits CCP1CON<5:4> (2 bits menos significativos). Por tanto se consigue una resolución de 10 bits (DCxB9:DCxB0). La siguiente ecuación se utiliza para calcular el ciclo de trabajo (duty cycle) de la onda PWM: D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALER TMR2 • 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 e a on a actua . • 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 señal que sale por la patilla CCPx está siempre a 1.
11
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS Configuración del módulo CCP setup_ccp1 (modo); setup_ccp2 (modo); (CCPxCON 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
00h) (CCPxCON → 04h) (CCPxCON → 05h) (CCPxCON → 06h) (CCPxCON → 07h) (CCPxCON → 08h) (CCPxCON → 09h) (CCPxCON → 0Ah) (CCPxCON → 0Bh) (CCPxCON → 0Ch) (CCPxCON → 1Ch) (CCPxCON → 2Ch) (CCPxCON → 3Ch) →
12
PICmicro GAMA MEDIA: PIC16F87X
Modulo de CCP: COMPILADOR CCS 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 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 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)
Configuración del temporizador TMR1 setup_timer_1 (modo); modo: T1_DISABLED (T1CON → 00h)
_ → 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 Configuración del temporizador TMR2 setup_timer_2 (modo,periodo,postscaler); (T2CON → 00h) modo: T2_DISABLED
T2_DIV_BY_1 (T2CON → 04h) T2_DIV_BY_4 (T2CON → 05h) T2_DIV_BY_16 (T2CON → 06h) PR2 → periodo periodo: postscaler: Número de overflows necesarios para generar una interrupción. Es un valor entre 1 y 16 (para uso con los módulos 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 1µs se produce un PASO de TIMER1.
•
Un ciclo completo del TIMER1, desde 0x0000 hasta 0xEFFF (65536 pasos), ocu a un tiem o total de 1 s * 65.536 = 65 536ms.
•
Podemos fijar un tipo de flanco a detectar y escribir un cierto código para ejecutarlo cuando ese tipo de flanco, subida o bajada, es detectado. En este código escrito para tratar la interrupción del CCP podemos mantener o cambiar el flanco a detectar, cambiándolo 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)
S D E S D E V V V
U1 9 10 1 2 3 4 5 6 7
OSC1/CLKIN OSC2/CLKOUT pp RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS
RB0/INT RB1 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
1 2 3
S W R R E 4 5 6
0 1 2 3 4 5 6 7 D D D D D D D D 7 8 9 0 1 2 3 4 1 1 1 1 1
11 12 13 14 15 16 17 18
PIC16F876
Simular y Montar
17
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación, generador de onda cuadrada. •
Generar un pulso de Periodo T con dos semiperiodos iguales, simétrico, 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 automáticamente el valor de TMR1 con un valor de referencia que le damos, CCP_x, y en cuanto lo alcance se realice la conmutación del Pin asociado a él y nos dispare la Petición de Servicio de Interrupción (ISR) INT_CCPx correspondiente. En el código de esta interrupción volvemos a hacer lo mismo pero configurando el Compare para que cuando TMR1 alcance el valor de referencia conmute nuestro Pin CCP Si ambos valores de TMR1 de referencia, para el Compare a Alto y el Compare a bajo, son iguales tendremos un tren de pulsos simétricos, están el mismo tiempo en alto que en bajo, o sea que tienen un Duty Cycle del 50%. En caso contrario estarán mas tiempo en un estado que en otro y será una onda asimétrica, 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 número de PASOS de TMR1 en que deseamos que se dispare nuestra conmutación/interrupción.
18
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación-PWM •
Mediante la configuración del módulo CCP lanzar una conversión AD, automática cada 1ms. Con el valor obtenido se realizará una conversión DA utilizando el PWM y un filtro paso-bajo.
–
Mediante los bit 3-0 CCPxM3:CCPxM0 (Bits de selección del modo CCP) se puede configurar Modo de comparación: CCP2 resetea TMR1 y lanza una conversión A/D.
–
Cargando el CCP2 con el valor adecuado se consigue que, cuando coincida con el valor de TMR1, se produzca una conversión AD (si está habilitada).
–
proporcional ha este valor.
–
Si dicha señal es filtrada con un filtro paso bajo se obtiene una continua proporcional al valor de la conversión.
–
Como aplicación se puede aplicar esta señal a una barra de leds y obtener una señal luminosa proporcional a la señal adquirida.
19
PICmicro GAMA MEDIA: PIC16F87X
Ejemplo: Modo Comparación-PWM A
B
RV2 BAT3 5
RV2(3)
R3 10k
1k
C1(1) 5
C1 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
7
1uF
U3 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
4 8 9
+ SIG V
VRO RHI RLO ADJ MODE V
R1 1k
U1
3
2
10 9 8 7 6 5 4 3 2 1
U2
10 11 12
20 19 18
1 2 3
14 15 16 17 18 1
16 15 14 13 12 11
5 6 7 8 9 10
BAT1 10
LED-BARGRAPH-GRN LM3914
R2 2.7k
Simular en ISIS
PIC16F876
20