Está en la página 1de 22

__________________________________________________________________________ITSP

Timer1 del AVR


7.1 INTRODUCCIN
Timer/Contador 1 de 16 bits.

Registros
El registro del Timer/Contador 1 (TNCT1), y los Registros de Comparacin de Salida
(OCR1A/B) y de Captura de Entrada (ICR1) todos son de 16 bits. Se usan
procedimientos especiales cuando se accesan los registros de 16 bits. Los registros de
Control del Timer/Contador 1 (TCCR1A/B) son registros de 8 bits y no existen
restricciones de acceso. Las seales de peticin de interrupciones (Interruption
Request) son visibles en el Registro de Banderas de Interrupciones (TIMSK). Los
registros TIFR y TIMSK no se muestran en las figuras ya que estos registros son
compartidos por otras unidades.
Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

El Timer/Contador 1 puede ser sincronizado internamente va el preescalador o por una


fuente externa de reloj en el pin T1. El bloque lgico de seleccin de reloj controla cual
fuente de reloj, y si se incrementa (o decrementa) su valor. El Timer/Contador 1 esta
inactivo cuando ninguna fuente se selecciona. La salida de la seleccin lgica del reloj
se refiere al reloj del timer (clkT1). Los registros de comparacin de salida de doble
buffer (OCR1A/B) son comparados con el valor del Timer/Contador 1 en todo momento.
El resultado de la comparacin se puede usar por el generador de forma de onda y
generar PWM o variables de frecuencia de salida en el pin de salida de comparacin
(OC1A/B). Un evento de igualdad en la comparacin tambin activar la bandera de
comparacin igualada (OCF1A/B) la cual se usa para generar solicitudes de
interrupciones en la comparacin de salida.
El registro de captura de entrada puede capturar el valor del Timer/Contador 1 en un
evento externo dado (disparo de transicin) o ya sea por el pin de Captura de entrada
(ICP1) o por los pines del Comparador Analgico. La unidad de captura de entrada
incluye una unidad de filtrado (cancelador de ruido) para la reduccin de picos de ruido.
El valor TOP, o valor mximo del Timer/Contador 1, en algunos modos de operacin
pueden ser definidos por el registro OCR1A, el registro ICR1 o por un conjunto de
valores fijos. Cuando se usa OCR1A como valor TOP en el modo PWM, el registro
OCR1 no puede ser utilizado para generar una salida PWM. Sin embargo, el valor TOP
ser de doble buffer permitiendo al valor TOP sea cambiado mientras este corriendo el
contador. Si un valor fijo TOP se requiere, el registro ICR1 puede usarse como una
alternativa, liberando OCR1A/B a ser usado como salida PWM.
Definiciones
BOTTOM. El contador alcanza el BOTTOM cuando llegar a ser 0x0000.
MAX. El contador alcanza su mximo valor cuando llega a ser 0xFFFF (65535).
TOP. El contador alcanza su TOP cuando llega a ser igual al valor ms alto en la
secuencia de conteo. El valor TOP puede ser asignado a uno de los valores fijos:
0x00FF, 0x1FF, 0x03FF o a los valores almacenados en los registros OCR1A o ICR1.
La asignacin depende del modo de operacin.
Accesando a los Registros de 16 bits
Los registros TCNT1, OCR1A/B e ICR1 son registros de 16 bits que pueden ser
accesados por el CPU del AVR va el bus de datos de 8 bits. El registro de 16 bits debe
ser accesado usando 2 operaciones de lectura o escritura. Cada timer de 16 bits tiene
un solo registro temporal de 8 bits para almacenamiento temporal del byte alto de 16
bits. El mismo registro temporal se comparte entre los registros de 16 bits dentro de
cada timer de 16 bits. Accesando al byte bajo del registro de 16 bits ya sea escribiendo
o leyendo en l se dispara esta operacin. Cuado el byte bajo del registro de 16 bits se
escribe por el CPU, el byte alto se almacena en el registro temporal, y escrito ambos,
estos son copiados al registro de 16 bits en el mismo ciclo de reloj. Cuando el byte bajo
del registro de 16 bits es ledo por el CPU, el byte alto del registro de 16 bits se copia
dentro del registro temporal en el mismo ciclo de reloj tal como el byte bajo es ledo.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP
No todos los accesos a 16 bits utilizan el registro temporal para el byte alto. Leyendo los
registros de 16 bits OCR1A/B no involucran registros temporales.
Para realizar una escritura a 16 bits, el byte alto debe ser escrito antes que el byte bajo.
Para una lectura a 16 bits, el byte bajo debe ser ledo antes del byte alto.
El siguiente cogido ejemplo muestra como accesar a los registros del Timer de 16 bits
asumiendo que ninguna interrupcin se actualiza el registro temporal.

El cdigo ensamblador del ejemplo retorna el valor de TCNT1 en el par de registros


r17:r16. Es importante notar que el acceso a registros de 16 bits son operaciones
atmicas. Si una interrupcin ocurre entre las dos instrucciones de acceso a los
registros de 16 bits, y el cdigo de interrupcin actualiza el registro temporal accesando
al mismo o a otros registros de timers a 16 bits, entonces el resultado del acceso a
estos registros ser corrompido. Por consiguiente, cuando el cdigo principal y el cdigo
de interrupcin actualicen los registros temporales, el cdigo principal deber
deshabilitar las interrupciones durante el acceso a 16 bits.
El siguiente cdigo ejemplo muestra como hacer una lectura atmica al contenido del
registro TCNT1. Leyendo cualquier cualquiera de los registros OCR1A/B o ICP1 puede
ser hecho usando el mismo principio.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

El cdigo ejemplo ensamblador retorna el valor de TCNT1 en el par de registros r17:r16.


El siguiente cdigo ejemplo muestra como hacer una escritura atmica al contenido de
los registros TCNT1. Escribiendo a cualquiera de los registros OCR1A/B o ICP1 puede
ser hecho usando el mismo principio.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

Fuentes de reloj del Timer/Contador 1


El Timer/Contador 1 puede ser sincronizado por una fuente de reloj interna o externa, la
fuente de reloj se selecciona por la unidad lgica de seleccin de reloj la cual se
controla por los bits de seleccin (CS12:0) localizados en el registro de control B del
Timer/Contador 1 (TCCR1B).
Unidad de conteo.
La parte principal para el Timer/Contador 1 de 16 bits es la programacin de la unidad
de conteo bidireccional.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

Descripcin de seales (seales internas):


Count Se incrementa o decrementa TCNT1 en 1.
Direction Se selecciona entre incremento o decremento.
Clear Limpia el TCNT1.
clkT1 Reloj del Timer/Contador 1.
TOP Sealiza que TCNT1 ha alcanzado el valor mximo.
BOTTOM Sealiza que TCNT1 ha alcanzado su valor mnimo.
El contador a 16 bits se mapea dentro de las localidades de memoria de 8 bits de I/O:
Parta alta del contador (TCNT1H) que contiene los 8 bits ms altos del contador, y la
parte baja del contador (TCNT1L) que contiene los 8 bits ms bajos del contador. El
registro TCNT1H puede solamente accesar indirectamente por el CPU. Cuando el CPU
realiza un acceso a la localidad TCNT1H I/O, el CPU accesa a la parte alta del registro
temporal (TEMP). El registro temporal se actualiza con el valor de TCNT1H cuando el
TCNT1L se lee, TCNT1H se actualiza con el valor del registro temporal cuando TCNT1L
se escribe. Esto permite al CPU leer o escribir al valor entero del contador de 16 bits
dentro de un ciclo de reloj va el bus de datos de 8 bits. Es importante notar que existen
casos especiales cuando se escribe al registro TCNT1 mientras esta contando que
darn resultados impredecibles. Los casos especiales se describen en las secciones
donde son de importancia.
Dependiendo del modo de operacin usado, el contador se limpia, se incrementa o
decrementa en cada ciclo de reloj (clkT1). El clkT1 puede ser generado de una fuente
de reloj externo o interno, seleccionando los bits de Seleccin de Reloj (CS12:0).
Cuando ninguna fuente de reloj se selecciona (CS12:0 = 0) el timer se detiene. Sin
embargo, el valor de TCNT1 puede ser accesado por el CPU, independientemente de si
clkT1 esta presente o no. Una escritura del CPU tiene prioridad sobre todos las
operaciones del contador o de limpieza del contador.
La secuencia de conteo se determina por los bits de configuracin del Modo de
Generacin de Forma de Onda (WGM13:0) localizados en los Registros de Control del
Timer/Contador 1 A y B (TCCR1A y TCCR1B) existen conexiones entre como el
contador cuenta y como se generan las formas de onda en la salida de la Comparacin
de salida OC1x. La Bandera de Sobreflujo del Timer/Contador 1 (TOV1) es colocada de
acuerdo al modo de operacin seleccionado por los bits WGM13:0. TOV1 puede ser
usado para generar la interrupcin del CPU.
Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

Unidad de Captura de Entrada


El Timer/Contador 1 incorpora una Unidad de Entrada de Captura que puede capturar
eventos externos y darles una indicacin de ocurrencia en el tiempo estampado. La
seal externa indican que un evento o mltiples eventos pueden ser aplicados va el pin
ICP1 o alternadamente, va la unidad del Comparador Analgico. El tiempo estampado
puede ser usado para calcular la frecuencia, la razn del ciclo, y otras caractersticas de
la seal aplicada. Alternativamente el tiempo estampado puede ser usado para crear un
registro de los eventos.
A continuacin se ilustra el diagrama a bloques de la unidad de captura de entrada.

Cuando ocurre un cambio en nivel lgico (un evento) en el pin de Captura de Entrada
(ICP1), o alternativamente en la Salida del Comparador Analgico (ACO) y este cambio
se confirma por los ajustes del detector de transicin, una captura ser disparada.
Cuando se dispara una captura, el valor de 16 bits del contador (TCNT1) se escribe en
el Registro de Captura de Entrada (ICR1). La bandera de Captura de Entrada (ICF1) se
pone a uno en el mismo ciclo de reloj as como el valor de TCNT1 se copia dentro del
registro ICR1. Si esta habilitado (TICIE1 = 1), la bandera de captura de entrada genera
una interrupcin de captura de entrada. La bandera ICF1 es automticamente limpiada
cuando la interrupcin se ejecuta. Alternadamente la bandera ICF1 puede ser limpiada
por software escribiendo un uno lgico en la localidad del bit de I/O.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP
Leyendo el valor de 16 bits en el Registro de Captura de Entrada (ICR1) se realiza
primeramente leyendo el byte bajo (ICR1L) y entonces el byte alto (ICR1H). Cuando el
byte bajo es ledo el byte alto se copia dentro del registro temporal del byte alto (TEMP).
Cuando el CPU lee la localidad ICR1H I/O accesar al registro TEMP.
El registro ICR1 puede ser escrito solamente cuando se usa el modo de generacin de
forma de onda que utiliza al registro ICR1 para definir el valor TOP del contador. En
estos casos los bits del modo de generacin de forma de onda (WGM13:0) deben ser
puestos a su valor TOP antes de escribirse al registro ICR1. Cuando se escribe al
registro ICR1 el byte alto debe ser escrito en la localidad ICR1H I/O antes que el byte
bajo es escrito en ICR1L.
Fuente de Captura de Entrada del Pin
La principal fuente de disparo para la unidad de captura de entrada es el pin de captura
de entrada (ICP1). El Timer/Contador 1 puede alternarse usando la salida del
comparador anlogo como fuente de disparo ajustando el bit de Captura de Entrada del
Comparador Anlogo (ACIC) en el Registro de Estado de Control del Comparador
Anlogo (ACSR). Ten cuidado que cambiando la fuente de disparo puede activar una
captura. La bandera de captura de entrada debe limpiarse despus del cambio.
Ambas entradas el pin de captura de entrada (ICP1) y la salida del comparador anlogo
(ACO) son muestreadas usando algunas tcnicas para el pin T1. El detector de flanco
es tambin idntico. Sin embargo, cuando el cancelador de ruido de activa, lgica
adicional se inserta antes que el detector de flanco, el cual incrementa el retardo por 4
ciclos de reloj. Note que la entrada del cancelador de ruido y el detector de flanco esta
siempre habilitado a menos que el Timer/Contador 1 es puesto en modo generacin de
forma de onda que utiliza ICR1 para definir el TOP.
Una captura de entrada puede ser disparada por software controlando el puerto del pin
ICP1.
Cancelador de Ruido
El cancelador de ruido mejora la inmunidad de ruido usando un esquema de filtrado
digital simple. La entrada del cancelador de ruido se monitorea sobre cuatro muestras, y
las cuatro deben ser iguales para cambiar la salida que esta en turno por el detector de
flanco.
El cancelador de ruido se habilita ajustando el bit de cancelador de ruido de entrada
(ICNC1) en el registro B de control del Timer/Contador 1 (TCCR1B). Cuando se habilita
el cancelador de ruido se introducen cuatro ciclos de reloj ms de retardo para un
cambio aplicado a la entrada, hasta la actualizacin del registro ICR1. El cancelador de
ruido utiliza el sistema de reloj y por consiguiente no se afecta por el preescalador.
Usando la Unidad de Captura de Entrada
El principal desafo cuando se usa la unidad de captura de entrada es asignar bastante
capacidad en el procesador para el manejo de eventos de entrada. El tiempo entre dos
Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP
eventos es crtico. Si el procesador no ha ledo el valor de captura en el registro ICR1
antes que el prximo evento ocurra, el ICR1 ser sobrescrito con un nuevo valor. En
este caso el resultado de la captura ser incorrecto.
Cuando se usa la interrupcin de captura de entrada, el registro ICR1 deber ser ledo
tan pronto como el manejador de rutina de interrupcin sea posible. An cuando la
interrupcin de captura de entrada tenga relativamente una alta prioridad, el tiempo de
respuesta de interrupcin mxima es dependiente en el nmero mximo de ciclos de
reloj manejando cualquiera de las solicitudes de interrupcin.
Usando la unidad de captura de entrada en cualquier modo de operacin cuando el
valor TOP (resolucin) es cambiado durante la operacin activa, no es recomendable.
La medida de un ciclo de una seal externa requiere que el flanco de disparo sea
cambiado despus de cada captura. Cambiando el flanco de sensado debe ser hecho
tan pronto como sea posible despus del registro ICR1 sea ledo. Despus de un
cambio en el flanco, la bandera de captura de entrada (ICF1) debe ser limpiada por
software (escribiendo un uno lgico al bit de la localidad de I/O). Para medir solamente
la frecuencia, limpiando la bandera ICF1 no es requerida (si se usa un manejador de
interrupcin).
Unidades de Comparacin de Salida
El comparador a 16 bits continuamente compara a TCNT1 con el registro de
Comparacin de Salida (OCR1x). Si TCNT iguala a OCR1x el comparador sealizara
una igualdad. Una igualdad pondr a uno la bandera de comparacin de salida (OCF1)
en el prximo ciclo del timer. La bandera OCF1x automticamente se limpia cuando la
interrupcin se ejecuta. Alternadamente la bandera OCF1x puede ser limpiada por
software escribiendo un uno lgico a su localidad de I/O. El generador de forma de onda
usa esta seal de igualdad para generar una salida acorde al modo de operacin
seleccionado por los bits (WGM13:0) y los bits del modo de comparacin de salida
(COM1x1:0). Las seales de TOP y BOTTOM son usadas por el generador de forma de
onda para el manejo de casos especiales de valores extremos en algunos modos de
operacin.
Una caracterstica especial de la unidad de comparacin de salida A es que permite
definir el valor TOP del Timer/Contador 1 (por ejemplo, la resolucin del contador). En
resumen la resolucin de contador, el valor TOP define el periodo de tiempo para
generar las formas de ondas por el generador.
La figura siguiente muestra un diagrama a bloques de la unidad de comparacin de
salida. La letra n indica el nmero del timer 1, y x indica la unidad de comparacin de
salida (A/B).

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

El registro OCR1x es de doble buffer cuando se usa para cualquiera de los 12 modos
de PWM. Para los modos de operacin normal y limpieza del timer por comparacin
(CTC), el doble buffer se deshabilita. El doble buffer sincroniza la actualizacin del
registro de comparacin OCR1x ya sea en TOP o en BOTTOM de la secuencia de
conteo. La sincronizacin previene la ocurrencia de longitudes impares, pulsos no
simtricos PWM, y la creacin de la salida libre de fallas. El acceso al registro OCR1x
puede ser complicado, pero este no es el caso. Cuando el doble buffer se habilita el
CPU tienen acceso al registro del buffer OCR1x, y si el doble buffer se deshabilita, el
CPU accesar al OCR1x directamente. El contenido de OCR1x (Buffer de comparacin)
solamente se cambia por una operacin de escritura (el Timer/Contador 1 no actualiza
este registro automticamente como el TCNT1 y el registro ICR1). Por consiguiente
OCR1x no es ledo va el registro temporal alto (TEMP). Sin embargo, es una buena
prctica leer primero el byte bajo cuando se accesa a registros de 16 bits. Escribiendo a
los registros OCR1x debe ser hecho va el registro TEMP ya que la comparacin de
todos os 16 bits se hacen automticamente. El byte alto (OCR1xH) tiene que estar
escrito primero. Cuando el byte alto de la localidad de I/O es escrito por el CPU, el
registro TEMP ser actualizado por el valor escrito. Entonces cuando el byte bajo
(OCR1xL) se escriben a los ochos bits bajos, el byte alto ser copiado dentro de los 8
bits altos del buffer OCR1x o el registro de comparacin OCR1x en el mismo ciclo del
sistema de reloj.
Comparacin de Salida Forzada
En los modos de generacin de forma de onda no PWM, la salida igualada del
comparador puede ser forzada escribiendo a uno el bit de Comparacin de Salida
Documento traducido de la hoja de datos del ATmega32

10

__________________________________________________________________________ITSP
Forzada (FOC1x). Forzando una comparacin igualada no ser puesta a uno la
bandera OCF1x o recarga/limpia del timer, pero el pin OC1x ser actualizado como si
una comparacin igualada real haya ocurrido (el ajuste de los bits COM1x1:0 definen si
el pin OC1x es puesto a uno, limpiado o invertido).
Bloqueo de una Comparacin Igualada por una escritura en TCNT1
Todas las escrituras del CPU al registro TCNT1 bloquearan cualquier comparacin
igualada que ocurra en el prximo ciclo de reloj del timer, an cuando el timer sea
detenido. Esta caracterstica permite a OCR1x sea inicializado al mismo valor como
TCNT1 sin disparar una interrupcin cuando el Timer/Contador 1 del reloj sea
habilitado.
Usando la Unidad de Comparacin de Salida
Ya que al escribir al TCNT1 en cualquier modo de operacin bloqueara todas las
igualdades de comparacin por un ciclo de reloj del timer, existe un riesgo involucrado
cuando cambiamos a TCNT1 al usar cualquier unidad de comparacin de salida,
independientemente si el Timer/Contador 1 esta corriendo o no. Si el valor escrito a
TCNT1 iguala al valor OCR1x, la comparacin igualada se perder, resultando una
incorrecta generacin de forma de onda. No escriba el TCNT1 igual a TOP en los
modos PWM con valores TOP variables. La comparacin igualada para el TOP ser
ignorada y el contador continuara hasta 0xFFFF. Similarmente, no escriba a TCNT1 a
BOTTOM cuando el contador este decrementndose.
El ajuste de OC1x deber realizarse antes del establecimiento del registro de direccin
de datos para el pin del puerto como salida. La manera ms fcil de ajustar el valor de
OC1x es usar los bits en la comparacin de salida forzada (FOC1x) en el modo normal.
El registro OC1x mantiene su valor an cuando cambie entre los modos de generacin
de forma de onda.
Tenga cuidado de que los bits COM1x1:0 no son de doble buffer junto con el valor de
comparacin. Cambiando los bits COM1x1:0 tomara efecto inmediatamente.
Unidad de Comparacin Igualada de Salida
Los bits del modo de comparacin de salida (COM1x1:0) tienen dos funciones. El
generador de forma de onda usa los bits COM1x1:0 para definir el estado de la
comparacin de salida (OC1x) en la prxima comparacin igualada. En segundo lugar
los bits COM1x1:0 controlan la fuente de salida del pin OC1x. La figura siguiente
muestra un diagrama esquemtico del ajuste de los bits COM1x1:0. Los registros de
I/O, los bits de I/O, y los pines de I/O en la figura se muestran en negritas. Solamente
las partes de los registros de control del puerto de I/O (DDR y PORT) que son afectadas
por los bits COM1x1 se muestran. Cuando nos referimos al estado OC1, la referencia
es para el registro interno OC1x, no el pin OC1. Si un reset en el sistema ocurre, el
registro OC1x se refiere como un 0.

Documento traducido de la hoja de datos del ATmega32

11

__________________________________________________________________________ITSP

La funcin general del puerto de I/O es sobre escrita por el comparador de salida
(OC1x) del generador de forma de onda si los bits del COM1x1:0 son puestos. Sin
embargo, la direccin del pin OC1x (entrada o salida) es an controlada por el registro
de direccin de datos (DDR) para el pin del puerto. El bit del registro de direccin de
datos para el pin OC1x (DDR_OC1x) debe de estar colocada como salida antes que el
valor de OC1x sea visible en el pin. La funcin de sobre escritura del puerto es
generalmente independiente del modo de generacin de la forma de onda, pero existen
algunas excepciones. El diseo del pin lgico de la comparacin de salida permite la
inicializacin del estado de OC1x antes que la salida sea habilitada. Note que ciertos
bits de COM1x1:0 se reservan para ciertos modos de operacin. Los bits COM1x1:0 no
tienen efecto en la unidad de captura de entrada.
Modo de Salida de Comparacin y Forma de Onda
El generador de forma de onda usa los bits COM1x1:0 para el modo normal, CTC, y
PWM. Para todos los modos, el ajuste de COM1x1:0 le dice al generador de forma de
onda que ninguna accin en el registro OC1x sea ejecutada en la prxima comparacin
igualada. Verifique las siguientes tablas para el ajuste de los bits en los modos en
particular.
Modos de Operacin
El modo de operacin, por ejemplo, la conducta del Timer/Contador 1 y la salida de los
pines de la comparacin de salida se definen por la combinacin de los bits del modo
de Generacin de la Forma de Onda (WGM13:0) y los bits del Modo de Comparacin
de Salida (COM1x1:0). Los bits del modo de Comparacin de Salida no afectan la
secuencia de conteo, mientras que los bits del modo de generacin de forma de onda
Documento traducido de la hoja de datos del ATmega32

12

__________________________________________________________________________ITSP
si. Los bits COM1x1:0 controlan si la salida del PWM deber ser invertida o no (PWM
invertido o no invertido). Para modo no PWM los bits COM1x1:0 controlan si la salida
deber ser puesta a uno, limpiada o invertida cuando se iguala la comparacin.
Modo Normal
Es el modo ms simple de operar (WGM13:0 = 0). En este modo la direccin del conteo
es siempre ascendente y no se ejecuta ninguna limpieza al contador. El contador
simplemente sigue contando cuando pasa de su mximo valor de 16 bits (MAX =
0xFFFF) y entonces se reinita a su valor BOTTOM (0x0000). En operacin normal la
bandera de Sobreflujo del Timer/Contador 1 (TOV1) ser puesta en uno en el mismo
ciclo de reloj como TCNT1 llega ser cero. La bandera TOV1 en este caso llega a ser
como el 17vo bit, excepto que solamente puesto a uno, no limpiado. Sin embargo,
combinado con la interrupcin del sobreflujo del timer que automticamente limpia la
bandera TOV1, la resolucin del timer puede ser incrementada por software. No existen
casos especiales para considerar en el modo normal, un valor nuevo de contador
puede ser escrito en cualquier tiempo.
La Unidad de Captura de Entrada es fcil de usar en el modo normal. Sin embargo,
observe que el mximo intervalo entre los eventos externos no debe exceder la
resolucin del contador. Si el intervalo entre los eventos es muy largo, la interrupcin
del sobreflujo del timer o el preescalador deben ser utilizados para extender la
resolucin de la unidad de captura.
La unidad de comparacin de salida puede ser usada para generar interrupciones en
algn tiempo dado. Usando la comparacin de salida para generar formas de onda en
el modo normal no es recomendado, ya que esto ocupara demasiado tiempo de
consumo del CPU.
Modo de Limpieza del Timer por Comparacin Igualada (CTC)
En el modo de limpieza del timer por comparacin o CTC (WGM13:0 = 4 o 12), los
Registros OCR1A o ICR1 son usados para manipular la resolucin del contador. En el
modo CTC el contador se limpia a cero cuando el valor del contador (TCNT1) se iguala
ya sea a OCR1A (WGM13:0 = 4) o a ICR1 (WGM13:0 = 12). El OCR1A o ICR1 definen
el valor TOP del contador, y tambin su resolucin. Esto modo permite mayor control de
la frecuencia de comparacin de salida igualada. Tambin se simplifica la operacin de
conteo de eventos externos.
El diagrama de tiempos para el modo CTC se muestra a continuacin. El valor del
contador (TCNT1) se incrementa hasta que ocurre una igualdad en la comparacin con
ya sea OCR1A o ICR1, y entonces el contador (TCNT1) se reinicia.

Documento traducido de la hoja de datos del ATmega32

13

__________________________________________________________________________ITSP

Una interrupcin puede ser generada cada vez que el contador alcanza el valor TOP ya
sea por la bandera OCF1A o ICF1 acorde al registro usado para definir el valor TOP. Si
la interrupcin es habilitada, el manejador de rutina de interrupcin puede ser usado
para actualizar el valor TOP. Sin embargo, cambiando el TOP a un valor cercano a
BOTTOM cuando el contador esta corriendo con ningn o un preescalador muy bajo
debe tenerse cuidado, ya que el modo CTC no posee la caracterstica de doble buffer.
Si el nuevo valor escrito a OCR1A o a ICR1 es ms bajo que el valor actual del TCNT1,
el contador perder la igualdad en la comparacin. El contador tendr que contar a su
mximo valor (0xFFFF) y empezar en el inicio 0x0000 antes que la comparacin
igualada pueda ocurrir. En muchos casos esta caracterstica no es deseable. Una
alternativa ser usar el modo PWM rpido usando OCR1A para definir el TOP
(WGM13:0 = 15) ya que el OCR1A ser de doble buffer. Para generar una forma de
onda de salida en el modo CTC, la salida OC1A puede ser invertida en su nivel lgico
en cada igualdad de comparacin ajustando los bits del modo de comparacin de salida
en modo toggle (COM1A1:0 = 1). El valor OC1A no ser visible en el pin del puerto a
menos que la direccin de datos para el pin este colocado como salida (DDR_OCR1A =
1). La forma de onda generada tendr su mxima frecuencia de fOC1A = fclk_I/O /2 cuando
OCR1A sea colocado a cero (0x0000). La frecuencia de forma de onda se define por la
siguiente ecuacin:

La variable N representa el valor del preescalador divisor (1, 8, 64, 256, o 1024).
Para el modo normal de operacin, la bandera TOV1 se pone a uno en el mismo ciclo
de reloj cuando el contador pasa de MAX a 0x0000.
Modo PWM Rpido
La Modulacin por Ancho de Pulso Rpida (WGM13:0 = 5, 6, 7, 14 o15) provee una alta
frecuencia de PWM en la opcin de generacin. El modo PWM rpido difiere de las
otras opciones de PWM por la operacin de una sola pendiente. El contador cuenta
Documento traducido de la hoja de datos del ATmega32

14

__________________________________________________________________________ITSP
desde BOTTOM (0x0000) hasta TOP y entonces de reinicia a BOTTOM. En el modo de
comparacin de salida no invertida, la salida de comparacin (OC1x) se limpia cuando
se iguala la comparacin entre TCNT1 y OCR1x y se pone en BOTTOM. En el modo de
comparacin de salida invertida la salida se pone a uno cuando existe una comparacin
igualada y se limpia en BOTTOM. Debido a la operacin de una sola pendiente, la
frecuencia de operacin en el modo PWM rpido puede ser dos veces tan alto como los
modos PWM de fase correcta y fase y frecuencia correcta que usan la operacin de
doble pendiente, mxima ms baja comparada con la operacin de una sola pendiente.
Esta alta frecuencia hace que el modo PWM rpido se ocupe en aplicaciones de
regulacin de potencia, rectificacin y aplicaciones para DACs. La alta frecuencia
permite que componentes externos de tamao pequeo (inductancias, capacitores)
reduzcan el costo del sistema total.
La resolucin PWM para el modo PWM rpido puede fijarse a 8, 9 o 10 bits, o definirse
ya sea por ICR1 u OCR1A. La mnima resolucin permitida es de 2 bits (ICR1 o ICR1A
se colocan a 0x0003) y la mxima resolucin es a 16 bits (ICR1 o ICR1A se colocan a
MAX). La resolucin PWM en bits puede ser calculada usando la siguiente ecuacin:

En el modo PWM rpido el contador se incrementa hasta que el valor del contador
iguala ya sea uno de los valores fijos 0x00FF, 0x01FF, o 0x03FF (WGM13:0 = 5, 6 o 7),
o al valor en ICR1 (WGM13:0 = 14) o al valor de OCR1A (WGM13:0 = 15). El contador
entonces se limpia en el siguiente ciclo de reloj. El diagrama de tiempos para este modo
de muestra en la siguiente figura. La figura muestra el modo PWM rpido cuando
OCR1A o ICR1 se usan para definir el TOP. El valor TCNT1 se muestra en el diagrama
de tiempos como un histograma para ilustrar la operacin de una sola pendiente. El
diagrama incluye las salidas para los modos PWM invertida y no invertida. La marca
horizontal en la pendiente de TCNT1 representa el momento cuando se iguala a OCR1x
y TCNT1. La bandera de interrupcin OC1x ser colocada a uno cuando una
comparacin igualada ocurra.

Documento traducido de la hoja de datos del ATmega32

15

__________________________________________________________________________ITSP

La bandera de sobreflujo del Timer/Contador 1 (TOV1) se coloca a uno cada vez que el
timer alcanza el valor TOP. En resumen las banderas OC1A o ICF1 se ponen a uno en
el mismo ciclo de reloj del timer como TOV1 es puesto a uno cuando ya sea OCR1A o
ICR1 se utilizan para definir el valor TOP. Si una de las interrupciones esta habilitada, el
manejador de rutinas de interrupcin puede ser utilizado para actualizar los valores de
comparacin de TOP.
Cuando se cambia el valor TOP en el programa, debe asegurase que el nuevo valor
TOP sea mayor o igual al valor de todos los registros de comparacin. Si el valor TOP
esta ms abajo que en cualquiera de los registros de comparacin, una igualdad en la
comparacin nunca ocurrir entre TCNT1 y el OCR1x. Note que cuando se usan
valores fijos TOP, los bits sin usarse son enmascarados a cero cuando cualquiera de
los registros OCR1x sea escrito.
El procedimiento para actualizar ICR1 difiere de la actualizacin de OCR1A cuando se
usa para definir el valor TOP. El registro ICR1 no es de doble buffer. Esto significa que
si ICR1 se cambia a una valor ms pequeo cuando el contador esta corriendo con
ninguno o algn valor bajo de preescalacin, existe un riesgo que el nuevo valor de
ICR1 escrito es ms bajo que el valor actual de TCNT1. El resultado entonces resultara
que el contador pierda la igualdad en la comparacin del valor TOP. El contador tendr
que contra hasta MAX (0xFFFF) y comenzar en 0x0000 antes que la comparacin
igualada pueda ocurrir. El registro OCR1A sin embargo, es de doble buffer. Esta
caracterstica permite escribir en la localidad de OCR1A I/O sea escrita en cualquier
tiempo. Cuando se escribe en la localidad OCR1A I/O el valor escrito ser puesto
dentro del registro del buffer OCR1A. el registro de comparacin OCR1A ser
actualizado con el valor del registro de buffer en el prximo ciclo de reloj cuanto TCNT1
iguale a TOP. La actualizacin se hace en el mismo ciclo de reloj del timer como el
TCNT1 es limpiado y la bandera TOV1 es puesta a uno.

Documento traducido de la hoja de datos del ATmega32

16

__________________________________________________________________________ITSP
Usando el registro ICR1 para definir a TOP trabaja bien cuando se usan valores fijos de
TOP. Usando el ICR1, el registro OCR1A esta libre para usarse para generar la salida
PWM en OC1A. Sin embargo, si la frecuencia base PWM se activa cambiando el valor
TOP, se usa el OCR1A como TOP, es mejor eleccin debido a la caracterstica de
doble buffer.
En el modo PWM rpido, la unidad de comparacin permite la generacin de PWM en
los pines OC1x. Ajustando los bits COM1x1:0 a 2 producirn un PWM no invertido y una
salida PWM invertida puede generarse ajustando los bits COM1x1:0 a 3. El valor actual
de OC1x solamente ser visible en el pin del puerto si la direccin de datos de ese pin
se ajusta como salida (DDR_OC1x). La forma de onda PWM se genera poniendo a uno
(o limpiando) el registro OCR1x cuando se iguala la comparacin entre OCR1x y
TCNT1, y se limpia (o se pone a uno) el registro OC1x en el mismo ciclo de reloj del
timer, el contador se reinicia (cambia de TOP a BOTTOM).
La frecuencia PWM para la salida puede ser calculada por la siguiente ecuacin:

La variable N representa el valor del preescalador divisor (1, 8, 64, 256, o 1024).
Los valores extremos para el registro OCR1x representan casos especiales cuando se
genera una forma de onda de salida en el modo PWM rpido. Si el OCR1x es puesto
igual a BOTTOM (0x0000), la salida ser un pequeo pico por cada ciclo de reloj del
timer TOP+1. Ajustando el OCR1x igual a TOP resultara en una salida constante alta o
baja (dependiendo de la polaridad de la salida ajustando los bits COM1x1:0).
Una forma de onda de frecuencia (al 50% de la razn del ciclo) de salida en el modo
PWM rpido puede ser alcanzada ajustando OC1A a toggle su nivel lgico en cada
comparacin igualada (COM1A1:0 = 1). Esto aplica solamente si OCR1A se usa para
definir el valor TOP (WGM13:0 = 15). La forma de onda generada tendr una frecuencia
mxima de fOC1A = fclk_I/O /2 cuando OCR1A es colocado a cero (0x0000). Esta
caracterstica es similar al toggle de OC1A en el modo CTC, excepto por la
caracterstica de doble buffer en la unidad de comparacin de salida se habilita en el
modo PWM rpido.
Modo PWM de Fase Correcta
La Modulacin de Ancho de Pulso de Fase Correcta (WGM13:0 1, 2, 3, 10 u 11) provee
una alta resolucin en la opcin de generacin de forma de onda PWM de fase
correcta. El modo PWM de fase correcta se parece al modo PWM de fase y frecuencia
correcta basado en la operacin de la doble pendiente. El contador cuenta
repetidamente desde BOTTOM (0x0000) hasta TOP y desde TOP hasta BOTTOM. En
el modo de comparacin de salida no invertida, la salida de comparacin (OC1x) se
limpia cuando se iguala la comparacin entre TCNT1 y OCR1x mientras sigue su
conteo ascendente, y se pone a uno cuando se iguala la comparacin mientras sigue su
conteo descendente. En el modo de comparacin de salida invertido, esta operacin se
Documento traducido de la hoja de datos del ATmega32

17

__________________________________________________________________________ITSP
invierte. La operacin de doble pendiente ofrece una frecuencia de operacin mxima
ms baja comparada con la operacin de una sola pendiente. Sin embargo, debido a la
caracterstica simtrica del modo PWM de doble pendiente, estos modos se prefieren
para aplicaciones de control de motores.
La resolucin PWM para el modo PWM de fase correcta puede fijarse a 8, 9 o 10 bits, o
definirse ya sea por ICR1 u OCR1A. La mnima resolucin permitida es de 2 bits (ICR1
o ICR1A se colocan a 0x0003) y la mxima resolucin es a 16 bits (ICR1 o ICR1A se
colocan a MAX). La resolucin PWM en bits puede ser calculada usando la siguiente
ecuacin:

En el modo PWM de fase correcta el contador se incrementa hasta que el valor del
contador iguala ya sea uno de los valores fijos 0x00FF, 0x01FF, o 0x03FF (WGM13:0 =
1, 2, o 3), o al valor en ICR1 (WGM13:0 = 10) o al valor de OCR1A (WGM13:0 = 11). El
contador entonces tiene que alcanzar el valor TOP y cambiar la direccin de la cuenta.
El valor TCNT1 ser igual a TOP por un solo ciclo de reloj. El diagrama de tiempos para
este modo de muestra en la siguiente figura. La figura muestra el modo PWM de fase
correcta cuando OCR1A o ICR1 se usan para definir el TOP. El valor TCNT1 se
muestra en el diagrama de tiempos como un histograma para ilustrar la operacin de
doble pendiente. El diagrama incluye las salidas para los modos PWM invertida y no
invertida. La marca horizontal en la pendiente de TCNT1 representa el momento
cuando se iguala a OCR1x y TCNT1. La bandera de interrupcin OC1x ser colocada a
uno cuando una comparacin igualada ocurra.

Documento traducido de la hoja de datos del ATmega32

18

__________________________________________________________________________ITSP
La bandera de sobreflujo del Timer/Contador 1 (TOV1) se coloca a uno cada vez que el
timer alcanza el valor BOTTOM. Cuando ya sea OCR1A o ICR1 se utilizan para definir
el valor TOP, la bandera OC1A o ICF1 se ponen a uno de acuerdo en el mismo ciclo de
reloj como posregistros OCR1x son actualizados con el valor de doble buffer (en TOP).
Las banderas de interrupcin pueden se usadas para generar interrupciones cada vez
que el contador alcanza el valor TOP o BOTTOM.
Cuando se cambia el valor TOP en el programa, debe asegurase que el nuevo valor
TOP sea mayor o igual al valor de todos los registros de comparacin. Si el valor TOP
esta ms pequeo que en cualquiera de los registros de comparacin, una igualdad en
la comparacin nunca ocurrir entre TCNT1 y el OCR1x. Note que cuando se usan
valores fijos TOP, los bits sin usarse son enmascarados a cero cuando cualquiera de
los registros OCR1x se escriben. Como se muestra en la figura siguiente el tercer
periodo, se cambia el valor TOP activo mientras el Timer/Contador 1 esta corriendo en
el modo de fase correcta puede resultar en una salida no simtrica. La razn de esto
puede ser por el tiempo de actualizacin del registro OCR1x. Ya que la actualizacin de
OCR1x ocurre en TOP, el periodo PWM inicia al final del TOP, mientras que la longitud
de la pendiente de subida se determina por el nuevo valor TOP. Cuando estos dos
valores difieren, las dos pendientes del periodo diferirn en longitud. La diferencia en
longitud nos da un resultado de salida asimtrico.
Es recomendable usar el modo de fase y frecuencia correcta en lugar del modo de fase
correcta cuando se cambia el valor TOP mientras el Timer/Contador 1 esta corriendo.
Cuando se usa un valor TOP esttico no existe diferencia entre los dos modos de
operacin.
En el modo PWM de fase correcta, la unidad de comparacin permite la generacin de
PWM en los pines OC1x. Ajustando los bits COM1x1:0 a 2 producirn un PWM no
invertido y una salida PWM invertida puede generarse ajustando los bits COM1x1:0 a 3.
El valor actual de OC1x solamente ser visible en el pin del puerto si la direccin de
datos de ese pin se ajusta como salida (DDR_OC1x). La forma de onda PWM se
genera poniendo a uno (o limpiando) el registro OCR1x cuando se iguala la
comparacin entre OCR1x y TCNT1 cuando el contador se incrementa, y se limpia (o
se pone a uno) el registro OC1x cuando se iguala la comparacin entre OCR1x y
TCNT1 cuando el contador se decrementa. La frecuencia PWM para la salida cuando
se usa PWM de fase correcta puede ser calculada por la siguiente ecuacin:

La variable N representa el valor del preescalador divisor (1, 8, 64, 256, o 1024).
Los valores extremos para el registro OCR1x representan casos especiales cuando se
genera una forma de onda de salida en el modo PWM de fase correcta. Si el OCR1x es
puesto igual a BOTTOM, la salida ser continuamente baja y si es puesta al valor TOP
la salida ser continuamente alta para el modo PWM no invertido. Para el PWM
invertido la salida tendr valores lgicos opuestos. Si se usa OCR1A para definir el

Documento traducido de la hoja de datos del ATmega32

19

__________________________________________________________________________ITSP
valor TOP (WGM13:0 = 11) y COM1A1:0 =1, la salida OCR1A ser invertida con una
razn de ciclo al 50%.
Modo PWM de Fase y Frecuencia Correcta
La Modulacin por Amplitud de Pulso de Fase y Frecuencia Correcta, (WGM13:0 = 8 o
9) provee una alta resolucin en la generacin de forma de onda PWM de fase y
frecuencia correcta. El modo PWM de fase y frecuencia correcta es parecido al modo
PWM de fase correcta basado en la operacin de doble pendiente. El contador cuenta
repetidamente desde BOTTOM (0x0000) hasta TOP y desde TOP hasta BOTTOM. En
el modo de comparacin de salida no invertida, la salida de comparacin (OC1x) se
limpia cuando se iguala la comparacin entre TCNT1 y OCR1x mientras sigue su
conteo ascendente, y se pone a uno cuando se iguala la comparacin mientras sigue su
conteo descendente. En el modo de comparacin de salida invertido, esta operacin se
invierte. La operacin de doble pendiente ofrece una frecuencia de operacin mxima
ms baja comparada con la operacin de una sola pendiente. sin embargo, debido a la
caracterstica simtrica del modo PWM de doble pendiente, estos modos se prefieren
para aplicaciones de control de motores.
La principal diferencia entre la fase correcta y el modo de fase y frecuencia correcta
PWM es el tiempo de actualizacin del registro OCR1x por el registro del buffer OCR1x.
La resolucin PWM para el modo PWM de fase y frecuencia correcta puede ser definido
por ICR1 o ICR1A. La mnima resolucin permitida es de 2 bits (ICR1 o ICR1A se
colocan a 0x0003) y la mxima resolucin es a 16 bits (ICR1 o ICR1A se colocan a
MAX). La resolucin PWM en bits puede ser calculada usando la siguiente ecuacin:

En el modo PWM de fase y frecuencia correcta el contador se incrementa hasta que el


valor del contador iguala ya sea al valor en ICR1 (WGM13:0 = 8) o al valor de OCR1A
(WGM13:0 = 9). El contador entonces tiene que alcanzar el valor TOP y cambiar la
direccin de la cuenta. El valor TCNT1 ser igual a TOP por un solo ciclo de reloj. El
diagrama de tiempos para este modo de muestra en la siguiente figura. La figura
muestra el modo PWM de fase y frecuencia correcta cuando OCR1A o ICR1 se usan
para definir el TOP. El valor TCNT1 se muestra en el diagrama de tiempos como un
histograma para ilustrar la operacin de doble pendiente. El diagrama incluye las
salidas para los modos PWM invertida y no invertida. La marca horizontal en la
pendiente de TCNT1 representa el momento cuando se iguala a OCR1x y TCNT1. La
bandera de interrupcin OC1x ser colocada a uno cuando una comparacin igualada
ocurra.

Documento traducido de la hoja de datos del ATmega32

20

__________________________________________________________________________ITSP

La bandera de sobreflujo del Timer/Contador 1 (TOV1) se coloca a uno en el mismo


ciclo de reloj del timer como los registros OCR1x son actualizados con el valor de doble
buffer (en BOTTOM). Cuando ya sea OCR1A o ICR1 se utilizan para determinar el valor
TOP, la bandera se pone a uno OC1A o ICF1 cuando TCNT1 ha alcanzado el TOP. Las
banderas de interrupcin pueden se usadas para generar interrupciones cada vez que
el contador alcanza el valor TOP o BOTTOM.
Cuando se cambia el valor TOP en el programa, debe asegurase que el nuevo valor
TOP sea mayor o igual al valor de todos los registro de comparacin. Si el valor TOP
esta ms abajo de cualquier registro de comparacin, una igualdad en la comparacin
nunca ocurrir entre TCNT1 y el OCR1x. Como se muestra en la figura siguiente. Ya
que los registros OCR1x son actualizados a BOTTOM, la longitud de las pendientes de
subida y bajada siempre sern iguales. Esto resulta en pulsos simtricos de salida y por
consiguiente la frecuencia correcta.
Usando el registro ICR1 para definir que TOP trabaja bien cuando se usan valores fijos
de TOP. Usando ICR1A, el registro OCR1A queda libre para usarse en la generacin de
salida PWM en OC1A. Sin embargo, si la frecuencia base PWM se activa cambiando el
valor TOP, se usa el OCR1A como valor TOP, es una mejor decisin debido a su
caracterstica de doble pendiente.
En el modo PWM de fase y frecuencia correcta, la unidad de comparacin permite la
generacin de PWM en los pines OC1x. Ajustando los bits COM1x1:0 a 2 producirn un
PWM no invertido y una salida PWM invertida puede generarse ajustando los bits
COM1x1:0 a 3. El valor actual de OC1x solamente ser visible en el pin del puerto si la
direccin de datos de ese pin se ajusta como salida (DDR_OC1x). La forma de onda
PWM se genera poniendo a uno (o limpiando) el registro OCR1x cuando se iguala la
comparacin entre OCR1x y TCNT1 cuando el contador se incrementa, y se limpia (o
se pone a uno) el registro OC1x cuando se iguala la comparacin entre OCR1x y
Documento traducido de la hoja de datos del ATmega32

21

__________________________________________________________________________ITSP
TCNT1 cuando el contador se decrementa. La frecuencia PWM para la salida cuando
se usa PWM de fase y frecuencia correcta puede ser calculada por la siguiente
ecuacin:

La variable N representa el valor del preescalador divisor (1, 8, 64, 256, o 1024).
Los valores extremos para el registro OCR1x representan casos especiales cuando se
genera una forma de onda de salida PWM en el modo de fase y frecuencia correcta. Si
el OCR1x es puesto igual a BOTTOM, la salida ser continuamente baja y si es puesta
al valor TOP la salida ser puesta en alta para el modo PWM no invertido. Para el PWM
invertido la salida tendr valores lgicos opuestos. Si se usa OCR1A para definir el
valor TOP (WGM13:0 = 9) y COM1A1:0 =1, la salida OCR1A ser invertida con una
razn de ciclo al 50%.

Documento traducido de la hoja de datos del ATmega32

22

También podría gustarte