Modulo 8

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Modulo 8 as PDF for free.

More details

  • Words: 3,070
  • Pages: 12
PIC: Blocos Timer, Capture/Compare/PWM e Interrupção

OBJETIVOS

• • • •

Compreender a operação dos três timer´s implementados no PIC; Compreender como funciona o bloco Capture/Compare/PWM; Compreender como os timer´s 1 e 2 estão associados com o bloco Capture/Compare/PWM; Utilizar as interrupções dos Timer´s e do bloco Capture/Compare/PWM para identificar eventos/gerar eventos;

TIMER 0 O módulo do Timer 0 possui as seguintes características: • Contador/Timer de 8 bits; • Registrador de contagem de escrita e leitura; • Pré-escalonador (divisor de freqüência) programável; • Utiliza sinal de clock interno ou externo; • Gera interrupção quando a contagem muda de FF para 00; • Permite selecionar o tipo de transição quando usa clock externo (Borda de subida ou descida). O modo de operação do Timer 0 é definido a partir do bit T0CS (bit 5 do Reg. OPTION). No modo timer, o Timer 0 incrementa a cada ciclo de instrução (sem pré-escalonador). Se ocorrer uma escrita no registrador TMR0, o incremento é inibido pelos dois ciclos de instrução seguintes. O modo de contagem é selecionado setando o bit T0CS. No modo de contagem , o Timer 0 incrementará a cada subida ou descida do sinal no pino RA4/TOCKL. A borda é definida pelo bit T0SE (bit 4 do Reg. OPTION). Interrupção do Timer 0 A interrupção TMR0 é gerada quando o registrador TMR0 estoura (overflow), conta de FF para 00. Este overflow seta o bit T0IF (bit 2 do Reg. INTCON). A interrupção pode ser mascarada resetando o bit T0IE (bit 5 do Reg. INTCON). O bit T0IF deve ser apagado por software (na rotina de serviço de interrupção do Timer 0) antes de reabilitar a própria. Pré-escalonador Há um único pré-escalonador que é compartilhado com o WatchDogTimer de forma mutuamente excludente (se o Timer 0 usa o pré-escalonador o WatchDog não pode usar e vice versa). Os bits PSA e PS2:PS0 (bits 3 a 0 do Reg. OPTION) determinam o fator de escalonamento da freqüência do sinal de clock do Timer 0. Quando atribuído ao Timer 0, todas as instruções que escrevem para o registrador TMR0 (CLRF 1, MOVWF 1, BSF 1,x...) apagarão o contador do préescalonador mas não alterarão a sua configuração.

1

Registrador OPTION

Registradores associados ao Timer 0

TIMER 1 O módulo Timer 1 é um timer/contador de 16 bits, dividido em dois registradores de 8 bits (TMR1H e TMR1L), que são de escrita e leitura. O par de registradores (TMR1H e TMR1L) incrementa de 0000h a FFFFh e retorna a 0000h (overflow). A interrupção TMR1, se habilitada, seta o bit de flag TMR1IF (bit 0 do Reg. PIRI) quando ocorre o overflow. Essa interrupção pode ser habilitada/desabilitada setando/resentando, respectivamente, o bit de habilitação de interrupção TMR1IE (bit 0 do Reg. PIE1). O Timer 1 pode operar de dois modos: • Como timer: Neste modo o Timer 1 incrementa a cada ciclo de instrução; • Como contador: Neste modo o Timer 1 incrementa a cada transição do sinal de clock externo. O modo de operação é determinado pelo bit de seleção de clock, TMR1CS (bit 1 do Reg. T1CON).

2

O Timer 1 pode ser habilitado/desabilitado setando/resetando, respectivamente, o bit de controle TMR1ON (bit 0 do registrador). O Timer também possui um reset interno que pode ser gerado pelos módulos “Capture/Compare/PWM - CCP”. Quando o oscilador do Timer 1 está habilitado (T1OSCEN setado), os pinos RC1/T1OSI/CCP2 e RC0/T1OSO/T1CKL tornam-se entradas independente do valor dos bits 1 e 0 do registrador TRIS, que são ignorados. Resetando o Timer 1 usando uma saída de Trigger do módulo CCP Se o módulo CCP1 ou CCP2 (este apenas no PIC 16F877) é configurado no modo de comparação para gerar um “special event trigger” (CCP1M3:CCP1M0 = 1011), esse sinal resetará o Timer 1. Nos casos em que uma escrita coincide com um “special event trigger” de CCP1 ou CCP2, a escrita terá precedência. Nesse modo de operação os registradores CCPRxH:CCPRxL tornam-se os registradores de período do Timer 1. Pré-escalonador do Timer 1 O contador pré-escalonador é apagado quando são escritos valores para os registradores TMR1H e TMR1L. Registrador de controle do Timer 1 – T1CON

3

Registradores associados ao Timer 1 como Timer/Contador

TIMER 2 O Timer 2 é um timer de 8 bits com um pré-escalonador e pós-escalonador. O mesmo pode ser usado como a base de tempo no modo PWM dos módulos CCP. O TMR2 é um registrador de escrita e leitura e é apagado em qualquer evento de reset. A entrada de clock (Fosc/4) possui uma opção de escalonamento de 1:1, 1:4 ou 1:16, selecionada pelos bits de controle T2CKPS1:T2CKPS0 (bits 1 e 0 do Reg. T2CON), que faz com que o sinal de clock do timer 2 seja dividido, respectivamente, por 1, 4 e 16. O módulo do Timer 2 possui um registrador de período de 8 bits PR2, que indica o valor máximo que pode ser atingido pelo TMR2, assim o timer 2 incrementa de 00h até atingir PR2 e então reseta para 00h no ciclo de incremento seguinte. PR2 é um registrador de escrita e leitura e é inicializado com FFh após qualquer RESET. O sinal de saída resultante da comparação do PR2 com o TMR2 passa por um pós-escalonador (escalas de 1:1, 1:4 e 1:16) para gerar a interrupção TMR2 (quando ocorre, o bit 1 (TMR2IF) do Reg. PIR1 é setado), ou seja, quando a interrupção está habilitada a mesma ocorrerá após 1, 2, 3, 4, ..... ou 16 vezes em que o valor do contador do timer 2 (TMR2) atingir o valor gravado no registrador PR2. O Timer 2 pode ser desligado resetando o bit de controle TMR2ON (bit 2 do registrador T2CON). Pré-Escalonador e Pós-Escalonador do Timer 2 Os contadores do pré-escalonador e do pós-escalonador são apagados quando algum dos eventos abaixo ocorre: • Uma escrita para o registrador TMR2; • Uma escrita para o registrador T2CON; • Qualquer reset do dispositivo (POR, MCLR reset, WDT reset ou BOR). O Timer 2 não é apagado quando ocorre uma escrita para registrador de configuração do timer 2 T2CON.

4

Registrador de Controle do Timer 2 – T2CON

Registradores associados com o Timer 2 como timer/contador

Módulo de Captura, Comparação e PWM OS módulos CCP (Captura/Comparação/PWM) são formados por um registrador de 16 bits que pode operar como: • Registrador de captura de 16 bits; • Registrador de comparação de 16 bits • Registrador de “duty cycle” no modo PWM Mestre/Escravo. Ambos os módulos CCP1 e CCP2 (apenas o PIC16F877 possui dois CCPs) são idênticos em operação , com exceção do “special event trigger” Módulo CCP1 O registrador CCP do módulo CCP1 (CCPR1) é formado por dois registradores de 8 bits: CCPR1L (byte menos significativo) e CCPR1H (byte mais significativo). O “special event trigger” é gerado quando o conteúdo deste registrador e o conteúdo do registrador de contagem do Timer 1 são iguais, resetando este último.

5

Módulo CCP2 O registrador CCP do módulo CCP2 (CCPR2) é formado por dois registradores de 8 bits: CCPR2L (byte menos significativo) e CCPR2H (byte mais significativo). O registrador CCP2CON controla a operação do CCP2. Da mesma forma como para o CCP1, o “special event trigger” é gerado quando o conteúdo deste registrador e o conteúdo do registrador de contagem do Timer 1 são iguais, resetando este último. No caso do CCP2, além de resetar o Timer 1, também é iniciada uma conversão A/D. Modo de operação do módulo CCP e recursos de Timer necessários

Interação entre dois módulos CCP

Registradores de Controle CCP1CON e CCP2CON

Modo Captura

6

No modo captura o valor de 16 bits do registrador TMR1 é copiado para os registradores CCPR1H:CCPR1L e/ou CCPR2H:CCPR2L (apenas PIC 16F877), quando um dos eventos ocorre no pino RC2/CCP1 e/ou RC1/CCP2 (PIC16F877) ou no pino RB3/CCP1 (PIC 16F628): • A cada borda de descida do sinal no pino RC2, RC1 (PIC 16F877) ou RB3 (PIC 16F628); • A cada borda de subida do sinal no pino RC2, RC1 (PIC 16F877) ou RB3 (PIC 16F628); • A cada 4 bordas de subida do sinal no pino RC2, RC1 (PIC 16F877) ou RB3 (PIC 16F628); • A cada 16 bordas de subida do sinal no pino RC2, RC1 (PIC 16F877) ou RB3 (PIC 16F628); O tipo de evento é selecionado pelos bits de controle CCP1M3:CCP1M0 (bits de 3 a 0 do Reg. CCP1CON). Quando uma captura é realizada, o flag de requisição de interrupção, bit CCP1IF (bit 2 do Reg. PIR1) é setado. Este bit deve ser apagado por software. Se uma outra captura ocorrer antes que o valor no registrador CCPR1 for lido, o valor anterior será perdido. No modo captura os pinos RC2/CCP1, RC1/CCP2 (PIC 16F877) e RB3/CCP1 (PIC 16F628) devem ser configurados como uma entrada, setando o bit 1 e 2 do registrador TRISC (PIC 16F877) ou o bit 3 do registrador TRISB (PIC 16F628). O Timer 1 deve estar operando no modo timer ou no modo contador com sincronização do sinal de clock externo com o clock interno. Pré-escalonador do módulo CCP Há quatro ajustes do pré-escalonador, especificados pelos bits CCP1M3:CCP1M0. Sempre que o módulo CCP é desligado, ou o módulo CCP não está no modo captura, o contador do préescalonador é apagado. Também, qualquer Reset apagará o pré-escalonador. OBSERVAÇÃO: Se os pinos RC2/CCP1, RC1/CCP2 e RB3/CCP1 são configurados como uma entrada, uma escrita para a porta pode causar uma condição de captura. Modo Comparação No modo comparação o valor do registrador CCPR1 (16 bits) e/ou CCPR2 (16 bits) (apenas para o PIC 16F877) é (são) constantemente comparado(s) com o valor do registrador TMR1. Quando os valores se igualam, o pino RC2/CCP1 e/ou RC1/CCP2 (PIC 16F877) ou o pino RB3/CCP1 (PIC 16F628) é (são): • Ativado; • Desativado • Permanece inalterado A ação no(s) pino(s) é definida pelos bits de controle CCP1M3:CCP1M0 (bits de 3 a 0 do Reg. CCP1CON). Ao mesmo tempo o flag de interrupção é setado, bit CCP1IF, gerando uma interrupção, se habilitada. No modo comparação os pinos RC2/CCP1, RC1/CCP2 e RB3/CCP1 devem ser configurados como saídas, resetando os bits 1 e 2 do registrador TRISC (PIC 16F877) ou o bit 3 do registrador TRISB (PIC 16F628). O Timer 1 deve estar operando no modo timer ou no modo contador com sincronização do sinal de clock externo com o clock interno. No modo de comparação pode ser gerado um “special event trigger”, a partir de um trigger interno. Este evento, no módulo CCP1, reseta o par de registradores que forma o TMR1. No módulo CCP2 (apenas PIC 16F877), a mesma operação é realizada, além de iniciar uma conversão A/D (se o módulo A/D está habilitado).

7

Modo PWM No modo PWM o pino CCPx produz um sinal de PWM com uma resolução de até 10 bits. Como os pinos RC2/CCP1 e RC1/CCP2 são multiplexados com o latch de dados da porta C no PIC 16F877 e o pino RB3/CCP1 é multiplexado com o latch de dados da porta B no PIC 16F628, os bits 1 e 2 de TRISC, PIC 16F877 e bit 3 de TRISB, PIC 16F628, devem ser resetados para tornar os pinos RC2/CCP1, RC1/CCP2 e/ou RB3/CCP1 uma saída. Um sinal PWM é caracterizado pelo seu período e um o “duty cycle”, que corresponde ao tempo em que o sinal permanece em nível alto. O período do sinal PWM é especificado pelo registrador PR2, sendo calculando segundo a fórmula: Período PWM = [(PR2) + 1] • 4 • TOSC • (TMR2 prescale value). Quando TMR2 é igual a PR2, os seguintes eventos ocorrem: • O TMR2 é apagado; • O pino CCP1 é setado (exceto se o duty cycle do PWM = 0%, quando o CCP1 não será setado); • O PWM duty cycle é copiado de CCPR1L para CCPR1H. O duty cycle do PWM é definido escrevendo para o registrador CCPR1L e para os bits 5 e 4 do registrador CCP1CON, onde os 8 bits do registrador CCPR1L representa os 8 bits mais significativos e os bits 5 e 4 de CCP1CON, representam os dois bits menos significativos. A partir da equação abaixo é possível determinar o duty cycle em termos de tempo: Duty Cycle do PWM = (CCPR1L:CCP1CON<5:4>) • Tosc • (TMR2 prescale value) Os valores podem ser copiados para o registrador CCPR1L e para os bits 5 e 4 do registrador CCP1CON em qualquer instante, mas o novo valor do duty cycle só será copiado para o CCPR1H, quando os valores dos registradores PR2 e TMR2 coincidirem (ao fim do período PWM). No modo PWM CCPR1H é um registrador apenas de leitura. Os seguintes passos devem ser seguidos quando ajustando o módulo CCP para funcionar no modo PWM: 1. Ajustar o período do sinal PWM, escrevendo um valor adequado no registrador PR2; 2. 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; 3. Configurar o pino RC2/CCP1, RC1/CCP2 (PIC 16F877) ou RB3/CCP1 (PIC 16F628) como uma saída (resetar o bit 1 e/ou 2 do reg. TRISC, PIC 16F877 ou o bit 3 do reg. TRISB, PIC 16F628); 4. Ajustar o valor do pré-escalonador e habilitar o Timer 2 configurando o registrador T2CON; 5. Configurar o módulo CCP1 e/ou CCP2 (apenas PIC 16F877) para operação no modo PWM; Registradores associados com o PWM e Timer 2

8

9

Registradores associados com o Capture, Compare e Timer 1

PREPARAÇÃO

1. Descreva a operação realizada por cada uma das funções abaixo e também o que representa cada opção dos parâmetros da função em termos do funcionamento do bloco ao qual a função está associada: SETUP_TIMER_0 (mode) mode: RTCC_INTERNAL, RTCC_EXT_L_TO_H or RTCC_EXT_H_TO_L RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32, RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256 SETUP_TIMER_1 (mode) mode: T1_DISABLED, T1_INTERNAL, T1_EXTERNAL, T1_EXTERNAL_SYNC T1_CLK_OUT T1_DIV_BY_1, T1_DIV_BY_2, T1_DIV_BY_4, T1_DIV_BY_8 Constantes de grupos diferentes podem ser associadas usando o operador “OR” - |. SETUP_TIMER_2 (mode, period, postscale) mode: T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16 period: É um inteiro entre 0 e 255 que determina quando o valor do contador do Timer 2 é zerado; postscale: É um número entre 1 e 16 que determina quantos resetes do contador do Timer 2 devem ocorrer para que uma interrupção seja ativada (1 indica um resete, 2 indica dois resetes). SET_TIMERx (value) GET_TIMERx ( ) SETUP_CCPx (mode)

10

mode: É uma constante. Valores válidos para “mode” são: Desabilita o bloco CCP: CCP_OFF Configura o bloco CCP para o modo captura: CCP_CAPTURE_FE - Capture on falling edge CCP_CAPTURE_RE - Capture on rising edge CCP_CAPTURE_DIV_4 - Capture after 4 pulses CCP_CAPTURE_DIV_16 - Capture after 16 pulses Configura o bloco CCP para o modo comparação: CCP_COMPARE_SET_ON_MATCH CCP_COMPARE_CLR_ON_MATCH CCP_COMPARE_INT CCP_COMPARE_RESET_TIMER

Configura o bloco CCP para o modo PWM CCP_PWM

SET_PWMx_DUTY (value) SETUP_WDT (mode) mode: DT_18MS, WDT_36MS, WDT_72MS, WDT_144MS,WDT_288MS, WDT_576MS, WDT_1152MS, WDT_2304MS RESTART_WDT ( ) DISABLE_INTERRUPTS (level) ENABLE_INTERRUPTS (level) level: GLOBAL, INT_RTCC, INT_RB, INT_EXT, INT_AD, INT_TBE, INT_RDA, INT_TIMER1, INT_TIMER2, INT_CCP1, INT_CCP2, INT_SSP, INT_PSP, INT_BUSCOL, INT_EEPROM, INT_TIMER0

2. Determine o valor do byte a ser gravado no registrador PR2, para fazer o módulo CCP1 gerar um sinal PWM, com um período de 512µs e o valor do “duty cycle”, para gerar um pulso alto de 128µs, sabendo que: Fosc=4MHz. 3. Elabore uma rotina em C que habilite as interrupções dos Timers 0, 1 e 2 a cada 65,5ms, 524ms e 65,5ms, respectivamente. Em cada rotina faça o que é pedido abaixo: Interrupção do Timer0 – A cada 8 entradas na rotina de interrupção do Timer0 o estado do pino B0 deve ser trocado (0→1) e (1→0); Interrupção do Timer1 – A cada 2 entradas na rotina de interrupção do Timer1 o estado do pino B1 deve ser trocado (0→1) e (1→0); Interrupção do Timer2 – A cada 4 entradas na rotina de interrupção do Timer2 o estado do pino B2 deve ser trocado (0→1) e (1→0); 4. Elabore uma rotina em C que habilite a interrupção de captura do bloco CCP1. Na rotina da interrupção de captura incremente um contador (uma variável int) e escreva o valor dessa variável nos 8 bits da porta D. Utilize um botão da placa para ativar a interrupção de captura. 5. Elabore uma rotina em C que habilite a interrupção de comparação do bloco CCP2. Na rotina da interrupção de comparação incremente um contador (uma variável LONG) e use o valor do contador para atualizar o conteúdo do registrador CCPR2. O registrador CCPR2 é acessado através da variável CCP_2, definida no arquivo 16F877A.h. Defina uma variável do tipo “BIT” e faça com que o estado dela fique sendo trocado a cada vez que a interrupção de comparação for executada. O valor dessa variável deve ativar um LED. Use o pino B0 para isso.

11

OBS: O arquivo “regs_16.h”, pode ser encontrado “http://www.dee.ufcg.edu.br/~aco/Lab_Arquitetura/Regs_PIC.zip”

no

endereço

6. Elabore uma rotina em C que ative o Watchdog e o configure para resetar o sistema a cada 2304ms. O programa deve habilitar as interrupções de captura do bloco CCP1 e do timer 2, esta última com uma periodicidade de 65,5ms. Nas rotinas de interrupção implemente as operações abaixo: Interrupção de captura – A interrupção de captura será ativada por um botão da placa e nela deve ser implementado o reset do watchdog de modo a evitar que o mesmo resete o sistema; Interrupção do Timer 2 – Incremente uma variável do tipo INT e escreva seu valor nos 8 bits da porta D. 7. Elabore uma rotina em C que habilite o modo PWM do bloco CCP1 e gere um sinal PWM com as características descritas no item 2 da preparação. OBS: A freqüência do clock interno do Timer 0, 1 e 2 é igual à freqüência do oscilador que aciona o PIC, 4MHz, dividida por 4. Labels definidos nos arquivos device.h PIN_A0, PIN_A1, PIN_A2, PIN_A3, PIN_A4, PIN_A5 – Acesso aos pinos da porta A; PIN_B0, PIN_B1, PIN_B2, PIN_B3, PIN_B4, PIN_B5, PIN_B6, PIN_B7 – Acesso aos pinos da porta B; PIN_C0, PIN_C1, PIN_C2, PIN_C3, PIN_C4, PIN_C5, PIN_C6, PIN_C7 – Acesso aos pinos da porta C; PIN_D0, PIN_D1, PIN_D2, PIN_D3, PIN_D4, PIN_D5, PIN_D6, PIN_D7 – Acesso aos pinos da porta D; PIN_E0, PIN_E1, PIN_E2 – Acesso aos pinos da porta E; CCP_1 - Acessa o registrador CCP1 (todos os 16 bits); CCP_1_LOW – Acessa os 8 bits menos significativos do registrador CCP1; CCP_1_HIGH – Acessa os 8 bits mais significativos do registrador CCP1; CCP_2 - Acessa o registrador CCP2 (todos os 16 bits); CCP_2_LOW – Acessa os 8 bits menos significativos do registrador CCP2; CCP_2_HIGH – Acessa os 8 bits mais significativos do registrador CCP2;

12

Related Documents

Modulo 8
June 2020 11
Modulo 8
June 2020 20
Modulo 8
June 2020 10
Modulo-8.-af.docx
May 2020 5
Modulo 8-2009
June 2020 9