timers em microcontroladores
TRANSCRIPT
Timers em Microcontroladores PIC16F877A.
Alunos: Anderson Rocha, João de Deus, Ycaro Felipe.
Roteiro
• Introdução• Timers.• Timers do PIC 16F877A.• Conclusões.• Referências.
Introdução
• Todo microcontrolador possui um clock implementado por um cristal oscilador que sincroniza todo seu funcionamento.
• Os timers utilizam o clock do microcontrolador para implementar contagens e medição de tempo.
• A contagem pode ser utilizada em diversas aplicações, como contagem de tempo, controle de amostragem de dados analógicos entre outros.
Timers
• Segundo (Assef, 2006) “São contadores digitais assíncronos, que para funcionar precisam receber pulsos de clock”.
• Timers são estruturas presentes em micro controladores que possibilitam descrever tempo em função de ciclos de clock.
• Podem funcionar na mesma frequência do ciclo de clock da instrução do microcontrolador, e utilizar um divisor de frequência programável chamado prescaller.
• Os contadores além realizar contagem podem também ser usados como divisores de frequência.
• Os PICs possuem duas fontes primárias de clock: (1) clock interno fosc/4 ou (2) clock externo diretamente ligado no pino do timer, cuja posição varia de acordo com o PIC utilizado.
• Os PICs possuem basicamente tres timers: TIMER0, TIMER1,TIMER2.
• Diagrama do TIMER0 do PIC:
• O bit de configuração T0CS seleciona o clock, bit T0SE seleciona borda de descida ou subida.
Timers do PIC 16F877A.
Timer0
• Características:– Contador/Temporizador de 8 bits.– Prescaler de 8 bits programado via software.– Seleção de clock interno/externo.– Interrupção no estouro de 00h ate ffh.– Seleção de borda para o clock (Descida/Subida).– Utiliza o pino RA4 como entrada para o clock
externo.
• Para utilizar o timer0 deve-se configurar o registrador OPTION_REG.
• O modo timer é selecionado zerando o bit TOSC, OPTION_REG<5>, onde nesse modo o timer será incrementado a cada ciclo de clock.
• O modo contador é selecionado setando o bit TOSC em ‘1’, onde nesse modo o TIMER0 será incrementado a cada subida/descida do clock na porta RA4/T0CKI.
• Para determinar a borda de incremento do contador, é preciso configurar o bit T0SE OPTION_REG<4>, onde setando-o como ‘0’ seleciona incremento na borda de descida do clock, setando ‘1’, borda de subida.
• Interrupções no timer0 ocorrem quando acontece um overflow na contagem (podendo variar de 0 até 255), este overflow seta o bit TMR0IF no registrador INTCON<2>, onde caso o bit TMR0IE esteja habilitado em INTCON<5>, ocorre a interrupção, podendo ser desabilitada zerando este bit.
• Para que uma nova interrupção ocorra o bit TMR0IF deve ser zerado ao final da rotina de interrupção.
• As vezes para permitir realizar maiores contagens, e dividir a frequência do clock, utiliza-se a estrutura prescaler.
• O prescaler é compartilhado pelo timer0 e pelo watchdog, logo é preciso zerar o bit PSA em OPTION_REG<3>, para ele ser usado pelo timer.
• Além de definir o prescaler para ser utilizado pelo timer0, ainda é necessário configurar a divisão a ser realizada, como há três bits (OPTION_REG<2:0>) logo possuímos 8 opções para divisão do clock.
Timer1
• O módulo temporizador/contador timer1, possui as seguintes características:– Contador/temporizador de 16 bits, consistindo de
2 registradores (TMR1H e TMR1L).– Possui prescaler programável via software.– Permite selecionar clock interno(4Mhz) ou
externo.– A interrupção ocorre no estouro do intervalo de
0000h até ffffh (0 a 65535).
• Pode ser operado de dois modos: Como contador, ou como temporizador. Para isso caso seja setado o bit TMR1CS(T1CON<1>) ele funcionará como timer e incrementará a cada ciclo de clock, caso contrário ele será um contador e contará a cada subida/descida do clock.
• O timer1 pode ser habilitado ou desabilitado setando/zerando o bit de controle TMR1ON (T1CON<0>).
• A interrupção para o timer1 ocorre quando acontece o overflow, e o bit flag da interrupção é setado TMR1IF (PIR<1>)=‘1’, esta interrupção pode ser habilitada/desabilitada setando/zerando o bit TMR1. Caso necessite repetir, ou realizar várias vezes a contagem, o flag TMR1IF deve ser resetado no código.
Prescaler Divisor de frequência.
• Assim como para o Timer0, podemos utilizar o prescaler do Timer1 para realizar divisões de frequência do sistema de clock.
• Em:<http://www.microcontrollerboard.com/pic-timer1-tutorial.html>. Acesso em: 28 de Maio 2012.), O tamanho do registrador do prescaler do timer1 é de 2 bits, logo só podem ser realizadas 4 divisões: 1:1, 1:2,1:4,1:8.
Estrutura do Registrador T1CON
Calculo dos valores de Count, fout, e Timer1.
• Caso esteja utilizando o oscilador interno como clock:
• Fout – Frequencia de saída depois da divisão.• Tout – Ciclo de tempo depois da divisão.• 4 – Divisão original do clock(4Mhz) por 4, isso quando se
está utilizando o clock interno.• (65536-TMR1) – Numero de vezes que o timer irá contar
baseado no registrador TMR1.
• Supondo que queiramos contar 2 segundos, qual o valor do count precisamos estabelecer? Supondo-se prescaler 1:1, e TMR1 = 0.
Timer2
• Características:
– Possui dois registradores de 2 bits (TMR2 e PR2).– Possui um prescaler e um postscaler.– Conecta somente ao clock interno – 4Mhz.– Sua interrupção ocorre ao acontecer um overflow.
• O registrador TMR2 é usado o valor inicial da contagem. (valor do qual a contagem é iniciada).
• O registrador PR2 é usado para armazenar o valor final da contagem. (valor máximo que nós precisamos chegar)
• Usando o timer2 podemos determinar o valor do count inicial, o valor do count final, e a contagem será entre esses dois valores.
• O timer2 incrementa de 00h até ser comparado com PR2, e então é resetado para 00h no próximo ciclo de clock
Prescaler e Postcaler
• O timer2 é um timer de 8 bits que possui um prescaler, e um postcaler.
• Cada um permite fazer uma divisão adicional do clock da fonte.
• Prescaler - Divide a frequência antes da contagem ser realizada no TMR2.
• A saída da comparação de TMR2 atravessa um postcaler de 4-bits para gerar uma interrupção TMR2.
• Postcaler – Divide a frequência que sai do comparador pela última vez.
Representação do Prescaler e Poscaler.
Registrador de Controle do Timer2
• A clock de entrada (FOSC/4) tem opção de prescaler de: 1:1, 1:4, 1:16, selecionado pelos bits de controle T2CKPS1:T2CKPS0 (T2CON<1:0>).– 00 = Prescaler 1– 01=Prescaler 4– 1x = Prescaler 16
TMR2ON bit de ativação do timer
• O timer2 pode ser desligado zerando o bit de controle TMR2ON (T2CON<2>), para minimizar o consumo de energia. – 1 = Timer2 ligado.– 0 = Timer2 desligado.
TOUTPS3:TOUTPS0 -Selecionando saída do postcale.
• A saída da comparação de TMR2 passa por um postcaler de 4 bits (que é dado de 1:1 até 1:16), selecionado pelos bits de controle TOUTPS3:TOUTPS0 (T2CON<6:3>).
– 0000 = 1:1 postscale
– 0001 = 1:2 postscale
– 0010 = 1:3 postscale•••
– 1111 = 1:16 postscale
Como calcular valores requeridos no Timer2.
• Fout – frequência de saída após a divisão.• Tout – tempo de ciclo após divisão.• 4 – A divisão do clock original (4Mhz), quando usado clock
interno.• Count – valor numérico para se alocado para obtera
frequencia de saída desejada – fout.• (PR2-TMR2) – Numero de vezes que o contador irá contar.
Considerações Finais
• A utilização de timers permite realizar controle de operações que envolvem tempo (sinais A/D, leitura de dados externos, entre outros).
• Através dos timers é possível contar tempo sem travar o microntrolador para isso, essa forma é mais eficiente que o uso da função delay.
Referências
• Em: <http://www.microcontrollerboard.com/pic-timer0-tutorial.html> Acesso em: 28 Maio 2012.
• (ASSEF, Amauri.Timers. Em:<http://pessoal.utfpr.edu.br/amauriassef/>. Acesso em: 28 de Maio de 2012.)
• Microchip 2003 ,PIC 16F877A Datasheet, em: www.microchip.com.br Acesso em: 27/05/2012.