domingo, 17 de febrero de 2013

TIMER

TIMER0

El Timer0 es un temporizador/contador ascendente de 8 bits, cuando trabaja con el reloj del PIC se le suele llamar temporizador y cuando los pulsos los recibe de una fuente externa a través de la patilla T0CKI se le llama contador. Este temporizador viene incorporado en todos los PIC.

T0CKI: Cuando el temporizador trabaje como contador, los pulsos externos los recibirá a través de esta patilla.

OSC1/CLKin y OSC2/CLKout: Son para conectar el oscilador que nos determinará a la frecuencia que va a trabajar nuestro PIC, los dos tipos de osciladores más usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador).


Solo están marcados de un color diferente los registros que están implicados en el funcionamiento del TMR0.

TMR0: Es un registro del que podemos leer el valor del contador en tiempo real, pero también podemos escribir en él y alterar el valor del conteo.

OPTION: Los bits que están en color verde son los que están implicados en la configuración del TIMER0

  • PS0, PS1 y PS2: Configuración del prescaler. El prescaler es un divisor de pulsos que está a la entrada del timer-contador. El prescaler divide el número de pulsos que le entran al timer-contador o al wachtdog. El factor de división es el siguiente (según los valores de PS2, PS1 y PS0 respectivamente).


  • PSA: Bit de asignación de prescaler. Si está a "1" el prescaler se asigna a WDT (Wachtdog), si esta a "0" se asigna al TMR0.
  • TOSE: Bit de selección del tipo de flanco para el TMR0. A "1" se incrementa el TMR0 por flanco descendente de RA4, a "0" se incrementa TMR0 por flanco ascendente de RA4.
  • TOCS: Selecciona la entrada de reloj de TMR0. A "1" la entrada de reloj de TMR0 es por flanco de la patilla RA4, a "0" la entrada de reloj de TMR0 es por ciclo de reloj interno.
El PIC también permite que se produzca una interrupción por desbordamiento del TMR0. Cuando se produce una interrupción el programa abandona temporalmente lo que estaba haciendo para atender la subrutina de interrupción, pero antes guarda en una región especial de la memoria llamada pila la dirección de la siguiente instrucción del programa, para que cuando acabe la subrutina de interrupción pueda seguir ejecutando el programa por donde se había quedado.

El registro que configura todas las interrupciones es el INTCON, el cual está mapeado en los dos bancos, una cosa muy útil cuando se trabaja en ensamblador para no tener que cambiar de banco constantemente para su configuración, pero que en C o PBP no es necesario saber ya que es el compilador el que se encarga de gestionar esto de una manera transparente para el programador.

Ahora vamos a ver lo que significa cada uno de los bits que están implicados en la interrupción por el TMR0:
  • T0IF: Solo se puede leer su valor, es un Flag o bandera que se pone a "1" cuando se produce un desbordamiento del TMR0, (este o no este configurado para producir una interrupción). Cuando se trabaja en ensamblador, este bit hay que ponerlo a "0" por programa, con CCS o PBP no tenemos que preocuparnos por ello.
  • T0IE: Habilita la interrupción por desbordamiento de TMR0. Si este bit esta a "1" la interrupción por desbordamiento de TMR0 es posible.
  • GIE: Habilita las interrupciones globalmente. Este bit permite que cualquier interrupción sea posible. Para poder usar cualquier interrupción hay que habilitar globalmente e individualmente.
Existen varias variables que se pueden utilizar a gusto propio para usar el TMR0, la fórmula para calcularlas es la siguiente:



Fuente de Consulta:
Para mayor información acerca de como utilizar el TMR0 y algunos ejemplos entrar a:
http://www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr0-como-temporizador.html

No hay comentarios:

Publicar un comentario