Sei sulla pagina 1di 37

Mdulo CCP

Microcontroladores &
Microprocessadores
Prof. Rodrigo Ramos

ESTRUTURA BSICA DE UM PROGRAMA EM LINGUAGEM C

MCU & MPU

Mdulo CCP (Capture/Compare/


PWM)

MDULO CCP

MCU & MPU

Introduo
Mdulos usados para medio e controle de
sinais temporais baseados em largura de
pulsos.
Formado por registrador de 16 bits,
operando como:
Registrador de captura
Registrador de comparao
Registrador de ciclo de trabalho (duty
cycle) no modo PWM
3

MDULO CCP

MCU & MPU

Introduo
No PIC16F877A, existem dois mdulos CCP1
e CPP2, que operam de forma idntica,
exceto pelo Special Event Trigger.
Divididos nos registradores de 8 bits CCPRxL
e CCPRxH, onde x 1 ou 2.
Special Event Trigger gerado no modo
comparao quando h concordncia entre
os valores do Timer1 e do CCPRx.
Resseta Timer1 nos mdulos 1 e 2;
Pode comear converso A/D no mdulo 2.

MDULO CCP

MCU & MPU

Introduo
CCPxCON: Registrador de controle de
operao
Recursos de Temporizadores:

MDULO CCP

MCU & MPU

Introduo
Registradores de Controle CCP1CON e CCP2CON
(endereos 17h e 1Dh)

Bits 3-0 (bit CCPxM3: CCPxM0 bits de seleo de


modo de operao) Estes bits selecionam o modo
como operaro os blocos CCP1 e CCP2.
6

MDULO CCP

MCU & MPU

Introduo
0000 = Modos Captura/Comparao/PWM desligados (reseta mdulo
CCPx )
0100 = Modo captura, a cada transio negativa (10)
0101 = Modo captura, a cada transio positiva (01)
0110 = Modo captura, a cada 4 transies positivas (10)
0111 = Modo captura, a cada 16 transies positivas (10)
1000 = Modo comparao, seta pino de sada (bit CCPxIF setado)
1001 = Modo comparao, reseta pino de sada (bit CCPxIF setado)
1010 = Modo comparao, gera interrupo (bit CCPxIF setado, pino
CCPx no afetado)
7

MDULO CCP

MCU & MPU

Introduo
1011 = Modo comparao, ativa Special Event trigger(bit CCPxIF
setado, pino CCPx no afetado); CCP1 resseta TMR1; CCP2
resseta TMR1 e inicia uma converso A/D (se mdulo A/D
habilitado).
11xx = Modo PWM
Bits 5-4 (bits CCPxX:CCPxY bits menos significativos do
PWM) Estes bits representam os dois bits menos significativos
do valor de duty-cycle do sinal PWM.
Modo Captura: No usado
Modo Comparao: No usado
Modo PWM: Dois bits LSB do duty-cycle do sinal PWM. Os oito
MSBs so gravados no registrador CCPRxL.

ESTRUTURA BSICA DE UM PROGRAMA EM LINGUAGEM C

MCU & MPU

Mdulo de Captura

MDULO CCP

MCU & MPU

Captura
Espera que um evento ocorra em um pino especfico do
MCU;
Eventos:
A cada borda de descida do sinal;
A cada borda de subida do sinal;
A cada 4 borda de subida do sinal;
A cada 16 Borda de subida do sinal.

Evento configurado atravs de CCPxCON<3:0>


Timer1 deve operar no modo temporizador ou contador
sncrono
Pinos RC1/CCP2 ou RC2/CCP1 devem ser configurads
como entrada.

10

MDULO CCP

MCU & MPU

Captura
Quando o evento ocorre, os 16 bits do TMR1
so capturados e colocados em
CCPRxH:CCPRxL.
Flag CCPxIF setado.
Ocorrncia de novo evento sobrescreve CCPRx.

11

MDULO CCP

MCU & MPU

Captura
Em quais situaes devo usar esse
mdulo?
Situaes onde necessrio medir o tempo
percorrido entre dois eventos consecutivos.

Exemplo:
Acelermetros: variam o duty cycle de uma
onda quadrada proporcionalmente
acelerao do sistema que est sendo medido.
12

MDULO CCP

MCU & MPU

Captura
Exemplo: Para um clock de 4 MHz, com preescalonador do Timer 1 em 1:1, teremos uma freq. de
operao de 1 MHz, ou cada incremento do Timer 1
ocorrer a cada 1 us.
Assim, se aps uma captura o valor no par de
registradores CCPR1L:CCPR1H for igual a 100010,
significa que o perodo do sinal aplicado ao pino RC2/
CCP1 de 1 ms.

13

MDULO CCP

MCU & MPU

Captura
Medindo o perodo de
uma onda quadrada
1. Configure os bits de controle
CCPxCON<3:0> para capturar a cada
borda de subida;
2. Configure o prescaler do TMR1 levando
TMAX em considerao; portanto. sem
deixar que o mesmo atinja overflow;
3. Habilite a interrupo de CCP (CCPxIE bit)
14

MDULO CCP

MCU & MPU

Captura
Medindo o perodo de
uma onda quadrada
4. Quando uma interrupo CCP ocorrer:
a) Subtraia o tempo armazenado (t1) do tempo
capturado (t2) e armazene-o. Use o flag do
TMR1 para sinalizar overflow;
b) Armazene o t2;
c) Ressete o flag do TMR1;

5. O resultado obtido em 4(a) o perodo


desejado.
15

MDULO CCP

MCU & MPU

Captura
Medindo largura de
pulsos
1. Configure os bits de controle
CCPxCON<3:0> para capturar a cada
evento de borda de subida;
2. Configure o prescaler do TMR1
considerando WMAX (largura mxima) sem
permitir que o mesmo atinja overflow;
3. Habilite a interrupo de CCP (CCPxIE bit).

16

MDULO CCP

MCU & MPU

Captura
Medindo largura de
pulsos
4. Quando uma interrupo CCP ocorrer:
a) Armazene t1;

5. Configure CCPxCON<3:0> para capturar a cada


evento de borda de descida;
6. Quando uma interrupo CCP ocorrer:
a) Subtraia o tempo capturado (t2) do tempo armazenado
(t1) e armazene-o;
b) Use o flag do TMR1 para sinalizar overflow;
c) Ressete o flag do TMR1.

17

MDULO CCP

MCU & MPU

Captura
Medindo o Duty cycle

Configure os bits de controle


CCPxCON<3:0> para capturar a cada
evento de borda de subida;
Configure o prescaler do TMR1
considerando TMAX (perodo mximo), sem
permitir que o mesmo atinja overflow;
Habilite a interrupo de CCP (CCPxIE bit);

18

MDULO CCP

MCU & MPU

Captura
Medindo o Duty cycle
4. Quando uma interrupo CCP ocorrer:
a) Armazene t1;

5. Configure CCPxCON<3:0> para capturar a


cada evento de borda de descida;
6. Quando uma interrupo CCP ocorrer:
a) Subtraia o tempo capturado (t2) do tempo
armazenado (t1) e armazene-o;
b) Use o flag do TMR1 para sinalizar overflow;
c) Ressete o flag do TMR1.
19

MDULO CCP

MCU & MPU

Captura
Medindo o Duty cycle
7.

Configure os bits de controle CCPxCON<3:0> para capturar a


cada evento de borda de subida;

8.

Configure o prescaler do TMR1 considerando TMAX (perodo


mx.), sem permitir que o mesmo atinja overflow;

9.

Habilite a interrupo de CCP (CCPxIE bit);

10. Quando uma interrupo CCP ocorrer:


a)

Armazene t3;

b)

Subtraia o tempo armazenado (t3) do tempo capturado (t2) e


armazene-o;

c)

Use o flag do TMR1 para sinalizar overflow.

11. Divida o tempo armazenado em 10 b) por 6 a) para obter o


duty cycle (W/T).

20

ESTRUTURA BSICA DE UM PROGRAMA EM LINGUAGEM C

MCU & MPU

Mdulo de Comparao

21

MDULO CCP

MCU & MPU

Comparao
Nesse mdulo, o valor do registrador CCPRx
comparado com o registrador do TMR1;
Quando uma coincidncia ocorre, o pino RC1/CCP2
ou RC2/CCP1 ficam:
Em nvel lgico 1;
Em nvel lgico 0;
Fica inalterado;

Tudo vai depender da programao de CCPxCON;


Pinos RC1 e/ou RC2 devem ser configurados como
sada.
CCPxCON configura o nvel do pino CCPx;
O flag CCPxIF setado quando a coincidncia ocorre,
podendo gerar uma interrupo se habilitada.
22

MDULO CCP

MCU & MPU

Comparao

23

MDULO CCP

MCU & MPU

Comparao

24

MDULO CCP

MCU & MPU

Comparao
Em quais situaes devo usar esse mdulo?
Situaes onde necessrio contar de um tempo inicial
(t0) at um determinado tempo t;
Esse mdulo til para gerar aes em intervalos de
tempo muito precisos;
Diferente de timers, que necessitam que um certo valor
seja pr carregado em seus registradores a cada vez.

Exemplos:
Atualizar LCDs n vezes durante um certo perodo;
Gerar interrupes ou perodos de amostragem em
intervalos de tempo fixos para RTOS (Real Time Operating
Systems);
Gerar interrupes ou perodos de amostragem de um
sinal analgico em intervalos de tempo fixos.

25

ESTRUTURA BSICA DE UM PROGRAMA EM LINGUAGEM C

MCU & MPU

Mdulo PWM

26

MDULO CCP

MCU & MPU

PWM
Sinal PWM (pulse width modulation) ciclo de trabalho de uma
forma de onda quadrada peridica alterado.
O mdulo CCPx produz um sinal PWM com uma resoluo de
at 10 bits.
Um sinal PWM caracterizado pelo seu perodo e o ciclo de
trabalho (duty cycle), que corresponde ao tempo em que o sinal
permanece em nvel alto.

27

MDULO CCP

MCU & MPU

PWM
Quando TMR2 igual a PR2, os
seguintes eventos ocorrem:
TMR2 apagado;
O pino CCP1 setado (exceto
se o duty cycle do PWM = 0%,
quando o CCP1 no ser
setado);
O duty cycle do PWM copiado
de CCPR1L para CCPR1H.

28

MDULO CCP

MCU & MPU

PWM
O perodo do sinal PWM especificado pelo registrador PR2:
TPWM = (N + 1) 4 TOSC P
O duty cycle do PWM definido escrevendo no registrador
CCPR1L (bits mais significativos) e nos bits 5 e 4 do registrador
CCP1CON.
Determinao do perodo de duty-cycle em termos de tempo:
TON (Duty Cycle do PWM) = M TOSC P
Duty cycle (%) = (TON/TPWM) 100
N: valor de PR2
P: valor do prescaler TMR2
M: nmero decimal correspondente aos 10 bits CCPRxL:CCPxCON<5:4>29

MDULO CCP

MCU & MPU

PWM
Passos para ajustar o mdulo CCP para funcionar no
modo PWM:
Ajustar o perodo do sinal PWM, escrevendo um valor
adequado no registrador PR2;
Ajustar o duty-cycle do sinal PWM, escrevendo um
valor adequado para o registrador CCPR1L e para os
bits 5 e 4 do registrador CCP1CON;
Configurar os pinos RC2/CCP1 ou RC1/CCP2 como
uma sada;
Configurar o mdulo CCP1 ou CCP2 para operao no
modo PWM;
Ajustar o valor do pr-escalonador e habilitar o Timer 2
configurando o registrador T2CON;
30

MDULO CCP

MCU & MPU

PWM
Em quais situaes devo usar esse mdulo?
Situaes onde necessrio converter informao
em um canal de comunicao;
Situaes onde necessrio controlar a potncia
(corrente) entregue a uma carga;

Exemplos:
Controle de um motor de CC (motor DC);
Gerar uma sada analgica (Vrms = duty cycle x
Vmax): conversor D/A;
Variar a intensidade de luminosidade de um LED;
Telecomunicaes;
Efeitos de udio.
31

MDULO CCP

MCU & MPU

PWM
Princpio: variao do duty-cycle com
VRMS.
1
Vrms =
T

"

t1 +T
t1

v 2 (t)dt

32

MDULO CCP

MCU & MPU

PWM
Registradores associados com a operao PWM

33

MDULO CCP

MCU & MPU

Exerccios
1) Escreva um programa em assembly para medir o
perodo de um sinal aplicado ao pino RC2/CCP1 (use o
gerador de sinais). Coloque o resultado nas portas B e D
(PORTB<RB7:RB0> e PORTD<RD7:RD0>), acionando
leds para mostrar o resultado do perodo (como um
nmero binrio).
2) Escreva um programa em assembly para gerar uma
forma de onda PWM com 'duty-cycle' de 30% e perodo
TPWM = 25 us (use P=1 para prescaler). Utilize o
osciloscpio para comprovar o resultado e um clock de
20MHz.
34

MDULO CCP

MCU & MPU

Exerccios
3) Escreva um programa em C do XC8 para gerar um
sinal PWM com TPWM = 25us e duty cycle varivel de 10 a
90%. Utilize duas teclas externas: uma para incrementar
e outra para decrementar o valor percentual do duty
cycle, com incrementos/decrementos de 10%.
Mostre o valor percentual do duty cycle em dois displays
de 7 segmentos.
4) Usar o mdulo PWM do PIC16F877A para controlar a
intensidade do brilho de um LED. Faa a implementao
em hardware do sistema usando o kit AcePic.

35

ESTRUTURA BSICA DE UM PROGRAMA EM LINGUAGEM C

MCU & MPU

Bibliografia

36

BIBLIOGRAFIA

MCU & MPU

PEREIRA, F., Microcontroladores PIC Programao em C , rica, 7 ed.,


2009.

Microchip Technology, MPLAB XC8 C Compiler Users Guide, 2012.

Microchip Technology, MPLAB XC8 Getting Started Guide, 2013.

MPASM User's Guide, Microchip Technology Inc., 2005.

PIC16F87xA Data Sheet, Microchip Technology Inc., 2003.

PICmicro Mid-Range MCU Family Reference Manual, Microchip


Technology Inc., 1997.

M. Predko, Programming and Customizing the PIC Microcontroller,


3rd. Ed., McGraw-Hill, 2008.

F. Pereira, Microcontroladores PIC: Tcnicas Avanadas 16F627 e


16F628, 5a. Ed., rica, 2008.

Perez, E. V. and Areny, R. P., Microcontrollers: fundamentals and


applications with PIC, CRC Press, 2009.
37

Potrebbero piacerti anche