El timer TMR0 en los PIC
Es un modulo que sirve como contador o como temporizador de 8 bit's.
Funcionando como temporizador el TMR0 es un registro donde yo puedo almacenar un valor y este se va incrementando de 1 en 1 con los ciclos de instruccion, es decir, con cada ciclo se incrementa en 1 el TMR0, cuando la cuenta llega a 255 y pasa a 0 (cero) se porduce una interrupcion por desborde del TMR0, recordemos que en un registro de 8 Bit's el valor mas alto que se puede almacenar es 255 y que si lo incrementamos estando en 255 pasa a cero, y es a esto a lo que se le denomina desborde.
Cual seria la ventaja entonces de usar el timer TMR0?
Cuando necesitemos temporizar, o lo que normalmente llamamos un retardo, no necesitaremos las acostumbradas rutinas para retardos, esto lo vamos a ver con un ejemplo.
El TMR0 tiene las siguientes caracteristicas:
-se puede leer y escribir
-puede trabajar con relog externo o interno
-detecta el flanco de subida o bajada del relog externo
-tiene un prescaler de 8 bit´s
-tiene una interrupcion por desborde de la cuenta de 255 a 0
los registros asociados a el son el TMR0, INTCON y el OPTION_REG
El bit T0CS (OPTION 2) a 1 trabaja como temporizador, 0 trabaja como contador
El bit T0SE (OPTION 4) en modo contador a 1 flanco descendente, 0 flanco ascendente
El bit PSA (OPTION 3) 0 prescaler al temporizador, 1 prescaler al perro guardian WDT
Cuando se desborda el TMR0, se activa el bit 2 de INTCON (T0IF) y si el T0IE esta activado el T0IF generara interrupcion y se debe borrar por software cuando se atienda la interrupcion
Para calcular el tiempo de temporizacion
Tiempo = 4 * Tosc * (256 - valor cargado en TMR0)*(Rango presaler)
donde
Tocs = 1 / Fosc (frecuencia del oscilador)
Entonces si necesitamos un determinado tiempo podemos despejar TMR0 y hallar su valor:
Tiempo
TMR0 = ---------------------------- - 256
4 * Tosc * Prescaler
Formula que nos dara un valor muy aproximado del Tiempo
Empecemos la configuración
Configuramos el OPTION_REG
BANKSEL OPTION_REG
MOVLW B'00000000'
ANALICEMOS
BIT 7 Pull up PORTB Disable
BTI 6 interrupcion por flaco de subida en el INT Pin
BIT 5 fuente del clock para el TMR0, internal 1 ciclo ed intruccion (1/Fosc)
BIT 4 Flanco de bajada para el incremento del TMR0
BIT 3 Prescaler asignado al TMR0
BIT 2-0 Division del prescaler
Configuramos el INTCON
Registro donde activamos las interrupciones globales y la del TMR0
MOVLW B'10100000'
MOVWF OPTION_REG
BIT 7 Activamos las interrupciones Globales
BIT 6 interrupciones de otros perifericos desactivadas
BIT 5 Habilitamos la interrupcion por desborde en el TMR0
BIT 4 desabilitamos interrupcion externa INT
BIT 3 desabilitamos interrupcion por cambio en el PORTB
BIT 2 bandera interrupcion en TMR0
BIT 1 bandera interrupcion en INT
BIT 0 bandera interrupcion por cambio en PORTB
Ejemplo
Vamos a crear una señal de 1 KHz usando el TMR0.
Código fuente
LIST P=16F886
INCLUDE P16F886.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
__CONFIG _CONFIG2, _BOR40V & _WRT_OFF
CBLOCK 0X20
ENDC
ORG 0X00
GOTO CONFIGURA
ORG 0X04
GOTO INTERRUPCION
ORG 0X05
INTERRUPCION COMF PORTB,F
MOVLW .7
MOVWF TMR0
BCF INTCON,T0IF
RETFIE
CONFIGURA CLRF PORTB
BANKSEL ANSEL
CLRF ANSEL
CLRF ANSELH
BANKSEL TRISB
CLRF TRISB
BANKSEL OPTION_REG
MOVLW B'00000000'
MOVWF OPTION_REG
MOVLW B'10100000'
MOVWF INTCON
BANKSEL PORTB
CLRF TMR0
CLRF PORTB
INICIO GOTO INICIO
END
Copyright 2012 edwtron
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
No hay comentarios:
Publicar un comentario