Post on 22-Jun-2015
description
MÓDULOS CCP
Permite medir y controlar diferentes eventos.
En modo captura proporciona el acceso al valor actual del Timer1 (que cambia su valor constantemente).
En modo comparación compara constantemente valores de dos registros. Uno de ellos es el Timer1. Este circuito también permite activar un evento externo después de que haya expirado una cantidad de tiempo predeterminada.
En modo PWM (Pulse Width Modulation) puede generar señales de frecuencia y de ciclo útil variados por uno o más pines de salida.
CCP :(Captura/Comparación/PWM)
TIMERS USADOS POR CCP
Ambos son idénticos en modo normal de funcionamiento, mientras que las características del PWM mejorado están disponibles sólo en el modo CCP1.
MÓDULO CCP : FORMADO POR MÓDULOS CCP1 y CCP2.
Conformado por el registro CCPR1 de 16 bits que consiste en los registros concatenados CCPR1H y CCPR1L.
Se utiliza para capturar y comparar sus valores con los números almacenados en el registro del temporizador Timer1 (TMR1H :TMR1L)
MÓDULO CCP1
- - - - - - - - - - - - - - - -BIT: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
REG:
C C P R 1 H : C C P R 1 L
En este modo, el Timer1 se copia al registro CCP1 (que consiste en los CCPR1H y CCPR1L) en las siguientes situaciones:
•Cada flanco ascendente en el pin RC2/CCP;•Cada flanco descendente en el pin RC2/CCP1;•Cada cuarto flanco ascendente en el pin RC2/CCP1;•Cada decimosexto flanco descendente en el pin RC2/CCP1.
CCP1 EN MODO DE CAPTURA
MODO CAPTURA CCP1
• El pin RC2/CCP1 debe estar configurado como entrada; y
• El Timer1 debe funcionar como temporizador o contador síncrono
El bit de bandera CCP1IF se pone a uno después de acabar la captura.
Si se pone a 1 el bit CCP1IE del registro PIE1, se producirá una interrupción.
Requisitos para captura CCP:
P1M1, P1M0 - (bits de configuración del modo PWM) - El pin P1A es la entrada del módulo de Captura/Comparación en todos los modos, menos en modo PWM. Los pines P1B, P1C y P1D actúan como los pines de E/S del puerto D.
CCP1CON
0 0 PWM con una sóla salida
0 1Configuración Full Bridge - Forward(puente completo con salida directa)
1 0 Configuración Half Bridge (medio-puente)
1 1Configuración Full Bridge - Reverse(puente completo con salida inversa)
DC1B1, DC1B0 - bits menos significativos del ciclo de trabajo de PWM - Se utilizan sólo en el modo PWM y representan dos bits menos significativos de un número de 10 bits. Este número determina el ciclo de trabajo de la señal PWM.
Los demás 8 bits se almacenan en el registro CCPR1L.
NO SE USAN EN MODO CAPTURA NI COMPARACIÓN
CCP1CON
CCP1M3 - CCP1M0 - (bits de selección de modo del módulo CCP1) determina el modo del módulo CCP1
CCP1CON
Registros asociados con captura, comparación y timer1
Ejemplo:Realizar la medida del periodo de una onda cuadrada conectada en RC2. El Pic usa un cristal de 4 MHz.
1. Se Configura CCP modo captura con cada transición de subida del pin RC2/CCP1 con Timer1 modo temporizador 1/1.
2. Al llegar un flanco ascendente, se resetea el Timer1 y se e spera al siguiente flanco ascendente, en el cual se guarda el valor capturado.
3. Lo que se ha capturado es la cantidad de ciclos de reloj transcurridos en un ciclo de la señal a medir.
4. Con este valor y el Tosc al cual trabaja el microcontrolador se puede determinar el periodo de la señal.
Ejemplo:
; Se selecciona TMR1, preescaler de 1/1, modo temporizador.-
movlw b'00000001'
movwf T1CON
TMR1
; Se configura CCP modo captura cada flanco de subida.-
movlw b'00000101‘
movwf CCP1CON
CCP MODO CAPTURA
Si fosc=4MHz
Tosc= 1/4MHz
Ciclo de Operación ó ciclo de instrucción= 4 Tosc = 1 µs
Entonces, el número de incrementos del Timer1 = período de la señal (en µs)
Tosc
list p=16F887
#include <p16f887.inc>
; Definiciones particulares
Msb equ 0x20 ; Guarda Byte alto de Captura
Lsb equ 0x21 ; Guarda byte bajo de Captura
Contador1 equ 0x22 ; Para retardo
Contador2 equ 0x23 ; Para retardo
org 0x00
goto Inicio
org 0x05
Inicio
bsf STATUS,RP0 ; Banco 1
movlw b'11111111' ; portc entrada. (RC2 )
movwf TRISC
bcf STATUS,RP0 ; Banco 0.-
movlw b'00000001' ; Se selecciona TMR1, preescaler de 1/1, modo temporizador.-
movwf T1CON
movlw b'00000101' ; Se configura CCP modo captura cada flanco de subida.-
movwf CCP1CON
Bucle
bcf PIR1,CCP1IF ; Borramos bandera
espera
btfss PIR1,CCP1IF ; Preguntamos por bandera.-
goto espera ; Si no se activo seguimos esperando
bcf PIR1,CCP1IF ; Se activo, la borramos.-
clrf TMR1H ; Borramos Timer1.-
clrf TMR1L ;
wait
btfss PIR1,CCP1IF ; Volvemos a Preguntar por bandera.-
goto wait ; No se activo, seguimos esperando.-
movfw CCPR1L ; Copiamos el valor capturado.-
movwf Lsb
movfw CCPR1H
movwf Msb
bcf t1con,tmr1on
; mostrar usando Lsb y Msb ya que directamente es el período buscado
aqui: goto aqui ;
end
1. El valor almacenado en el registro CCP1 se compara constantemente al valor almacenado en el registro del temporizador Timer1.
2. Al igualarse los valores, el estado lógico en el pin de salida puede ser cambiado, lo que depende del estado de bits en el registro de control (CCP1M3 - CCP1M0).
3. El bit de bandera CCP1IF se pone a uno simultáneamente.
CCP1 EN MODO DE COMPARACIÓN
Diagrama de Bloques CCP en comparación
• Invierte el valor CCPx
• Lleva a 1 CCPx
• Borra CCPx
• Generate a Special Event Trigger
• Generate a Software Interrupt
La acción es configurada por los bits
CCPxM<3:0> del registro CCPx1CON.
Special trigger event
En el modo de comparación, el TIMER1 debe estar corriendo en modo Timer o modo contador sincronizado.
Si esá configurado como modo contador asíncrono, puede que no opere de la forma correcta.
Nota:
Cuando se selecciona Special Event Trigger (CCPxM<3:0> = 1011), el módulo CCPx hace lo siguiente:
•• resetea al Timer1•• Arranca una converión ADC (si el módulo ADC está habilitado)
SPECIAL EVENT TRIGGER
1. El pin RC2/CCP1 debe estar configurado como salida; y
2. El temporizador Timer1 debe estar sincronizado con el reloj interno.
Para poner el módulo CCP1 en este modo de funcionamiento, se deben cumplir dos condiciones:
El TMR1 cuenta tantos pulsos externos como se indique Mediante el valor cargado en CCP1CON por la constante Ncompar. Cada vez que se alcanza el valor fijado, la salida RB0 Cambia de estado.
EJEMPLO
List p=16F887
include "P16F887.INC"
Ncompar equ 06H ;Constante para modificar
; Número de comparaciones bajas
org 00H ;Vector de Reset
goto CONFIGURAR
org 04H
goto INRERRUP ;Vector de interrupción
;Programa de tratamiento de la interrupción que provoca el módulo CCP1 cada vez
;que el TMR1 cuenta tantos pulsos externos como los prefijados mediante Ncompar
INRERRUP:
bcf T1CON,TMR1ON ;TMR1 en Off
bcf PIR1,CCP1IF ;Bandera del módulo CCP1 en OFF
clrf TMR1L
clrf TMR1H ;Puesta a 0 del TMR1
movlw b'00000001'
xorwf PORTB,F ;RB0 cambia de estado
bsf T1CON,TMR1ON ;TMR1 en On
bcf PIR1,CCP1IF
retfie
; CONFIGURAR:
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerto B se configura como salida
clrf TRISD
movlw b'11001011'
movwf TRISC ;RC0 entrada
bsf PIE1,CCP1IE ;Habilita interrupción del módulo CCP1
bcf STATUS,RP0 ;Selecciona banco 0
bcf T1CON,TMR1ON ;Timer1 desconectado
clrf PORTB ;apaga salida bcfSTATUS,RP0 ;Selecciona banco 0
;El TMR1 actúa en el modo contador de pulsos externos
;sensible al flanco ascendente y con un preescaler de 1:1
movlw b'00000010'
movwf T1CON ;TMR1 en Off
;El módulo CCP1 actúa en modo de comparación e interrupción al coincidir
movlw b'00001010'
movwf CCP1CON ;Módulo CCP en modo comparación
clrf CCPR1H ;Puesta a 0 de la parte alta del valor a comparar
clrf TMR1L
clrf TMR1H ;Puesta a 0 del TMR1
movlw Ncompar
movwf CCPR1L
movlw b'11000000'
movwf INTCON ;Habilita interrupciones
bsf T1CON,TMR1ON ;TMR1 en On, comienza a contar
;Programa principal
aqui:
MOVF TMR1L,W
MOVWF PORTD
goto aqui ;Bucle infinito
end
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R110k
R2
330RR3
330RR4
330RR5
330RR6
330RR7
330RR8
330R
D1
LED-RED
D2
LED-RED
D3
LED-RED
D4
LED-RED
D5
LED-RED
D6
LED-RED
D7
LED-RED
R9
330R
D8
LED-YELLOW
SW1
SW-SPST
CCP1 EN MODO PWM
El modo PWM genera una señal de ancho de pulso modulado en el pin CCPx.
El ciclo util, período y resolución se determinan a través de los siguientes registros: • PR2• T2CON• CCPRxL• CCPxCON
Modo PWM
Entonces, PWM permite obtener en los pines CCPx una señal periodica en la que se puede modificar su ciclo de trabajo (Duty Cicle).
Puede variar el tiempo en el cuál la señal está en nivel alto (Ton) vs. El tiempo en nivel bajo (Toff).
PWM
La tensión media aplicada es proporcional al Ton, controlando así: velocidad de motores, luminosidad de lámparas, etc.
El pin RCy del PIC16F887 debe estar configurado como salida, mediante a configucación TRIS correspondiente.
La resolución de salida es de 10 bits.
El período de la señal PWM se obtiene de configurar el Timer2 y el contenido del registro PR2. Este registro contiene los 8 bits más significativos de los 10 bits.
Cuando TMR2 = PR2 ocurren los siguientes eventos en el siguiente ciclo de instrucción:
• TMR2 ise borra
•El pin CCPx se va a 1. (Excepción: Si el ciclo útil es de 0% el pin no se va a 1)
•El ciclo útil se PWM de almacena de CCPRxL a CCPRxH.
Para calcular el período de la señal PWM se utiliza la ecuación:
Tpwm = (PR2+1).4 .(Valor PreescalerTMR2)
fosc
El ciclo de trabajo o duty cicle (ciclo útil) es el valor del registro CCPxL antes de comenzar un nuevo período. A compararse con el valor del registro del Timer2.
Para calcular el ciclo de trabajo se utiliza la ecuación:
PWM ciclo útil= (CCPRxL:CCPxCON(5:4))..ValorPreescalerTMR2
fosc
Los registro CCPRxL y los bits CCPxCON pueden escribirse en cualquier momento, pero no se cargan hasta que finalice el periodo de onda PWM (se produce una igualdad entre PR2 y TMR2)