0% encontró este documento útil (0 votos)
33 vistas10 páginas

Módulos CCP: Captura, Comparación y PWM

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas10 páginas

Módulos CCP: Captura, Comparación y PWM

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

MÓDULOS DE

COMPARACIÓN
CAPTURA Y PWM
Módulos CCP

Características generales
Dos módulos con idéntico funcionamiento.
Registro de captura de 16 bits.
Registro de comparación de 16 bits.
Registro de ciclo de trabajo PWM.

Módulo CCP1.
Consta de dos registros de 8 bits: CCPR1H y CCPR1L.
Registro de control: CCP1CON.
Acción especial: Generada mediante una comparación.
Resetea Timer1.

Módulo CCP2.
Consta de dos registros de 8 bits: CCPR2H y CCPR2L.
Registro de control: CCP2CON.
Acción especial: Generada mediante una comparación.
Resetea Timer1.
Lanza una conversión A/D.

Módulos CCP

Condiciones de funcionamiento
Temporizadores necesarios.
Modo captura ⇒ TMR1
Modo comparación ⇒ TMR1
PWM ⇒ TMR2

Interacción entre los dos módulos CCP.

CCPx CCPy Interacción


Captura Captura Misma base de tiempos definida en TMR1
La comparación debe configurarse con la acción especial, que
Captura Comparación
borra TMR1
La(s) comparación(es) deben configurarse con la acción
Comparación Comparación
especial, que borra TMR1
Las PWMs tendrán la misma frecuencia y tasa de actualización
PWM PWM
(interrupción TMR2)
PWM Captura Ninguna
PWM Comparación Ninguna

1
Módulos CCP

Registro CCP1CON / CCP2CON (17h / 1Dh)

- - CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0

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


0000 = Comparación/Captura/PWM desactivada (reset del módulo 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 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

Módulos CCP

Modo captura
Captura en CCPRxH:CCPRxL los 16 bits de TMR1.
Cada flanco de bajada en CCPx
Cada flanco de subida en CCPx
Cada 4º flanco de subida en CCPx
Cada 16º flanco de subida en CCPx

Diagrama de bloques del modo de captura.

CCPxIF  1
RCy / CCPx Prescaler
œ 1 , 4 , 16
CCPRxH CCPRxL

Detección de Habilita
flanco y Captura

TMR1H TMR1L

Qs CCPxCON<3:0>

2
Módulos CCP

Condiciones de funcionamiento en el modo captura

El pin CCPx debe configurarse como entrada.

TMR1 debe funcionar en modo temporizador o en modo contador


síncrono.
En modo contador asíncrono puede que la captura no funcione.

Podría generarse una falsa interrupción de captura al cambiar el


modo de captura.
Se aconseja deshabilitar CCPxIE al cambiar el modo de captura.

Tambi én podría generarse una falsa interrupción al cambiar el


prescaler. Además, un cambio no resetea la cuenta de flancos.
Se evitan estas situaciones reseteando el módulo CCP (CCPxCON ← 0)
antes de llevar a cabo un cambio de modo y/o un cambio de prescaler.

Módulos CCP

Modo comparación
Cuando CCPRx coincide con TMR1 (en sus 16 bits):
El pin RCy/CCPx se pone a 1
El pin RCy/CCPx se pone a 0
Se genera una interrupción
Lanza una acción especial

Diagrama de bloques del modo comparación.

TMR1 ← 0 (no alza flag TMR1F) CCPxIF  1


GO/DONE ← 1 Lanza acción
especial

CCPRxH CCPRxL
RCy / CCPx
Q S
Lógica de
Comparador
salida Coincidencia
R
TRISC<2> TMR1H TMR1L
CCPxCON<3:0>

3
Módulos CCP

Condiciones de funcionamiento en el modo comparación

El pin CCPx debe configurarse como salida.

TMR1 debe funcionar en modo temporizador o en modo contador


síncrono.
En modo contador asíncrono puede que la comparación no funcione.

Cuando se selecciona generar interrupción, el pin CCPx no se ve


afectado.

Se puede generar una acción especial por hardware.


CCP1: Resetea TMR1.
CCP2: Resetea TMR1 y lanza una conversión A/D (si está activado).

Módulos CCP

Modo PWM T

Genera una salida PWM de 10 bits


de resolución D

TMR2 = PR2

TMR2 = D
Diagrama de bloques del modo PWM. TMR2 = 0

Registros de
CCPRxL CCPRxH (esclavo)

Comparador R Q RCy / CCPx


CCPxCON<5:4>

TMR2 (* )
S
TRISC<2>

(*) TMR2 se concatena con Comparador


un reloj interno de 2 bits
TMR2  0
con frecuencia fosc para
CCPx  1 (si D0)
poder crear una base de PR2
CCPRxH  CCPRxL
tiempos de 10 bits

4
Módulos CCP

Condiciones de funcionamiento en el modo PWM

El periodo T se indica en el registro PR2.

T = (PR2 + 1) · 4 · TOSC · PRESCALERTMR2

El ciclo de trabajo D se indica en CCPRxL y en CCPxCON<5:4>.

D = (CCPRxL:CCPxCON<5:4>) · TOSC · PRESCALER TMR2

CCPRxH es de sólo lectura en PWM.

Cuando TMR2 (+ 2 bits) se iguala a CCPxH (+ 2 bits), CCPx ← 0.

Existe una resolución (número de bits) máxima que se puede


obtener con el funcionamiento en modo PWM.
⎛ f osc ⎞
log⎜⎜ ⎟⎟
⎝ f ⋅ PS TMR 2 ⎠
Res = PWM
bits
log 2

Módulos CCP

f PWM 1,22kHz 4,88kHz 19,53kHz 78,12kHz 156,3kHz 208,3kHz

PRESCALER TMR2 16 4 1 1 1 1
(fosc = 20MHz)
PR2 0xFFh 0xFFh 0xFFh 0x3Fh 0x1Fh 0x17h

Resolución
10 bits 10 bits 10 bits 8 bits 7 bits 5,5 bits
máxima

Pasos a seguir para definir una PWM

1. Establecer el periodo T escribiendo en el registro PR2.

2. Establecer el ciclo de trabajo D en CCPRxL y en CCPxCON<5:4>.

3. Configurar el pin CCPx como salida.

4. Fijar el prescaler de TMR2 y activar el temporizador. (T2CON)

5. Configurar el módulo CCP para funcionar en modo PWM.

5
Módulos CCP

Módulos CCP en el compilador C de CCS


Configuración del módulo CCP
setup_ccp1 (modo); setup_ccp2 (modo);
modo: CCP_OFF (CCPxCON ← 00h)

CCP_CAPTURE_FE (CCPxCON ← 04h)


CCP_CAPTURE_RE (CCPxCON ← 05h)
CCP_CAPTURE_DIV_4 (CCPxCON ← 06h)
CCP_CAPTURE_DIV_16 (CCPxCON ← 07h)

CCP_COMPARE_SET_ON_MATCH (CCPxCON ← 08h)


CCP_COMPARE_CLR_ON_MATCH (CCPxCON ← 09h)
CCP_COMPARE_INT (CCPxCON ← 0Ah)
CCP_COMPARE_RESET_TIMER (CCPxCON ← 0Bh)

CCP_PWM (CCPxCON ← 0Ch)


CCP_PWM_PLUS_1 (CCPxCON ← 1Ch)
CCP_PWM_PLUS_2 (CCPxCON ← 2Ch)
CCP_PWM_PLUS_3 (CCPxCON ← 3Ch)

Módulos CCP

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 de la PWM.

valor CCPRxL:CCPxCON<5:4>
XXXXXXXX XXXXXXXX 0 0
Y Y Y Y Y YXXXXXXXXXX XXXXXXXXXX

Variables definidas en 16F877.h

long CCP_1; long CCP_2;


#byte CCP_1 = 0x15 #byte CCP_2 = 0x15
#byte CCP_1_LOW = 0x15 #byte CCP_2_LOW = 0x15
#byte CCP_1_HIGH = 0x16 #byte CCP_2_HIGH = 0x16

6
Módulos CCP

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_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 |.

Módulos CCP

Configuración 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: Número de necesarios para generar una


interrupción. Es un valor entre 1 y 16.

7
Módulos CCP

Ejemplo 1
setup_timer_2 (T2_DIV_BY_1 , 224 , 1);
300µs W ← 00000000
W ← W | 00000100
T2CON ← W
224 W ← E0h
Banco 1
100µs PR2 ← W
Banco 0
(f osc = 3MHz) setup_ccp1 (CCP_PWM_PLUS_1);
W ← 111111 011
Banco 1
#use standard_io (C)
TRISC ← W
T = 300µs ⇒ PR2 = 224 Banco 0
D = 100µs ⇒ carga = 301 RC2 ← 0
CCP1CON ← 0
W ← 0001 1100
Carga = 301 CCP1CON ← W
01 001 01 1 01
set_pwm1_ duty (0x4B); CCPR1L ← 01001011

01 001 01 1 01
CCPR1L CCP1CON<5:4>

Módulos CCP

Ejemplo 1 (cont.)

setup_timer_2 (T2_DIV_BY_1 , 224 , 1);


W ← 00000000
W ← W | 00000100
T2CON ← W
224 W ← E0h
Banco 1
¡¡ATENCIÓN!!
¡¡ATENCIÓN!! PR2 ← W
Banco 0
La
La instrucción
instrucción setup_ccp1 (CCP_PWM);
setup_ccpx
setup_ccpx (modo);
(modo); #use fast_io (C) -
siempre RC2 ← 0
siempre borra
borra el
el CCP1CON ← 0
registro
registro W ← 00001100
CCPxCON
CCPxCON CCP1CON ← W
set_pwm1_ duty (301);
4Bh CCPR1L ← 01001011
W ← CCP1CON
W ← W & 11 001111
W ← W | 00010000
CCP1CON ← W

8
Módulos CCP

Ejemplo 2

setup_timer_1 (T1_INTERNAL | T1_DIV_ BY_1);


W ← 100001 01
Configurar
Configurar uno
uno de
de
T1CON ← W

los
los módulos CCP
módulos CCP
para set_timer1 (0);
para lanzar
lanzar TMR1H ← 0
de
de manera
manera TMR1L ← 0
automática
automática
una
una conversión
conversión A/D
A/D CCP2 = 750;
cada
cada 1ms.
1ms. W ← 02h
CCPR2H ← W
750
f osc = 3MHz W ← EEh
CCPR2L ← W

TMR1 = 750
setup_ccp2 (CCP_COMPARE_RESET_TIMER);
(sin prescaler)
CCP2CON ← 0
W ← 00001011
CCP2CON ← W

También podría gustarte