10
M MÓDULO ÓDULOS DE DE C C OMPARAC OMPARAC IÓN IÓN C C APTURA Y APTURA Y PWM PWM

Modulos CCP

Embed Size (px)

Citation preview

Page 1: Modulos CCP

MMÓDULOÓDULOSS DEDE

CCOMPARACOMPARACIÓNIÓN

CCAPTURA Y APTURA Y PWMPWM

Page 2: Modulos CCP

1

Módulos CCP

Características generalesDos módulos con idéntico funcionamiento.

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.

Registro de captura de 16 bits.Registro de comparación de 16 bits.Registro de ciclo de trabajo PWM.

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 funcionamientoTemporizadores necesarios.

Modo captura ⇒ TMR1Modo comparación ⇒ TMR1PWM ⇒ TMR2

Interacción entre los dos módulos CCP.

CCPxCaptura

Captura

Comparación

PWM

PWM

PWM

CCPyCaptura

Comparación

Comparación

PWM

Captura

Comparación

Interacción

Misma base de tiempos definida en TMR1La comparación debe configurarse con la acción especial, queborra TMR1La(s) comparación(es) deben configurarse con la acciónespecial, que borra TMR1Las PWMs tendrán la misma frecuencia y tasa de actualización(interrupción TMR2)Ninguna

Ninguna

Page 3: Modulos CCP

2

Módulos CCP

Registro CCP1CON / CCP2CON (17h / 1Dh)

CCPxX CCPxY CCPxM2 CCPxM1CCPxM3-

bit 5-4 CCPxX:CCPxY: Bits menos significativos del PWM

bit 3-0 CCPxM3:CCPxM0: Bits de selección del modo CCP a utilizar0000 = Comparación/Captura/PWM desactivada (reset del módulo CCP)

0100 = Modo de captura, cada flanco descendente0101 = Modo de captura, cada flanco ascendente0110 = Modo de captura, cada 4º flanco ascendente0111 = 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

- CCPxM0

En modo PWM:Los dos bits menos significativos del ciclo de trabajo.Los ocho bits más significativos están en CCPRxL.

Módulos CCP

Modo capturaCaptura en CCPRxH:CCPRxL los 16 bits de TMR1.

Cada flanco de bajada en CCPxCada flanco de subida en CCPxCada 4º flanco de subida en CCPxCada 16º flanco de subida en CCPx

Diagrama de bloques del modo de captura.

Prescaler� 1 , 4 , 16

Detección deflanco y

CCPRxH CCPRxL

TMR1H TMR1L

CCPxCON<3:0>Qs

CCPxIF � 1RCy / CCPx

Habilita

Captura

Page 4: Modulos CCP

3

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ónCuando CCPRx coincide con TMR1 (en sus 16 bits):

El pin RCy/CCPx se pone a 1El pin RCy/CCPx se pone a 0Se genera una interrupciónLanza una acción especial

Diagrama de bloques del modo comparación.

Q S

R

Lógica desalida

CCPRxH CCPRxL

TMR1H TMR1LCCPxCON<3:0>

TRISC<2>

CCPxIF � 1

RCy / CCPx

Coincidencia Comparador

Lanza acciónespecial

TMR1 ← 0 (no alza flag TMR1F)GO/DONE ← 1

Page 5: Modulos CCP

4

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

TRISC<2>

RCy / CCPx

Módulos CCP

Modo PWMGenera una salida PWM de 10 bits

de resolución

Diagrama de bloques del modo PWM.

R Q

S

CCPRxL

CCPxCON<5:4>

TMR2 � 0CCPx � 1 (si D�0)CCPRxH � CCPRxL

(*) TMR2 se concatena conun reloj interno de 2 bitscon frecuencia fosc parapoder crear una base detiempos de 10 bits

Registros de

TMR2 = 0

TMR2 = PR2

TMR2 = D

T

D

Comparador

TMR2 (*)

Comparador

PR2

CCPRxH (esclavo)

Page 6: Modulos CCP

5

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 · PRESCALERTMR2

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.

bits2log

logRes 2

⎟⎟⎠

⎞⎜⎜⎝

⋅= TMRPWM

osc

PSff

Módulos CCP

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.

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

fPWM

PRESCALERTMR2

PR2

Resoluciónmáxima

1,22kHz

16

0xFFh

10 bits

4,88kHz

4

0xFFh

10 bits

19,53kHz

1

0xFFh

10 bits

78,12kHz

1

0x3Fh

8 bits

156,3kHz

1

0x1Fh

7 bits

208,3kHz

1

0x17h

5,5 bits

(T2CON)

(fosc = 20MHz)

Page 7: Modulos CCP

6

Módulos CCP

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 en el compilador C de CCS

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>0 0XXXXXXXXXXXXXXXX

X XXXXXXXXXXXXXXXXXXXYYYYYY

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

Page 8: Modulos CCP

7

Módulos CCP

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

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)

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 unainterrupción. Es un valor entre 1 y 16.

Page 9: Modulos CCP

8

Módulos CCP

Ejemplo 1setup_timer_2 (T2_DIV_BY_1 , 224 , 1);

W ← 111111011Banco 1TRISC ← WBanco 0RC2 ← 0CCP1CON ← 0W ← 00011100CCP1CON ← W

300µs

100µs

(fosc = 3MHz)

T = 300µs ⇒ PR2 = 224D = 100µs ⇒ carga = 301

CCPR1L ← 01001011

W ← 00000000W ← W | 00000100T2CON ← WW ← E0hBanco 1PR2 ← WBanco 0

setup_ccp1 (CCP_PWM_PLUS_1);

set_pwm1_ duty (0x4B);

Carga = 3010 1 0 0 1 0 1 1 0 1

CCPR1L CCP1CON<5:4>0 1 0 0 1 0 1 1 0 1

224

#use standard_io (C)

Módulos CCP

Ejemplo 1 (cont.)

setup_timer_2 (T2_DIV_BY_1 , 224 , 1);

-RC2 ← 0CCP1CON ← 0W ← 00001100CCP1CON ← W

CCPR1L ← 01001011W ← CCP1CONW ← W & 11001111W ← W | 00010000CCP1CON ← W

W ← 00000000W ← W | 00000100T2CON ← WW ← E0hBanco 1PR2 ← WBanco 0

setup_ccp1 (CCP_PWM);

set_pwm1_ duty (301);

224

#use fast_io (C)

¡¡ATENCIÓN!!

La instrucciónsetup_ccpx (modo);siempre borra el

registroCCPxCON

¡¡ATENCIÓN!!¡¡ATENCIÓN!!

La instrucciónsetup_ccpx (modo);siempre borra el

registroCCPxCON

4Bh

Page 10: Modulos CCP

9

Módulos CCP

Configurar uno delos módulos CCP

para lanzarde maneraautomática

una conversión A/Dcada 1ms.

Configurar uno delos módulos CCP

para lanzarde maneraautomática

una conversión A/Dcada 1ms.

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);

CCP2CON ← 0W ← 00001011CCP2CON ← W

W ← 10000101T1CON ← W

TMR1H ← 0TMR1L ← 0

W ← 02hCCPR2H ← WW ← EEhCCPR2L ← W

setup_ccp2 (CCP_COMPARE_RESET_TIMER);

750fosc = 3MHz

TMR1 = 750(sin prescaler)

set_timer1 (0);

CCP2 = 750;

Ejemplo 2