aula timers display 7seg arduino

27
Engenharia Elétrica: Microcontroladores Timers do ATmega328P (Arduino UNO) Prof. Rodrigo Ribeiro 1

Upload: joud-da-sanfona

Post on 28-Sep-2015

31 views

Category:

Documents


3 download

DESCRIPTION

Aula Timers Display 7SEG Arduino

TRANSCRIPT

  • Engenharia Eltrica:

    Microcontroladores

    Timers do ATmega328P

    (Arduino UNO)

    Prof. Rodrigo Ribeiro

    1

  • TIMERS

    Timer o perifrico interno do microcontrolador utilizadopara temporizao ou contagens diversas.

    Como temporizador, o timer armazena um valor que incrementado periodicamente, dependendo do clock do

    sistema e de um valor mltiplo configurvel (prescaler).

    Ex.:

    No arduino UNO o clock de 16 MHz, logo o incremento do

    timer ocorre a cada 62,5 ns, considerando o mltiplo 1.

    Como cada incremento do timer est associado a umtempo pr-definido, ento rotinas que necessitem de

    temporizao podem ser implementados.

    2

  • TIMERS

    Como contador, o timer utilizado para contagemdiversas, como, por exemplo, nmero ocorrido de eventos

    externo ao microcontrolador.

    Alm disso, a interrupo do timer fornece subsdios paraimplementao de rotinas autnomas e paralelas

    execuo do programa principal.

    O ATmega328P possui 3 timers:

    timer 0 e timer 2, ambos de 8 bits mximo de 255

    timer 1 de 16 bits mximo de 65535

    3

  • TIMERS

    Para manipular os timers no ambiente de programaodo arduino faz-se necessrio conhecer os registradores de

    configurao deste perifrico.

    OBS 1: Pode-se obter algumas bibliotecas, que no fazem

    parte do ambiente padro, para configurar timers

    especficos. Para isso, deve-se inser-las na pasta libraries.

    OBS 2: Ao configurar os timers manualmente algumas

    funes do ambiente de programao podero ser

    comprometidas, devendo-se ento ser evitadas.

    Timer 0 delay(), millis() e micros()

    Timer 1 controle de servos

    Timer 3 funo tone()

    4

  • TIMERS

    Registradores de configurao/estado dos timers:

    OBS : Ser vista a anlise dos registradores do timer 0, sendo que os

    outros tem funcionalidades semelhantes e que podem ser consultadas

    no datasheet do microcontrolador.

    5

    O registrador TCNT0 armazena o valor da contagem dotimer 0. Faixa de contagem: 0 a 255 (8 bits)

    Pode ser lido e/ou escrito (R/W)

  • TIMERS

    O timer 0 pode ser colocado em um dentre vrios modos defuncionamento.

    6

  • TIMERS

    A escolha do modo faz-se atribuindo o valor adequado aos bits:

    WGM02 registrador TCCR0B.

    WGM01 e WGM00 registrador TCCR0A.

    Modos mais utilizados:

    modo 0 (Normal) - o timer gera um evento quando ocorreoverflow, ou estouro (passagem do valor 255 para zero).

    modo 2 (CTC) - o timer gera um evento quando a contagem seiguala ao valor armazenado em outro registrador (OCR0A). Nesse

    caso, o valor de contagem reiniciado em zero (Clear Timer on

    Compare).

    7

  • TIMERS

    8

    Registradores de configurao do modo do timer 0:

  • TIMERS

    9

    Registradores de comparao de sada do timer 0:

    O OCR0A (Output Compare Register A) contm um valorde 8 bits que continuamente comparado com o valor do

    contador (TCNT0).

    Pode ser usado para gerar uma sada de interrupo decomparao ou para gerar uma forma de onda de sada no

    pino OC0A.

  • TIMERS

    10

    A fonte de clock do timer (interna = temporizador ouexterna = contador) bem como o valor do prescaler (mltiplo da

    temporizao) so definidos pelo seguinte conjunto de bits

    CS02/CS01/CS00 do registrador TCCR0B:

    O prescaler um valor selecionvel para reduzir a frequnciaoriginal do clock do sistema, de forma a ampliar a faixa de

    temporizao do timer.

  • TIMERS

    11

    Fontes de clock do Timer 0:

    Ex.: Clock do sistema = 16 MHz ; clock do timer = sistema/prescaler

    prescaler = 8 clock timer = 2 MHz tempo de ciclo = 0,5 s

    prescaler = 1024 clock timer = 15,625 kHz tempo de ciclo = 64 s

  • INTERRUPES

    As interrupes permitem ao microcontrolador atendereventos assncronos.

    Eventos atendidos no momento da ocorrncia.

    A rotina principal do programa interrompida paraexecutar a rotina de interrupo.

    Aps executar esta rotina, o programa principal volta aser executado.

    Interrupo do timer:

    Na ocorrncia de overflow, o programa principalinterrompe o funcionamento e uma funo especial

    atendida, denominada de Rotina de Servio de

    Interrupo (ISR).

    12

  • INTERRUPES

    Para ativar a interrupo do timer 0:

    Ativar as interrupes gerais com a funo: sei()

    Ativar o bit TOIE0 do registrador TIMK0, permitindoassim que a interrupo ocorra para o evento de

    overflow do timer 0 em particular.

    13

  • INTERRUPES

    Na funo de interrupo do timer 0 o cabealho padronizado e deve seguir sempre essa estrutura:

    // Rotina de tratamento de interrupo do timer 0

    ISR(TIMER0_OVF_vect) {

    //comandos

    }

    OBS 1: Esta funo deve FICAR FORA do void loop().

    OBS 2: Assim que a funo for finalizada, o programa retorna ao

    ponto onde parou no programa principal.

    14

  • CONFIGURAO

    Frmula geral para determinar o valor do registrador decomparao dos timers. Considere:

    fclock a frequncia de clock do sistema, 16 MHz no Arduino UNO.

    fclock a frequncia de interrupo desejada.

    OCRXA o registrador do timer X, sendo X = 0, 1 ou 2

    Tempo entre cada interrrupo (Tint) = 1/ fint

    O clock do sistema deve ser dividido pelo prescaler, ento:

    ftimer = fclock /prescaler

    O timer gerar uma interrupo quando o valor doregistrador TCNT0 atingir o valor do registrado OCR0A .

    15

  • CONFIGURAO

    Dessa forma, o tempo da interrupo, considerandoTCNT0 inicie em zero, ser

    Tint = (OCR0A + 1)* ftimer = (OCR0A + 1)*(fclock /prescaler)

    A partir da frmula acima pode-se configurar qualquer umdos timers do ATmega328, para isso faz-se necessrio

    determinar o valor de OCR0A e o prescaler para obter o

    tempo de interrupo desejado.

    Manipulando a equao, tem-se:

    OCRXA = (Tint *fclock) / (presecaler) 1

    16

  • CONFIGURAO

    Ex.: Considerando OCR0A = 124, prescaler = 64,

    fclock = 16 MHz, qual o perodo e a frequncia de interrupo

    do timer 0.

    Soluo:

    O clock do sistema deve ser divido por 16, devido ao fator

    determinado pelo prescaler, ento o clock do timer de

    250 kHz.

    Cada incremento do timer ocorrer em 4 s (1/1M).

    A interrupo ser gerada quando o registrador de contagem

    TCNT0 atingir o valor do registrador de comparao OCR0A.

    Assim, Tint = (124+1)*4 s = 0,5 ms e fint = 2 kHz.

    17

  • CONFIGURAO

    Ex.: Qual o valor de OCR1A para obter uma frequencia de

    interrupo de 1s. Adote prescaler = 1024 e fclock = 16 MHz.

    Soluo:

    O clock do sistema deve ser divido por 1024, ento o clock

    do timer ser de 15,625 kHz. Assim, cada incremento do

    timer ocorrer em 64 s.

    Como, Tint = (OCR1A +1)*64 s = 1s

    Logo:

    OCR1A = 1/(64) 1 OCR1A = 15624

    OCR1A = 15624

    18

  • CONFIGURAO

    Ex.: Determine o prescaler para configurao do timer 2 de

    forma a obter uma frequncia de interrupo de 8kHz,

    considerando OCR2A igual a 249.

    OCR2A = (Tint *fclock) / (presecaler) 1

    Presecaler = (fclock)/((OCR2A + 1)*fint)

    Presecaler = (16M)/((249 + 1)*8k)

    Presecaler = 8

    OBS.:

    Para alterar o valor do bit de algum registrador usa-se o

    comando:

    NOME_Registrador |= (Valor_bit

  • EXEMPLO

    Ex.: Utilize a interrupo do timer 1 para obter uma

    frequncia de 1 Hz no pino 13 do arduino UNO.

    20

  • EXEMPLO

    21

    Cdigo do exemplo:

    Parte 1/3:

  • EXEMPLO

    22

    Parte 2/3:

  • EXEMPLO

    23

    Parte 3/3:

  • EXEMPLO

    Ex.: Utilize a interrupo do

    timer 1 para montar um

    contador decimal, incrementado

    a cada 1s, com interface via

    display de 7 segmentos.

    24

  • EXEMPLO

    25

    Cdigo do exemplo:

    No anexo do email da aula de Timers.

  • EXERCCIO

    Utilize a interrupo do timer 1 para montar um contador demdulo 100, incrementado a cada 1s, com interface via display

    de 7 segmentos, conforme o hardware apresentado.

    Como os displays esto compartilhando os mesmos pinos doarduino, deve-se ento implementar no cdigo do

    microcontrolador a varredura funcional dos display.

    Varredura significa que cada display funcionar por um tempoespecfico e de modo sequencial, ou seja, ativa-se somente o

    primeiro, depois desliga-o e ativa-se o segundo display.

    Dessa forma, o sistema parecer que est com os doisdisplays ligados simultaneamente, devido ao efeito conhecido

    como Persistncia da Retina, que provoca a iluso de

    continuidade dos valores apresentados.

    26

  • EXERCCIO

    Para fazer a varredura utilize a interrupo do timer 2 nafrequncia de 100 Hz. Utilize o cdigo do ltimo exemplo como

    base.

    27