LOS TIMER DE LOS 16F87x MICROCONTROLADORES PIC TEMA EL TIMER 2 CCFF D.P.E. MÓDULO DE PROYECTOS 1 LOS TEMPORIZADORES Diagrama de Bloques del TIMER2 CCFF D.P.E. MÓDULO DE PROYECTOS 2 LOS TEMPORIZADORES INTRODUCCIÓN El TIMER2 es un temporizador ascendente de 8 bits, con preescaler y postescaler. La señal de reloj de este timer es FOS/4. La señal de reloj antes de ser aplicada a TMR2, pasa por un predivisor, que poseerá una de las siguientes relaciones: 1:1; 1:4 ó 1:16 y que son seleccionadas mediante los bits de control T2CKPS1 :T2CKPS0 (T2CON<1:0>). El valor de este timer se va incrementando hasta alcanzar el valor previamente guardado en el registro PR2 asociado a él. CCFF D.P.E. MÓDULO DE PROYECTOS 3 LOS TEMPORIZADORES En el momento en que el valor alcanzado por el timer2 es igual al valor almacenado en PR2, se genera un pulso de igualdad (EQ), que hace que el timer se resetee en el siguiente ciclo (valor de reset 00h), comenzando una nueva cuenta. Estos impulsos de igualdad pueden ser divididos por un postescaler antes de activar el flag TMR2IF. Los posibles valores de división del postescaler van desde 1:1 hasta 1:16. Si las interrupción de este dispositivo está permitida, cuando se alcance el valor programado en el postescaler, esta se producirá. CCFF D.P.E. MÓDULO DE PROYECTOS 4 LOS TEMPORIZADORES La temporización total se calcula con la siguiente expresión: T= 4Tosc*valor de preescaler*valor de PR2* valor postescaler El registro TMR2 ocupa la posición 11h del banco de registros 0, y se puede leer, escribir y se pone a cero tras cualquier reset. El registro PR2 es un registro que puede leerse y escribirse, tras el reset, queda inicializado con el valor FFh. CCFF D.P.E. MÓDULO DE PROYECTOS 5 LOS TEMPORIZADORES El preescaler y el postescaler, se ponen a cero cuando sucede alguno de los siguiente eventos: • Se escribe en el registro TMR2. • Se escribe en el registro T2CON. • Se produce un RESET (POR, MCLR Reset, WDT,Reset, o BOR) TMR2 no se pone a cero cuando se escribe en T2CON. CCFF D.P.E. MÓDULO DE PROYECTOS 6 LOS TEMPORIZADORES Salida De TMR2 La salida de TMR2 (antes del postescaler), puede utilizarse como reloj de desplazamiento en el módulo SSP También puede ser utilizado como base de tiempos para el módulo PWM, ó para los módulos de captura y comparación (CCP). CCFF D.P.E. MÓDULO DE PROYECTOS 7 LOS TEMPORIZADORES Registros Asociados Con El Contador/Temporizador TIMER2 CCFF D.P.E. MÓDULO DE PROYECTOS 8 LOS TEMPORIZADORES El Registro T2CON T2CON es el registro de control del TIMER2 Contiene los bits de: habilitación/deshabilitación, factor del prescaler y del postescaler. Ocupa la dirección 12h de memoria RAM T2CKPS1:T2CKPS0: Selección del rango del preescaler del TIMER2 – 00: Rango del preescaler de 1:1 – 01: Rango del preescaler de 1:4 – 1X: Rango del preescaler de 1:16 CCFF D.P.E. MÓDULO DE PROYECTOS 9 LOS TEMPORIZADORES TMR2ON: Bit de activación del TIMER2 9 0: Desactiva el TIMER2 (valor por defecto) 9 1: Habilita el funcionamiento del TIMER2 • TOUTPS3:TOUTPS0: Bits 6:3 selección del rango del divisor del postescaler, desde 1:1 hasta 1:16 pasando por todos los valores, valor por defecto 1:1 TOUTPS3:TOUTPS0 0 0 0 0 0 0 0 0 . . 1 1 1 1 0 0 0 1 1 0 1 1 . . 1 0 1 1 Valor del preescaler 1:1 1:2 1:3 1:4 ……… 1:15 1:16 Bit 7 Bit no implementado se lee como “0”. 10 LOS TEMPORIZADORES Las Interrupciones En El TIMER2 Este modo de funcionamiento se selecciona poniendo a “0” el bit TMR1CS (T1CON<1>). En este modo de trabajo el origen de los pulsos a contar es interno, y proceden del reloj del sistema siendo su frecuencia FOSC/4. Evidentemente en este caso el bit T1SYNC no tiene sentido ya que no existe señal a sincronizar. CCFF D.P.E. MÓDULO DE PROYECTOS 11 LOS TEMPORIZADORES Configuración del Timer 2 en C La configuración del Timer 2 en el compilador C se realiza con la función SETUP_TIMER_(mode, period,postcale) Donde Mode puede ser uno de los siguientes valores: T2_DISABLED : T2 desactivado T2_DIV_BY_1: Preescaler con factor 1:1 T2_DIV_BY_1: Preescaler con factor 1:4 T2_DIV_BY_1: Preescaler con factor 1:16 CCFF D.P.E. MÓDULO DE PROYECTOS 12 LOS TEMPORIZADORES Donde period es un entero de 8 bits 0-255 que se cargará en PR2 , y determinará cuando se reseteará el Timer 2. postscale es un número 1-16 que fija cuantas veces ha de resetearse el timer antes de provocar una interrupción. Ejemplo: setup_timer_2 (T2_DIV_BY_4,0XC0,2); //A MHz, el timer se incrementa cada 800ns, //se producirá un overflow cada 153.6us //y se generará una interrupción cada 307.2us // T= 4Tosc*valor de preescaler*valor de PR2* valor postescaler //T= 4* 0.05us *4 * 192* 2 = 307,2 us CCFF D.P.E. MÓDULO DE PROYECTOS 13 LOS TEMPORIZADORES Como hemos indicado anteriormente, el valor del Timer 2, puede ser leído y escrito en cualquier instante, para ello utilizaremos las funciónes: valor=get_timer2() y set _timer2 (valor). valor=get_timer2() ; Esta función nos devolverá un entero de 8 bits en la variable valor. set _timer2 (valor); //valor es un entero de 8 bits CCFF D.P.E. MÓDULO DE PROYECTOS 14