Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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).
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
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).
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
El TIMER0
El TIMER/COUNTER es un mdulo de 8 bit con las siguientes caractersticas:
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.
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.
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>).
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
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
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
En el primer men seleccionamos Microchip Embedded\Standalone Project:
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Y por ltimo seleccionamos el lenguaje de programacin que trabajaremos, en este caso
assembler.
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:
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
Ya tememos el espacio donde se crear el programa:
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):
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.
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:
Los valores o datos que queremos ver de cada registro puede ser cambiado o adicionado dando
clic derecho sobre Name.
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:
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.
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:
MODULO TMR0
CONFIGURACIN, USO Y APLICACIONES (MPLABX)
BIBLIOGRAFA: