Altana Tubes > Blog > PIC16F627A/628A/648A > Módulo CCP

9.0 Módulo de Captura/Comparação/PWM (CCP) dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A

Tradução: Maria Elisa - Assessoria em Inglês e Alemão 

Revisão: Renato Kodaira

O módulo CCP (Capture/Compare/PWM = Captura/Comparação/Modulação por Largura de Pulso) dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A contém um registrador de 16 bits que pode operar como um registrador de Captura de 16 bits, como um registrador de Comparação de 16 bits, ou como um como um registrador de Ciclo de Trabalho (Duty Cycle) mestre/escravo da PWM. A Tabela 9.1 apresenta os recursos de temporizador dos modos do módulo CCP.

Módulo CCP1

O Register1 de Captura/Comparação/PWM (CCPR1) é composto de dois registradores de 8 bits: CCPR1L (byte baixo) e CCPR1H (byte alto). O registrador CCP1CON controla a operação do CCP1. Todos são acessíveis para leitura e escrita.

Informações adicionais sobre o módulo CCP estão disponíveis no "Manual de Referência da Família de MCUs de Média Ordem PIC®" (DS33023).

TABELA 9.1: MODOS CCP - RECURSOS DE TEMPORIZADOR

Modo CCP Recurso de Temporizador
Captura Timer1
Comparação Timer1
PWM Timer2

REGISTRADOR 9.1: CCP1CON - REGISTRADOR DE OPERAÇÃO DO CCP (ENDEREÇO:17h)

 
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
--- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
bit 7             bit 0
bit 7-6
 
Não Implementados: Lidos como '0'
 
bit 5-4 CCP1X:CCP1Y: Bits Menos Significativos da PWM
  Modo Captura
  Não utilizado
  Modo Comparação
  Não utilizado
  Modo PWM
  Estes bits são os dois LSbs (bits menos significativos) do ciclo de trabalho da PWM. Os oito MSbs (bits mais significativos) encontram-se no CCPRxL.
 
bit 3-0 CCP1M<3:0>: Bits de Seleção do Modo CCPx
  0000 = Captura/Comparação/PWM desligado(reinicializa o módulo CCP1)
  0100 = modo Captura, a cada borda de descida
  0101 = modo Captura, a cada borda de subida
  0110 = modo Captura, a cada 4ª borda de subida
  0111 = modo Captura, a cada 16ª borda de subida
  1000 = modo Comparação, ativa a saída no match (equivalência) (o bit CCP1IF é ativado)
  1001 = modo Comparação, apaga a saída na equivalência (o bit CCP1IF é ativado)
  1010 = modo Comparação, gera interrupção do software na equivalência (o bit CCP1IF é ativado, o pino CCP1 não é afetado)
  1011 = modo Comparação, dispara evento especial (o bit CCP1IF é ativado; o CCP1 reinicializa o TMR1)
  11xx = Modo PWM

 
  Legenda:
R = bit de leitura
W = bit de escrita
U = bit não implementado (unimplemented), lido como '0'
-n = valor na POR
'1' = bit está ativado
'0' = bit está apagado
x = bit é desconhecido

9.1 Modo Captura

No modo Captura, o CCPR1H:CCPR1L captura o valor de 16 bits do registrador TMR1 quando um evento ocorre no pino RB3/CCP1. Um evento é definido como:

  • Cada borda de descida
  • Cada borda de subida
  • Cada 4ª borda de subida
  • Cada 16ª borda de subida

Um evento é selecionado pelos bits de controle CCP1M<3:0> (CCP1CON<3:0>). Quando uma captura é realizada, o bit sinalizador de solicitação de interrupção CCP1IF (PIR<2>) é ativado. Ele deve ser apagado pelo software. Se uma outra captura ocorre antes da leitura do valor no registrador CCPR1, o valor previamente capturado será perdido.

9.1.1 CONFIGURAÇÃO DO PINO CCP

No modo Captura, o pino RB3/CCP1 deve ser configurado como saída ativando-se o bit TRISB<3>.

Nota:
Se o RB3/CCP1 estiver configurado como saída, uma escrita na porta pode causar uma condição de captura.

FIGURA 9.1: DIAGRAMA DE BLOCOS DA OPERAÇÃO NO MODO CAPTURA

9.1.2 SELEÇÃO DO MODO DO TIMER1

O Timer1 deve estar operando no modo Temporizador ou no modo Contador Sincronizado para que o módulo CCP utilize a propriedade de captura. No modo Contador Assíncrono, a operação de captura pode não funcionar.

9.1.3 INTERRUPÇÃO DO SOFTWARE

Quando o modo Captura é alterado, uma falsa interrupção da captura pode ser gerada. O usuário deve manter o bit CCP1IE (PIE<2>) apagado a fim de evitar falsas interrupções, e deve apagar o bit sinalizador CCP1IF depois de qualquer alteração deste tipo no modo de Operação.

9.1.4 PRÉ-SCALER DO CCP

Existem quatro configurações do pré-scaler, especificadas pelos bits CCP1M<3:0>. Sempre que o módulo CCP estiver desligado, ou não estiver no modo Captura, o contador do pré-scaler é apagado. Isto significa que qualquer reinicialização apagará o contador do pré-scaler.

A troca de um pré-scaler de captura para outro pode gerar uma interrupção. Além disso, o contador do pré-scaler não será apagado, e portanto a primeira captura deve ser de um pré-scaler com valor diferente de zero. O Exemplo 9.1 apresenta o método recomendado para a troca de pré-scaler de captura. Este método também apaga o contador do pré-scaler de forma a não gerar a "falsa" interrupção.

EXEMPLO 9.1: TROCA DE PRÉ-SCALER DE CAPTURA


  CLRF CCP1CON         ;Desativa o módulo CCP
  MOVLW NEW_CAPT_PS    ;Carrega no registrador W o novo valor  
                       ;e modo do pré-scaler e ativa o CCP 
  MOVWF CCP1CON        ;Carrega o novo valor em CCP1CON 
   

9.2 Modo Comparação

No modo Comparação, o valor do registrador de 16 bits CCPR1 é constantemente comparado com o valor do par de registradores TMR1. Quando ocorre uma equivalência (match), o pino RB3/CCP1 é:

  • Conduzido ao nível alto
  • Conduzido ao nível baixo
  • Mantido sem alteração

A ação no pino é baseada no valor dos bits de controle CCP1M<3:0> (CCP1CON<3:0>). Ao mesmo tempo, o bit de sinalização de interrupção CCP1IF é ativado.

FIGURA 9.2: DIAGRAMA DE BLOCOS DA OPERAÇÃO NO MODO COMPARAÇÃO

9.2.1 CONFIGURAÇÃO DE PINOS DO CCP

O usuário deve configurar o pino RB3/CCP1 como saída, apagando o bit TRISB<3>.

Nota:
Ao se apagar o registrador CCP1CON, a latch de saída de comparação do RB3/CCP1 será forçada ao nível padrão, baixo. Esta não é a latch de dados.

9.2.2 SELEÇÃO DO MODO DO TIMER1

O Timer1 deve estar operando no modo Temporizador ou no modo Contador Sincronizado se o módulo CCP estiver utilizando a propriedade de comparação. No modo Contador Assíncrono, a operação de comparação pode não funcionar.

9.2.3 MODO DE INTERRUPÇÃO DO SOFTWARE

Quando se opta pela geração de uma interrupção do software, o pino CCP1 não é afetado. É gerada somente uma interrupção do CCP (se habilitada).

9.2.4 TRIGGER DE EVENTO ESPECIAL

Neste Modo (CCPM<3:0>=1001), é gerado um trigger (disparador) interno do hardware, o qual pode ser utilizado para iniciar uma ação. Veja o Registrador 9.1.

A saída do disparador de evento especial do CCP ocorre imediatamente no caso de um match (equivalência) entre o par de registradores TMR1H, TMR1L e o par de registradores CCPR1H, CCPR1L. O par de registradores TMR1H, TMR1L não é reinicializado até a próxima borda de subida do clock TMR1. Isso permite que o par de registradores CCPR1 seja efetivamente um registrador de período de 16 bits programável para o Timer1. A saída do disparador de evento especial também inicia uma conversão A/D, tendo em vista que o módulo A/D está habilitado.

Nota:
A remoção da condição de match através da troca do conteúdo do par de registradores CCPR1H, CCPR1L entre a borda do clock que gera o disparador de evento especial e a borda do clock que gera a Reinicialização do TMR1 impedirá a ocorrência da reinicialização.

TABELA 9.2: REGISTRADORES ASSOCIADOS À CAPTURA, COMPARAÇÃO E TIMER1

Endereço Nome Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor na POR Valor em Todas as Outras Reinicializações
0Bh, 8Bh, 10Bh, 18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 EEIF CMIF RCIF TXIF --- CCP1IF TMR2IF TMR1IF 0000 -000 0000 -000
8Ch PIE1 EEIE CMIE RCIE TXIE --- CCP1IE TMR2IE TMR1IE 0000 -000 0000 -000
86h, 186h TRISB Registrador de Direcionamento de Dados da PORTB 1111 1111 1111 1111
0Eh TMR1L Holding Register para o Byte Menos Significativo do Registrador de 16 bits TMR1 xxxx xxxx uuuu uuuu
0Fh TMR1H Holding Register para o Byte Mais Significativo do Registrador de 16 bits TMR1 xxxx xxxx uuuu uuuu
10h T1CON --- --- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu
15h CCPR1L Register1 de Captura/ Comparação/ PWM (LSB) xxxx xxxx uuuu uuuu
16h CCPR1H Register1 de Captura/ Comparação/ PWM (MSB) xxxx xxxx uuuu uuuu
17h CCP1CON --- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

Legenda:
x = desconhecido
u = inalterado
- = não implementado, lido como '0'
células sombreadas = não utilizadas pela Captura e Timer1

9.3 Modo PWM

No modo Modulação por Largura de Pulso (Pulse Width Modulation = PWM), o pino CCP1 produz uma saída de PWM com resolução de até 10 bits. Como o pino CCP1 é multiplexado com a latch de dados da PORTB, o bit TRISB<3> deve ser apagadp para tornar o pino CCP1 uma saída.

Nota:Ao se apagar o registrador CCP1CON, a latch de saída de PWM do CCP1 será forçada ao nível padrão, baixo. Esta não é a latch de dados de I/O da PORTB.

A Figura 9.3 apresenta um diagrama de blocos simplificado do módulo CCP no modo PWM.

Para o passo-a-passo do procedimento de configuração do módulo CCP para uma operação da PWM, veja a Seção 9.3.3 "Configuração para a Operação da PWM".

FIGURA 9.3: DIAGRAMA DE BLOCOS SIMPLIFICADO DA PWM

Uma saída de PWM (Figura 9.4) tem uma base de tempo (período) e um tempo em que a saída permanece alta (duty cycle = ciclo de trabalho). A frequência da PWM é o inverso do período (frequência = 1/período).

 

FIGURA 9.4: SAÍDA DE PWM

9.3.1 PERÍODO DA PWM

O período da PWM é especificado através da escrita no registrador PR2. O período da PWM pode ser calculado utilizando-se a seguinte fórmula:

A frequência da PWM é definida como 1/[período da PWM].

Quando o TMR2 é igual ao PR2, os três eventos seguintes ocorrem no ciclo de incrementação seguinte:

  • O TMR2 é apagado
  • O pino CCP1 é ativado (exceção: se o ciclo de trabalho da PWM = 0%, o pino CCP1 não será ativado)
  • O ciclo de trabalho da PWM é transferido do CCPR1L para o CCPR1H
Nota:O pós-scaler do Timer2 (veja a Seção 8.0 "Módulo Timer2") não é utilizado na determinação da frequência da PWM. O pós-scaler poderia ser utilizado para se obter uma taxa de atualização do servo em uma frequência diferente daquela da saída de PWM.

9.3.2 DUTY CYCLE DA PWM

O duty cycle (ciclo de trabalho) da PWM é especificado através da escrita no registrador CCPR1L e nos bits CCP1CON<5:4>.Uma resolução de até 10 bits está disponível: o CCPR1L contém os 8 MSbs (Most Significant bits = bits mais significativos) e o CCP1CON<5:4> contém os 8 LSbs (Least Significant bits = bits menos significativos). Este valor de 10 bits é representado pelos CCPR1L:CCP1CON<5:4>.A seguinte equação é utilizada para calcular o ciclo de trabalho da PWM em unidade de tempo:

O CCPR1L e os CCPRCON<5:4> podem receber operações de escrita a qualquer tempo, mas o ciclo de trabalho não é armazenado no CCPR1H até que ocorra um match (equivalência) entre o PR2 e o TMR2 (i.e., que o período seja completado). No modo PWM, o registrador CCPR1H é acessivel somente para leitura.

O registrador CCPR1H e uma latch interna de 2 bits são utilizados para o armazenamento temporário duplo do ciclo de trabalho da PWM. Este armazenamento temporário duplo é essencial para a ausência de falhas na operação de PWM.

Quando ocorre a equivalência entre CCPR1H e a latch de 2 bits, e TMR2, concatenado com 2 bits do clock Q interno ou 2 bits do pré-scaler do TMR2, o pino CCP1 é apagado.

Resolução máxima da PWM (em bits) para uma dada frequência da PWM:

Nota: Se o valor do ciclo de trabalho da PWM for mais longo do que o período da PWM, o pino CCP1 não será apagado.

Para um exemplo de cálculo de período e ciclo de trabalho da PWM, consulte o "Manual de Referência da Família de MCUs de Média Ordem PIC®" (DS33023).
 

9.3.3 CONFIGURAÇÃO PARA UMA OPERAÇÃO DE PWM

Os seguintes passos devem ser seguidos ao se configurar o módulo CCP para a operação de PWM:

  1. Ativar o período da PWM através da escrita no registrador PR2.
  2. Ativar o ciclo de trabalho da PWM através da escrita no registrador CCPR1L e nos bits CCP1CON<5:4>.
  3. Tornar o pino CCP1 uma saída apagando-se o bit TRISB<3>.
  4. Ajustar o valor da pré-escala do TMR2 e habilitar o Timer2 através da escrita no T2CON.

TABELA 9.3: EXEMPLOS DE FREQUÊNCIAS E RESOLUÇÕES EM 20 MHz

Frequência da PWM 1,22 kHz 4,88 kHz 19,53 kHz 78,12 kHz 156,3 kHz 208,3 kHz
Pré-scaler do Timer (1,4,16) 16 4 1 1 1 1
Valor do PR2 0xFF 0xFF 0xFF 0x3F 0x1F 0x17
Resolução Máxima (bits) 10 10 10 8 7 6,5

TABELA 9.4: REGISTRADORES ASSOCIADOS À PWM E AO TIMER2

Endereço Nome Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor na POR Valor em Todas as Outras Reinicializações
0Bh, 8Bh, 10Bh, 18Bh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 EEIF CMIF RCIF TXIF --- CCP1IF TMR2IF TMR1IF 0000 -000 0000 -000
8Ch PIE1 EEIE CMIE RCIE TXIE --- CCP1IE TMR2IE TMR1IE 0000 -000 0000 -000
86h, 186h TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 1111 1111
11h TMR2 Registrador do Módulo Timer2 0000 0000 0000 0000
92h PR2 Registrador de Período do Módulo Timer2 1111 1111 1111 1111
12h T2CON --- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 uuuu uuuu
15h CCPR1L Register1 de Captura/ Comparação/ PWM (LSB) xxxx xxxx uuuu uuuu
16h CCPR1H Register1 de Captura/ Comparação/ PWM (MSB) xxxx xxxx uuuu uuuu
17h CCP1CON --- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

Legenda:
x = desconhecido
u = inalterado
- = não implementado, lido como '0'
células sombreadas = não utilizadas pela Captura e Timer2

<-Anterior Índice Próximo->