Temporizador de décimas de segundo Descripción Es un reloj de cuenta descendente, usado como temporizador de 5 dígitos y precisión de décimas de segundo. El avance del temporizado y la entrada de valores, se visualizan en los dígitos. Está proyectado con una entrada de inicio y con una salida, pero se le pueden agregar ambas, de acuerdo a los pines disponibles. Usé en el diseño el PIC 18F4550, solamente porque lo tenía en stock, pero se puede usar cualquier otro, cambiando las asignaciones de las entradas y salidas de acuerdo al PIC usad, y por supuesto la configuración. Tiene 4 pulsadores: 1) Para comenzar la entrada de valores, para seleccionar el dígito deseado y para finalizar la entrada. 2) Para subir de a uno el valor del dígito seleccionado. 3) Para parada de emergencia, que finaliza el ciclo. 4) Para comenzar el ciclo de temporizado. Se pueden agregar otros inicios de ciclo como por ejemplo: temperatura deseada, cierre de puertas, retardos externos, etc. Fotografía 1 Esquema 2 Firmware Está hecho en C de CCS y comenzado usando el PIC Wizzard para armar la configuración. Básicamente, el Firmware tiene una rutina por Interrupción, que cada décima de segundo, baja en una unidad el contador de décimas. Cuando llega a cero, para el ciclo, haciendo sonar la alarma, como el horno de microondas. Suena unos segundos y para. El valor inicial del contador, se setea mediante dos pulsadores. Rutina de Interrupción: #int_TIMER1 // Rutina de Interrupción por timer 1, que genera las décimas de segundo. void TIMER1_isr(void) { Contador = Contador - 1; // Contador de décimas de segundo. if (Contador <=0) {SuenaAlarma(); Salida = 0; disable_interrupts(INT_TIMER1);} // Fin del ciclo. if (Parada == 1) {Alarma = 0; Salida = 0; disable_interrupts(INT_TIMER1);} emergencia set_timer1(15536); temporizado. // Parada de // Carga del TMR1. Ajustarlo si hace falta para darle precisión al } Este es el seteo del Timer 1: setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // Seteos del CCS. Con el Timer 1, de 16 Bit, el intervalo entre 0 y 65535 para el prescaler dividido por 2, y reloj de 4 MHz, el tiempo de desborde es de: Tiempo = 4 / 4000000 Hz * 2 * (65536-X)= 0.131072 seg = 131.07 ms X = 0 para el tiempo total de desborde. Para disminuirlo, no se comienza por cero. X = -((Tiempo /4 * 4000000 Hz / 2) – 65536) en segundos X = -((Tiempo /4 * 4000 Hz / 2) – 65536) en milisegundos Como queremos que el tiempo sea de 100 ms: X =15536, en lugar de cero debemos colocar 15536. Si se dispone de un medidor de período de precisión, se puede ajustar el valor, para corregir el error del cristal usado con el PIC. Los números de los dígitos se guardan en la memoria EEPROM y se leen cada vez. Cuando se setean los valores de la EEPROM se usan las variables N1 a N5, que corresponden al valor de cada dígito de izquierda a derecha. Ejemplo: 00:01.7, es cero minutos, un segundo y 7 décimas de segundo. Los números son: 0,0,0,1,7. El valor máximo es 5,9,5,9,9. Cuando trabaja el temporizador se usa la variable Contador, de 16 bit. Se convierten los números a Contador, se le resta 1 en la interrupción y se vuelve a convertir a números para mostrarlos en el display. Cuando se setean los números, con los dos pulsadores correspondientes, no se usa la variable Contador, solo los números. Cualquier duda con este Firmware, consultar a correo@arossini.com.ar 3