Você está na página 1de 37
Módulo CCP Microcontroladores & Microprocessadores Prof. Rodrigo Ramos
Módulo CCP
Microcontroladores &
Microprocessadores
Prof. Rodrigo Ramos
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C MCU & MPU Módulo CCP (Capture/Compare/ PWM)
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
MCU & MPU
Módulo CCP (Capture/Compare/
PWM)
2
MÓDULO CCP MCU & MPU Introdução •   Módulos usados para medição e controle de
MÓDULO CCP
MCU & MPU
Introdução
•   Módulos usados para medição e controle de
sinais temporais baseados em largura de
pulsos.
•   Formado por registrador de 16 bits,
operando como:
–  Registrador de captura
–  Registrador de comparação
–  Registrador de ciclo de trabalho (duty
cycle) no modo PWM
3
MÓDULO CCP MCU & MPU Introdução •   No PIC16F877A, existem dois módulos CCP1 e
MÓDULO CCP
MCU & MPU
Introdução
•   No PIC16F877A, existem dois módulos CCP1
e CPP2, que operam de forma idêntica,
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
comparação quando há concordância entre
os valores do Timer1 e do CCPRx.
–  Resseta Timer1 nos módulos 1 e 2;
–  Pode começar conversão A/D no módulo 2.
4
MÓDULO CCP MCU & MPU Introdução •   CCPxCON: Registrador de controle de operação •
MÓDULO CCP
MCU & MPU
Introdução
•   CCPxCON: Registrador de controle de
operação
•   Recursos de Temporizadores:
5
MÓDULO CCP MCU & MPU Introdução Registradores de Controle CCP1CON e CCP2CON (endereços 17h e
MÓDULO CCP
MCU & MPU
Introdução
Registradores de Controle CCP1CON e CCP2CON
(endereços 17h e 1Dh)
Bits 3-0 (bit CCPxM3: CCPxM0 – bits de seleção de
modo de operação) – Estes bits selecionam o modo
como operarão os blocos CCP1 e CCP2.
6
MÓDULO CCP MCU & MPU Introdução 0000 = Modos Captura/Comparação/PWM desligados (reseta módulo CCPx )
MÓDULO CCP
MCU & MPU
Introdução
0000 = Modos Captura/Comparação/PWM desligados (reseta módulo
CCPx )
0100
= Modo captura, a cada transição negativa (1 → 0)
0101
= Modo captura, a cada transição positiva (0 → 1)
0110
= Modo captura, a cada 4 transições positivas (1 → 0)
0111 = Modo captura, a cada 16 transições positivas (1 → 0)
1000
= Modo comparação, seta pino de saída (bit CCPxIF é setado)
1001
= Modo comparação, reseta pino de saída (bit CCPxIF é setado)
1010
= Modo comparação, gera interrupção (bit CCPxIF é setado, pino
CCPx não é afetado)
7
MÓDULO CCP MCU & MPU Introdução 1011 = Modo comparação, ativa “Special Event trigger”(bit CCPxIF
MÓDULO CCP
MCU & MPU
Introdução
1011 = Modo comparação, ativa “Special Event trigger”(bit CCPxIF
é setado, pino CCPx não é afetado); CCP1 resseta TMR1; CCP2
resseta TMR1 e inicia uma conversão A/D (se módulo 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: Não usado
Modo Comparação: Não usado
Modo PWM: Dois bits LSB do duty-cycle do sinal PWM. Os oito
MSB’s são gravados no registrador CCPRxL.
8
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C MCU & MPU Módulo de Captura 9
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
MCU & MPU
Módulo de Captura
9
MÓDULO CCP MCU & MPU Captura •   Espera que um evento ocorra em um
MÓDULO CCP
MCU & MPU
Captura
•   Espera que um evento ocorra em um pino específico 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 através de CCPxCON<3:0>
•   Timer1 deve operar no modo temporizador ou contador
síncrono
•   Pinos RC1/CCP2 ou RC2/CCP1 devem ser configurads
como entrada.
10
MÓDULO CCP MCU & MPU Captura •   Quando o evento ocorre, os 16 bits
MÓDULO CCP
MCU & MPU
Captura
•   Quando o evento ocorre, os 16 bits do TMR1
são capturados e colocados em
CCPRxH:CCPRxL.
–  Flag CCPxIF é setado.
–  Ocorrência de novo evento sobrescreve CCPRx.
11
MÓDULO CCP MCU & MPU Captura •   Em quais situações devo usar esse módulo?
MÓDULO CCP
MCU & MPU
Captura
•   Em quais situações devo usar esse
módulo?
–  Situações onde é necessário medir o tempo
percorrido entre dois eventos consecutivos.
•   Exemplo:
–  Acelerômetros: variam o “duty cycle” de uma
onda quadrada proporcionalmente à
aceleração do sistema que está sendo medido.
12
MÓDULO CCP MCU & MPU Captura Exemplo: Para um clock de 4 MHz, com pre-
MÓDULO CCP
MCU & MPU
Captura
Exemplo: Para um clock de 4 MHz, com pre-
escalonador do Timer 1 em 1:1, teremos uma freq. de
operação de 1 MHz, ou cada incremento do Timer 1
ocorrerá a cada 1 us.
Assim, se
após
uma
captura
o
valor
no
par
de
registradores CCPR1L:CCPR1H for igual a 1000 10 ,
significa que o período do sinal aplicado ao pino RC2/
CCP1 é de 1 ms.
13
MÓDULO CCP MCU & MPU Captura Medindo o período de uma onda quadrada 1.  
MÓDULO CCP
MCU & MPU
Captura
Medindo o período 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
T MAX em consideração; portanto. sem
deixar que o mesmo atinja overflow;
3.   Habilite a interrupção de CCP (CCPxIE bit)
14
MÓDULO CCP MCU & MPU Captura Medindo o período de uma onda quadrada 4.  
MÓDULO CCP
MCU & MPU
Captura
Medindo o período de
uma onda quadrada
4.   Quando uma interrupção 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 período
desejado.
15
MÓDULO CCP MCU & MPU Captura Medindo largura de pulsos 1.   Configure os bits
MÓDULO 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 W MAX (largura máxima) sem
permitir que o mesmo atinja overflow;
3.   Habilite a interrupção de CCP (CCPxIE bit).
16
MÓDULO CCP MCU & MPU Captura Medindo largura de pulsos 4.   Quando uma interrupção
MÓDULO CCP
MCU & MPU
Captura
Medindo largura de
pulsos
4.   Quando uma interrupção CCP ocorrer:
a)   Armazene t1;
5.   Configure CCPxCON<3:0> para capturar a cada
evento de borda de descida;
6.   Quando uma interrupção 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
MÓDULO CCP MCU & MPU Captura Medindo o Duty cycle •   Configure os bits
MÓDULO 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 T MAX (período máximo), sem
permitir que o mesmo atinja overflow;
•   Habilite a interrupção de CCP (CCPxIE bit);
18
MÓDULO CCP MCU & MPU Captura Medindo o Duty cycle 4.   Quando uma interrupção
MÓDULO CCP
MCU & MPU
Captura
Medindo o Duty cycle
4.   Quando uma interrupção CCP ocorrer:
a)   Armazene t1;
5.   Configure CCPxCON<3:0> para capturar a
cada evento de borda de descida;
6.   Quando uma interrupção 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
MÓDULO CCP MCU & MPU Captura Medindo o Duty cycle 7.   Configure os bits
MÓDULO 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 (período
máx.), sem permitir que o mesmo atinja overflow;
9.
Habilite a interrupção de CCP (CCPxIE bit);
10.   Quando uma interrupção 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 BÁSICA DE UM PROGRAMA EM LINGUAGEM C MCU & MPU Módulo de Comparação 21
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
MCU & MPU
Módulo de Comparação
21
MÓDULO CCP MCU & MPU Comparação •   Nesse módulo, o valor do registrador CCPRx
MÓDULO CCP
MCU & MPU
Comparação
•   Nesse módulo, o valor do registrador CCPRx é
comparado com o registrador do TMR1;
•   Quando uma coincidência ocorre, o pino RC1/CCP2
ou RC2/CCP1 ficam:
–  Em nível lógico 1;
–  Em nível lógico 0;
–  Fica inalterado;
•   Tudo vai depender da programação de CCPxCON;
•   Pinos RC1 e/ou RC2 devem ser configurados como
saída.
•   CCPxCON configura o nível do pino CCPx;
•   O flag CCPxIF é setado quando a coincidência ocorre,
podendo gerar uma interrupção se habilitada.
22
MÓDULO CCP MCU & MPU Comparação 23
MÓDULO CCP
MCU & MPU
Comparação
23
MÓDULO CCP MCU & MPU Comparação 24
MÓDULO CCP
MCU & MPU
Comparação
24
MÓDULO CCP MCU & MPU Comparação •   Em quais situações devo usar esse módulo?
MÓDULO CCP
MCU & MPU
Comparação
•   Em quais situações devo usar esse módulo?
–  Situações onde é necessário contar de um tempo inicial
(t0) até um determinado tempo t;
–  Esse módulo é útil para gerar ações 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 período;
–  Gerar interrupções ou períodos de amostragem em
intervalos de tempo fixos para RTOS (Real Time Operating
Systems);
–  Gerar interrupções ou períodos de amostragem de um
sinal analógico em intervalos de tempo fixos.
25
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C MCU & MPU Módulo PWM 26
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
MCU & MPU
Módulo PWM
26
MÓDULO CCP MCU & MPU PWM •   Sinal PWM (pulse width modulation) – ciclo
MÓDULO CCP
MCU & MPU
PWM
•  
Sinal PWM (pulse width modulation) – ciclo de trabalho de uma
forma de onda quadrada periódica é alterado.
•  
O módulo CCPx produz um sinal PWM com uma resolução de
até 10 bits.
•  
Um sinal PWM é caracterizado pelo seu período e o ciclo de
trabalho (duty cycle), que corresponde ao tempo em que o sinal
permanece em nível alto.
27
MÓDULO CCP MCU & MPU PWM Quando TMR2 é igual a PR2, os seguintes eventos
MÓDULO 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 não será
setado);
•  
O duty cycle do PWM é copiado
de CCPR1L para CCPR1H.
28
MÓDULO CCP MCU & MPU PWM •   O período do sinal PWM é especificado
MÓDULO CCP
MCU & MPU
PWM
•  
O período do sinal PWM é especificado pelo registrador PR2:
T PWM = (N + 1) • 4 • T OSC • P
•  
O duty cycle do PWM é definido escrevendo no registrador
CCPR1L (bits mais significativos) e nos bits 5 e 4 do registrador
CCP1CON.
•  
Determinação do período de duty-cycle em termos de tempo:
T ON (Duty Cycle do PWM) = M • T OSC • P
Duty cycle (%) = (T ON /T PWM ) • 100
N: valor de PR2
P: valor do prescaler TMR2
M: número decimal correspondente aos 10 bits CCPRxL:CCPxCON<5:4>
29
MÓDULO CCP MCU & MPU PWM •   Passos para ajustar o módulo CCP para
MÓDULO CCP
MCU & MPU
PWM
•   Passos para ajustar o módulo CCP para funcionar no
modo PWM:
•  
•  
•  
•  
•  
Ajustar o período 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 saída;
Configurar o módulo CCP1 ou CCP2 para operação no
modo PWM;
Ajustar o valor do pré-escalonador e habilitar o Timer 2
configurando o registrador T2CON;
30
MÓDULO CCP MCU & MPU PWM •   Em quais situações devo usar esse módulo?
MÓDULO CCP
MCU & MPU
PWM
•   Em quais situações devo usar esse módulo?
–  Situações onde é necessário converter informação
em um canal de comunicação;
–  Situações onde é necessário controlar a potência
(corrente) entregue a uma carga;
•   Exemplos:
–  Controle de um motor de CC (motor DC);
–  Gerar uma saída analógica (Vrms = duty cycle x
Vmax): conversor D/A;
–  Variar a intensidade de luminosidade de um LED;
–  Telecomunicações;
–  Efeitos de áudio.
31
MÓDULO CCP MCU & MPU PWM •   Princípio: variação do duty-cycle com V RMS
MÓDULO CCP
MCU & MPU
PWM
•   Princípio: variação do duty-cycle com
V
RMS .
1
" t 1 + T
v 2 (t ) dt
V rms =
T
t
1
32
MÓDULO CCP MCU & MPU PWM Registradores associados com a operação PWM 33
MÓDULO CCP
MCU & MPU
PWM
Registradores associados com a operação PWM
33
MÓDULO CCP MCU & MPU Exercícios 1) Escreva um programa em assembly para medir o
MÓDULO CCP
MCU & MPU
Exercícios
1) Escreva um programa em assembly para medir o
período 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 período (como um
número binário).
2) Escreva um programa em assembly para gerar uma
forma de onda PWM com 'duty-cycle' de 30% e período
T PWM = 25 us (use P=1 para prescaler). Utilize o
osciloscópio para comprovar o resultado e um clock de
20MHz.
34
MÓDULO CCP MCU & MPU Exercícios 3) Escreva um programa em C do XC8 para
MÓDULO CCP
MCU & MPU
Exercícios
3) Escreva um programa em C do XC8 para gerar um
sinal PWM com T PWM = 25us e duty cycle variável 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 módulo PWM do PIC16F877A para controlar a
intensidade do brilho de um LED. Faça a implementação
em hardware do sistema usando o kit AcePic.
35
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C MCU & MPU Bibliografia 36
ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C
MCU & MPU
Bibliografia
36
BIBLIOGRAFIA MCU & MPU •   PEREIRA, F.,”Microcontroladores PIC – Programação em C“, Érica, 7ª
BIBLIOGRAFIA
MCU & MPU
•  
PEREIRA, F.,”Microcontroladores PIC – Programação em C“, Érica, 7ª ed.,
2009.
•  
Microchip Technology, “MPLAB XC8 C Compiler User’s 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: Técnicas Avançadas – 16F627 e
16F628”, 5a. Ed., Érica, 2008.
•  
Perez, E. V. and Areny, R. P., “Microcontrollers: fundamentals and
applications with PIC”, CRC Press, 2009.
37