Reloj Digital (parte 2) – Divisor de frecuencia

Los relojes basan su funcionamiento en un periodo de oscilación fuente. Cuando no había semiconductores a los relojes había que darles cuerda, mover un péndulo o usar un cristal oscilador. De esta forma conseguías una oscilación mantenida la cual luego, en el caso de los relojes mecánicos, se dividía en tiempos mayores jugando con la relación de transmisión de un tren de engranajes.

reloj-mecanico-gona-zonacasio-2013-01

Muchos de los relojes actuales usan como fuente de oscilación un cristal de cuarzo, material el cual tiene una tendencia natural para producir una oscilación de frecuencia constante. En el caso de un circuito electrónico, el cuarzo se puede modelar como un condensador que se descarga y carga periódicamente. Con la ayuda de condensadores auxiliares y una resistencia se puede conseguir un circuito oscilador RC a una frecuencia deseada.

Teniendo esto claro se plantea la siguiente duda, ¿qué frecuencia base es la más adecuada desde la cual partir ?

tim47

Lo primero que se te puede venir a la cabeza es usar un NE555 en modo Astable. Quién no ha montado alguna vez este integrado con un led para verlo parpadear. Pero para una aplicación de tanta precisión como lo es un reloj, la configuración que ofrece el NE555 para producir 1Hz  y bajas frecuencias en general, es poco precisa.

Finalmente tras investigar el reloj con tubos nixie (el cual no descarto hacer más adelante, queda realmente chulo) escogí este circuito para el divisor de frecuencia.

timing-circuit-02

¿Por qué usar un cristal de 32768Hz exactamente? Bueno aparte de porque seguramente sea barato de producir, si tenemos en cuenta que la división de frecuencia va a ser binaria, tendremos que buscar una frecuencia de partida que al dividirse por una potencia de 2 de división exacta. Esto es exactamente lo que ocurre con 32768Hz, pues 2^15 es 32768. En el caso del circuito escogido, el integrado CD4060 es un contador de 14 bits, por lo que se requiere de un bit más para obtener la frecuencia de 1Hz deseada para nuestro RTC. Ahí es donde entra en juego el uso del FlipFlop-D, actuando de último bit.

Como se puede observar en la imagen del circuito, el valor de las capacidades varia para cada caso, pues los componentes no son ideales. Para poder ajustar mi circuito usé un analizador lógico para ir probando condensadores hasta obtener un valor óptimo.

logic analyser photo

En esta foto se puede ver los datos de las señales de reloj generadas, saqué varias divisiones para cerciorarme que el valor de los condensadores era universal y de haber error, que no se propagase en exceso en las sucesivas divisiones.

logic analyser calibration 256hz

¿ Por qué 256 Hz?

Como ya comenté en la parte del driver del display, éste tiene cátodos comunes para los segmentos de los 4 dígitos, y son los ánodos los que hacen la habilitación del dígito. Lo que significa que para encender cada dígito tenemos que poner a tierra su común. ¿Pero cómo encendemos números diferentes para cada dígito si los segmentos son comunes? Multiplexando. Encendiendo sólo un dígito, apagando los demás, y pasándole su correspondiente número se consigue el truco. ¿Pero a qué frecuencia se engaña al ojo para que no se vea cómo se van encendiendo y apagando los dígitos? Pues con 50-60Hz por dígito, lo que resulta en 200-240Hz de “refresco” del display. Aprovechando que el CD4060 tiene los pines de los resultados de las divisiones de frecuencia intermedias entre 32768 y 2 Hz, podemos usar 256Hz para multiplexar.

Para codificar la selección de dígito uso un contador BCD de 4 bits (aunque sólo use 2) usando de CLK los 256 Hz. Esa salida de 2 bits va a un decoder de 2 a 4 conectado a los comunes del display. A su vez este “bus” de 2 bits irá a los 4 multiplexores que sacan el valor del dígito correspondiente. Lo explicaré más detalladamente en la próxima parte.

Aquí tenéis unas fotos del resultado final:

13537579_10154168986005499_8899350110257274201_n

13524352_10154168986120499_5059802945832154959_n( para las pruebas como siempre, Arduino).

Esquemático:

schematic

Layout:

brdPara probar los módulos programé este código:

Archivos de Eagle:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *