Sei sulla pagina 1di 17

MODULO TMR0

CONFIGURACIN, USO Y APLICACIONES (MPLABX)

TIMER/COUNTER
Qu diferencia hay en un contador y un temporizador? Ambos cuentan eventos. La diferencia se
observa en cmo se usa el resultado de cada uno de estas aplicaciones, por ejemplo podemos
contar el nmero de veces que un pulsador es presionado al estar conectado a la entrada del
mdulo Timer/Counter.

Observe que un circuito de anti-rebote (por hardware o software) es requerido: en este ejemplo el
pin de entrada est conectado a VDD (Alto) y cuando el pulsador es presionado la entrada es
puesta a referencia (Bajo), en este caso tenemos una conexin pull-up y el mdulo del TMR se
incrementar cada vez que el nivel lgico del pin cambie (esto es alto a bajo) y almacena el
resultado para tomarlo como referencia posteriormente; en este caso el mdulo es utilizado como
un contador.
De forma alterna, si nosotros utilizamos una seal peridica como fuente de reloj o un oscilador a
la entrada del mdulo TMR y hacemos que este se incremente cundo es presionado el pulsador y
detenido cuando el pulsador es liberado, nosotros podemos usar el valor almacenado actualmente
para calcular el tiempo entre los eventos de press/release (ver siguiente figura).

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

Si el periodo del reloj = 1 es multiplicado por el valor actualmente almacenado (#binario),


entonces obtenemos el tiempo que dur presionado el pulsador, el contador sigue contando pero
esta es una seal de reloj peridica que ser usada como una referencia y de este modo el
contador est siendo usado como un temporizador.

Mdulos TIMER en micro-controladores de medio rango:


Los tres CONTADORES/TEMPORIZADORES que se encuentran disponibles en los microcontroladores de rango medio, tienen nicas aplicaciones pero con caractersticas muy comunes,
como se muestra en la siguiente figura:

Como primera instancia una fuente es requerida, esta puede ser un reloj sncrono provisto por un
oscilador o un evento que no es tan peridico como un pulsador conectado al pin de entrada de
reloj del TMRX (se escribe TMRX por que puede ser TMR1, TMR2 o TMR3).
Como segunda instancia el valor actual debe ser almacenado en algn sitio de la memoria del
micro-controlador, en los PIC de rango medio este sitio puede ser un registro de 8 bit o 16 bit
ubicado en la memoria de datos dependiendo de cul de los tres mdulos TMR es usado. Un valor
binario incrementar de uno en uno y este incremento se puede configurar con el flanco de subida
o el de bajada de la seal, es decir, el valor del registro TMRX se incrementar cada vez que la
seal tenga una transicin de alto a bajo o de bajo a alto en la fuente.
Por ltimo, cada uno de los CONTADORES/TEMPORIZADORES tiene al menos un divisor (scaler).
Estos scaler pueden ubicarse antes (pre-divisor o pre-scaler) o despus (post-divisor o postscaler),
un escaler trabaja dividiendo una seal de entrada en un valor especfico, por ejemplo, si tenemos
una seal de entrada peridica con una frecuencia de 1 kHz, es decir 1ms y esta pasa a travs de
un pre-scaler, configurado en la forma 2:1, el valor en el registro del CONTADOR/TEMPORIZADOR
se incrementara de 1 en 1 cada dos transiciones lgicas de la seal o lo que es lo mismo
incrementar a una frecuencia de 500 Hz, de esta forma la seal se har ms lenta (tarda ms
tiempo).

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

El TIMER0
El TIMER/COUNTER es un mdulo de 8 bit con las siguientes caractersticas:

Un prescaler de 8 bit (compartido con el WDT).


La fuente de reloj es seleccionable interna o externa.
Interrupcin de desbordamiento (2550).
Seleccin del cambio de la transicin dependiendo del flanco (positivo o negativo).

Para configurar el mdulo del TMR0 es usado el registro de funciones especiales (SFR)
OPTION_REG, la siguiente figura muestra los diferentes elementos que componen el TMR0
incluyendo cada bit del OPTION_REG que afecta este mdulo.

Operacin
Pasaremos a travs de varios bloques del TMR0 para ver su configuracin, la seleccin de la fuente
de reloj es hecha a travs del bit 5 del registro OPTION_REG.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

En el modo temporizador, el mdulo el TMR0 incrementar con cada ciclo de instruccin (sin
hacer pre-escalamiento). Si el registro TMR0 es escrito, el incremento se deshabilita por los
siguientes dos ciclos de instrucciones. As entonces se podr trabajar con este, escribiendo y
ajustando el valor deseado para el registro TMR0.
El modo contador es seleccionado al poner 1 el bit 5 del registro OPTION_REG. En modo
contador, el TMR0 incrementar con cualquiera de los dos siguientes eventos: cada flanco de
subida o cada flanco de bajada que se observe en el pin T0CKI.
La seleccin del flanco de la fuente est solo disponible para el modo de fuente externa, el falco
con el que incrementa de TMR0 es determinado por el bit T0SE (bit 4 del registro OPTION_REG).
Poner clear 0 en este bit, selecciona el incremento teniendo en cuenta el flanco de subida que se
detecte en el pin T0CKI y al poner 1 en este bit, seleccionar el incremento con cada flanco de
bajada que se detecte en el pin T0CKI.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
El pre-escalador es compartido entre el TMR0 y el Watchdog Timer pero no en ambos
simultneamente, la asignacin del pre-escalador es configurable por software y es hecha por el
bit de control PSA (bit 3 del registro OPTION_REG), haciendo un clear 0 en este, asignar el
pre-escalador al mdulo del TMR0. El pre-escalador no es leble ni escribible, cuando este es
asignado para el TMR0, podemos tener valores de pre-escalamiento de 1:2, 1:4,, 1:256. Los
valores anteriores podrn ser configurados o escogidos a travs de los bit PS0, PS1 y PS2
(OPTION_REG<0:3>).

El valor escogido en el prescaler determinar qu cantidad de flancos de la fuente se requerirn


para incrementar el valor en el TMR0.
Cualquier escritura que se le haga al registro TMR0 como se mencion anteriormente, causar la
inhabilitacin del registro en los dos siguientes ciclos de instruccin (2Tcy), es decir si yo muevo un
valor o literal a este registro el TMR0 no ser incrementado antes del tercer ciclo de instruccin,
hay que tener en cuenta que si el pre-escalador es asignado al TMR0, cualquier escritura que se
realice a este registro (TMR0), actualizar el valor del TMR0 con el valor que usted le escribi y el
pre-escalador ser borrado (cleared), as entonces el TMR0 y el pre-escalador ser inhabilitado por
los siguientes dos ciclos de instruccin (2Tcy). Por ejemplo si el valor del pre-escalador es
configurado como 2, entonces despus de escribir en el TMR0 el registro ser inhabilitado y el
TMR0 no incrementar despus de los siguientes 4 pulsos de reloj.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

Interrupcin del TIMR0


Se genera una interrupcin cuando el registro TMR0 en su incremento llega a FFh y pasa a 00h
(desbordamiento), este evento genera la activacin del bit T0IF (registro INTCON<2>). Esta
interrupcin debe ser activada al poner en 1 el bit T0IE (registro INTCON<5>), el bit T0IF debe ser
borrado por software por el mdulo de servicio de interrupcin del TMR0
;********************************************************************
;**** Aplicacin para observar el funcionamiento del TMR0
***
;**** Versin 0001
***
;**** Autor: Oscar Andrs Pulido
***
;**** Fecha 17/12/2013
***
;**** Adaptado de: MICROCHIP, Timers: TIMER0 Tutorial Parte 1
***
;********************************************************************
LIST P=16F877A
#INCLUDE <P16F877A.INC>
ERRORLEVEL -302;Elimina el warning 302
ERRORLEVEL -305;Elimina el warning 305
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
CONTEO equ 0x20; Asignacin de la direccin 0x20 con el nombre CONTEO
ORG 0X0000; Inicia en el vector de reset
;***********************************************************************
;configuracin del TMR0
;***********************************************************************

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
CLRF STATUS
BSF STATUS,5;Ingresa al banco 1
CLRF INTCON; Deshabilita las interrupciones globales y la del TIMER0
MOVLW 0X08; Reloj interno
MOVWF OPTION_REG; Prescaler asignado al WDT
BCF STATUS,5;Vuelve al banco 0
PRINCIPAL
CLRF CONTEO; Inicia la variable conteo
CLRF TMR0; pone en 0 el TMR0 y se inhabilita por los siguientes dos TCy
nop;Ciclos de instruccin que no operan el TMR0
nop;Ciclos de instruccin que no operan el TMR0
CUENTA
BTFSS INTCON,TMR0IF;pregunta por el flag del TIMER0 para ver si se desbord
GOTO CUENTA;va a cuenta
INCREMENTA
INCF CONTEO,1; Incrementa la variable conteo despus de desbordarse el TMR0
BCF INTCON,TMR0IF; Ponemos a 0 el flag que indica el desbordamiento del TMR0
CLRF TMR0; Borramos el contenido del TMR0
GOTO CUENTA; Se repite el programa de forma infinita
END

En el programa anterior configuramos el TMR0 para que incremente cada ciclo de instruccin
utilizando como fuente de reloj el clock interno, para poder hacer que este se incremente cada
ciclo de instruccin, se debe asignar el prescaler al WDT y para verificar el desbordamiento del
TMR0 (2550), se har por el mtodo de poleo, en este caso entonces debemos desactivar la
interrupcin del TMR0 y las interrupciones globales.
Utilizaremos entonces el simulador de MPLAB X: primero al abrir el programa, damos clic en
file\new proyect

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
En el primer men seleccionamos Microchip Embedded\Standalone Project:

Escogemos la Familia de medio rango, 8-bit MCUs y el dispositivo el 16F877A.

Escogemos la opcin de simulador:

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Y por ltimo seleccionamos el lenguaje de programacin que trabajaremos, en este caso
assembler.

Y por ltimo damos el nombre al proyecto y finalizar

El entorno del programa queda de la siguiente forma:

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
En la parte derecha se ha establecido la ventana del proyecto, que es donde se gestionar todo los
elementos necesarios del programa para llevarlo a la compilacin y que esta sea satisfactoria,
(recuerde que el hecho que sea satisfactoria, no quiere decir que funcione correctamente). Vamos
a dar clic derecho sobre source Files\New\AssemblyFile.asm

Damos el nombre del programa en assembler y si se quiere cambiar la ruta de guardado lo puede
hacer en Browse:

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Ya tememos el espacio donde se crear el programa:

Al habilitar el simulador se activan los siguientes conos:

Cuando el cono de stop y pause estn en color es porque la simulacin est funcionando de forma
continua, damos clic en pause y se habilitan las otras funciones (si da clic en stop se detendr la
simulacin en su totalidad y deber habilitarla nuevamente):

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

El programa se detendr en cualquier lnea, ahora vamos a observar cmo cambian los registros
que nos interesan conforme va avanzando el programa y el tiempo que se va a tardar en ejecutar,
entonces vamos al men en Window\Debuggin\Watches y se habilitar en la parte inferior una
ventana en donde vamos a agregar los registros SFR y GPR (creados) que queremos observar:

Vamos a adicionar dando clic derecho y clic en New Watch y se observa la siguiente pantalla, en
esta vamos a adicionar INTCON, TMR0 y CONTEO.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

Para adicionar la variable CONTEO la cual fue creada en los GPR en esta versin del MPLAB (V2.10)
se debe escribir la direccin en donde se almacen esta, en este caso la guardamos en la posicin
0x20 h como se muestra en la figura:

La ventana del Watch quedar as:

Los valores o datos que queremos ver de cada registro puede ser cambiado o adicionado dando
clic derecho sobre Name.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Ahora como el programa ya est listo para simular y lo que queremos es observar si lo
programado corresponde a la funcin deseada, vamos a trabajar con las siguientes opciones:

Como ya habamos iniciado la simulacin y esta se detuvo en una lnea diferente a la primera lnea
(ORG 0X000), si damos clic en RESET (cono morado con dos flechas), este nos llevar al inicio del
programa, con el cono RUN lo simular en tiempo real y no podremos observar que es lo que
pasa en los registros (si dio clic en RUN, de clic en PAUSE y nuevamente en RESET si quiere
volver al inicio del programa), con el cono STEP INTO (cono con una hoja y una flecha amarilla
recta hacia abajo) realizar la simulacin cada vez que se pulse este botn (tambin se puede con
el teclado de su PC al pulsar la tecla F7), esta funcin permite que el usuario decida cundo
avanzar a la siguiente instruccin, con el cono STEP OVER (cono con una hoja y una flecha
amarilla curva hacia abajo), el usuario tambin simular paso a paso el programa pero har que las
subrutinas (instrucciones con llamadas o CALL) se ejecuten rpidamente, es como si no entrara
en la subrutina, por ltimo se agregarn BREAKPOINTS o puntos de parada para cuando el
programa se ejecuta de forma continua RUN se detenga en el BREAKPOINT asignado (el
BREAKPOINT se puede poner al dar clic sobre los nmeros que indican el nmero de la lnea de
instruccin).
Sabiendo lo anterior, vamos a ubicar un breakpoint en despus del LABEL CUENTA

Los registros que estn siendo afectados ya se encuentran en la ventana WATCH, tambin
habilitaremos la ventana STOPWATCH, esta no permitir medir los tiempos que se demora en
ejecutarse el programa o una seccin en particular:

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

Como ya hemos ubicado el breakpoint, damos clic en RESET y luego damos click en RUN y
observamos que se detendr despus del label CUENTA, y observamos en el Stopwatch que el
tiempo que se tard en llegar a este es de 10 us, si usted quiere ver qu pasa en cada registro paso
a paso en la ventana watch puede observar esto realizando la simulacin con STEP INTO.

Se puede ahora borrar el tiempo del Stopwatch con el botn Clear Stopwatch.

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Ahora vamos a quitar el breakpoint y ponemos uno nuevo despus del labelINCREMENTA (para
quitar el BREAKPOINT despus de cuenta, solo hay que dar un clic sobre el nmero de la lnea y
para adicionarlo despus de incrementa tan solo hay que dar un clic en la lnea de la instruccin
INCF CONTEO,1):

En esta parte del programa se est evaluando el estado del bit TMR0IF del registro INTCON que
indica cuando se ha desbordado el registro TMR0, la instruccin que evala esto es:
BTFSS INTCON,TMR0IF (lnea 37) si este no se pone en uno se va a la instruccin GOTO CUENTA y
se repite hasta que este bit est en 1, despus de eso ir al label INCREMENTA.
Demos clic en RUN nuevamente, el programa se detendr y se observar en el stopwatch:

En este observamos que el tiempo que se demor en desbordarse el TMR0 que fueron 260us, si el
programa continua, la variable CONTEO se incrementar en 1, se borra el valor existente en el
TMR0 y ponemos a cero el bit de testeo TMR0IF del registro INTCON y se repite el programa
indefinidamente. Como esta primera parte no tiene en cuenta el borrado del bit TMR0IF, el
borrado del TMR0 y el GOTO, vamos entonces a dar clic en STEP INTO hasta que llegue a label
CUENTA, aqu observamos que toda la rutina tarda en ejecutarse 265us. Si ubicamos el
BREAKPOINT en el momento justo que se incrementa la variable CONTEO, borramos el Stopwatch
y volvemos a dar clic en RUN, observamos que el tiempo real que dura en incrementarse la
variable CONTEO es de 265us, usted puede seguir borrando el Stopwatch y observar que siempre
es de 265us:

Ing. Oscar Andrs Pulido Casallas


2013.

MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)

BIBLIOGRAFA:

Traducido y adaptado al lenguaje assembler del documento en linea de Microchip


DS51682A TIMERS: TIMER0 TUTORIAL (PART 1).

Ing. Oscar Andrs Pulido Casallas


2013.

Potrebbero piacerti anche