martes, 19 de julio de 2016

Temporizador Timer 0


       El temporizador Timer0 tiene una amplia gama de aplicaciones en la práctica. Sólo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fácil de utilizar en programas o subrutinas para generar pulsos de duración arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones.

           El módulo del temporizador Timer0 es un temporizador/contador de 8 bits con las siguientes características:
  • Temporizador/contador de 8 bits;
  • Pre-escalador de 8 bits (lo comparte con el temporizador perro guardián);
  • Fuente de reloj interna o externa programable;
  • Generación de interrupción por desbordamiento; y
  • Selección del flanco de reloj externo programable.
       En modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instrucción (o cada X ciclos dependiendo del pre-escalador). En modo contador el valor del registro TMR0 se incrementa en cada flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al desbordarse (pasar de 0xFF a 0x0) el registro TMR0 la bandera de interrupción del timer 0 (bit T0IF del registro INTCON) se pone a 1.

Esquema del Temporizador Timer0


       Registro OPTION_REG


·         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 pull-up.
·         INTEDG – (bit selector de flanco activo de la interrupción externa)
·         0 – Interrupción por flanco ascendente en el pin INT (0-1).
·         1 – Interrupción por flanco descendente en el pin INT (1-0).
·         T0CS – (bit selector de tipo de reloj para el Timer0)
·         0 – Los pulsos se llevan a la entrada del temporizador/contador Timer0 por el pin RA4.
·         1 – El temporizador utiliza los pulsos de reloj internos (Fosc/4).
·         T0SE –  (bit selector de tipo de flanco)
·         0 – Incrementa en flanco descendente en el pin TMR0.
·         1 – Incrementa en flanco ascendente en el pin TMR0.
·         PSA – (bit de asignación del pre-escalador)
·         0 – Pre-escalador se le asigna al WDT.
·         1 – Pre-escalador se le asigna al temporizador/contador Timer0.
·         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 a la derecha, 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.
      Pre-escalador

      El pre-escalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un módulo o a otro mediante el bit PSA del registro OPTION. Poniendo el bit a 1 el pre-escalador se asigna al Watchdog y poniéndolo a 0 el pre-escalador se asigna al Timer 0. El valor del pre-escalador se selecciona con los bits PS2:PS0 de la siguiente manera:

PS2:P20    TMR0    WDT
  000      1:2     1:1
  001      1:4     1:2
  010      1:8     1:4
  011      1:16    1:8
  100      1:32    1:16
  101      1:64    1:32
  110      1:128   1:64
  111      1:256   1:128


Para utilizar el Timer0 apropiadamente, es necesario:
Paso 1: Seleccionar el modo:
  • El modo de temporizador se selecciona por el bit TOSC del registro OPTION_REG (TOSC: 0=temporizador, 1=contador).
  • Cuando se asigna el pre-escalador al temporizador/contador se debe poner a cero el bit PSA del registro OPTION_REG. El valor del divisor de frecuencias se configura al utilizar los bits PS2-PS0 del mismo registro.
  • Al utilizar una interrupción, los bits GIE y TMR0IE del registro INTCON deben estar a uno.
Paso 2: Medir y contar
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 TMR0IF del registro INTCON se pone a uno automáticamente siempre que ocurra el desbordamiento del registro TMR0. Si está habilitada, ocurre una interrupción.
Para contar pulsos:

  • La polaridad de pulsos a contar en el pin RA4 se selecciona por el bit TOSE del registro OPTION_REG (T0SE: 0=pulsos positivos, 1=pulsos negativos).
  • Varios pulsos se pueden leer del registro TMR0. El pre-escalador y la interrupción se utilizan de la misma forma que en el modo de temporizador.

Ejemplos de timer 2 (Archivos para abrir en MPLAB y Proteus):  Descargar Aqui

1 comentario:

  1. A la plis plis necesito hacer ese trabajo me pede dar la clave plis plis, para descargarlo plis

    ResponderEliminar