Curso Micro Tema 4

19
TEMA 4. TIMER 0 IUT Cumaná Prof. Luis Microcontrolador es

description

Tema 4 de Microcontroladores I del IUT Cumaná

Transcript of Curso Micro Tema 4

Page 1: Curso Micro Tema 4

TEMA 4. TIMER 0

IUT Cumaná

Prof. Luis ZuritaMicrocontroladores

Page 2: Curso Micro Tema 4

REGISTROS ASOCIADOS AL TEMPORIZADOR TMR0

• TMR0: Registro de 8 bits de lectura/escritura• OPTION: Configura al TMR0 para que trabaje como

temporizador ó contador y asigna el valor al prescaler• INTCON: Da información mediante el bit “TOIF”

cuando el TMR0 se ha desbordado.• TRISA (PUERTO A): Permite el ingreso de pulsos

cuando el TMR0 está configurado como contador por RA4

IUT Cumaná

Prof. Luis Zurita

Page 3: Curso Micro Tema 4

REGISTRO OPTION (Dirección 81H)

• bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit1: Desactivadas0: Activadas

• bit 6, INTEDG: Flanco activo para el control de interrupciones1: Con flanco Ascendente0: Con flanco Descendente

• bit 5, TOCS: Fuente de Reloj para TMR01: Pulsos introducidos a través de RA4/T0CK1

(Contador)0: Pulsos de reloj interno Fosc/4 (Temporizador)

• bit 4, TOSE: Tipo de flanco en TOCK11: Incremento de TMR0 cada flanco descendente0: Incremento de TMR0 cada flanco ascendente

• bit 3, PSA: Bit de asignación del prescaler divisor de frecuencia1: El divisor de frecuencia se asigna al WDT0: El divisor de frecuencia se asigna al TMR0

• bit 2-0, PS2:PSO: Rango con el que actúa el divisor de frecuencia.

IUT Cumaná

Prof. Luis Zurita

Page 4: Curso Micro Tema 4

EJEMPLOS DE CONFIGURACIÓN

• Configure al PIC16F84 para que el temporizador TMR0, trabaje con los pulsos provenientes de un reloj externo, y el mismo cambie en el flanco de subida del pulso externo:

• Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la frecuencia del mismo sea dividida por 32:

IUT Cumaná

Prof. Luis Zurita

¿Y los demás bits?¿Cómo lo cargo al OPTION?

En el primer caso:

movlw b’xx11xxxx1’

movwf OPTION

En el segundo caso:

movlw b’xx0x0100’

movwf OPTION

Page 5: Curso Micro Tema 4

TEMPORIZADOR TMR0

• Registro asociado al Timer0. Se encuentra en la posición 01H de la memoria RAM. Es el corazón del módulo Timer0. Puede ser leído o escrito en cualquier momento. El TMR0 se incrementará automáticamente por cada ciclo de instrucción y contará desde 0 (00H) hasta 255 (FFH) (Contador de 8 bits).

• Para que opere como temporizador, el bit TOCS (del registro OPTION) debe ser cero (0), el bit PSA= 0 y deben ser cargados los bits PS2 a PS0, según sea el preescaler a utilizar para lograr nuestra temporización.

• Para que opere como contador, se usa una entrada de reloj externo en el TMR0 y se deben de cumplir ciertos requisitos para que el reloj externo pueda ser sincronizado con el reloj interno (TOSC). Además existe un retardo en el incremento real del TMR0, después de la sincronización. El bit TOCS= 1. Se debe seleccionar el tipo de flanco que producirá el incremento del TMR0 ( TOSE = 1 ó 0).

IUT Cumaná

Prof. Luis Zurita

Page 6: Curso Micro Tema 4

¿QUÉ ES EL PRESCALER?• Divide la frecuencia de reloj de entrada del Timer0, entre valores

predefinidos, como se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc., genera una nueva señal de menor frecuencia a la salida, que será la señal de reloj de entrada al registro TMR0.

• “Ralentiza” señales de entrada demasiado rápidas para nuestros propósitos.• También existe un postescaler, asociado al perro guardián WDT (Watch Dog

Timer) del microcontrolador, pero en este caso recibe el nombre de postcaler ya que se usa a la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al WDT. El preescaler es transparente para el programador, no se puede leer ni escribir sobre él, pero se puede seleccionar por software, como ya se ha dicho, mediante el registro OPTION.

• Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una secuencia de instrucciones específicas cuando se cambia la asignación del prescaler del TMR0 al WDT. Esta secuencia debe ser seguida, aún cuando el WDT esté inactivo.

IUT Cumaná

Page 7: Curso Micro Tema 4

¿CÓMO CUENTA EL TMR0?

El TMR0 cuenta exclusivamente de forma ascendente, nunca descendente.

Si el TMR0 se carga con un valor, éste comenzará a contar desde el valor cargado hasta que se desborda (cuando pasa a 00H)

00H

FFH00H

00H

FFH

Valor cargadoEn el TMR0

00H

(28 – N10)

IUT Cumaná

Prof. Luis Zurita

Page 8: Curso Micro Tema 4

CÁLCULOS CON EL TMR0

• Cuando se carga en el registro TMR0 un valor XXH, él mismo contará: (FFH – XXH) impulsos y el tiempo que tarda en hacerlo viene dado por la expresión: Temporización= 4 * TOSC * Valor Real TMR0 * Rango del

divisor de Frecuencia

Valor Real TMR0 = (28 – N10) = (256 – N10)

N10= Valor a cargar en el TMR0

Ejemplo: Sea un valor a cargar en el TMR0 de 100, un prescaler seleccionado de 1:32 y un oscilador XT. Determine el tiempo en que tardará el TMR0 en desbordarse.

Solución: Sea XT = Frecuencia = 4 MHz, T = 0.25 μs.Temporización= 4*0.25 μs* (256 – 100) * 32 = 4.992 ms.

IUT Cumaná

Prof. Luis Zurita

Page 9: Curso Micro Tema 4

OTROS EJEMPLOS

• Se desea saber: ¿Qué valor debemos cargar en el TMR0, si deseamos obtener una temporización de 10,24 ms, utilizando un preescaler de 128 y un cristal XT?Solución:(256 – N10) = = = 80

(256 – N10) = 80, despejando N10 = (256 – 80) = 176, el valor que debemos cargar en el TMR0 es 176, para que éste cuente desde 176 hasta 256.

• Elegir el TMR0, para generar un retraso de 1.5 ms utilizando un oscilador de 10 MHz.Solución: Sea Fosc= 10 MHz, T = 100 ns

(256 – N10) = =

N10 = 256 - (3750/RgoDivisor)

RgodivisorT

iónTemporizac

OSC 4 12825.04

24,10

s

ms

RgodivisorT

iónTemporizac

OSC 4 RgoDivisorns

ms

1004

5.1

IUT Cumaná

Prof. Luis Zurita

Page 10: Curso Micro Tema 4

Démosle valores al Rango del divisor, hasta obtener un valor que se acerque lo más posible al retardo propuesto:Si Prescaler= 256, Valor a cargar en el TMR0= 241 (redondeado)Si Prescaler= 128, Valor a cargar en el TMR0= 227 (redondeado)Si Prescaler= 64, Valor a cargar en el TMR0= 197 (redondeado)Si Prescaler= 32, Valor a cargar en el TMR0= 139 (redondeado)Etc…A manera de práctica, realice usted, el cálculo de la Temporización, para cada uno de los valores que se consiguieron en los cálculos anteriores. Escoja uno y justifique. Particularmente parece que el que tiene el rango de divisor de 64, es el mejor.

• Nota: En este ejercicio resuelto, usted puede darse cuenta de que no hay un solo resultado para los ejercicios, pero lo que si debe cumplirse es que sea cualquiera que sean los valores que se tomen para los cálculos, estos deben de estar cercanos a la respuesta que se espera del temporizador que esté diseñando.

CONTINUACIÓN EJEMPLO ANTERIOR

IUT Cumaná

Prof. Luis Zurita

Page 11: Curso Micro Tema 4

• Ejemplo. Diga ¿cuánto es la máxima temporización que se puede hallar con el TMR0? Asuma que se está trabajando con un XT.Solución: Tomamos el máximo factor de escala de división todos los estados que puede contar el TMR0: – Temporización= 4*0.25 μs*(256 )*256 = 65.536 ms.– Este es el máximo valor que podemos conseguir del

TMR0.

• ¿Cómo hacemos entonces para conseguir valores superiores a éste, tales como 0,5 s; 1 s; 2 s; entre otros?– Esto se puede arreglar si tenemos un contador de mayor

número de bits. La solución está en extender el Timer0 con un registro (auxiliar) controlado por software.

– Dicho registro (auxiliar) contará el número de interrupciones por desbordamiento que genera el Timer0, de forma de que éste pase por cero, cuando haya pasado el tiempo que estamos calculando.

IUT Cumaná

Prof. Luis Zurita

Page 12: Curso Micro Tema 4

USO DE REGISTRO AUXILIAR

Pasos: 1. Escoger un valor para el prescaler.

Un posible criterio es calcular todas las frecuencias de prescaler que podemos obtener con cada divisor posible. Las frecuencias sin decimales son interesantes al poder encontrar múltiplos de ellas a la salida del TMR0 con mayor facilidad. En general, la elección del valor del prescaler es empírica: depende del problema, la experiencia y sobre todo de la práctica.

2. Determinar el valor del Registro Auxiliar, a partir del valor dado por el TMR0. Normalmente viene dado por un múltiplo de la frecuencia, asociada al tiempo calculado. Con un ejemplo entenderemos mejor lo que se desea plantear:

Ejemplo: Determine los valores del TMR0 y del Registro Auxiliar paraconseguir una temporización de 1 segundo. Utilice un oscilador XT.

Solución: XT= Frecuencia = 4 MHz ; Tosc= 250 ns • Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que

temporización, podemos aleatoria mente escogerlas, como en el ejemplo 6. Evaluando cualquiera, cuya temporización del TMR0 se basó en 5 ms, escojamos el prescaler 128 y sustituyamos los valores en la ecuación principal:– Temporización= 4*250 ns*(256 - 217)*128 = 4.992 ms

IUT Cumaná

Page 13: Curso Micro Tema 4

CONTINUACIÓN DEL EJEMPLO ANTERIOR

• Paso 2. ¿Qué valor debe de tener el registro auxiliar?a) Al tiempo de 4.992 ms, se asocia una frecuencia del TMR0 de =

= 200.3 Hz, redondeando, tomamos este

múltiplo:

200, Así, tendremos entonces que si multiplicamos 200*4.992 ms = 0.998 s, que es un valor bastante cercano a 1 segundo.

b) La misma operación pero interpretada de una forma más sencilla es determinar cuantas veces necesitamos al tiempo calculado para lograr un segundo:

La que usted entienda mejor es válida. Nuestro registro auxiliar debe ser de 200!!! Recuerde de que éste registro auxiliar no debe superar 255.Si supera este valor, se debe adicionar un nuevo registro auxiliar

ms992.4

1

32.200992.4

1

ms

segundo

IUT Cumaná

Page 14: Curso Micro Tema 4

DE LOS CÁLCULOS A LA

PROGRAMACIÓN • Realicemos un ejercicio completo: Realice un programa que

permita encender y apagar un led cada 15 ms, mediante el timer0. Utilice un oscilador XT.

IUT Cumaná

Prof. Luis Zurita

Page 15: Curso Micro Tema 4

DE LOS CÁLCULOS A LA PROGRAMACIÓN

Paso 2. Debemos de estructurar el programa para que vigile e informe cuando el TMR0 se ha desbordado, y el bit que nos da esta información es el TOIF, del Registro INTCON. Adicional a esto debemos configurar el registro OPTION para que este trabaje con el prescaler que hemos seleccionado para nuestros cálculos, así como de asignarlo al TMR0. Así como la rutinaria configuración de los puertos.

IUT Cumaná

Page 16: Curso Micro Tema 4

IUT Cumaná

Prof. Luis Zurita

LIST P=16F84AINCLUDE P16F84A.INCORG 00HGOTO INICIO

INICIO BSF STATUS,5CLRF TRISAMOVLWB’11010110’MOVWFOPTION_REGBCF STATUS,5CLRF INTCON

LEDON BSF PORTA,0CALL RETARDO

LEDOFFBCF PORTA,0CALL RETARDOGOTO LEDON

;***RUTINA DE RETARDO***RETARDO MOVLWD’139’

MOVWFTMR0ESPERABTFSS INTCON,TOIF

GOTO ESPERABCF INTCON,TOIFRETURNEND

Paso 3. Programa

Page 17: Curso Micro Tema 4

Ejercicio. Realice un programa que permita encender y apagar un led cada un segundo. Mediante Timer0 y con un oscilador XT.

IUT Cumaná

Prof. Luis Zurita

Programa Principal

Subrutina

Page 18: Curso Micro Tema 4
Page 19: Curso Micro Tema 4

¿OTRA FORMA DE HACER LOS CÁLCULOS?

• Pero si aún le enredan todas estas fórmulas, para calcular temporizaciones, probemos con estas tres:

Pruebe ahora realizar los mismos cálculos siguiendo el 1, 2, 3…

IUT Cumaná

Prof. Luis Zurita