Fig. 1 – Diagrama del funcionamiento del Timer 0
El Timer 0 puede incrementarse automáticamente por medio de los ciclos internos del reloj o por los pulsos externos que entran en un pin del microcontrolador. Cuando este temporizador comienza su operación se incrementa con cada ciclo de máquina o por una fuente que entra en el pin TOCKI.
Un registro a tomar en cuenta para la configuración del timer 0 es el registro OPCIÓN. Este registro va a establecer las condiciones iniciales con las que trabajará el programa. Posee varios bits que configuran los circuitos de los temporizadores, las interrupciones y las resistencias pull-up.
El timer 0, puede configurarse en modo contador y temporizador. El modo de temporizador se selecciona por el bit TOSC del registro OPCIÓN (TOSC: “0” temporizador, “1” contador).
Los bits se almacenan en el registro OPCIÓN. Descripción de cada uno de los bits de este registro:
Tabla N°1 – Registro OPTION_REG PIC 16F887.
· RBPU (Resistencia Pull Up del puerto PORTB):
0 Resistencias pull up del puerto PORTB están deshabilitadas.
1 Pines del puerto PORTB pueden estar conectados a las resistencias pullup.
· INTEDG (Selector de flanco de la interrupción INT)
0 Interrupción por flanco ascendente en el pin INT.
1 Interrupción por flanco descendente en el pin INT.
· RTS (Fuente de señal TMR0)
0 Ciclo de instrucción interno, como temporizador.
1 Transición en el pin RA4/TOCK, como contador.
· RTE (Flanco de la señal del TMR0)
0 Incrementa en flanco descendente en el pin TMR0.
1 Incrementa en flanco ascendente en el pin TMR0.
· PSA (Bit de asignación del preescalador)
0 TMR0, Contador/Temporizador
1 Circuito de vigilancia WDT
Cuando se asigna el preescalador al temporizador/contador se debe poner a cero el bit PSA del registro. La configuración del pre-escalador es:
· PS2, PS1, PS0 (Bit selector del valor del divisor de frecuencias) El valor del divisor de frecuencias se ajusta al combinar estos bits. Como se muestra en la Tabla N° 1, la misma combinación de bits proporciona los diferentes valores del divisor de frecuencias para el temporizador/contador y el temporizador perro guardián, respectivamente.
Tabla N°2 – Combinación de bits para divisor de frecuencias
Notas de interés:
El timer 0 configurado en contador solo funciona con flancos y no con niveles, una configuración para esto sería modificar el Bit 4 de OPCIÓN y al colocarse este en 0, todos los flancos de subida se contarán y poniéndose en 1, pues todo lo contrario al cero.
La fuente de la señal TMR0 puede ser sometida a un proceso de división de frecuencia, que no es más que la división de una frecuencia utilizada por diversos rangos para poder conseguir temporizaciones más largas, además, se transmite en forma simultánea por un solo medio de transmisión.
Ya sabiendo que es una división de frecuencia, esto puede ocurrir en los módulos preescaladores y solo se deberá configurar el bit 3 en 1 del registro OPCIÓN. La única forma de no preescalar el temporizador es asignarle el perro guardian.
Pasos para configurar el timer 0: 1. Asignar el prescalador
2. Configurar el temporizador colocando los bits adecuados en el registro OPCIÓN
3. Para inicializar el temporizador, simplemente se debe escribir un número en el registro TIMER0 o borrarlo. Cuando se ha cargado con un número el temporizador, hará la cuenta desde ese número.
4. El temporizador debe ser argado después de cada sobreflujo para repetidos intervalos de tiempo, si no se hace FF, resultará en cada ocasión.
Usos del Timer “0”:
Para medir tiempo:
Reiniciar el registro TMR0 o escribir un valor conocido en él. El tiempo transcurrido en microsegundos al utilizar el oscilador de 4MHz) se mide al leer el registro TMR0. El bit de bandera T0IF del registro INTCON se pone a uno automáticamente siempre que ocurre el desbordamiento del registro TMR0. En donde se pasa de estar los bits en B’11111111’ a B’00000000’. Esta configuración vendrá dada por un “0” que aún no se ha desbordado y en “1” cuando ocurra todo lo contrario.
Tabla N°3 – Bits del registro INTCON
Para contar pulsos:
La polaridad de pulsos a contar en el pin RA4 se selecciona por el bit RTE del registro OPCIÓN (RTE: “0” Pulsos positivos, “1” Pulsos negativos). Varios pulsos se pueden leer del registro TMR0. El preescalador y la interrupción se utilizan de la misma forma que en el modo de temporizador.
Programas
Timer 0 con interrupción https://mega.nz/#!WFlngC6I!Y5HnZbcchYMHR-V9w7rEaDj-0LpRSaEbr9ewAaTi-lg
Timer 0 como temporizador https://mega.nz/#!XQV2jLJB!eUAC5aKbKaEgqmakDDYLpY0PU6HB5nCuSa3Sqtfrj1Y
Timer 0 con motor e interrupción https://mega.nz/#!Tdt0DISS!5DIP_iXe2-9i_SddBj5XqCw-qnTja-wauLGOXiwVANU
Timer 0 como contador https://mega.nz/#!PAklSTYZ!rOkkmDqOiaaF54zR2dcC5TOd3-z5Nwu_qrNrJNMcKTQ
Referencias bibliográficas:
Ángel A. J. J. (2008). Microcontroladores. Editorial CEKIT S.A. Tomo I, Teoría.
Microchip. (2007). Datasheet PIC16F882/883/884/886/887. U.S.A.