jueves, 2 de febrero de 2023

Creando un computador mecánico programable de un reloj digital (sin electrónica)

 ¡Feliz 2023 frikazos!

Lo primero de todo, quería disculparme por adelantado por este post, ya que es una 💩 pero algo había que escribir en el blog para que no vaya cogiendo polvo.

Como sabéis, los primeros computadores de la historia no usaban electricidad, eran puramente mecanicos. Ej: La maquina "Bombe" para descifrar Enigma creada por Alan Turing, de la cual no hay mucho más que explicar ya que hay una peli y to' 



Pues bien, una tarde de aburrimiento me puse a pensar si habría una forma simple de crear un computador mecánico programable, con la suficiente "potencia" para implementar un reloj digital, de forma que hubiesen salidas mecanicas que se conectasen a cada uno de los segmentos de una pantalla de 7 segmentos. Lo que vendría siendo algo así:


Tras investigar posibles opciones, encontré una bastante interesante. Resulta que en los años 60 apareció un "juguete educativo" que era un computador mecánico totalmente programable (se nota que antes de que apareciese TikTok los niños eran más listos) llamado DigiComp I:



Esta maquina era capaz de implementar programas como un contador binario, o el juego del Nim, entre otros. Aquí podéis verla en funcionamiento con el programa del contador binario:




Como veis, es muy sencilla, y se puede replicar fácilmente con impresión 3D, gomitas, y alambre, como se muestra en esta web. También podéis probar su funcionamiento en este simulador online. Su único inconveniente... es que solo tiene 3 tristes bits :') Con eso sinceramente no se puede hacer una 💩.
Pero si nos fijamos bien, ¿Que limita la maquina a tener únicamente 3 bits, 3 condiciones de set, y 3 condiciones de reset? ¡Simplemente quisieron hacerla así de simple! Nada nos impide construir una versión que tenga 32 bits, por ejemplo, siguiendo exactamente la misma mecánica.
Y ahí es donde entro yo, empezando por crearme otro simulador, que en este caso permita escalar la maquinita. En esta ocasión elegí Excel, para variar un poco. Aquí podéis ver mi simulador con el tamaño del DigiComp I original:


Y ahora, simulando que conectamos las salidas a una pantalla de 7 segmentos, así se vería la implementación de un contador del 0 al 9:


Como podéis apreciar, la maquinita ha crecido un poco...
Originalmente tenia pensado crear un contador binario de toda la vida que al llegar a 9 regrese a 0, y de forma paralela, implementar lógica para convertir ese numero binario a los bits del 7 segmentos. Peeero, como podéis imaginar, aunque en DigiComp sería posible, aumentaría más su tamaño que si simplemente verificamos el valor anterior del 7 segmentos para calcular el próximo.

La implementación final, para un reloj de 24h sería la siguiente monstruosidad:


¡Seguro que funcionaría! Pero ahora a ver quien tiene huevos de fabricarlo.

FAQs:

P: ¿Donde puedo descargar el Excel con tu simulador?
R: Si a alguien le interesa descargar el proyecto, que me deje un comentario abajo y os dejo un enlace.

P: ¿Como se ajustaría la hora?
R: Literalmente se haría moviendo manualmente los segmentos con la mano, de forma que muestren la hora actual. Sí, sorprendentemente funcionaría haciendo eso.

P: ¿Que pasa cuando llega a las 23:59?
R: El siguiente valor será 00:00, ¿O que pensabas? No soy tan mal programador.

P: Yo quiero construir tu maquinita de la hora
R: ¡Buena suerte!

P: Te sobran "x", se podría optimizar.
R: No le he dado importancia a minimizar el numero de "tubitos", que son los que se usan para programar, ya que son piezas muy simples, e igualmente este proyecto es una 💩. Si que he intentado minimizar un poco el numero de bits, y el numero de condiciones de set y reset (columnas), que son los que harían crecer la maquinita.

P: ¿Que más opciones te planteaste para tu reloj digital, aparte de DigiComp?
R: Literalmente empecé a idear un computador mecánico capaz de ejecutar programas en Brainf*ck, y una version simplificada con direccionamiento de 1 bit que reemplazaría las instrucciones + y - (incrementar / decrementar) por 1 y 0 (setear bit a 1/0), pero sería demasiado lento, y una pesadilla de programar.

P: Sí, sí, muy bonito pero... ¿Puede correr Doom?
R: ¡Claro que sí nene! En un mundo paralelo

No hay comentarios:

Publicar un comentario