quarta-feira, outubro 23, 2019

Timer1 do ATmega328 - Parte 5

Para fechar esta série de posts vamos falar das interrupções que podem ser geradas pelo Timer. Lembrando, uma interrupção é algo que interrompe o fluxo normal do programa para executar uma rotina específica (de preferência curta e rápida, para não impactar o processamento normal.


O Timer1 é capaz de gerar alguns tipos de interrupção. Quando determinadas situações ocorrem, um bit é ligado no registrador TIFR1 - Timer 1 Interrupt Flag Register. Se o mesmo bit estiver ligado no registrador TIMSK1 (Timer 1 Interupt Mask Register), uma interrupção é gerada e o bit é automaticamente desligado no TIFR1.




São quatro possíveis motivos para gerar interrupção e cada um tem um "vetor" (endereço) separado.



Detalhando os quatro eventos possíveis:
  • Timer overflow: ocorre quando o contador "dá a volta":
    • Nos modos Normal e CTC (onde o contador é sempre incrementado) isto é quando o contador passa de 0xFFFF para zero. 
    • No modo "Fast PWM" (onde o contador também é sempre incrementado) o evento é quando o  contador passa do valor máximo programado para zero. 
    • Nos modos "PWM Phase Correct e PWM Phase and Frequency Correct" (onde o contador conta de zero até o máximo programado e depois do máximo programado até zero, ver a parte 4) o  evento é quando o contador é decrementado para zero.
  • Input Capture: ocorre quando temos um evento de captura (ver a parte 3). Sinaliza que foi concluída uma medição pela unidade de captura.
  • Output Compare (A e B): ocorrem quando o contador atinge o valor em OCR1A ou OCR1B.
Um uso comum do Timer1 é gerar interrupções periódicas para servir de base de tempo para as ações do programa. Isto pode ser feito usando o Timer Overflow no modo Normal ou um Output Compare no modo CTC.

Nenhum comentário: