Timer0 en Atmega16A

De Wikipedia, la enciclopedia libre

El Timer0 es un módulo para la función de registro de conteo y temporización de un microcontrolador. En el Atmega16A creado por Atmel, que pertenece a la serie megaAVR y consta de varias funciones, este timer es una de ellas.

Timer0 en Atmega16A[editar]

El Timer0 del ATmega16A es de 8 bits, por lo que puede contar de 0 a 255 pulsos de reloj. Puede programarse en cuatro diferentes formas de operación:

  • Modo Normal
  • Modo CTC (Clear on Compare Match)
  • Fast PWM (Pulse Width Modulation)
  • Phase Correct PWM Mode

Para utilizar el Timer0, es importante cargarle un valor a todos los siguientes registros.

TCCR0[editar]

Para utilizar el tipo deseado, se debe de cargar el valor correcto en el registro TCCR0 en los bits WGM01 y WGM00

Bit 7 6 5 4 3 2 1 0
FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
Valor Inicial 0 0 0 0 0 0 0 0
Modo WGM01 WGM00 Modo de operación
0 0 0 Normal
1 0 1 PWM, "Phase Correct"
2 1 0 CTC
3 1 1 "Fast PWM"

Una vez elegido el modo de operación, se debe seleccionar el prescaler con el que se desea trabajar. Para seleccionarlo hay que darle valor a los registros CS00, CS01, y CS02. A los bits FOC0, COM00 y COM01 se les carga un 0.

CS02 CS01 CS00 Descripción
0 0 0 "No clock source"
0 0 1 clkI/O ("No prescaling")
0 1 0 clkI/O/8 ("From prescaler")
0 1 1 clkI/O/64 ("From prescaler")
1 0 0 clkI/O/256 ("From prescaler")
1 0 1 clkI/O/1024 ("From prescaler")
1 1 0 "External clock source on T0 pin. Clock on falling edge"
1 1 1 "External clock source on T0 pin. Clock on rising edge"

Cuando se quiere que el timer se encuentre apagado deben ponerse los bits en 000. En 001 el timer comenzará a incrementarse por cada ciclo de reloj. Cualquier otro valor activaría el prescaler.

Registro TCNT0[editar]

Este registro de ocho bits se incrementará cada vez que ocurra un nuevo pulso de reloj.

Registro TIMSK[editar]

Bit 7 6 5 4 3 2 1 0
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0
Valor Inicial 0 0 0 0 0 0 0 0

Este registro indica si se requiere que el Timer0 genere una interrupción cada vez que ocurra un desbordamiento (overflow al alcanzar el TCNT un valor de 255), o que genere una interrupción toda vez que el valor del TCNT0 sea igual al valor del OCR0. Del bit siete al bit dos el valor tiene que ser 0. Si se requiere que se habilite la interrupción por comparación se deberá cargar un 1 al bit OCIE0 y si se desea que se habilite la interrupción por overflow hay que cargarle un 1 al bit TOIE0.

Registro OCR0[editar]

Este registro se utiliza para indicar hasta donde tiene que llegar el TCNT0 para habilitar la interrupción por comparación.

Registro TIFR[editar]

Este registro es el que indica cuando una interrupción esta activa. No es necesario cambiar los valores de este registro, ya que cambian sus valores por automático.

Bit 7 6 5 4 3 2 1 0
OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0
Valor Inicial 0 0 0 0 0 0 0 0

Los últimos dos bits son los que indican si están activas las interrupciones. Cuando el bit OCF0 está en 0 indica que se activó una interrupción por comparación y cuando el bit TOV0 está en 0 indica que se activó una interrupción por overflow.

Referencias[editar]

Bibliografía[editar]