introducao ao estudo dos timer
TRANSCRIPT
-
8/19/2019 Introducao Ao Estudo Dos Timer
1/27
Centro de Tecnologia Microgenios - Todos os direitos reservados
Clique aqui para Imprimir o doc umento
Introdução ao estudo dos TIMERS
1.0 Os Timers/Counters 1.1 TIMER0 1.2 TIMER1 1.3 TIMER2 1.4 TIMER3
Os Timers/Counters
Os timers são ferramentas internas dos microcontroladores em geralque servem para contagem de tempo, eventos, temporização entreoutras funções.
O PIC18F452 possui internamente 4 TIMERS:
TIMER0 TIMER1 TIMER2 TIMER3
Vamos conhecer cada um desses temporizadores:
voltar para o topo da página
TIMER0
-
8/19/2019 Introducao Ao Estudo Dos Timer
2/27
O TIMER0 é um temporizador/contador de 8 ou 16 bits quepossuem duas funções básicas:
Contagem de eventos externos (quando a entrada declock é feita por meio do pino RA4/T0CKI;
Temporização (contagem de tempo) quando os pulsosde contagem é proveniente do clock interno do PIC (o clock do
sistema dividido por 4). O TIMER0 pode ser configurado para trabalhar com prescaler
dedicado. O prescaler nada mais é do que um contador/divisorprogramável que é utilizado para reduzir a freqüência do sinal declock aplicado ao TIMER0 por um fator conhecido.
O valor do prescaler pode ser configurado a partir dos bitsT0PS2, T0PS1 e T0PS0 do registrador T0CON (TIMER0 CONTROLREGISTER);
O prescaler passa a ser uma importantíssima ferramentas dotimer, pois através dele conseguimos gerar tempos muito maiores.
Quando o TIMER0 é configurado para operar no modo de 8bits, podemos efetuar contagens de 0 a 255 (limite da capacidadepara 8 bits). Quando a contagem chega até seu valor máximo de255, o próximo pulso acarretaria o que chamamos de "estouro decontagem", fazendo com que o valor de contagem de início
novamente a partir do 0 (zero). No caso anterior, caso tenhamos a interrupção do TIMER0
habilitada, no momento que ocorre o "estouro de contagem", seriagerado um pedido de interrupção do TIMER0.
No modo 16 bits do TIMER0, seu funcionamento é igual aomodo de 8 bits, porém neste cado a faixa de contagem é de 0 a65535.
Os valores de iniciais de temporização/contagem devem sercarregados nos registradores especiais intitulado de TMR0L (TIMER0Module Low Byte Register) e TMR0H (TIMER0 Module Hight ByteRegister);
Quando programamos os timers para atuarem como
temporizadores, estamos considerando que os pulsos queincrementam os registradores de contagem são proveniente do valordo oscilador / 4, ou seja, caso estivermos utilizando um cristal de4MHz, iremos incrementar em uma unidade os registradores decontagem a cada 1 us, pois 4Mhz/4 = 1MHz = 1us (microsegundos).
Dica:
Repare que a unidade resultante da divisão da Frequencia dooscilador / 4 (ciclo de máquina) esta em MHz ( unidade defrequência), neste caso para sabermos o tempo (periodo), basta dividir 1
/ seu valor.
-
8/19/2019 Introducao Ao Estudo Dos Timer
3/27
Ex: 1 / (Fosc / 4 )
Para um cristal de 8 MHz teremos o seguinte tempo de ciclo demáquina:
1 / (8 / 4) = 0,5 us (microsegundos).
Os Registradores relacionados ao TIMER0 são:
Figura 01 - Registrador relacionados com o TIMER0
TMR0L é um registrador de contagem de 8 bits que possui a função dearmazenar a parte baixa do valor de contagem programada do TIMER0.
TMR0H é um registrador de contagem de 8 bits que possui a função dearmazenar a parte alta do valor de contagem programada do TIMER0.
Os registradores TMR0L e TMR0H juntos formam um únicoregistrador de 16 bits, que nos permite uma contagem máxima de 0 a65535.
INTCON é um registrador de 8 bits responsável pela configuração domodo de operação do TIMER0. Podemos definir através desseregistrador o valor do prescaler que desejamos acionar, o modo deoperação de contagem de 8 ou 16 bits, seleção da fonte de clock (internaou externa) para o timer, seleção de disparo do timer através de borda desubida ou borda de descida do clock externo no pino RA4/T0CK1.
Faça download do diagrama esquemático do TIMER0 disponível na
informações complementar dessa unidade.
Registradores de configuração do
TIMER0:
-
8/19/2019 Introducao Ao Estudo Dos Timer
4/27
O registrador T0CON é responsável pela configuração pelo modo deoperação do Timer0, é de vital importância conhecer todas as funções deseus bits.
T0CON: (TIMER0 Counter Register)
TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
TMR0ON: Bit de controle para ligar e desligar a contagemdo TIMER0;
0 - TIMER para de contagem 1 - Habilita a contagem do TIMER0
T08BIT: Bit de seleção de funcionamento do TIMER0 em 8ou 16 bits;
0 - TIMER0 configurado para funcionar comocontador/temporizador em 16 bits;
1 - TIMER0 esta configurado para funcionar como contador /temporizador de 8 bits;
T0CS: Bit de seleção de fonte de clock para o TIMER0; 0 - A fonte de clock é proveniente do meio interno do chip 1 - A fonte de clock é proveniente do pino T0CKI (meio
externo) T0SE: Bit de seleção de borda (válido somente caso a fonte
de clock seja pelo meio externo ao chip)
0 - Contagem do timer ocorre por borda de subida no PinoT0CKI 1 - O incremento do timer ocorre na borda de descida no
pino T0CKI /PSA: Bit de seleção da utilização do prescaler; 1 - TIMER0 não utiliza prescaler. A cada alteração do pulso
de clock, corre incremento de uma unidade nos registradores decontagem.
0 - TIMER0 utiliza prescaler.
T0PS2; T0PS1; T0PS0 : Bits de seleção de fonte deprescaler
T0PS2 T0PS1 T0PS0 Prescaler
1 1 1 1:256
1 1 0 1:128
1 0 1 1:64
1 0 0 1:32
0 1 1 1:16
0 1 0 1:8
-
8/19/2019 Introducao Ao Estudo Dos Timer
5/27
0 0 1 1:4
0 0 0 1:2
Configuração do Prescaler:
Como sabemos, através do prescaler conseguimos temposmaiores com os timers, para entendermos melhor sua utilizaçãoacompanhe o exemplo abaixo:
Digamos que o ciclo de máquina no PIC sejá de 1us e oTIMER0 esteja configurado no modo 8 bits (contagem de 0 a 255) esem o presacaler. O TIMER0 ira "estourar" sua contagem em 256us.
Agora digamos que para o mesmo anunciado anterior,configuramos e acionamos o prescaler para 1:2. Nosso intervalo de"estouro" do TIMER0 não mais será 256us mas sim 512us.
Se ao invés de prescaler de 1:2 utilizarmos prescaler 1:32, o
tempo agora será de 256us x 32 = 8192us.
Como calcular o tempo de estouro do TIMER0?
Para calcular o tempo de "estouro" do TIMER com prescaler,utilizamos a seguinte fórmula:
Tempo de estouro: ciclo de máquina x prescaler x (modo 8/16bits – valor de contagem).
Em que:
Ciclo de máquina: é o valor da relação entre: 1 / (Fosc / 4 ),onde Fosc é justamente a frequeência do cristal.
Obs: modo PLL desabilitado, iremos estudar esta função maisadiante.
Prescaler : é o fator de divisão programado. Podemosconsiderar como sendo um "redutor" de frequencia.
Modo 8/16bits: é o modo de contagem programado no TIMER0,para 8 bits o valor é 256, e para 16 bits, o valor será de 65535.
Valor de contagem: é o valor de carregagem no registrador decontagem TMR0H eTMR0L.
Exemplo:
Precisamos ligar e desligar um relé a cada segundo ( um segundoligado e um segundo desligado), estamos utilizamdo um cristalde 8Mhz, utilizaremos para isso os recursos do Temporizador Timer0,acompanhe:
T0CON = 0B10000110; //configura timer modo 16 bits, com prescaler 1:128, fonte declock interno TMR0L = 0XF6; //carrega valores de contagem C2F6 equivale a
TMR0H = 0XC2; //carrega valores de contagem
-
8/19/2019 Introducao Ao Estudo Dos Timer
6/27
Calculo do tempo de estouro do Timer0:
Tempo de estouro: 1 / (8 / 4) x 128 x (65536 – 49910 )Tempo de estouro: 1.000.064 us (microsegundos) ou aproximadamente1 segundo.
obs: o valor 49910 surgio da conversão do valor em hexadecimalF6C2 para decimal
O registrador INTCON
O registrador INTCON possui diversar funções, entre elas a dehabilitar algumas interrupções do PIC (veremos mais adiante no nossocurso) e de armazenar os bits de estatus de estouro do TIMER0:
INTCON (Interrupt Control)
GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Iremos estudar todos esses bits mais adiante em nosso curso, pois eles tratam das configurações das interrupções, e neste momentonão é importante conhecer alguns deles. Vamos apresentar somente os
bits que são utilizados nos TIMERS.
INTCON. GIEH = bit de acionamento da "chave geral dasinterrupções" e habilitação das interrupções de alta prioridade
0 - liga a chave geral das interrupções1 - desliga a chave geral das interrupçõesINTCON. GIEL = bit de habilitação das interrupções de baixa
prioridade0 - TIMER0 não ocorreu estouro de contagem (overflow)
1 - TIMER0 ocorreu estouro de contagem (overflow). Este bit deveser apagado por software.
INTCON.TMR0IE = bit que habilita interrupção do TIMER0 naocorrência do estouro de contagem.
0 - Desabilita interrupção do TIMER0 por ocorrencia de estouro decontagem (overflow)
1 - Habilita interrupção do TIMER0 por ocorrência de estouro decontagem (overflow).
INTCON. TMR0IF = bit sinalizador de estouro do TIMER00 - TIMER0 não ocorreu estouro de contagem (overflow)
1 - TIMER0 ocorreu estouro de contagem (overflow). Este bit deveser apagado por software.
-
8/19/2019 Introducao Ao Estudo Dos Timer
7/27
Aprendendo a programar os TIMER0:
Conhecemos os registradores responsáveis pela configuração doTIMER0 do PIC, agora vamos configurá-los:
Vamos nos recordar da fórmula do TIMER0:
Tempo de estouro: ciclo de máquina x prescaler x (modo 8/16bits – valor de contagem).
Exemplo 1 :
Se tivermos conectado ao nosso PIC um cristal de 8 MHz e o TIMER0 seja programado como temporizador, com prescaler de 1:4, modo 8 bits e contagem inicialem TMR0L = 0, teremos então:
Tempo de estouro: ciclo de máquina x prescaler x (modo 8/16bits – valor de contagem). Tempo de estouro: 0,5us * 4 *(255 - 0) Tempo de estouro: 510us
Exemplo 2 :
Se tivermos conectado ao nosso PIC um cristal de 8 MHz e o TIMER0 seja programado como temporizador, com prescaler de 1:256, modo 16 bits e contageminicial em TMR0L = 0 e TMR0H = 0, teremos então:
Tempo de estouro: ciclo de máquina x prescaler x (modo 8/16bits – valor de contagem). Tempo de estouro: 0,5us * 256 * (65536 - 0) Tempo de estouro: 8.388.608us, ou seja, 8, 388 segundos
Obs: Repare que este é o tempo máximo de estouro do TIMER0
Vamos realizar mais um exemplo de programa:
vamos supor que desejamos que um led conectado ao pino RB0do PIC pisque em intervalos de 1 segundo (ligado e desligado) utilizandoos recursos de temporização do TIMER0.
Cristal: 8MhzPIC18F452TIMER0 / MODO 16BITS
Acompanhe o esquema eletrico abaixo:
-
8/19/2019 Introducao Ao Estudo Dos Timer
8/27
Primeiramente devemos programar os TIMER0:
Para este exemplo, vamos programar o TIMER0 no modo 16 bits (contagem de 0 a 65535), prescaler de 1:16, clock interno, cristal de8Mhz e modo HSPLL desativado (multiplicador do oscilador), termosentão:
tempo de estouro do TIMER0 = ciclo de máquina x prescaler x
(modo 8/16 bits - valor de contagem do TIMER0) logo:
1 000 0000 = 0,5 * 16 * (65536 - X)x = 59464
Concluimos que o valor de carregagem em TMR0L e TMR0H deverá serde 59464, ou seja, TMR0L = 0X48; , TMR0H = 0XE8; (valores 59464convertido em hexadecimal é igual a E848)
Exemplo:
-
8/19/2019 Introducao Ao Estudo Dos Timer
9/27
/*********************************************************
************
Centro de tecnologia Microgenios
Configuração parcial de um programa de configuração do
TIMER0
**********************************************************
*************/ Comandos:
T0CON = 0b10000011; //configura temporizador 16 bits,com prescaler ativado em 1:16, clock interno
TMR0L = 0x48; //carrega valores de contagem emTMR0L - registrador baixo de contagem
TMR0H = 0xE8; //carrega valores de contagem emTMR0H - registrador alto de contagem
O programa abaixo tem por função configurar o modo de
trabalho do TIMER0. Repare que o registrador T0CON foi configuradoda seguinte forma:
TIMER0 ligado. (TMR0ON = 1) Clock interno (T0CS = 0) Modo de contagem de 16 bits (T08BIT = 0) Prescaler ligado (PSA = 0) Prescaler 1:16 (T0PS2 = 0, T0PS1 = 1, T0PS0 = 1)
Os registradores de contagem TMR0L e TMR0H serão
inicializados com o valor 59464.
Vamos realizar mais um exemplo de programa:
O programa seguinte tem por objetivo alterar os estados dos leds conectados aoPORTB em intervalos de 1 segundo.
Hardware:Cristal: 8 MhzMicrocontrolador: PIC18f452Temporizador: Timer0
-
8/19/2019 Introducao Ao Estudo Dos Timer
10/27
/*********************************************************
************
Centro de tecnologia Microgenios
Placa: Kit PICGeniosPrograma: Pisca Pisca utilizando o TIMER0 do PIC
Objetivo: Este programa tem por objetivo piscar os leds
do portb em
intervalo de 1 segundo (ligado e desligado) utilizando o
TIMER0 do PIC.
Modo programado: 16 bits, prescaler 1:128
**********************************************************
*************/
void main() { //função principal do programaT0CON = 0b10000110; //configura timer modo 16 bits, com
prescaler
TMR0L = 0XF7; //carrega valores de contagemTMR0H = 0XC2; //carrega valores de contagem intcon.tmr0if = 0; TRISB = 0; // PORT B configurado como saídaPORTB = 0xFF; // Initialize PORT B
do {if (intcon.tmr0if == 1) { //se o flag de estouro do
TIMER0 for igual a 1, então
PORTB = ~PORTB; // inverte o estado do portbTMR0L = 0xF7;TMR0H = 0XC2;Iintcon.tmr0if = 0; // apaga flag de entouro do
TIMER0//para uma nova contagem
}
-
8/19/2019 Introducao Ao Estudo Dos Timer
11/27
} while(1); // loop}
Calculo do tempo de estouro do timer0
tempo de estouro do TIMER0 = ciclo de máquina x prescaler x
(modo 8/16 bits - valor de contagem do TIMER0) tempo de estouro = 0,5 * 128 * (65536 - 49911) Tempo de estouro = 1.000,000 us ou 1 segundo
Estudo detalhado do programa:
void main() { //função principal do programaT0CON = 0b10000011; //configura timer modo 16 bits, com
prescaler 128
TMR0L = 0XF7; //carrega valores de contagemTMR0H = 0xC2; //carrega valores de contagem intcon.tmr0if = 0; // apaga flag de entouro do TIMER0
Os comandos seguinte configuram o portb como saída.
TRISB = 0; // PORT B é configurado como saidaPORTB = 0xFF; // Initialize PORT B
Repare que nosso TIMER0 já foi configurado e iniciou acontagem dos pulsos de ciclo de máquina. Agora precisamos monitorar o
bit de estouro do TIMER0, pois não sabemos a que momento o estourovai ocorrer, o que sabemos é que vai levar 1 segundos para ocorrer o
estouro, ou seja, o bit TMR0IF vai para 1. Para isso, utilizaremos ocomando de tomada de decisão IF, que terá a seguinte função:
Se o bit de estouro intcon.tmr0if for igual a 1, representa que oTIMER0 estourou, e os comandos do bloco IF são executados. Toda avez que o TIMER0 estura, ou seja, o timer chega até 1 segundos, éinvertido o estado do portb e reiniciado a contagem do TIMER0.
if (intcon.tmr0if == 1) { //se o flag de estouro doTIMER0 for igual a 1, então
PORTB = ~PORTB; // inverte o estado do portbTMR0L = 0XF7; //carrega valores de
contagemTMR0H = 0xC2; //carrega valores de
contagem intcon.tmr0if = 0; // apaga flag de entouro do
TIMER0 }
Modo Contador do TIMER0:
Vamos fazer mais um exemplo de programa utilizando o
TIMER0 do PIC:
-
8/19/2019 Introducao Ao Estudo Dos Timer
12/27
Neste novo exemplo de programa, vamos programar o TIMER0
do PIC para trabalhar como contador de pulsos externos. Neste modo, os pulsos externos, são aplicados no pino RA0/T0CK1 do PIC. Devemoscontar apenas 10 pulsos externos, que neste caso, configuraremos o
TIMER0 do PIC no modo 8 bits com prescaler 1:1, e os pulsos serãolidos por borda de descida. Ao completar a contagem de 10 pulsos, o ledconectado ao pino RB7 do PIC deverá acender para sinalizar o fim dacontagem.
Esquema elétrico:
Para realizar o seguinte desafio é necessário configurar osseguintes registradores do TIMER0:
INTCON.TMR0IF (Bit de estouro do TIMER0) TMR0L (registrador de contagem do TIMER0) T0CON (registrador de configuração do modo de
operação do TIMER0)
Programa:
/*********************************************************
************
-
8/19/2019 Introducao Ao Estudo Dos Timer
13/27
Centro de tecnologia Microgenios Placa: Kit PICGenios Programa: Pisca Pisca utilizando o contador T0CK1 do PIC Objetivo: Este programa tem por objetivo piscar os leds
do portb a cada 10 pulsos gerados no pino contador RA4/T0CK1 do PIC.
***********************************************************************/
void main() { //função principal do programa T0CON = 0b11100000; //configura timer modo 8 bits, com
prescaler 1:1 TRISB.f7 = 0; // PORT B é configurado como
saida PORTB.f7 = 0; // Initializa PORT B TMR0L = 246; //carrega valores de contagem de
pulsos //como somente vamos contar 10
pulsos, temos: (255 - 10 = 245)
intcon.tmr0if = 0; do { if (intcon.tmr0if == 1) { //se o flag de estou for
igual a 1, então PORTB.f7 = ~PORTB.f7; // inverte o estado do pino
RB0 TMR0L = 246; //recarrega valor de
contagem de contagem intcon.tmr0if = 0; // Seta T0IE, apaga flag de
entouro do TIMER0 //para uma nova contagem
} } while(1); // loop
}
Estudo detalhado do programa:
Repare que o nos comandos abaixo que o registrador T0CONfoi configurado como contador de pulsos externos, modo de operação doTIMER0 de 8 bits, com prescaler 1:1.
O registrador de contagem TMR0L é o registrador onde será
armazenado os valores de contagem dos pulsos externos, e neste caso elefoi pré configurado com o valor 246, devido a necessidade de contarmosapenas 10 pulsos. Devemos lembrar que os registradores de contagem doTIMER0 são incrementados em 1 unidade e contam para cima, nestecaso, como desejamos programar o TIMER0 para que a cada 10 pulsosno pino RA0/T0CK1 seja gerado um estouro, devemos carregar emTMR0L o valor da diferença entre o valor máximo de contagem para omodo 8 bits, que é 256, pelo valor da quantidade de pulsos a ser contado,que neste cado é 10. Então teremos:
256 - 10 = 246
-
8/19/2019 Introducao Ao Estudo Dos Timer
14/27
O TIMER1:
Realizamos nas unidades passadas um estudo não muitoaprofundado sobre as funções e características dos TIMERS do PIC.Agora chegou o momento de estudarmos mais profundamente osrecursos e a programação dos registradores e modos de trabalho dessestemporizadores e contadores.
O TIMER1 pode operar como temporizador ou como contadorde 16 bits, suas características são muito parecida com a do TIMER0.
Dizemos que o timer está operando como temporizador quandoa referência do clock de incremento da contagem é realizada pelo clockinterno do PIC, e dizemos que o timer esta operando como contador
quando a referência do clock de incremento da contagem é provenientede um clock externo ao PIC. (pulso aplicado no pinoRB6/T1OSO/T1CK1).
Registradores de configuração do TIMER1:
Figra 01 - Registrador relacionados com o TIMER0
P1R1: é um registrador onde é armazenado os bits de status das
interrupções e estouro dos timers.P1E1: é um registrador de 8 bits onde é habilitado as interrupções do
PIC.TMR1L é um registrador de contagem de 8 bits que possui a função
de armazenar a parte baixa do valor de contagem programada doTIMER0.
TMR1H é um registrador de contagem de 8 bits que possui a funçãode armazenar a parte alta do valor de contagem programada do TIMER0.
Os registradores TMROL e TMR0H juntos formam um únicoregistrador de 16 bits, que nos permite uma contagem máxima de 0 a65535.
T1CON é um registrador de 8 bits responsável pela configuração domodo de operação do TIMER1. Podemos definir através desse
-
8/19/2019 Introducao Ao Estudo Dos Timer
15/27
registrador o valor do prescaler que desejamos acionar, o modo deoperação de contagem de 8 ou 16 bits, seleção da fonte de clock (internaou externa) para o timer, seleção de disparo do timer através de borda desubida ou borda de descida do clock externo no pinoRB6/T10S0/T1CK1.
T1CON: (TIMER1 CONTROL REGISTER):
RD16 --- T1CKPS1 T1CKPS0 T10SCEN T1SYNC TMR1CS TMR1ON
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
RD16: bit de leitura e escrita em 16bits
0– leitura e escrita em 16 bits habilitada
1 – leitura e escrita em 16 bits desabilitada T1CKPS1; T1CKPS0: Bits de seleção de fonte de prescaler
T1CKPS1 T0CKPS0 Prescaler
1 1 1:8
1 0 1:4
0 1 1:2
0 0 1:1
T1OSCEN: Habilitação do oscilador externo de baixafrequeência nos pinos T1OSO e T1OSI
0 - Oscilador desligado 1 - Oscilador Ligado T1SYNC: Controle do sincronismo interno. Caso TMR1CS =
0, esse bit é descartado 0 - Sincronismo ligado 1 - Sincronismo desligado TMR1CS: Bit de seleção de clock; 0 - A base de clock para o TIMER1 é interna (Fosc/4); 1 - Clock externo no pino RC0/T1CK1;
TMR1ON: Habilita TIMER1;
0 - TIMER1 desligado 1 - TIMER1 ligado
Obs: Bit6 não implementado, lido como "0".Abaixo o diagrama simplificado do Timer1:
-
8/19/2019 Introducao Ao Estudo Dos Timer
16/27
Faça download do diagrama esquemático do TIMER1 disponível na
informações complementar dessa unidade.
O TIMER1 opera de maneira identica a do timer anterior, suasdiferenças básicas é que este novo timer pode operar como temporizador para o modo Capture/Compare para o modo CCP. Foi implementadoneste novo Timer a possibilidade de ligarmos um outro cristal oscilador,de forma que nos permite ligar cristais de baixa frequência, tais como32,768 KHz, para maiores precisão na temporização.
Obs: Este segundo cristal deverá ser ligado entre os pinos RC0 e RC1 eem ipótese alguma poderemos dispensar o uso do cristal oscilador
principal Fosc.
A figura 01 apresenta o diagrama de funcionamento doTIMER1 operando com o oscilador de baixa frequência.
Figura 01
Abaixo segue um exemplo de ligação ( Revista Elektor / Ano 4 Nº 43)
-
8/19/2019 Introducao Ao Estudo Dos Timer
17/27
Programando o TIMER1 do PIC.
Para exemplificar a utilização do TIMER1 do PIC vamosanalizar um exemplo de programa:
/*********************************************************
************
Centro de tecnologia Microgenios
Configuração parcial de um programa de configuração do
TIMER1
**********************************************************
*************/
T1CON = 0B10110001; //liga TIMER1, prescaler 1:8, modotemporizador 16 bits.
PIR1.TMR1IF = 0; //apaga flag de estouro do TIMER1
TMR1L = 0; //carrega valor de contagem baixa doTIMER1
-
8/19/2019 Introducao Ao Estudo Dos Timer
18/27
TMR1H = 0; //carrega valor de contagem alta doTIMER1
O programa acima configura o TIMER1 para operar em 16bits com prescaler 1:8, clock interno.
Análise detalhado do programa:
Sabendo que nosso microcontrolador esta trabalhando com um cristalexterno de 4MHz, vamos calcular o tempo de estouro do TIMER1:
Configuração do TIMER1:
Modo de Operação: 16 bits Fonte de oscilação: Ciclo interno. Prescaler: 1:8
Tempo de estouro:,
Cálculo: (65535 - valor do registrador de contagem) x (1 (Fosc
/ 4)) x Prescaler 65535 x 1us x 8 = 524, 28 ms, ou 0.5 segundos.
Exemplo de programa:
/*********************************************************
************
Centro de tecnologia Microgenios
Placa: Kit PICGenios
Programa: Pisca Pisca utilizando o TIMER1 do PIC
Objetivo: Este programa tem por objetivo piscar os leds
do portb emintervalo de 0,5 segundo (ligado e desligado) utilizando o
TIMER1 do PIC.
Modo programado: 8 bits, prescaler 1:16
**********************************************************
*************/void main() //função principal do programa{
TRISB = 0; //define portb como saidaT1CON = 0B10110001; //liga TIMER1, prescaler 1:8, modo
16bits.
PIR1.TMR1IF = 0; //apaga flag de estouro do TIMER1
TMR1L = 0; //carrega valor de contagem baixa doTIMER1
-
8/19/2019 Introducao Ao Estudo Dos Timer
19/27
TMR1H = 0; //carrega valor de contagem alta doTIMER1
PORTB = 0x00; //reseta portb
do {if (PIR1.TMR1IF == 1) //se flag estiver em 1,
representa que houve o estouro do timer1{PORTB = ~PORTB; //inverte o valor do portbTMR1L = 0; //recarrega valor de
contagem baixa do timer1
TMR1H = 0; //recarrega valor decontagem alta do timer1
PIR1.TMR1IF = 0; //resseta flag de estouro dotimer1 para uma nova contagem.
}} while (1);
}
voltar para o topo da página
O TIMER2 :
O TIMER2 é um timer de 8 bits com recarga automática.Esse TIMER tem um registrador de configuração, um de contagem e
outro de comparação. Ele possui um registrador de contagem de 8 bits (0 a 255) chamado TMR2. Diferentemente dos outros timers, o TIMER2
possui um prescale e um postscaler. Os registradores especiaisresponsável pela configuração do TIMER2 são:
T2CON (TIMER2 CONTROL REGISTER): Configura osetup do TIMER2;
TMR2: Registrador de contagem do TIMER2 (8 bits); PR2: Registrador de comparação do TIMER2
Dizemos que o TIMER2 é um timer com recarga automáticapois quando o valor carregado em PR2 é igual ao de contagem TMR2,o valor de TMR2 é zerado e inicia-se uma nova contagem, ou melhordizendo, temporização.
Os registradores relacionados com o TIMER2 são:
-
8/19/2019 Introducao Ao Estudo Dos Timer
20/27
Através do registrador T2CON, podemos configurar o modo deoperação do TIMER2, tais como: valor do prescale e postcale e ligar oudesligar o timer2.
Faça download do diagrama esquemático do TIMER3 disponível nainformações complementar dessa unidade.
Registradores de configuração do TIMER2:
Registradores de configuração do TIMER2:
T2CON: (TIMER1 CONTROL REGISTER):
--- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0: Bits de ajuste dopostcale:
TOUTPS3 TOUTPS2
TOUTPS1
TOUTPS0
Postscale 0 0 0 0 1:1
0 0 0 1 1:2
0 0 1 0 1:3
0 0 1 1 1:4
0 1 0 0 1:5
0 1 0 1 1:6
0 1 1 0 1:7
0 1 1 1 1:8
1 0 0 0 1:9
-
8/19/2019 Introducao Ao Estudo Dos Timer
21/27
1 0 0 1 1:10
1 0 1 0 1:11
1 0 1 1 1:12
1 1 0 0 1:13
1 1 0 1 1:14
1 1 1 0 1:15
1 1 1 1 1:16
O funcionamento do postcale é muito semelhante aoprescaler, sua diferença básica está na contagem. Em vez de contarpulsos de ciclos de máquina, o postcale conta n comparações doTIMER2 com PR2. Após n comparações, o flag de estouro do TIMER2é sinalizado com nível lógico 1.
TMR2ON: Habilitação do TIMER2; 0 - TIMER2 desligado 1 - TIMER 2 ligado
T2CKPS1 T2CKPS0: Bits responsáveis pelo ajuste deprescaler:
T2CKPS1 T2CKPS0 Prescaler
0 0 1:10 1 1:4
1 x 1:16
X pode ser 1 ou 0
Para exemplificar, vamos estudar um programa que tem comofunção piscar um led conectado ao pino RB0 do PIC em intervalos de 1segundo (ligado e desligado). Neste exemplo iremos utilizar o TIMER2
com ajuste de prescale e postcale para entendermos o funcionamento.
Esquema elétrico:
http://localhost/var/www/Microgenios/Desktop/Curso%20PIC/curso_pic_online/unidade2_pronto/05_u2.htm#top#top
-
8/19/2019 Introducao Ao Estudo Dos Timer
22/27
Programa:
/*********************************************************
************
Centro de tecnologia Microgenios
Configuração parcial de um programa de configuração do
TIMER2
**********************************************************
*************/
T2CON = 0b01111111; //programa TIMER2 com prescaler
1:16, postcale 1:16TMR2 = 0; //inicia contagem a partir do 0PR2 = 0; //inicia contagem a partir do 0
Descrição detalhada do programa:
Para calcularmos o tempo de estouro do TIMER2 utilizamos as seguintescontas (observe que estamos utilizando um cristal externo de 4MHz):
Tempo de estouro do TIMER2 = valor do prescale x valor do postcale x PR2 x ( 1/(Fosc/4) )
-
8/19/2019 Introducao Ao Estudo Dos Timer
23/27
que nos resulta:
Tempo de estouro do TIMER2 = 16 x 16 x 255 x 1us = 65280us
Exemplo de Programa:
/*********************************************************
******************
Microgenios soluções eletrônica Ltda
Programa: Pisca Pisca utilizando o TIMER2
Compilador: MikroC
Objetivo: Este programa tem por objetivo piscar o led
conectado ao pino RB0 do PIC em intervalos de 1 segundo
(ligado / desligado) APROXIMADAMENTE.
**********************************************************
*****************/
unsigned short i; //define variável i
//************************* subrotina de inversão do led
*******************
void inverte_led() { //subrotina de inversão do estado doled
PORTB.f0 = ~PORTB.f0;}
//************************ função principal do programa
******************
void main() {i = 0;
TRISB = 0;PORTB = 0;
T2CON = 0b01111111; //programa TIMER2 com prescaler1:16, postcale 1:16
PR2 = 200; //inicia contagem a partir do 0
while (1){
if (pir1.tmr2if == 1) //se o TIMER2 estourar oscomandos serão executados
{i++; //foi criado a variável i para que
somente depois de
//15 estouros do TIMER2, asubrotina de inversão do
//estado do led seja chamada.
//a variável i é incrementada em
um unidade a cada
//estouro do TIMER2
if (i > 15) //caso i seja maior que 15, entãochama subrotina de
{inverte_led(); //inversão dos leds
i = 0; //zera novamente i para umanova contagem
}PIR1.TMR2IF = 0; //apaga o bit de sinalização deestouro do TIMER2
-
8/19/2019 Introducao Ao Estudo Dos Timer
24/27
//para inciar uma nova contagem}
}}
O TIMER3 :
O TIMER3 é um temporizador e contador de 16 bits. Possuiinternamente dois registradores de 8 bits, TMR3L e TMR3H, que juntosformam um registrador de 16 bits (contagem de 0 a 65535).
Os registradores relacionados com o TIMER3 são:
Através do registrador T3CON, podemos configurar o modo deoperação do TIMER3, tais como: valor do prescale , ligar ou desligar oTIMER3, seleção de clock interno ou externo (contador) e fonte do timer
para o módulo CCP do PIC.
Faça download do diagrama esquemático do TIMER3 disponível nainformações complementar dessa unidade.
Registradores de configuração do TIMER3:
O registrador de controle do TIMER3;
T3CON: (TIMER3 CONTROL REGISTER);
RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
-
8/19/2019 Introducao Ao Estudo Dos Timer
25/27
RD16: bit de leitura e escrita em 16bits0 – leitura e escrita em 16 bits habilitada 1 – leitura e escrita em 16 bits desabilitada
T3CCP2 T3CCP1: Habilita a fonte de timer para o móduloCCP;
T3CCP2 T3CCP1 Prescaler
0 0
TIMER1 fontede timer paraos módulos
CCP
0 1
TIMER1 fontede timer para
o móduloCCP1
1 0
TIMER3 fontede timer para
o móduloCCP2
1 1
TIMER3 fontede timer paraos módulos
CCP
T3CKPS1 T3CKPS0: bits de ajuste do prescaler do TIMER3;
T3CKPS1 T3CKPS0 Prescaler
0 0 1:10 1 1:21 0 1:41 1 1:8
/T3SYNC: Controle de sincronismo interno. Caso TMR3CS =0, este bit é descartado;
obs: este bit somente é utilizado para trabalhar com outro cristalligado ao T1OSO e T1OSI.
0 - Sincronismo ligado 1 - Sincronismo desligado
TMR3CS: Seleção de Clock
0 - Clock Interno ( Fosc/ 4 ) 1 - clock externo no pino T1CK1
TMR3ON: Habilitação do TIMER3;
0 - TIMER3 desligado
-
8/19/2019 Introducao Ao Estudo Dos Timer
26/27
1 - TIMER3 ligado
Para exemplificar a utilização do TIMER3, vamos programarseus registradores:
Primeiramente devemos programar os TIMER3:
Para este exemplo, vamos programar o TIMER3 no modo 16 bits (contagem de 0 a 65535), prescaler de 1:8, clock interno, cristal de4Mhz e modo HSPLL desativado (multiplicador do oscilador), termosentão:
Tempo de estouro do TIMER0 = valor de contagem do TIMER0 x
PRESCALER X tempo de ciclo de máquina
65535 x 8 x 1us = 524280 us, ou 0.524 segundos.
Logo o tempo de estouro do TIMER3 será a cada 0.524 segundos.
/*********************************************************
************
Centro de tecnologia Microgenios
Configuração parcial de um programa de configuração do
TIMER3
**********************************************************
*************/
T3CON = 0b10110001; //programa TIMER3 com prescaler1:8, modo 16 bits, clock interno
TMR3l = 0; //inicia contagem a partir do 0TMR3H = 0; //inicia contagem no modo 16 bits
Descrição detalhada do programa :
O programa abaixo tem por função configurar o modo detrabalho do TIMER3. Repare que o registrador T3CON foi configuradoda seguinte forma:
TIMER3 ligado. (TMR3ON = 1) Clock interno (TMR3CS = 0) Modo temporizador em 16 bits (RD16 = 1) Prescaler 1:8 (T3CKPS1 = 0, T3CKPS0 = 1)
Os registradores de contagem dos pulsos dos clocks internos doPIC são inicializados a partir do zero.
voltar para o topo da página
-
8/19/2019 Introducao Ao Estudo Dos Timer
27/27
Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programaçãoem CMicrogenios © 1998 - 2007. Todos os direitos reservados. É proibido cópia parcial ouintegral desse material sem prévio aviso. Maiores informações: