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:
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.