Professional Documents
Culture Documents
La siguiente tabla muestra las posibles interacciones entre los mdulos CCP, donde CCPx es uno de los mdulos y CCPy es el otro:
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:
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
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
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
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.
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.
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
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.
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.
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
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.
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.