Decodificador binario a 7 segmentos

Uno de mis lados favoritos de la programación es cuando se cruza con el hardware. Y este proyecto, pequeño pero muy satisfactorio, nació de una llamada telefónica.
Era el Día del Maestro, dos meses después de que la pandemia nos encerrara a todos en cuarentena. Yo llevaba ya un par de meses dando clases en línea. Marqué a un profesor de la universidad —nunca me dio clase, pero nos hicimos buenos amigos— para felicitarlo. En la plática le pregunté cómo le estaba haciendo con sus alumnos, porque él da Circuitos lógicos. Me contó que les pasaba toda la información que podía, que ellos armaban los circuitos en casa y se los mostraban por cámara. A mí me pareció bastante complicado, sobre todo para evaluar.
Le platiqué que con mis alumnos de secundaria (robótica con Arduino) yo estaba usando Tinkercad, y que estaba casi segura de que ahí también se podían simular compuertas lógicas. En eso quedó la charla —y obviamente nunca me hizo caso ni revisó la plataforma, jajaja—, pero a mí me quedó la cosquilla.
Sobre todo porque en la universidad nunca viví ese proyecto. La profesora que me dio la clase era buenísima, pero nunca nos pidió el típico decodificador. El mío lo armé con una sola compuerta que ya hacía toda la lógica, así que me perdí la experiencia de conectar montones de integrados AND, OR, NOR y demás para construir un decodificador grandote sobre dos protoboards unidas. Así que me lo prometí: iba a hacer el mío. Y en dos días armé este que tengo en Tinkercad, el mismo que verás aquí.
El problema
Un display de 7 segmentos tiene siete leds (a, b, c, d, e, f, g) que, combinadas, forman los dígitos del 0 al 9. La entrada es un número en binario de 4 bits (A, B, C, D) y la salida es qué segmentos deben encenderse. El reto: encontrar la expresión lógica de cada segmento.
La tabla de verdad
Empecé mapeando, para cada número del 0 al 9, qué segmentos van encendidos (1) o apagados (0). Como con 4 bits caben 16 combinaciones pero solo uso 10, del 10 al 15 los marqué como condiciones "no importa" (X) — y esos comodines son justo lo que después ayuda a simplificar.

Simplificación con mapas de Karnaugh
Para cada uno de los siete segmentos armé un mapa de Karnaugh y agrupé los unos (aprovechando las X como comodín) para obtener la expresión booleana más simple. Cada color es una agrupación distinta:







De la lógica al circuito
Con las ecuaciones de cada segmento, armé el circuito en Tinkercad para comprobar que, al meter cada número, el display lo dibujara correctamente. Puedes jugar con la simulación aquí mismo:
También puedes abrirlo directo en Tinkercad.
Lo que me llevo
Lo curioso es que este proyecto, a pesar de tener casi seis años, sigue teniendo vida propia. De vez en cuando alguien lo copia en Tinkercad, y cada tanto me escribe gente pidiéndome ayuda, o preguntando si tengo los mapas o la tabla para armar su propio decodificador.
Por eso, desde hace años me prometí que algún día haría un blog en mi página y subiría esto aquí: para quien llegue a necesitarlo, quizás aterrizando en este post directo desde Tinkercad. Si eres una de esas personas, bienvenida — aquí está todo.
Proyectos así me recuerdan que detrás de cada interfaz, por simple que parezca, hay lógica que alguien tuvo que diseñar. Y que a veces la mejor forma de entender algo es construirlo.