viernes, 17 de agosto de 2007

Contador de 4 dígitos configurable

Dada la versatilidad de este circuito se lo puede colocar virtualmente en cualquier desarrollo o equipo.

El contador funciona alrededor de un µC de Microchip, el PIC16F84 cuyo programa se encarga de llevar la cuenta de los impulsos recibidos así como controlar los displays y demás aspectos que se verán a continuación...
Doble entrada de disparo:Una con un pulsador hacia el positivo (para flancos de subida) y otra con un pulsador hacia la masa (para flancos de bajada). En ambos casos la señal puede ser TTL siempre que al circuito se lo conecte a 5V de tensión. Gracias a que el sistema de anti rebote puede ser configurado la entrada de disparo puede provenir tanto de un pulsador como de una barrera infra roja de cruce peatonal como así también un censor de efecto Hall o cualquier otro reproductor mecánico.
Anti rebote configurable:Por medio del interruptor marcado como AR se puede seleccionar entre un anti rebote por tiempo (esto quiere decir que entre pulsación y pulsación el µC esperará un tiempo previamente definido) un un anti rebote por retorno a reposo de la línea de disparo (cuando se produzca la vuelta a su estado de reposo del pulsador o entrada). El caso del anti rebote por tiempo suele ser el mas empleado cuando un contador es disparado por un pulsador dado que éste presenta repiques mecánicos indeseados. El tiempo de retardo se puede configurar por medio de los interruptores J1 y J2 los cuales en combinación permiten hasta cuatro tiempos diferentes. En tanto, el anti rebote por retorno a reposo de la línea de disparo es mas apropiado cuando se lo conecta a barreras IR en líneas industriales, censores mecánicos o levas (entre varios ejemplos). Si se selecciona por tiempo y el pulsador permanece presionado el conteo irá avanzando de uno en fondo y el tiempo de espera entre cada avance dependerá de como estén los interruptores J1 y J2. Estando ambos abiertos (sus líneas en estado alto) el tiempo es breve, mientras que estando ambos cerrados (sus líneas a masa) el tiempo es el mas largo posible. En tanto, si se configura para esperar la vuelta a reposo de la línea de disparo por mas que el pulsador permanezca presionado la cuenta no avanzará sino hasta que se lo suelte. En este caso los interruptores J1 y J2 no cumplen ninguna función.
Descripción del circuito:El µC en su interior tiene cuatro variables (dig1, dig2, dig3 y dig4) en las que va acumulando la cantidad de veces que se disparo el sistema. Este disparo puede producirse tanto por un flanco ascendente en el pin 2 como por un flanco descendente en el pin 3. Debido a la limitada cantidad de líneas de E/S de este chip se decidió implementar un integrado decodificador de BCD a display de 7 segmentos a fin de formar los números sobre los mismos. Este integrado necesita solo cuatro líneas de entrada para mostrar el número en los segmentos de un display. Por medio de cuatro transistores actuando como llaves (corte/ saturación) se logra manejar cuatro dígitos independientes con tan solo ocho líneas o cables. Al hacerse el encendido alternado de los dígitos a gran velocidad para la vista pareciese que están los cuatro encendidos al mismo tiempo, cuando en verdad solo uno lo esta. Cada display permanece encendido aproximadamente 3 milisegundos. Las resistencias de 10K ohms se encargan de fijar estados lógicos definidos. Las de 4.7K ohms se encargan de limitar tanto la corriente en las bases de los transistores como así también la carga sobre los pines del puerto B del microcontrolador. En tanto las de 150 ohms se encargan de limitar la corriente en los displays. Para mayor brillo se puede probar con resistencias de 100 ohms o incluso 56 ohms. La alimentación recomendada es de 5V y el consumo no llega a los 100mA. El pulsador marcado como R es el que reinicia el micro, volviendo la cuenta a cero.
El firmware:
Este, como todo desarrollo micro controlado necesita de un firmware (o programa de dispositivo) para funcionar. El mismo puede ser descargado en versiones ASM (para ver y modificar si de desea) que se puede descargar de http://rapidshare.com/files/49627376/firmware.asm Como todo programa de estos dispositivos comienza definiendo equivalencias para nombrar posiciones de la memoria así como valores literales; luego configura los puertos de E/S (el A como entradas, el B como salidas). Seguidamente se inicializan los acumuladores (dig1 o unidades, dig2 o decenas, dig3 o centenas y dig4 o millares) y se ponen en bajo todas las líneas del puerto B consiguiendo con esto que ningún display quede iluminado. Luego el programa queda en un ciclo infinito el cual comprueba si hay actividad en las líneas de entrada (pines 2 y 3) y muestra el contenido actual de la cuenta (haciendo una llamada a la sub-rutina display). Si no hay actividad en ninguna de las dos líneas de entrada el ciclo solo se encarga de hacer que en los displays se vean los acumuladores. Un pulso bajo en el pin 3 o uno alto en el pin 2 hará que el programa salte a la sub-rutina "increm" la cual aumenta en uno el acumulador de unidades (y maneja el acarreo de ser necesario). Esta rutina, además, deriva al programa a otra sub-rutina la cual se encargará de llevar a cabo el anti rebote que se haya configurado. En caso de ser un anti rebote por retorno a estado de reposo lo único que se hace es quedar a la espera que el pin 2 quede en estado lógico bajo y el pin 3 en alto. Mientras se espera que esto suceda se llama a la rutina de display para que los dígitos sigan mostrando el estado actual del conteo. Sin esta llamada los mismos quedarían apagados. En tanto, en caso de ser configurado para un anti rebote por tiempo el sistema primero determinará dicho tiempo cargando a W inicialmente con 25 y agregándole mas valor según el estado de los pines 17 y 18. el número restante será la cantidad de veces que se ejecute la sub-rutina de display antes de retornar al programa principal. Pero el retorno se produce incondicionalmente, sin verificar en que estado se encuentran las líneas por lo que si algún pulsador continua pulsado la cuenta se aumentará nuevamente.