Buenos días NIKHEL,
Anoche me di a la tarea de realizar la simulación de tu circuito en Proteus 8.6 SP2, y tal como tienes el circuito no logré por ningún motivo que funcionara. Este siempre se queda en estado de "RESET" mostranto "000" en los displays y sin realizar el conteo descendente.
Lo primero que arreglé fue el pin flotado del D/U, el cual lo puse en nivel alto (conectado a VDD), pero seguía sin funcionar. Entonces me puse a ver lo que estaba sucediendo y esto fue lo que encontré.HC
Las salidas TC de los contadores (pin 12 de los 74HC190) los llevas a una compuerta NAND de 4 entradas (74HC20), la salida de este a la entrada de un inversor 74HC04 y la salida del inversor hacia el pin E de los contadores (pin 4 del 74HC190). La función de este parte del circuito es detener el conteo cuando este llega a "000", pero noté que los pines de entrada 1 y 2 de dicha NAND los tienes unidos, y esto es lo que estaba ocasionando el problema de inicio, además de que una vez terminado el conteo regresivo, la única manera de volver a comenzar es aplicando un POWER ON RESET (Es decir apagar y volver a encender el circuito).
Entonces lo que hice fue lo siguiente:
1) Desconecté ese pin 1 del pin 2 de la NAND y lo conecté en el pin PL de los contadores (pin 11 del 74HC190) y este a su vez al pin GP0 del microcontrolador PIC12F509.
2) Luego agregué un pulsador el pin del MCLR del microcontrolador (pin 4 del PIC12F509)
3) Realicé la simulación de tu código orginal en MPLAB (la versión antigua 8.92) y tus rutinas de tiempo relamente son exactas (felicidades por eso). Por lo que no encontré ningún problema con tu código. Sin embargo realicé algunas modificaciones.
4) Realicé la simulación en proteus y ahora sí, todo funcionó a la perfección. De esta manera cuando el temporizador o conteo llega a "000", no necesitas realizar un POWER ON RESET, simplemente presionas el pulsador del MCLR en el microcontrolador y el temporizador comenzará su conteo desde su valor programado, en este caso desde "160".
Te he adjuntado tanto el archivo de simulación en proteus como el archivo de ASM del código para el microcontrolador.
También quería mencionarte que otra forma en que puedes hacer el generador de tiempo es usando un oscilador de 32.768 KHz y unos contadores más para dividir la frecuencia hasta obtener un pulso cada minuto. He realizado el inicio de este usando un 74HC4060 y he logrado la frecuencia de salida de 2Hz; por lo que necesito agregar más contadores (o flip-flops) para seguir dividiendo la frecuencia hasta lograr el pulso cada minuto. Una vez que lo tenga listo subo el esquemático a este tema para que le eches una mirada y ya tú decidas lo que más te convenga.
saludos,
elreypic.
Un gran saludo y antes que nada, muchisimas gracias por tomarte el tiempo de analizar, simular y mejorar el circuito del temporizador.
Tienes toda la razón respecto a los pines D/U que estaban unidos y flotantes; efectivamente se me olvidó por completo enviarlos a 5Vcc para el conteo descendente y fue unos de los problemas que tuve que corregir por medio de un cable en la tarjeta fisica......aunque no lo hice por medio de una resistencia.
Tengo que detallar bien tu diagrama y código en los archivos adjuntos que sé, me daran mucha luz sobre el camino (tambien el aporte al código que hizo KillerJ).
Te comento que para la fuente de 5Vcc usaba un circuito a base del LM2576 T-5.0 (Y la arme según el circuito básico que aparece en su datasheet),para obtener mejor eficiencia y no generar tanto calor como sucede con los reguladores lineales tales como el 7805. Llegué a quitar el pic de la placa y conectar una señal de reloj momentánea con un 555 y seguía descendiendo de 2 en 2 ........cambie la fuente y obtuve mas estabilidad (al menos con el 555), pero al usar la señal del PIC, regresaba a lo mismo .....160, 156, 154, 152 ......del 142 salta al 130 .....una locura.
Es por eso que debo tomar muy en serio tus aportes en cuanto a la estabilidad del circuito mediante los condensadores y demás ajustes. La verdad, he pecado por no colocar ello y creí que con solo un par de capacitores a la entrada de la alimentación bastaría.
De allí, me toca estudiar bien el código pues en teoría (simulación en proteus), el circuito funciona. Ya me ha pasado que en la realidad no marcha igual.
Nuevamente, muchisimas gracias por tu tiempo y dedicación a responder esto y ayudarme. Ya les avisaré como me fue.