Vous êtes sur la page 1sur 12

Timer 1

Modos: como contador, temporizador, modo comparador y modo PWM.


El timer1 AVR es un temporizador/contador de 16 bits. El registro donde se guardan los valores del timer1 AVR
es el registro temporizador contador representado por TCNT1.
Cuando es utilizado como temporizador, sus valores aumentaran de uno en uno entre 0 y 65535 con cada ciclo de
reloj, por ejemplo si el oscilador con el que est funcionando el microcontrolador AVR es de 1MHz, entonces el
registro TCNT1 aumentar una unidad en 1 us, si el registro TCNT1 se incrementa en 100 unidades habrn
transcurrido 100us.
Cuando es utilizado como contador el temporizador timer1 AVR ya no aumenta su valor de uno en uno en cada
ciclo de reloj, sino que lo har mediante el flanco de subida o el flanco de bajada de alguna seal que llegue a un pin
especial del AVR conectado al timer1 AVR, este pin es identificado como T1 .
El registro TCNT1 del timer1 AVR puede ser ledo y escrito, puede ser prescalado para que el tiempo en su
incremento de valor en una unidad sea mayor, el timer1 AVR cuando alcanza su valor mximo de 65535 se reinicia,
volviendo a incrementar sus valores de 0 a 65535, adems cuando llega a su valor mximo y se reinicia puede
producir una interrupcin, lo cual se decide por programa.

Timer1 AVR como contador (external clock)


TCCR1A=0
TCCR1B=00000111 00000010 dependiendo si queremos que el flanco sea ascendente o descendente.

Para el ATmega88 el registro TCNT1 del timer1 AVR est formado por 16 bits por lo que se puede contar desde
0 hasta 65535, al utilizar timer1 AVR como contador este no aumentar sus valores o su cuenta con cada ciclo de
programa, en este caso el timer1 estar conectado al pin T1 por donde se le har llegar una seal, la cual al cambiar
de estado har que el timer1 AVR se incremente en una unidad, estos incrementos en su cuenta pueden ser por
cada flanco de subida o cada por flanco de bajada de la seal, el flanco a utilizar se elige por programa; por ejemplo
su se elige el flanco de subida quiere decir que cada vez que la seal que llega al pin T1 pase de un bajo a un alto o
de 0 a 1, el registro TCNT1 aumentar en una unidad, de esta manera se le puede utilizar como contador, cuando
la seal pase de un alto a un bajo o de 1 a 0 el registro TCNT1 no aumentar su valor o no se incrementar.
Para programar el timer1 AVR como contador ser necesario colocar todos los bits del registro TCCR1A a cero,
esto es TCCR1A=0, en realidad esto no es necesario ya que el registro se inicializa automticamente a 0, este
registro ser til cuando se utilice el timer1 AVR en modo comparacin y para la modulacin de ancho de pulso
PWM.

El registro TCCR1B es el que permitir utilizar el timer1 avr como contador:

Segn se ve en la hoja de datos del ATmega88 para utilizar el timer1 AVR como contador, del registro TCCR1B
hay que manipular sus bits 0, 1 y 2 (CS10, CS11 y CS12) los dems bits se pondrn a 0, se tienen dos posibilidades,
para que el conteo se realice cuando la seal que llega al pin T0 pase de 0 a 1 o por flanco de subida estos 3 bits se
pondrn a 1 esto es CS00=1, CS01=1 y CS02=1; y si el conteo ser cuando la seal que llega al pin T0 pase de 1 a
0 o por flanco de bajada solo se pondrn a 1 los bits 1 y 2, mientras el bit0 se deja a 0 esto es CS00=0, CS01=1 y
CS02=1.

Al elegir alguna de las 2 posibilidades, cada vez que la seal digital que llegue al pin T1 pase de un alto a un bajo o
de un bajo a un alto, segn se haya elegido, el valor del contador, esto es el valor del registro TCNT1, aumentar
en una unidad hasta un mximo de 65535, luego se pondr nuevamente a 0 y otra vez comenzar el conteo.
El programa realizado en el atmel studio para el uso del temporizador contador timer1 AVR como contador es el
siguiente:
Timer1 AVR como temporizador
TCCR1A=0
TCCR1B=00000xxx (xxx=prescaler)

Para el ATmega88 el registro TCNT1 del timer1 AVR est formado por 16 bits por lo que se sus valores pueden
ser desde 0 hasta 65535, al utilizar timer1 AVR como temporizador este aumentar sus valores o su cuenta con cada
ciclo de reloj, sus valores aumentaran de uno en uno entre 0 y 65535, por ejemplo si el oscilador con el que est
funcionando el microcontrolador AVR es de 1MHz, entonces el registro TCNT1 aumentar una unidad en 1 us, si
el registro TCNT1 se incrementa en 2700 unidades habrn transcurrido 2700us.
Normalmente el registro del timer1 TCNT1 ir aumentando su conteo con cada ciclo de reloj del microcontrolador,
si se usa por ejemplo una frecuencia de trabajo (lo que se conoce como FCPU) de 1Mhz entonces el registro
TCNT1 aumentar en una unidad cada microsegundo, y como este registro es de 8 bits este aumentar desde 0, o
desde algn valor que se le ponga como valor inicial al registro TCNT1, hasta un mximo de 65535, por ejemplo si
va desde 0 hasta 65535 habrn transcurrido 65535us luego volver a 0 pero en esa vuelta a 0 transcurre 1us mas,
por lo cual en ir de 0 y volver a 0 transcurren 65536us; no siempre se utiliza una FCPU de 1Mhz esto puede variar,
por lo que como consecuencia variar el tiempo que trascurre para que el registro TCNT1 aumente su valor.
Para programar el timer1 AVR como temporizador ser necesario colocar todos los bits del registro TCCR1A a
cero, esto es TCCR1A=0, en realidad esto no es necesario ya que el registro se inicializa automticamente a 0, este
registro ser til cuando se utilice el timer1 AVR en modo comparacin y para la modulacin de ancho de pulso
PWM.

El registro TCCR1B es el que permitir utilizar el timer1 avr como temporizador:


El timer1 AVR cuenta con lo que se conoce como el prescaler esto hace que la frecuencia de trabajo FCPU se
divida por este prescaler, con lo que se logra que el timer1 AVR tarde un poco ms en aumentar su valor en una
unidad; el prescaler puede tomar el valor de 1, 8, 64, 256 o 1024; estos valores se eligen programando los bits 0, 1 y
2 del registro TCCR1B, los bits 7 a 3 en este caso se pondrn a 0.

En la siguiente tabla se ve los valores que hay que dar a estos bits para obtener los diferentes valores de los prescaler
para el temporizador timer1 AVR, observar que cuando estos bits son todos iguales a 0 el timer1 AVR est
deshabilitado.

Si el prescaler elegido es por ejemplo de 64 y la FCPU=1Mhz, entonces la frecuencia de trabajo del timer1
AVR Ftemp ser de Ftemp=FCPU/prescaler, el tiempo que tardar ahora el temporizador en aumentar una
unidad ser la inversa de este valor lo cual se conoce como periodo Ttemp=prescaler/FCPU por lo que en este
caso Ttemp=(64)/(1Mz) de donde Ttemp = 64us, esto quiere decir que ahora el timer1 AVR aumentar en una
unidad cada 65us y en este caso entonces el registro TCNT1 para ir de 0 a 65535 tardar
65535 * Ttemp = 65535 * 64us = 4194240us = 4,194240s; la misma idea es para los dems prescaler.
Al utilizar los prescaler se tiene la ventaja de lograr tiempos ms largos para cada incremento en una unidad del
registro TCNT1 del timer1 AVR, y por lo tanto realizar temporizaciones ms largas mientras el timer1 AVR
incrementa sus valores.
De acuerdo a los tiempos que se quieran obtener al utilizar el timer1 AVR, habr que utilizar el prescaler adecuado
as como inicializar el registro TCNT1 tambin con un valor adecuado, no olvidar que este registro es de 16 bits y
por lo tanto solo puede contener valores enteros entre 0 y 65535.
Utilizando una regla de 3 simple se llega a la siguiente ecuacin que ayudar a encontrar el valor inicial adecuado a
cargar en el registro TCNT1 para obtener el tiempo buscado.
TCNT1=216-Tretardo*(FCPU/prescaler)
Donde TCNT1 es el valor inicial a cargar en este registro para obtener el tiempo buscado, 216 porque el timer1 es
de 16 bits, Tretardo es el tiempo que se quiere obtener con el timer1 AVR, FCPU es la frecuencia de trabajo del
microcontrolador o del cristal utilizado, y prescaler ser el prescaler elegido segn la tabla anterior.
Por ejemplo si se quiere temporizar 500ms, en este caso 500ms sera el tiempo de retardo, y si el microcontrolador
AVR trabaja con una FCPU de 1Mhz, habr que elegir entre los posibles prescaler que se tienen, reemplazar en la
ecuacin anterior y ver si el nmero obtenido esta entre 0 y 65535, de ser as la eleccin del prescaler es correcta,
de lo contrario habr que utilizar otro, por ejemplo si se elige un prescaler de 8 se tendra:
TCNT1=65535-(500ms)(1Mhz)/8
TCNT1=3036
El valor obtenido est entre 0 y 65535 por lo que 3036 sera el valor inicial a cargar en el registro TCNT1 para
obtener una temporizacin de 500ms con el timer1 AVR, esto quiere decir que si se inicia el timer1 AVR con 3036 y
un prescaler de 8, cuando aumente su valor de 3036 a 65535 habrn transcurrido 500ms.
Este proceso ser el que se seguir cuando se utilice el timer1 AVR como temporizador.

Timer1 AVR en modo comparador modo CTC


Al utilizar el timer1 AVR en modo comparador ocurre que el registro TCNT1, que en este caso es de 16 bits, ir
aumentando su valor de uno en uno desde 0 hasta que este se haga igual a un valor almacenado en el
registro OCR1A (no en el registro OCR1B) o en el registro ICR1, en el momento que se hacen iguales los valores
de los registros TCNT1 y OCR1A o TCNT1 y ICR1, el registro TCNT1 se pone automticamente a cero o tambin
se dice se borra, para nuevamente comenzar a aumentar su valor desde 0 hasta que se vuelva hacer igual al valor
almacenado en el registro OCR1A o en el registro ICR1, ms adelante se ver como elegir para la comparacin el
registro OCR1A o el registro ICR1.
A esto se lo conoce como el modo de trabajo CTC, que quiere decir borrado del timer por comparacin.
Si se utiliza el modo CTC y se tiene almacenado un valor en el registro OCR1A o en el registro ICR1, eso quiere
decir que por el pin OC1A o el pin OC1B, ms adelante se ver como elegir el pin a utilizar, cuando el valor del
registro TCNT1 se haga igual al valor almacenado en el registro OCR1A o en el registro ICR1, ocurrir algn
evento en alguno de estos pines, como por ejemplo que si el pin est a uno se pondr a cero, o si est a cero se
pondr a uno; es necesario adems configurar el pin a utilizar como una salida mediante el registro DDRx
dependiendo en que puerto este el pin, que para el atmega88 est en el puerto B.
En el modo de trabajo CTC del timer1 se utilizarn los registros TCCR1A y TCCR1B
El registro TCCR1A con este registro se elige si el evento a ocurrir como respuesta por comparacin a la igualdad
entre el registro TCNT1 y el registro OCR1A o el registro ICR1, ser por el pin OC1A u OC1B, en la siguiente
imagen se tiene el registro TCCR1A, en el se pueden ver los nombres dados a sus bits.

Los bits 7 y 6 son para elegir que el evento cuando ocurra la comparacin sea por el pin OC1A, para elegir el tipo
de evento que ocurrir cuando se iguale el registro TCNT1 con el registro OCR1A o el registro ICR1, en el caso de
utilizar el pin OC1A para las combinaciones de los bits 7 y 6 se tiene la siguiente tabla, si ambos bits son 0 la opcin
OC1A del pin no est disponible trabajando el pin como una entrada salida digital normal.
Si por ejemplo los bits 6 y 7 se ponen a 0 el pin OC1A no se ver afectado por la comparacin pudiendo utilizarse
como una entrada salida digital, si por ejemplo el el bit7 se pone a 0 y el bit6 a 1 entonces el estado del pin
OC1A alternar cada vez que la comparacin ocurra, si el bit7 y el bt6 se ponen a 1 ocurrir que si el
pin OC1A estaba a 0 este se pondr a 1, pero si estaba a 1 este no se ver afectado.
Los bits 5 y 4 son para elegir que el evento cuando ocurra la comparacin sea por el pin OC1B, para elegir el tipo
de evento que ocurrir cuando se iguale el registro TCNT1 con el registro OCR1A o el registro ICR1, en el caso de
utilizar el pin OC1B para las combinaciones de los bits 5 y 4 se tiene la siguiente tabla, si ambos bits son 0 la opcin
OC1A del pin no est disponible trabajando el pin como una entrada salida digital normal.

Si por ejemplo los bits 5 y 4 se ponen a 0 el pin OC1B no se ver afectado por la comparacin pudiendo utilizarse
como una entrada salida digital, si por ejemplo el el bit5 se pone a 0 y el bit4 a 1 entonces el estado del pin OC1B
alternar cada vez que la comparacin ocurra, si el bit5 y el bt4 se ponen a 1 ocurrir que si el pin OC1B estaba a 0
este se pondr a 1, pero si estaba a 1 este no se ver afectado.
Los bits 3 y 2 no se utilizan por lo que se les suele pones a 0.
Los bits 1 y 0 en el modo comparacin se ponen a 0, ser utilizado en el modo PWM.
El registro TCCR1B con este registro se elige el prescaler a utilizar, para obtener en cuanto tiempo se quiere que
el registro TCNT1 se iguale al registro OCR1A o al registro ICR1, en la siguiente imagen se tiene el registro
TCCR1B, en el se pueden ver los nombres dados a sus bits.

Los bits 7 y 6 son utilizados en el modo captura por lo que en el modo CTC se les pone a 0.
El bit5 no se utilizan por lo que se les suele poner a 0.
Los bits 4 y 3 con estos bits se elige cual ser el registro utilizado en la comparacin con el registro TCNT1.

Si el bit4 es puesto a 0 y el bit3 es puesto a 1 el registro a utilizar en el modo CTC ser el registro OCR1A.
Si el bit4 es puesto a 1 y el bit3 es puesto a 1 el registro a utilizar en el modo CTC ser el registro ICR1.

Los bits 2, 1, y 0 son utilizados para elegir el prescaler de acuerdo a las combinaciones de estos bits, segn la
siguiente tabla.
Timer1 AVR en modo CTC los registro OCR1A e ICR1
En el registro OCR1A o en el registro ICR1 segn el que se elija con el el registro TCCR1B, se cargar el valor hasta
el cual se quiere que llegue el registro TCNT1 en el modo CTC, por lo que hay que ver como se puede encontrar el
valor adecuado a cargar en el registro OCR1A o en el registro ICR1, en lo que sigue se ver el procedimiento para
el registro OCR1A pero el lo mismo para el registro ICR1.
Se ha visto que para utilizar el timer1 AVR como temporizador hay que cargar el registro TCNT1 con un valor
obtenido de la siguiente ecuacin:
TCNT1=216-Tretardo*(FCPU/prescaler)-1
Para el caso de utilizar el timer1 AVR en modo de comparacin o CTC hay que cargar en el registro OCR1A, la
cantidad de veces que tiene que contar el registro TCNT1, lo que viene a ser el mximo valor al que el registro
TCNT1 puede llegar que es 65535 menos lo que sera necesario cargar en el registro TCNT1 para obtener el tiempo
buscado, entonces de la ecuacin anterior se tendra que cargar el registro OCR1A:
OCR1A = 216-TCNT0-1 = Tretardo*(FCPU/prescaler)
entonces:
OCR1A= Tretardo*(FCPU/prescaler)
El registros OCR1A es de 16 bits por lo que el valor obtenido mediante la ecuacin anterior tendr que ser un
nmero entero comprendido entre 0 y 65535, de no ser as el valor no ser vlido.
Por ejemplo, para lograr que la comparacin ocurra cada 500ms, utilizando un prescaler de 8 ser necesario cargar
el registro OCR1A con el valor de
OCR1A=(500ms)(1Mhz)/8
De donde OCR1A=62500
El valor obtenido est entre 0 y 65536, por lo que 62500 ser el valor a cargar en el registro OCR1A, si se elige el
registro ICR1 este sera el valor a cargar en este registro.
Para el registro TCNT1 del timer1 AVR, si se carga el registro OCR1A con 62500 y se utiliza un prescaler de 8,
entonces cuando aumente el valor del registro TCNT1 de 0 a 62500 habrn transcurrido 500ms.
62500 sera el valor a cargar en el registro OCR1A para que cada 500ms el valor del registro TCNT1 llegue a 62500 y
por comparacin se produzca un evento en el pin OC1A u OC1B, tras lo cual el registro TCNT1 se pondr
automticamente a 0 para volver a aumentar su valor nuevamente hasta 62500 en un lapso de 500ms y se vuelva ha
repetir el proceso.
Timer 2
En este caso se ver el uso del timer2 AVR, este temporizador no funciona como contador, solo como
temporizador, y puede ser usado en modo comparador, y tambin en modo PWM, el uso del timer2 AVR en modo
PWM se ver en otro apartado, a utilizarse el timer2 como temporizador, este tiene dos opciones, el timer2 AVR
puede trabajar con el mismo cristal o reloj con el cual trabaja el microcontrolador AVR, o el timer2 AVR puede
trabajar con un cristal o reloj independiente conectado exteriormente a los pines TOSC1 y TOSC2, en este caso se
dice que trabaja en forma asncrona al sistema.
El timer2 AVR es un temporizador de 8 bits, el registro donde se guardan los valores del timer2 AVR es el registro
representado por TCNT2, al ser utilizado este registro sus valores aumentaran de uno en uno entre 0 y 255 con
cada ciclo de reloj, puede ser el reloj al cual trabaja el microcontrolador AVR o un reloj externo, por ejemplo si
trabaja con el reloj del sistema y si el oscilador con el que est funcionando el microcontrolador AVR es de 1MHz,
entonces el registro TCNT2 aumentar una unidad en 1 us, si el registro TCNT2 se incrementa en 100 unidades
habrn transcurrido 100us.
El registro TCNT2 del timer2 AVR puede ser ledo y escrito, puede ser prescalado para que el tiempo en su
incremento de valor en una unidad sea mayor, el timer2 AVR cuando alcanza su valor mximo de 255 se reinicia,
volviendo a incrementar sus valores de 0 a 255, adems cuando llega a su valor mximo y se reinicia puede producir
una interrupcin, lo cual se decide por programa.

Timer2 AVR temporizador con reloj del sistema

TCCR2A=0

TCCR2B=00000xxx donde xxx=prescaler

Para el ATmega88 el registro TCNT2 del timer2 AVR est formado por 8 bits por lo que se sus valores pueden
ser desde 0 hasta 255, al utilizar timer2 AVR como temporizador este aumentar sus valores o su cuenta con cada
ciclo de reloj, sus valores aumentaran de uno en uno entre 0 y 255, por ejemplo si el oscilador con el que est
funcionando el microcontrolador AVR es de 1MHz, entonces el registro TCNT2 aumentar una unidad en 1 us, si
el registro TCNT2 se incrementa en 93 unidades habrn transcurrido 93us.
Normalmente el registro del timer2 TCNT2 ir aumentando su conteo con cada ciclo de reloj del
microcontrolador, si se usa por ejemplo una frecuencia de trabajo (lo que se conoce como FCPU) de 1Mhz
entonces el registro TCNT2 aumentar en una unidad cada microsegundo, y como este registro es de 8 bits este
aumentar desde 0, o desde algn valor que se le ponga como valor inicial al registro TCNT2, hasta un mximo de
255, por ejemplo si va desde 0 hasta 255 habrn transcurrido 255us luego volver a 0 pero en esa vuelta a 0 transcurre
1us mas, por lo cual en ir de 0 y volver a 0 transcurren 256us; no siempre se utiliza una FCPU de 1Mhz esto puede
variar, por lo que como consecuencia variar el tiempo que trascurre para que el registro TCNT2 aumente su valor.
Para programar el timer2 AVR como temporizador ser necesario colocar todos los bits del registro TCCR2A a
cero, esto es TCCR2A=0, en realidad esto no es necesario ya que el registro se inicializa automticamente a 0, este
registro ser til cuando se utilice el timer2 AVR en modo comparacin y para la modulacin de ancho de pulso
PWM.

El registro TCCR2B es el que permitir utilizar el temporizador timer2 avr.


El timer2 AVR cuenta con lo que se conoce como el prescaler esto hace que la frecuencia de trabajo FCPU se
divida por este prescaler, con lo que se logra que el timer2 AVR tarde un poco ms en aumentar su valor en una
unidad; el prescaler puede tomar el valor de 1, 8, 32, 64, 128, 256 o 1024; estos valores se eligen programando los
bits 0, 1 y 2 del registro TCCR2B, los bits 7 a 3 en este caso se pondrn a 0.

En la siguiente tabla se ve los valores que hay que dar a estos bits para obtener los diferentes valores de los prescaler
para el temporizador timer2 AVR, observar que cuando estos bits son todos iguales a 0 el timer2 AVR est
deshabilitado.

Si el prescaler elegido es por ejemplo de 8 y la FCPU=1Mhz, entonces la frecuencia de trabajo del timer2
AVR Ftemp ser de Ftemp=FCPU/prescaler, el tiempo que tardar ahora el temporizador en aumentar una
unidad ser la inversa de este valor lo cual se conoce como periodo Ttemp=prescaler/FCPU por lo que en este
caso Ttemp=(8)/(1Mz) de donde Ttemp=8us, esto quiere decir que ahora el timer2 AVR aumentar en una unidad
cada 8us y en este caso entonces el registro TCNT2 para ir de 0 a 255 tardar
255*Ttemp=255*8us=2040us=2,040ms; la misma idea es para los dems prescaler.
Al utilizar los prescaler se tiene la ventaja de lograr tiempos ms largos para cada incremento en una unidad del
registro TCNT2 del timer2 AVR, y por lo tanto realizar temporizaciones ms largas mientras el timer2 AVR
incrementa sus valores.
De acuerdo a los tiempos que se quieran obtener al utilizar el timer2 AVR, habr que utilizar el prescaler adecuado
as como inicializar el registro TCNT2 tambin con un valor adecuado, no olvidar que este registro es de 8 bits y
por lo tanto solo puede contener valores enteros entre 0 y 255.
Utilizando una regla de 3 simple se llega a la siguiente ecuacin que ayudar a encontrar el valor inicial adecuado a
cargar en el registro TCNT2 para obtener el tiempo buscado.
TCNT2=28-Tretardo*(FCPU/prescaler)
Donde TCNT2 es el valor inicial a cargar en este registro para obtener el tiempo buscado, 28 porque el timer2 es
de 8 bits, Tretardo es el tiempo que se quiere obtener con el timer2 AVR, FCPU es la frecuencia de trabajo del
microcontrolador o del cristal utilizado, y prescaler ser el prescaler elegido segn la tabla anterior.
Por ejemplo si se quiere temporizar 100ms, en este caso 100ms sera el tiempo de retardo, y si el microcontrolador
AVR trabaja con una FCPU de 1Mhz, habr que elegir entre los posibles prescaler que se tienen, reemplazar en la
ecuacin anterior y ver si el nmero obtenido esta entre 0 y 255, de ser as la eleccin del prescaler es correcta, de
lo contrario habr que utilizar otro, por ejemplo si se elige un prescaler de 1024 se tendra:
TCNT2=256-(100ms)(1Mhz)/1024
TCNT2=157,3437
El valor obtenido est entre 0 y 255 aunque no es un nmero entero, por lo que hay que redondearlo a un entero
cercano en este caso 158, al hacer esto la temporizacin no ser exactamente 100ms pero si un valor bastante
prximo y aceptable.
158 sera el valor inicial a cargar en el registro TCNT2 para obtener una temporizacin de 100ms con el timer2
AVR, esto quiere decir que si se inicia el timer2 AVR con 158 y un prescaler de 1024, cuando aumente su valor de
158 a 255 habrn transcurrido 100ms.
Este proceso ser el que se seguir cuando se utilice el timer2 AVR como temporizador.
Timer2 AVR en modo comparador

Al utilizar el timer2 AVR en modo comparador ocurre que el registro TCNT2, que en este caso es de 8 bits, ir
aumentando su valor de uno en uno desde 0 hasta que este se haga igual a un valor almacenado en el
registro OCR2A (no en el registro OCR2B), en el momento que se hacen iguales los valores de los registros
TCNT2 y OCR2A, el registro TCNT2 se pone automticamente a cero o tambin se dice se borra, para nuevamente
comenzar a aumentar su valor desde 0 hasta que se vuelva hacer igual al valor almacenado en el registro OCR2A.
A esto se lo conoce como el modo de trabajo CTC, que quiere decir borrado del timer por comparacin.
Si se utiliza el modo CTC y se tiene almacenado un valor en el registro OCR2A, eso quiere decir que por el pin
OC2A o el pin OC2B, ms adelante se ver como elegir el pin a utilizar en este caso para atmega88, cuando el valor
del registro TCNT2 se haga igual al valor almacenado en el registro OCR2A ocurrir algn evento en alguno de
estos pines, como por ejemplo que si el pin est a uno se pondr a cero, o si est a cero se pondr a uno; es necesario
adems configurar el pin a utilizar como una salida mediante el registro DDRx dependiendo en que puerto este el
pin.
En el modo de trabajo CTC del timer2 se utilizarn los registros TCCR2A y TCCR2B
El registro TCCR2A con este registro se elige si el evento a ocurrir como respuesta por comparacin a la igualdad
entre el registro TCNT2 y el registro OCR2A, ser por el pin OC2A u OC2B, en la siguiente imagen se tiene el
registro TCCR2A, en l se pueden ver los nombres dados a sus bits.

Los bits 7 y 6 son para elegir que el evento cuando ocurra la comparacin sea por el pin OC2A, para elegir el tipo
de evento que ocurrir cuando se iguale el registro TCNT2 con el registro OCR2A, en el caso de utilizar el pin
OC2A para las combinaciones de los bits 7 y 6 se tiene la siguiente tabla, si ambos bits son 0 la opcin OC2A del
pin no est disponible trabajando el pin como una entrada salida digital normal.
Si por ejemplo los bits 6 y 7 se ponen a 0 el pin OC2A no se ver afectado por la comparacin pudiendo utilizarse
como una entrada salida digital, si por ejemplo el bit7 se pone a 0 y el bit6 a 1 entonces el estado del pin
OC2A alternar cada vez que la comparacin ocurra, si el bit7 y el bt6 se ponen a 1 ocurrir que si el
pin OC2A estaba a 0 este se pondr a 1, pero si estaba a 1 este no se ver afectado.
Los bits 5 y 4 son para elegir que el evento cuando ocurra la comparacin sea por el pin OC2B, para elegir el tipo
de evento que ocurrir cuando se iguale el registro TCNT2 con el registro OCR2A, en el caso de utilizar el pin
OC2B para las combinaciones de los bits 5 y 4 se tiene la siguiente tabla, si ambos bits son 0 la opcin OC2A del
pin no est disponible trabajando el pin como una entrada salida digital normal.

Si por ejemplo los bits 5 y 4 se ponen a 0 el pin OC2B no se ver afectado por la comparacin pudiendo utilizarse
como una entrada salida digital, si por ejemplo el bit5 se pone a 0 y el bit4 a 1 entonces el estado del pin OC2B
alternar cada vez que la comparacin ocurra, si el bit5 y el bt4 se ponen a 1 ocurrir que si el pin OC2B estaba a 0
este se pondr a 1, pero si estaba a 1 este no se ver afectado.
Los bits 3 y 2 no se utilizan por lo que se les suele pones a 0.
El bit1 para utilizar el modo CTC tiene que ser puesto a 1, Muy importante!
El bit0 este bit en el modo comparacin se pone a 0, ser utilizado en el modo PWM.
El registro TCCR2B con este registro se elige el prescaler a utilizar, para obtener en cuanto tiempo se quiere que
el registro TCNT2 se iguale al registro OCR2A, en la siguiente imagen se tiene el registro TCCR2B, en el se pueden
ver los nombres dados a sus bits.

Los bits 7 y 6 no son utilizados en el modo CTC por lo que se les pone a 0.
Los bits 5 y 4 no se utilizan por lo que se les suele poner a 0.
El bit3 este bit en el modo comparacin se pone a 0, ser utilizado en el modo PWM.
Los bits 2, 1, y 0 son utilizados para elegir el prescaler de acuerdo a las combinaciones de estos bits, segn la
siguiente tabla.
Timer2 AVR en modo comparador modo CTC el registro OCR2A
En el registro OCR2A se cargar el valor hasta el cual se quiere que llegue el registro TCNT2 en el modo CTC, por
lo que hay que ver cmo se puede encontrar el valor adecuado a cargar en el registro OCR2A, se ha visto que para
utilizar el timer2 AVR como temporizador hay que cargar el registro TCNT2 con un valor obtenido de la siguiente
ecuacin:
TCNT2=28-Tretardo*(FCPU/prescaler)-1
Para el caso de utilizar el timer2 AVR en modo de comparacin o CTC hay que cargar en el registro OCR2A,
la cantidad de veces que tiene que contar el registro TCNT2, lo que viene a ser el mximo valor al que el registro
TCNT2 puede llegar que es 255 menos lo que sera necesario cargar en el registro TCNT2 para obtener el tiempo
buscado, entonces de la ecuacin anterior se tendra que cargar el registro OCR2A:
OCR02A = 28-TCNT2-1 = Tretardo*(FCPU/prescaler)
entonces:
OCR2A= Tretardo*(FCPU/prescaler)
El registros OCR2A es de 8 bits por lo que el valor obtenido mediante la ecuacin anterior tendr que ser un
nmero entero comprendido entre 0 y 255, de no ser as el valor no ser vlido.
Por ejemplo, para lograr que la comparacin ocurra cada 50ms, utilizando un prescaler de 256 ser necesario cargar
el registro OCR2A con el valor de
OCR2A = (50ms)(1Mhz)/256
De donde OCR2A=195,3125
El valor obtenido est entre 0 y 255 aunque no es un nmero entero, por lo que hay que redondearlo al entero ms
cercano en este caso 195, al hacer esto la comparacin no ocurrir exactamente a los 50ms pero si en un momento
bastante prximo y aceptable.
Para el registro TCNT02 del timer2 AVR, si se carga el registro OCR2A con 195 y se utiliza un prescaler de 256,
entonces cuando aumente el valor del registro TCNT2 de 0 a 195 habrn transcurrido 50ms.
195 sera el valor a cargar en el registro OCR2A para que cada 50ms el valor del registro TCNT2 llegue a 195 y por
comparacin se produzca un evento en el pin OC2A u OC2B, tras lo cual el registro TCNT2 se pondr
automticamente a 0 para volver a aumentar su valor nuevamente hasta 195 en un lapso de 50ms y se vuelva a
repetir el proceso.

Vous aimerez peut-être aussi