Ed. Técnica, perguntado por luizzz07, 1 ano atrás

Para ajustar os intervalos de tempo entre ações de um sistema microprocessado, é necessária alguma forma de contagem, com uma frequência de contagem apropriada, assim como os valores de início e fim de contagem. Estes valores podem ser ajustados através de algumas simples “regras de três”.

Um projeto está em criação, e o programador, que utiliza o ATmega328, precisa que um evento seja tratado a cada 800ms, exatamente, através do módulo temporizador zero. Como isso pode ser feito?

Escolha uma:
a.
Simplesmente através da rotina de interrupção do temporizador zero, onde trata o evento a cada vez que for executada. Para isso, configura-se o divisor de relógio para contagem com 1024, e a fonte de relógio interna, de 16 MHz, e a contagem máxima de 12499. Dessa forma, a interrupção deste módulo, no modo CTC, irá ocorrer a cada 800 ms = (1024/16MHz) * 12500.

b.
Na verdade, não é possível gerar uma referência de tempo com este valor através do temporizador zero, pois a frequência mínima de contagem é aproximadamente 61 Hz (16 MHz/(1024*256)), ou seja, período de 16,384 ms. Isso se deve à frequência mínima, que se dá com o divisor máximo (1024), e ao limite máximo de contagem (256), limitado pelo tamanho do contador, de 8-bit.

c.
Através de uma técnica disponível para este modelo e periférico interno, que consiste em unir os dois temporizadores, zero e um, formando um único contador de 16-bit. Assim, trabalhando em modo normal, ou seja, sem alterar o limite máximo de contagem, a interrupção pode ser gerada a cada 800ms, e tratando o evento citado.

d.
Através da devida configuração do registrador de sinal de relógio interno do temporizador zero. Sabendo que este gerador pode operar com frequências muito baixas, pois utiliza cascata de divisores de sinal de relógio, e que o temporizador zero é de 8-bit, a frequência de contagem pode ser ajustada para 1,25 Hz, gerado uma interrupção a cada 800 ms, a cada incremento do contador.

e.
Através de duas maneiras: primeiro é utilizar um circuito externo gerador de sinal de relógio, e conectar este sinal ao pino apropriado do microcontrolador. Se a frequência do sinal externo estiver de ajustada corretamente (1,25 Hz), uma interrupção pode ser gerada a cada exatamente 800ms. Outra maneira é utilizar a fonte de sinal de relógio interna, de 16 MHz, com o divisor de relógio ajustado em 64, e a contagem máxima de 249. Assim, se habilitada, uma interrupção será gerada a cada 1 milissegundo. Com a adição de uma variável/contador, podemos contabilizar 800 ocorrências de interrupções seguidas, e tratar a tarefa então.

Soluções para a tarefa

Respondido por tigilla
56
e.Através de duas maneiras: primeiro é utilizar um circuito externo gerador de sinal de relógio, e conectar este sinal ao pino apropriado do microcontrolador. Se a frequência do sinal externo estiver de ajustada corretamente (1,25 Hz), uma interrupção pode ser gerada a cada exatamente 800ms. Outra maneira é utilizar a fonte de sinal de relógio interna, de 16 MHz, com o divisor de relógio ajustado em 64, e a contagem máxima de 249. Assim, se habilitada, uma interrupção será gerada a cada 1 milissegundo. Com a adição de uma variável/contador, podemos contabilizar 800 ocorrências de interrupções seguidas, e tratar a tarefa então. 

maestrobrozrtnd: correto!!!
Perguntas interessantes