Vous êtes sur la page 1sur 23

Pontificia Universidad Catlica del Per

Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt



Contadores&Temporizadores Rev 2.1 -1- 25/05/2006
CONTADORES Y TEMPORIZADORES

Definiciones
Contador (counter)
Es un circuito secuencial que es capaz de llevar la cuenta de una serie de pulsos que recibe por una
entrada. Adems se puede leer el valor de la cuenta. Tambin tiene una salida que se activa cuando
se ha llegado al final de la cuenta.
Dependiendo del diseo del contador, ste puede recibir los pulsos a contar en su entrada de reloj, o
contar con una entrada especial para ello.

Temporizador (timer)
Cuando un contador se utiliza para generar, en alguna de sus salidas, pulsos a intervalos de tiempo
predefinidos, se le denomina temporizador. En este tipo de aplicacin, la seal de entrada es una
seal peridica de frecuencia conocida, de modo que es capaz de generar pulsos a intervalos de
tiempo mltiplos del perodo de la seal de reloj. Cuando se utiliza un contador como temporizador,
no se tiene acceso al valor de la cuenta, y slo se puede saber cundo ha finalizado la cuenta. En la
Fig. 2 se muestra un ejemplo, en el que se emplea un contador como temporizador con mdulo
10,000 (es decir, es un contador que cuenta 10,000 pulsos) en el que la salida es la seal de final de
cuenta. Observar que no hay otra salida y por tanto no se puede conocer el valor de la cuenta. Slo
se puede saber cundo han pasado 10000 pulsos de entrada. Como la frecuencia de entrada es
conocida (2MHz), entonces cada periodo es de 0.5us y por tanto la seal de salida tiene un periodo
de 0.5us*10000=5ms. Por lo tanto, la salida puede utilizarse para saber cunto tiempo ha
transcurrido, pero en mltiplos de 5ms.

Q0
Q1
Q2
Qn
entrada de
pulsos a contar
salidas

Fig. 1.- Contador
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -2- 25/05/2006
Pre-escalador (pre-scaler)
Es un contador utilizado para dividir la frecuencia de una seal peridica de entrada. La salida de
ste se utiliza como seal de reloj de otro contador. Al igual que en el temporizador, no se tiene
acceso al valor de la cuenta, y tampoco se tiene acceso directo a la salida.
En la Fig. 3 se muestra un pre-escalador de mdulo 2048 conectado a la entrada de un contador. El
inconveniente de esta conexin es que no se puede conocer con exactitud cuntos pulsos han
transcurrido, sino cuntos grupos de 2048 pulsos han aparecido en la entrada. Es decir, puede haber
una incertidumbre de 1 a 2047 pulsos.

En la Fig. 4 se muestra un pre-escalador de mdulo 1024 conectado a un temporizador. Como en
general, la funcin del temporizador es medir intervalos de tiempo, en este caso es posible, gracias
al pre-escalador, obtener un intervalo de tiempo mayor. En el ejemplo es de 51.2 milisegundos.

f=2MHz
salida mdulo
10000
0.5us
5ms
TEMPORIZADOR

Fig. 2.- Temporizador
Q0
Q1
Q2
Qn
entrada de
pulsos a contar
salidas
mdulo
2048
PRE-ESCALADOR CONECTADO A UN CONTADOR
PRE-ESCALADOR

Fig. 3.- Pre-escalador
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -3- 25/05/2006
En resumen, los tres elementos son contadores, pero dependiendo de la aplicacin, se les llama
contador, temporizador o pre-escalador.

Contador de carrera libre (free-running counter)
Un contador normalmente cuenta con una lnea de habilitacin que permite contar o no. En el caso
de un sistema basado en microprocesador o microcontrolador, se denomina contador de carrera libre
a aqul que no se puede deshabilitar por software.

f=2MHz
0.5us
mdulo
1024
mdulo
100
0.512ms
51.2ms
PRE-ESCALADOR CONECTADO A UN TEMPORIZADOR
PRE-ESCALADOR

Fig. 4.- Pre-escalador
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -4- 25/05/2006
EL CIRCUITO TEMPORIZADOR EN EL ATmega8

El ATmega8 cuenta con un circuito temporizador complejo. Slo se va a explicar una parte de este
circuito temporizador.

El contador/ temporizador 1 (timer 1)
En la figura 5 se muestra de manera simplificada el circuito que conforma el contador/temporizador
1 del ATmega8. Este circuito es sncrono y consta de cuatro partes bien definidas:
Un contador de 16 bits llamado TCNT1 con seal de final de cuenta.
Un circuito selector de seal de reloj para el contador, y que incluye un preescalador.
Dos circuitos comparadores de salida (output compare unit). Uno de ellos est conformado
por los elementos en color gris, y se llama OC1A. El otro se denomina OC1B.
Un circuito capturador de entrada (input capture unit) denominado IC1.
El contador TCNT1 y el selector de reloj
El contador de 16 bits TCNT1 es un contador ascendente/descendente. La seal de reloj que utiliza,
CLKT1, se selecciona con el circuito selector de reloj. ste permite seleccionar entre el reloj del
microcontrolador (CLKIO), la cual puede dividirse con el pre-escalador programable (mdulos 1, 8,
64, 256 y 1024), o una seal de reloj que llega por el pin T1 del microcontrolador. El bloque
"lgica de control" se encarga de efectuar la carga, borrado y habilitacin de cuenta del contador,
segn el modo de operacin en que se programe el contador-temporizador. Slo veremos el uso del
contador con la seal de reloj CLKIO y no su uso con el pin T1.
La programacin del pre-escalador, y la seleccin de la seal de reloj se hace con 3 bits de nombres:
CS12, CS11 y CS10, pertenecientes al registro de E/S de nombre TCCR1B.
La salida del contador TCNT1 va a los dos circuitos comparadores de salida y al capturador de
entrada. stos se pueden identificar por el nombre del registro o latch de 16 bits que forma parte de
cada uno de ellos (registro OCR1A para OC1A, registro OCR1B para OC1B, y el latch ICR1 para
IC1.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -5- 25/05/2006
Los comparadores de salida
Un comparador de salida (output compare) es un circuito consistente en un comparador, un registro
denominado registro del comparador de salida cuyas salidas van a una de las entradas del
comparador, y en la otra entrada del comparador va la salida de un contador. Adems, la salida del
comparador va a otros elementos que permiten generar una seal en un pin del microcontrolador,
indicar en un bit de un registro que ha ocurrido una comparacin exitosa (es decir, que el valor del
contador es igual al valor del registro), o generar peticiones de interrupcin cuando ocurre una
comparacin exitosa. El contador, no se considera que forme parte del circuito comparador de
salida. En el contador/temporizador 1 hay un nico contador y dos comparadores de salida.
El comparador de salida OC1A
En la figura 5 se ha resaltado en color gris los componentes del comparador de salida OC1A:
El comparador es el bloque en cuyo interior aparece el signo =. Es un comparador de 16
bits (dos entradas de 16 bits cada una y una lnea de salida). La salida del comparador es 1
si los nmeros de entrada son iguales, y ser cero en caso contrario.
El registro del comparador de salida es OCR1A y sus salidas van a una de las entradas del
comparador.
A la otra entrada del comparador estn conectadas las salidas del contador TCNT1 (el valor
de la cuenta, o sea 16 bits).
La salida del comparador se va a dos elementos: A un latch denominado OCF1A cuya
salida se pone a uno cuando ocurre una comparacin exitosa (TCNT1=OCR1A), y a un

Fig. 5.- Circuito del contador-temporizador 1 del ATmega8
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -6- 25/05/2006
bloque denominado generador de onda. La salida de este generador de onda va al pin
OC1A (PB1) del microcontrolador, y permite modificar el estado del pin OC1A en cada
comparacin exitosa. La manera como lo modifique depender de cmo se haya
programado este bloque.

Hay tres maneras en que pueden utilizarse este comparador de salida:
- Para hacer TCNT1 un contador de mdulo programable, y generar, si se desea, una onda en el
pin OC1A. En este modo, el registro OCR1A almacena el valor mximo de la cuenta de
TCNT1.
- Para poder generar una onda PWM.
- Para programar el momento en que se desea generar un evento (una peticin de interrupcin, o
modificar el estado del pin OC1A).
El comparador de salida OC1B
Est conformado por el registro de 16 bits OCR1B, el comparador de 16 bits al cual est conectado
OCR1B, el latch OCF1B, que se pone a 1 con una comparacin exitosa, y el generador de onda (que
al igual que el latch est conectado a la salida del comparador).
A diferencia del comparador de salida OC1A, el comparador de salida OC1B slo puede utilizarse
para programar el momento en que se desea generar un evento (peticin de interrupcin o modificar
el estado del pin OC1B).
Detalle de los comparadores de salida OC1A y OC1B
En la figura 6 se muestra en ms detalle cmo son ambos comparadores de salida.
En dicha figura se ha puesto al latch el nombre OCF1x donde x sera A B dependiendo del
comparador de salida al que se refiera (OC1A, OC1B).

Cada comparador de salida consta de un comparador de 16 bits, que tiene conectada a una de sus
entradas las salidas del contador TCNT1 (conformado por los registros de E/S TCNT1H y
TEMP (8 bits)
OCR1xH (8 bits) OCR1xL (8 bits)
OCR1x (16 bits)
TCNT1H (8 bits) TCNT1L (8 bits)
TCNT1 (16 bits)
=(comparador de 16 bits)
Generador de onda
OCF1x
Tope
Mnimo
WGM13..WGM10
COM1x1
BUS DE DATOS
D Q
D Q
D Q
CLKIO
OC1x
PIN
COM1x0
FOC1x
OC1x
PORT
DDR
0
1
MUX

Fig. 6.- Circuito simplificado de un comparador de salida
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -7- 25/05/2006
TCNT1L), y el registro de comparacin OCR1x (formado por dos registros de 8 bits OCR1xH y
OXR1xL, con x =A B) a la otra. Cada vez que el contador llegue a un valor igual al almacenado
en el registro OCR1x, habr una comparacin exitosa, ponindose a 1 la salida del comparador. El
tiempo que dura la comparacin exitosa es el tiempo que dura una cuenta del contador TCNT1,
pues luego se incrementar y nuevamente la salida del comparador valdr cero. Al ponerse a 1 la
salida del comparador, la salida del latch OCF1x ser 1. Este valor es el que indica que hubo una
comparacin exitosa y puede utilizarse para generar un cambio de estado en el pin OC1x, segn
como se haya programado el generador de onda con los bits WGM13 .. WGM10, y COM1x1,
COM1x0. Debe observarse que, para que realmente sea afectado el pin, alguna de los bits COM1x0
COM1x1 debe valer 1, y adems, el pin debe haber sido configurado como salida (bit
correspondiente del registro DDRB debe valer 1).
Lectura y escritura de los registros de 16 bits
El bus interno de datos del microcontrolador es de 8 bits, y por tanto, la lectura y/o escritura de
registros de 16 bits debe hacerse en dos ciclos de reloj. Como ello es contraproducente, pues en el
segundo ciclo de reloj podr estar cambiando el valor del contador, y por tanto, afectar el resultado
de la comparacin, es importante hacer la escritura y/o lectura de estos registros de 16 bits en un
solo ciclo de reloj.
En la figura 6 se puede apreciar que existe un registro TEMP. Este registro es un registro interno
utilizado para leer o escribir el registro OCR1xH para leer el registro TCNT1H del contador
TCNT1.
Escritura en los registros de 16 bits
Cuando se escribe un valor en el registro OCR1xH, en realidad se est escribiendo en el registro
TEMP. Y cada vez que se escribe un valor en el registro OCR1xL, automticamente el valor
contenido en TEMP se graba en el registro OCR1xH. De esta manera, se logra escribir, en el mismo
ciclo de reloj, el par de registros OCR1xH y OCR1L que conforman el registro de 16 bits OCR1x.
Por ello, al momento de escribir un nuevo valor en OCR1x, primero hay que escribir el byte ms
significativo (con ello se grabar en el registro TEMP), e inmediatamente despus, escribir el nuevo
valor en OCR1xL.
Lo mismo se aplica al par de registros TCNT1H y TCNT1L.
Lectura de los registros de 16 bits
Cuando se lee el registro OCR1xH, realmente se lee el contenido del registro TEMP. Cuando se lee
el registro OCR1xL, se lee su contenido, y simultneamente, el contenido del registro OCR1xH se
graba en el registro TEMP. Por esa razn, al momento de leer este par de registros, primero debe
leerse el registro OCR1xL y a continuacin el registro OCR1xH. Lo mismo se aplica para el par de
registros TCNT1H y TCNT1L.
Modos de operacin del temporizador 1
Dependiendo cmo se configure el circuito temporizador, hay cinco maneras como puede operar el
temporizador 1. Estos modos son:
- Modo Normal
- Modo mdulo programable, denominado "modo CTC"
- Modo PWM rpido
- Modo PWM con fase correcta.
- Modo PWM con fase y frecuencia correctas.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -8- 25/05/2006
Modo Normal
En este modo:
- El contador TCNT1 funciona como contador binario ascendente de 16 bits.
- Cuando el contador llega a $FFFF, regresa a $0000 en el siguiente ciclo de reloj y el bit TOV1
se pone a 1 (TOV1 se comporta como 9no bit del contador, pero slo se pone a 1).
- Cuando el valor de TCNT1 es igual al contenido de OCR1A, ocurre una comparacin exitosa
(bit OCF1A se pone a 1) y se puede modificar el estado del pin OC1A (PB1), si se configura
para ello al generador de onda.
- Poniendo a 1 el bit FOC1A del registro TCCR1A, el generador de onda acta sobre el pin
OC1A, como si hubiese ocurrido una comparacin exitosa.
- Cuando el valor de TCNT1 es igual al contenido de OCR1B, ocurre una comparacin exitosa
(bit OCF1B se pone a 1) y se puede modificar el estado del pin OC1B (PB2), si se configura
para ello al generador de onda.
- Poniendo a 1 el bit FOC1B del registro TCCR1A, el generador de onda acta sobre el pin
OC1B, como si hubiese ocurrido una comparacin exitosa.

El modo normal puede utilizarse en las siguientes situaciones:
- Cuando se requiera generar algn evento de manera peridica, a intervalos de tiempo fijos, y
baste para ello el uso del valor generado en TOV1. De no poderse obtener el intervalo de tiempo
deseado es mejor utilizar el modo CTC.
- Cuando se desea generar un evento o tomar alguna accin, a partir de cierto instante de tiempo,
y luego de transcurrido un intervalo de tiempo dado. En este caso, se utiliza el comparador de
salida OC1A OC1B para determinar la finalizacin del intervalo de tiempo. De requerirse de
manera peridica, es mejor utilizar el modo CTC.
Modo mdulo programable (modo CTC)
Este modo permite generar ondas peridicas en el pin OC1A, y/o generar interrupciones de manera
peridica. Puede usarse, para este modo, el registro ICR1 o el registro OCR1A.
En la figura se muestra en color amarillo los componentes involucrados en el modo CTC con uso
del registro OCR1A. Observar que la seal de borrado proviene de la salida del comparador de 16
bits.

Fig. 7.- Modo Normal. Contador TCNT1 cuenta de $0000 a $FFFF. TOV1 se pone a 1
al pasar nuevamente a $0000.
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -9- 25/05/2006
En este modo, al usar OCR1A ocurre lo siguiente:
- El contador TCNT1, cuenta de manera ascendente.
- Cuando ocurre una comparacin exitosa (TCNT1=OCR1A), en el siguiente ciclo de reloj
TCNT1 se pone a $0000 (es borrado). De esa manera, se est obteniendo un contador de mdulo
programable, siendo el mdulo: OCR1A+1.
- Luego de cada comparacin exitosa, en el siguiente ciclo de reloj se pone a 1 OCF1A, y adems,
se puede modificar el estado del pin OC1A, segn como se haya configurado el generador de
onda.

El latch TOV1 no se ha colocado en la figura, pues en el modo CTC slo se pone a 1 al pasar el
contador de $FFFF a $0000, y como OCR1A tendr por lo general cualquier otro valor, menos
$FFFF (pues sino, sera mejor usar el modo normal), jams se pondra a 1. En resumen, dicho latch
no es til en el modo CTC.


Si se usa el registro ICR1, ocurre lo siguiente:
- El contador TCNT1, cuenta de manera ascendente.
- Cuando ocurre una comparacin exitosa (TCNT1=ICR1), en el siguiente ciclo de reloj TCNT1
se pone a $0000 (es borrado). De esa manera, se est obteniendo un contador de mdulo
programable, siendo el mdulo: ICR1+1.
- Luego de cada comparacin exitosa, en el siguiente ciclo de reloj se pone a 1 el latch ICF1. A
diferencia del caso anterior, en el que se emplea OCR1A, cuando se usa ICR1A no puede
modificarse el estado de ningn pin directamente.
En la figura 8 se muestra en color el circuito involucrado.
Fig. 8.- Modo CTC con uso de OCR1A
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -10- 25/05/2006

Configuracin para los modos de operacin normal y CTC
Seleccin de la seal de reloj
Para poder utilizar el circuito contador/temporizador 1, debe seleccionarse primero la fuente de
reloj.
Los bits CS12, CS11 y CS10 del registro de E/S TCCR1B permiten seleccionar la seal de reloj de
entrada (CLKIO o la seal proveniente del pin T1) y el valor del preescalador (ver Fig. 5). En la
tabla 1 se muestran las diferentes opciones.

Tabla 1.- Seleccin de la seal de reloj y mdulo del pre-escalador
CS12 CS11 CS10 Descripcin
0 0 0 No hay seal de reloj. Contador detenido.
0 0 1 Mdulo 1 (Se utiliza CLK
IO
)
0 1 0 Mdulo 8 (Se utiliza CLK
IO
)
0 1 1 Mdulo 64 (Se utiliza CLK
IO
)
1 0 0 Mdulo 256 (Se utiliza CLK
IO
)
1 0 1 Mdulo 1024 (Se utiliza CLK
IO
)
1 1 0 Fuente de reloj externa conectada a pin T1 (flancos de bajada)
1 1 1 Fuente de reloj externa conectada a pin T1 (flancos de subida)
Seleccin del modo de operacin
Los bits WGM13..WGM10 permiten seleccionar el modo de operacin del temporizador. En la
tabla se muestran los valores posibles, slo para los modos normal y CTC.

Tabla 2.- Seleccin modo de operacin normal o CTC
WGM13 WGM12 WGM11 WGM10 Modo de operacin valor tope
0 0 0 0 Normal $FFFF
0 1 0 0 CTC OCR1A
1 1 0 0 CTC ICR1
Fig. 9 Modo CTC con ICR1
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -11- 25/05/2006

El valor tope es el valor al cual se activa la seal de borrado de TCNT1. En el modo CTC con ICR1,
el valor tope est dado or el contenido de ICR1, en el modo CTC con OCR1A, est dado por el
contenido de OCR1A.
Configuracin del generador de onda para modo normal o CTC
El generador de onda del comparador de salida OC1A se configuran con los bits COM1A1 y
COM1A0 del registro TTCR1A, y el generador de onda del comparador de salida OC1B se
configuran con los bits COM1B1 y COM1B0 del mismo registro.
El generador de onda de OC1A acta sobre el pin PB1 (llamado tambin OC1A) y el generador de
onda de OC1B acta sobre pin PB2 (llamado tambin OC1B).
En ambos generadores de onda existen cuatro configuraciones posibles. En la tabla se muestran
estas cuatro posibilidades.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -12- 25/05/2006
Tabla 3.- Configuracin del generador de onda en modos normal y CTC
COM1A1
COM1B1
COM1A0
COM1B0
Descripcin
0 0 Operacin de puerto normal. Circuito temporizador OC1A/OC1B desconectado
de pin OC2.
0 1 Modo conmutacin. Pin OC1A/OC1B cambia de estado en cada comparacin
exitosa.
1 0 Modo puesta a 0. Pin OC1A/OC1B se pone a 0 en comparacin exitosa.
1 1 Modo puesta a 1. Pin OC1A/OC1B se pone a 1 en comparacin exitosa.

Operacin de puerto normal
En este modo se desconecta el generador de onda del pin, de manera que ste puede ser utilizado
como interfaz digital de propsito general (el modo que se ha utilizado hasta ahora). Este es el modo
por defecto. En los otros tres modos se conecta el generador de onda al pin.
Modo conmutacin
En este modo cada vez que ocurre una comparacin exitosa el generador de onda cambia el estado
del pin. Si el pin estaba en nivel alto, con una comparacin exitosa pasa a nivel alto, y si estaba en
nivel alto, con la comparacin exitosa pasa a nivel bajo.
Modo puesta a 0
En una comparacin exitosa, el pin pasa a nivel bajo. Si estaba en nivel bajo, permanece en nivel
bajo.
Modo puesta a 1
En una comparacin exitosa, el pin pasa a nivel alto. Si estaba en nivel alto, permanece en nivel
alto.
Cmo colocar un valor inicial en el pin al usar el generador de onda
La configuracin del generador de onda debe hacerse antes de configurar el pin como salida (PB1 si
se usa el comparador OC1A o PB2 si se usa el comparador de salida OC1B). Para asegurar que haya
un valor predeterminado a la salida del generador de onda se emplean los bits FOC1A y FOC1B del
registro TCCR1A, en el modo normal.
Al escribr un 1 en FOC1A o FOC1B se genera un pulso positivo que llega al generador de onda a
travs de la compuerta OR. El efecto es que la salida del generador de onda ser la misma que
habra si hubiese ocurrido una comparacin exitosa. Por tanto, si se quiere tener en cero el pin PB1
(comparador de salida OC1A), se hara lo siguiente:
Configurar temporizador en modo normal.
Configurar generador de onda en modo puesta a 0.
Poner a 1 bit FOC1A. (con esto se habr puesto a cero salida de generador de onda).
configurar pin PB1 como salida.
Cuando se lee el registro TCCR1A, en la posicin de los bits FOC1A y FOC1B siempre se leer
cero.
Ejemplos de uso
Generacin de una onda cuadrada
Una onda cuadrada es una onda peridica cuya duracin en nivel alto es la misma que en nivel bajo.
Para generar ondas peridicas cuadradas, la mejor manera es utilizar el modo CTC del
temporizador. Supongamos, por ejemplo, que se quiere generar una onda cuadrada cuyo perodo es
de 100ms. y que la frecuencia de reloj del microcontrolador es de 1MHz. En la figura 11 se muestra
un diagrama con las partes involucradas para ello.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -13- 25/05/2006
En el pin PB1 se generar la onda con un perodo de 100ms, 50 ms en nivel alto y 50 ms en nivel
bajo. En la figura 12 se muestra la relacin que existe entre los pulsos que entran al generador de
onda, y lo que se obtiene en la salida del mismo, que va al pin PB1. Puede observarse que con cada
comparacin exitosa cambia el estado del pin. Para cada perodo ocurren dos comparaciones
exitosas, y el intervalo de tiempo entre dos comparaciones exitosas es la duracin del pulso, en el
pin, en nivel alto o nivel bajo.



Como se quiere tener un perdo de 100ms, el intervalo entre comparaciones exitosas sucesivas debe
ser la mitad, 50ms. La frecuencia de reloj interna del microcontrolador (CLKIO) es de 1MHz y por
tanto, cada pulso de la seal de este reloj dura 1us. Para contar 50ms se requieren 50ms/1us=50000
pulsos de este reloj. Queremos por tanto que ocurran 50000 pulsos del reloj CLKIO entre dos
comparaciones exitosas sucesivas.
El contador TCNT1 cuenta pulsos de reloj, pero los de CLKT1, el cual no necesariamente
corresponde al de CLKIO. Observar en la figura 11 que se puede elegir como fuente de reloj la seal
CLKIO, pero sta pasa a travs de un preescalador.
Para el ejemplo configuraremos el selector de reloj para usar CLKIO y con el preescalador mdulo
1. De esta manera la frecuencia de reloj de CLKT1 ser la misma que CLKIO, y por tanto, TCNT1
contar los pulsos de reloj de CLKIO.
Como se quieren contar 50000 pulsos de CLKIO, y con la configuracin de reloj indicada estos
sern tambin los pulsos contados por TCNT1, debemos programar OCR1A con el valor 50000-1,
es decir, 49999.

En resumen, la configuracin sera:
Seal de reloj: CLKIO, mdulo 1 (primera fila Tabla 1).
Modo de operacin: CTC con OCR1A (ver tabla 2)
Configuracin del generador de onda: Modo conmutacin (ver tabla 3).
Valor a grabar en OCR1A: 49999.

Fig. 10.- Ejemplo: Generacin de onda cuadrada

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -14- 25/05/2006
Configurar pin PB1 como salida.


Se muestra el programa fuente en lenguaje C y en lenguaje ensamblador. Ambos programas hacen
lo mismo.





Si se quiere ver la forma de onda generada en el VMLAB, colocar la siguiente lnea al final del
archivo del proyecto.
. PLOT V( PB1)
Y abrir la ventana Scope .
. i ncl ude " C: \ VMLAB\ i ncl ude\ m8def . i nc"
. equ ct eOCR1A = 49999

r eset :
r j mp i ni ci o

conf i g_Ti mer 1:
l di r 16, ( 1<<CS10) | ( 1<<WGM12)
out TCCR1B, r 16
l di r 16, ( 1<<COM1A0) ; modo conmut aci n
out TCCR1A, r 16
l di r 16, hi gh( ct eOCR1A)
out OCR1AH, r 16
l di r 16, l ow( ct eOCR1A)
out OCR1AL, r 16
r et
; Pr ogr amst ar t s her e af t er Reset
;
i ni ci o:
l di r 16, hi gh( r amend) ; conf i gur amos l a pi l a
out SPH, r 16
l di r 16, l ow( r amend)
out spl , R16
sbi DDRB, PB1 ; pi n PB1 sal i da
r cal l Conf i g_t i mer 1
f i n:
r j mp f i n
#i ncl ude <avr \ i o. h>

#def i ne ct eOCR1A 49999U

voi d conf i g_Ti mer 1( voi d) {
TCCR1B = ( 1<<CS10) | ( 1<<WGM12) ;
TCCR1A = ( 1<<COM1A0) ; / / modo conmut aci n
OCR1A = ct eOCR1A;
} / / f i n f unci on conf i g_Ti mer 1( )

/ / pr ogr ama pr i nci pal

i nt mai n( voi d) {
DDRB = DDRB | 0x02; / / PB1 sal i da
conf i g_Ti mer 1( ) ;
whi l e( 1) {
}
}

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -15- 25/05/2006
Precauciones al simular con el VMLAB y el temporizador 1.
Se ha mencionado que al usar el temporizador, debe primero configurarse el generador de onda y
luego de ello recin configurar el pin como salida (esta es la recomendacin del fabricante, aunque
no especifica qu ocurrira si se hace al revs). En el VMLAB si se hace de esta manera (la
recomendada por el fabricante) no se generar ninguna onda en el pin. Para solucionar el problema,
a la hora de simular con el VMLAB debe primero configurarse el pin como salida y luego
configurarse el temporizador.

El VMLAB no simula correctamente el bit WGM13 del registro TCCR1B. Siempre asume que
dicho bit vale cero. Esto significa que, si se intenta simular un modo en el que WGM13 vale 1, el
VMLAB simular otro modo (aqul en el cual WGM13 vale cero). Por ello, no puede simularse el
modo CTC con ICR1 (WGM13=1, WGM12=1, WGM11=0, WGM10=0). De intentarse, lo que
ocurrir es que incorrectamente simule el modo CTC con OCR1A (WGM13=0, WGM12=1,
WGM11=0, WGM10=0).

Modo PWM rpido
Modulacin PWM:
El acrnimo PWM significa modulacin por ancho de pulso (Pulse Width Modulation). Consiste
en generar una forma de onda, en la que el ancho de cada pulso es proporcional al valor de alguna
seal analgica, pero de tal manera que se mantiene constante la suma del tiempo en nivel alto y
nivel bajo. En la figura 8 puede verse un ejemplo de onda PWM. Observar que el ancho total T es
constante, y lo que est variando es el ancho en nivel alto y nivel bajo de cada pulso.


Fig. 11 Modulacin PWM
El circuito contador/temporizador permite generar ese tipo de ondas. En este documento slo se
ver el modo PWM rpido. En la figura 9 puede apreciarse la configuracin del circuito para ese
modo. El generador de onda se encarga de generar la seal PWM y para ello hace uso del valor tope
(salida del comparador) y del valor mnimo (cuando TCNT1=$0000).

- El contador TCNT1 acta como contador de 16 bits ascendente y cuando llega a $FFFF vuelve a
$0000 en el siguiente ciclo de reloj.
- Cada vez que TCNT1 llega a $FFFF el bit TOV1 es puesto a 1, y se puede generar una peticin
de interrupcin. Este es el momento adecuado para modificar, si se desea, el valor de OCR1A.
- Cada vez que hay una comparacin exitosa, el bit OCF1A se pone a 1, y tambin se puede
generar una peticin de interrupcin.

El generador de onda es el que genera la forma de onda PWM, y para ello, cuenta con los siguientes
modos:
- Modo PWM no-invertido: OC1A es puesto a 1 cada vez que TCNT1 llega a $0000, y puesto a
cero cada vez que hay comparacin exitosa (TCNT1=OCR1A)
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -16- 25/05/2006
- Modo PWM invertido: OC1A es puesto a cero cada vez que TCNT1 llega a $0000, y puesto a 1
cada vez que hay comparacin exitosa.
- Modo conmutacin: es similar al modo conmutacin del modo CTC. Permite tener una onda
con el mismo ancho en nivel bajo y nivel alto, en caso que se requiera.
Para la configuracin de estos modos se emplean los bits COM21 y COM20 del registro TCCR2
como se muestra en la tabla de la Fig. 9.



a) Para determinar si ha pasado un intervalo de tiempo predeterminado.
Como se conoce el perodo de reloj que entra al contador TCNT1, se puede determinar cuntos
pulsos del contador deben ocurrir para que haya transcurrido un intervalo de tiempo deseado.
Supongamos, por ejemplo, que se desea determinar cundo han transcurrido 10ms.
Asumamos, para este ejemplo que el pre-escalador se va a programar con mdulo 1, y que la
frecuencia del reloj del microcontrolador es de 1MHz; eso significa que cada pulso del contador de
carrera libre dura:

Perodo: (mdulo pre-escalador)/(frecuencia reloj E) =1/2MHz =0.5s

El nmero de pulsos que se generan en 10ms es:

nmero de pulsos =(intervalo de tiempo)/periodo contador =10ms / 0.5s =20000

Primero se programa el pre-escalador con mdulo 1, y se configura el circuito contador-
temporizador en el modo normal.
En el momento que se quiera comenzar a contar el intervalo de tiempo, se hace lo siguiente:
Se desactiva la salida del latch OCF1x del comparador de salida que se va a utilizar (A B). Para
ello hay que escribir un 1, en el bit correspondiente del registro de E/S TIFR.
Se lee el valor que en ese momento tiene el contador TCNT1.
se le suma 20000 al valor ledo, que es el nmero de pulsos que deben transcurrir.
Se escribe este valor en el registro OCR1x del comparador de salida que se quiera utilizar.
Se lee el valor del latch OCF1x de manera seguida. Cuando valga 1, en ese momento habrn
transcurrido los 10 ms.
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -17- 25/05/2006
El contador/temporizador 2
En el dibujo se muestra parte del circuito que conforma el contador/temporizador 2 del ATmega8.
Este circuito es sncrono, actuando como seal de reloj, la del microcontrolador, de nombre CLKIO.
El circuito consta de un contador de 8 bits TCNT2, que es un contador ascendente/descendente. La
seal de reloj que utiliza, CLKT2, se selecciona con el circuito selector de reloj. ste permite
seleccionar entre el reloj del microcontrolador (CLKIO), la cual puede dividirse con el pre-escalador
programable (mdulos 1, 8, 32, 64, 128, 256 y 1024), o una seal de reloj que llega por el pin
TOSC1 del microcontrolador, cuando ste tiene conectado en los pines TOSC1 y TOSC2 un cristal
de cuarzo de baja frecuencia (32 KHz). El bloque "lgica de control" se encarga de efectuar la carga,
borrado y habilitacin de cuenta del contador, adems de generar la seal de fin de cuenta TOV2,
todo ello segn el modo de operacin que se programe en el circuito contador/temporizador.
La programacin del pre-escalador se hace con 3 bits de nombres: CS22, CS21, CS20. La seleccin
de la seal de reloj se hace con el bit AS2 del registro de E/S ASSR.
Cuando se utiliza el reloj externo, pin TOSC1, se denomina seal de reloj asncrona. Esta seal de
reloj se sicroniza con el reloj del microcontrolador CLKIO. Ello lo hace el bloque sincronizador
mostrado en la Fig. 5.

Slo veremos el uso del contador, con la seal de reloj CLKIO, y no su uso con pin TOSC1.


Fig. 12 El contador/temporizador 2
El comparador de salida OC2
Un comparador de salida (output compare) es un circuito consistente en un comparador, un registro,
denominado registro del comparador de salida cuyas salidas van a una de las entradas del
TCNT2 (8 bits)
=
=
$00
LGICA
DE
CONTROL BORRADO
DIRECCIN
CUENTA
MNIMO
TOPE
=
OCR2 (8 bits)
COMPARADORES (8 BITS)
OCF2
GENERADOR
DE ONDA
Preescalador:
1, 8, 32, 64,
128, 256, 1024
TOSC1
CLKIO
CLKT2
Selector de reloj
OC2
PINES
Reloj del
microcontrolador
CONTADOR-TEMPORIZADOR 2
$FF
TOV2
TOIE2
OCIE2
Peticin de
interrupcin
sincronizador
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -18- 25/05/2006
comparador, y en la otra entrada del comparador va la salida de un contador. Adems, la salida del
comparador va a otros elementos que permiten generar una seal en un pin del microcontrolador,
indicar en un bit de un registro que ha ocurrido una comparacin exitosa (es decir, que el valor del
contador es igual al valor del registro), o generar peticiones de interrupcin cuando ocurre una
comparacin exitosa. El contador, no se considera que forme parte del circuito comparador de
salida. Por ejemplo, en el contador/temporizador 1 hay un nico contador y dos comparadores de
salida.

En el contador/temporizador 2 se cuenta con un circuito comparador de salida denominado OC2. En
la Fig. 5 se puede observar el registro OCR2 de 8 bits, el cual es el registro del comparador de
salida, el cual llega a un comparador de 8 bits, y a la otra entrada del comparador llega el valor del
contador TCNT2. OCF2 es el bit que se pone a 1 cada vez que hay una comparacin exitosa
(TCNT2 =OCR2), y el bloque generador de onda permite modificar el valor en el pin OC2 cada
vez que hay una comparacin exitosa. Por medio de la compuerta AND y el bit OCIE2, pueden
generarse peticiones de interrupcin cada vez que hay una comparacin exitosa.

En la Fig. 6 se muestra con ms detalle el comparador de salida OC2. En gris aparece lo que no
pertenece al circuito comparador de salida en s.

Fig. 13 Detalle del comparador de salida OC2
Seleccin de la seal de reloj
El bit AS2 del registro de E/S ASSR permite seleccionar la seal de reloj de entrada: CLKIO o la
seal proveniente del pin TOSC1 mostradas en la Fig. 5.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -19- 25/05/2006
Tabla 4 Seleccin de seal de reloj
AS2 Descripcin
0 Reloj del microcontrolador (CLK
IO
)
1 Reloj asncrono (seal en pin TOSC1)

Configuracin del pre-escalador
Tres bits del registro de E/S TCCR2 permiten seleccionar el mdulo del pre-escalador, segn lo
mostrado en la tabla 2.

Tabla 5 Seleccin del mdulo del pre-escalador
CS22 CS21 CS20 Descripcin
0 0 0 No hay seal de reloj. Contador detenido.
0 0 1 Mdulo 1
0 1 0 Mdulo 8
0 1 1 Mdulo 32
1 0 0 Mdulo 64
1 0 1 Mdulo 128
1 1 0 Mdulo 256
1 1 1 Mdulo 1024

Modos de operacin del circuito contador/temporizador
El circuito contador/temporizador puede configurarse en cuatro modos de operacin.
- Modo Normal
- Modo mdulo programable, denominado "modo CTC"
- Modo PWM rpido
- Modo PWM con correccin de fase.

De stos, slo veremos los tres primeros.

El modo de operacin se configura con los bits WGM21 y WGM20 del registro de E/S TCCR2,
como se indica en la Tabla 3.
Tabla 6 Modos de operacin del contador/temporizador 2
Modo
N
WGM21 WGM20 Modo valor tope
(TOP)
Actualizacin de
OCR2 ocurre:
TOV2 se pone
a 1 cuando:
0 0 0 Normal $FF de inmediato TCNT2=$FF
1 0 1 PWM con correccin de fase $FF en valor tope TCNT2=$00
2 1 0 CTC (mdulo programable) OCR2 de inmediato TCNT2=$FF
3 1 1 PWM rpido $FF en valor tope TCNT2=$FF

Cuando el contador TCNT2 llega al valor tope, en el siguiente ciclo de reloj TCNT2 es borrado.
Al escribir un valor en OCR2, ste no necesariamente es escrito de inmediato. En el caso de los
modos PWM, el valor no se actualiza hasta que el contador haya llegado al valor tope ($FF).
El bit de final de cuenta, TOV2, se comporta como un 9no bit de TCNT2, que slo se pone a 1.
Modo Normal:
Es el modo ms sencillo de operacin. En este modo:
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -20- 25/05/2006
- El contador TCNT funciona como contador binario ascendente de 8 bits.
- Cuando el contador llega a $FF regresa a $00 en el siguiente ciclo de reloj y el bit TOV2 se pone
a 1 (TOV2 se comporta como 9no bit del contador, pero slo se pone a 1).
- Cuando el valor de TCNT2 es igual al contenido de OCR2, ocurre una comparacin exitosa (bit
OCF2 se pone a 1) y se puede modificar el estado del pin OC2 (PB3), si se configura para ello al
generador de onda.
- Poniendo a 1 el bit FOC2 del registro TCCR2, el generador de onda acta sobre el pin OC2,
como si hubiese ocurrido una comparacin exitosa.

El modo normal puede utilizarse en las siguientes situaciones:
- Cuando se requiera generar algn evento de manera peridica, a intervalos de tiempo fijos, y
baste para ello, el uso del valor generado en TOV2. De no poderse obtener el intervalo de
tiempo deseado, es mejor utilizar el modo CTC.
- Cuando se desea generar un evento, o tomar alguna accin, a partir de cierto instante de tiempo,
y luego de transcurrido un intervalo de tiempo dado. En este caso, se utiliza el comparador de
salida OC2 para determinar la finalizacin del intervalo de tiempo. De requerirse de manera
peridica, es mejor utilizar el modo CTC.
Modo mdulo programable (modo CTC)
Este modo permite generar ondas peridicas en el pin OC2, y/o generar interrupciones de manera
peridica. En este modo:
- El contador TCNT2, cuenta de manera ascendente.
- Cuando ocurre una comparacin exitosa (TCNT2=OCR2), en el siguiente ciclo de reloj TCNT2
se pone a $00 (es borrado). De esa manera, se est obteniendo un contador de mdulo
programable, siendo el mdulo: OCR2+1.
- Luego de cada comparacin exitosa, en el siguiente ciclo de reloj se pone a 1 OC2F, y adems,
se puede modificar el estado del pin OC2, segn como se haya configurado el generador de
onda.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -21- 25/05/2006

Fig. 14 Modo mdulo programable (CTC)

Configuracin del generador de onda en el modo normal y modo CTC
En los modos normal y CTC se puede configurar al generador de onda de tres maneras.
- Modo conmutacin: En este modo, cada vez que ocurre una comparacin exitosa, se cambia de
estado el pin OC2 (si OC2=1, luego de la comparacin exitosa OC2=0, o viceversa).
- Modo puesta a 1: En este modo, luego de una comparacin exitosa, OC2=1
- Modo puesta a 0: En este modo, luego de una comparacin exitosa, OC2 =0

La seleccin se hace con los bits COM21 y COM20, como puede apreciarse en la tabla que aparece
en la Fig. 6.
Modo PWM rpido
Modulacin PWM:
El acrnimo PWM significa modulacin por ancho de pulso (Pulse Width Modulation). Consiste
en generar una forma de onda, en la que el ancho de cada pulso es proporcional al valor de alguna
seal analgica, pero de tal manera que se mantiene constante la suma del tiempo en nivel alto y
nivel bajo. En la figura 8 puede verse un ejemplo de onda PWM. Observar que el ancho total T es
constante, y lo que est variando es el ancho en nivel alto y nivel bajo de cada pulso.

Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -22- 25/05/2006

Fig. 15 Modulacin PWM
El circuito contador/temporizador permite generar ese tipo de ondas. En este documento slo se
ver el modo PWM rpido. En la figura 9 puede apreciarse la configuracin del circuito para ese
modo. El generador de onda se encarga de generar la seal PWM y para ello hace uso del valor tope
(salida del comparador) y del valor mnimo (cuando TCNT2=$00).

- El contador TCNT2 acta como contador de 8 bits ascendente y cuando llega a $FF vuelve a
$00 en el siguiente ciclo de reloj.
- Cada vez que TCNT2 llega a $FF el bit TOV2 es puesto a 1, y se puede generar una peticin de
interrupcin. Este es el momento adecuado para modificar, si se desea, el valor de OCR2.
- Cada vez que hay una comparacin exitosa, el bit OCF2 se pone a 1, y tambin se puede generar
una peticin de interrupcin.

El generador de onda es el que genera la forma de onda PWM, y para ello, cuenta con los siguientes
modos:
- Modo PWM no-invertido: OC2 es puesto a 1 cada vez que TCNT2 llega a $00, y puesto a cero
cada vez que hay comparacin exitosa (TCNT2=OCR2)
- Modo PWM invertido: OC2 es puesto a cero cada vez que TCNT2 llega a $00, y puesto a 1 cada
vez que hay comparacin exitosa.
- Modo conmutacin: es similar al modo conmutacin del modo CTC. Permite tener una onda
con el mismo ancho en nivel bajo y nivel alto, en caso que se requiera.
Para la configuracin de estos modos se emplean los bits COM21 y COM20 del registro TCCR2
como se muestra en la tabla de la Fig. 9.
Pontificia Universidad Catlica del Per
Curso: Sistemas Digitales Especialidad:Electrnica Profesor: Ing. Hugo Pratt

Contadores&Temporizadores Rev 2.1 -23- 25/05/2006

Fig. 16 El modo PWM rpido
Una forma de onda como la mostrada en la figura 8, puede generarse empleando el modo PWM no-
invertido. El perodo T, est dado por el intervalo de tiempo que demora TCNT2 en pasar de $00 a
$FF y nuevamente a $00. Por tanto, se puede configurar con el pre-escalador, nicamente.
El ancho del pulso, en nivel alto, es proporcional al valor de OCR2. El ancho en nivel bajo, ser:
256-TCNT2.
Si se empleara el generador de onda en el modo PWM invertido, la forma de onda sera la de la Fig.
8 invertida.
Uso y escritura de bits OCF2, TOV2
El bit OC2F se pone a 1 cuando ocurre una comparacin exitosa. Para ponerlo a 0, hay que escribir
un uno en dicho bit. Si se utilizan interrupciones, el microcontrolador automticamente lo borra
cuando se acepta la peticin de interrupcin generada por una comparacin exitosa.
Una vez que el bit TOV2 se ha puesto a 1, para ponerlo a 0 hay que escribir un 1 en dicho bit. Si se
gener una peticin de interrupcin por TOV2, el microcontrolador automticamente lo pone a 0
cuando la peticin ha sido aceptada.

Vous aimerez peut-être aussi