37
Prof. Rodrigo Ramos Módulo CCP Microcontroladores & Microprocessadores

Modulo CCP

Embed Size (px)

DESCRIPTION

CCP

Citation preview

Page 1: Modulo CCP

Prof. Rodrigo Ramos

Módulo CCP

Microcontroladores & Microprocessadores

Page 2: Modulo CCP

MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C

2

Módulo CCP (Capture/Compare/PWM)

Page 3: Modulo 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

MÓDULO CCP

3

Page 4: Modulo 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.

MÓDULO CCP

4

Page 5: Modulo CCP

MCU & MPU

Introdução

•  CCPxCON: Registrador de controle de operação

•  Recursos de Temporizadores:

MÓDULO CCP

5

Page 6: Modulo CCP

MCU & MPU

Introdução

MÓDULO CCP

6

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.

Page 7: Modulo CCP

MCU & MPU

Introdução

MÓDULO CCP

7

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)

Page 8: Modulo CCP

MCU & MPU

Introdução

MÓDULO CCP

8

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.

Page 9: Modulo CCP

MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C

9

Módulo de Captura

Page 10: Modulo 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.

MÓDULO CCP

10

Page 11: Modulo 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.

MÓDULO CCP

11

Page 12: Modulo CCP

MCU & MPU

Captura

MÓDULO CCP

12

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

Page 13: Modulo CCP

MCU & MPU

Captura

MÓDULO CCP

13

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 100010, significa que o período do sinal aplicado ao pino RC2/CCP1 é de 1 ms.

Page 14: Modulo CCP

MCU & MPU

Captura

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 consideração; portanto. sem deixar que o mesmo atinja overflow;

3.   Habilite a interrupção de CCP (CCPxIE bit)

MÓDULO CCP

14

Medindo o período de uma onda quadrada

Page 15: Modulo CCP

MCU & MPU

Captura

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.

MÓDULO CCP

15

Medindo o período de uma onda quadrada

Page 16: Modulo CCP

MCU & MPU

Captura

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 máxima) sem permitir que o mesmo atinja overflow;

3.   Habilite a interrupção de CCP (CCPxIE bit).

MÓDULO CCP

16

Medindo largura de pulsos

Page 17: Modulo CCP

MCU & MPU

Captura

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.

MÓDULO CCP

17

Medindo largura de pulsos

Page 18: Modulo CCP

MCU & MPU

Captura

•  Configure os bits de controle CCPxCON<3:0> para capturar a cada evento de borda de subida;

•  Configure o prescaler do TMR1 considerando TMAX (período máximo), sem permitir que o mesmo atinja overflow;

•  Habilite a interrupção de CCP (CCPxIE bit);

MÓDULO CCP

18

Medindo o Duty cycle

Page 19: Modulo CCP

MCU & MPU

Captura

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.

MÓDULO CCP

19

Medindo o Duty cycle

Page 20: Modulo CCP

MCU & MPU

Captura

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

MÓDULO CCP

20

Medindo o Duty cycle

Page 21: Modulo CCP

MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C

21

Módulo de Comparação

Page 22: Modulo 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.

MÓDULO CCP

22

Page 23: Modulo CCP

MCU & MPU

Comparação

MÓDULO CCP

23

Page 24: Modulo CCP

MCU & MPU

Comparação

MÓDULO CCP

24

Page 25: Modulo 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.

MÓDULO CCP

25

Page 26: Modulo CCP

MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C

26

Módulo PWM

Page 27: Modulo CCP

MCU & MPU

PWM

MÓDULO CCP

27

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

Page 28: Modulo CCP

MCU & MPU

PWM

MÓDULO CCP

28

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.

Page 29: Modulo CCP

MCU & MPU

PWM

MÓDULO CCP

29

•  O período 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.

•  Determinação do período 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: número decimal correspondente aos 10 bits CCPRxL:CCPxCON<5:4>

Page 30: Modulo CCP

MCU & MPU

PWM

MÓDULO CCP

30

•  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;

Page 31: Modulo 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.

MÓDULO CCP

31

Page 32: Modulo CCP

MCU & MPU

PWM

•  Princípio: variação do duty-cycle com VRMS.

MÓDULO CCP

32

!

Vrms =1T

v 2 (t)dtt1

t1 +T"

Page 33: Modulo CCP

MCU & MPU

PWM

MÓDULO CCP

33

Registradores associados com a operação PWM

Page 34: Modulo CCP

MCU & MPU

Exercícios

MÓDULO CCP

34

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 TPWM = 25 us (use P=1 para prescaler). Utilize o osciloscópio para comprovar o resultado e um clock de 20MHz.

Page 35: Modulo CCP

MCU & MPU

Exercícios

MÓDULO CCP

35

3) Escreva um programa em C do XC8 para gerar um sinal PWM com TPWM = 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.

Page 36: Modulo CCP

MCU & MPU ESTRUTURA BÁSICA DE UM PROGRAMA EM LINGUAGEM C

36

Bibliografia

Page 37: Modulo CCP

MCU & MPU BIBLIOGRAFIA

37

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