Electrónica Digital · Tema 30

Proyecto: cerradura digital

Cuatro switches, un código secreto y dos LED: la igualdad cableada con 2 chips.

01 · Especificación

Código 1010 o nada

DIP de 4 con pull-down, código secreto 1010: verde si coincide exacto, rojo si no. Sin micro, sin clock, sin debounce (switches fijos no rebotan en régimen). Dos chips: HC04 + HC21.

  • ¿Qué ecuación abre?
  • ¿Por qué AND+NOT y no XNOR?
  • ¿Qué BOM lleva?
  • ¿En qué orden se prueba?

02 · Diseño

Igualdad abaratada

Comparar contra constante no necesita XNOR: el bit que debe ser 1 entra directo, el que debe ser 0 entra negado: E = S3·~S2·S1·~S0 (1 AND-4 + 2 NOT). Rojo = ~E con otro NOT: si algo falla, queda en rojo.

DIP → NOTs →AND-4 → E →verde / ~E rojo

03 · BOM

Lista de compras

Todo barato y E12.
ÍtemDetalle
DIP-4 + R 10k ×4Switches a Vcc con pull-down
74HC21Doble AND-4 (usamos una)
74HC043 NOT (2 + rojo)
LED verde/rojo + R 1k ×2Veredicto visible
5 V + 100 nF ×2Fuente y desacople por chip

Seguridad real: 4 bits = 16 intentos (juguete didáctico, no caja fuerte). La versión con código configurable usa 4 XNOR + AND (Tema 25).

04 · Puesta en marcha

Orden de pruebas

1. Rieles y reposo
5 V en pines 14, DIP en 0000: E = 0, rojo prendido. Si verde prende, revisar AND.
2. Cada switch
Mover S0–S3 de a uno y medir el pin: 0/5 V francos. Pull-down que no tira = flotante.
3. Los 16 códigos
Recorrer 0000–1111: solo 1010 da verde. Anotar: 1/16 abre.
4. Fail-closed
Sacar un chip del zócalo: debe quedar en rojo. Lo seguro por defecto.

05 · Cerradura en código

Gemelo digital

Ecuación exacta más ataque de fuerza bruta (spoiler: 16 intentos).

Python en tu navegador. Atacá tu propia cerradura.

CODIGO = (1, 0, 1, 0)

def cerradura(s):
    e = s[0] and (not s[1]) and s[2] and (not s[3])
    print(f"{s} -> {'VERDE' if e else 'rojo'}")
    return bool(e)


for intento in [(1, 0, 0, 0), (1, 1, 1, 1), (1, 0, 1, 0)]:
    cerradura(intento)

1000 rojo, 1111 rojo, 1010 VERDE. ¿Qué bit falla en 1000?

Fuerza bruta

abren = [s for a in (0, 1) for b in (0, 1) for c in (0, 1) for d in (0, 1)
         for s in [[a, b, c, d]] if cerradura(s)]
print(f"abren {len(abren)}/16: {abren}")

06 · Analogía programador

Allowlist en hardware

  1. 1
    Código fijo = allowlist.

    Un solo valor permitido: como comparar contra secreto hasheado (pero sin hash).

  2. 2
    Fail-closed = deny default.

    Rojo por defecto: como denegar por defecto en firewall. Seguro ante fallas.

  3. 3
    4 bits = password de juguete.

    16 intentos = sin seguridad: como PIN de 4… pero de verdad de 4. Demo, no producto.

07 · Exploración

Laboratorio: probar códigos

DIP virtual S3–S0 contra 1010: el laboratorio prende verde o rojo y cuenta intentos.

TALLER 30

Cerradura 1010

1010 → VERDE ✓

E1
Verde● abre
Rojo○ apagado
Intentos1

1010: VERDE, abre.

Preguntas para explorar

  1. Probá 1000 y 1011. ¿E en cada uno? ¿Qué bit falla?
  2. ¿Cuántos de los 16 abren? ¿Qué implica para seguridad?
  3. Si S2 flota (sin pull), ¿qué puede pasar?
Ver respuestas sugeridas
  1. 1000: ~S2… S=1000: S3✓ ~S2✓ S1✗ → 0. 1011: S0✗ → 0. Un bit basta para cerrar.
  2. 1/16: fuerza bruta en segundos. Juguete didáctico, declarado.
  3. Lee 0 o 1 al azar (antena): la cerradura abre sola a veces. Pull-down siempre.

08 · Comprensión

Confusiones frecuentes

«XNOR para todo»

Contra constante, AND+NOT usa menos puertas que 4 XNOR + AND: optimizar para el caso, no para el dogma.

«DIP sin pull»

Abierto = flotante = aleatorio: pull-down 10k por switch. Sin excepción.

«LED sin R»

1k a 5 V (3 mA, visible): sin R quemás LED o puerta. Siempre R.

«Es segura»

16 combinaciones se prueban en 1 minuto: es demo de igualdad cableada, no seguridad.

09 · Práctica guiada

Ejercicios de cerradura

Ejercicio 1: otro código

Cambiá el secreto a 0110. ¿Ecuación? ¿Qué pines del HC21 usás? Verificá solo-ese con fuerza bruta.

Ver solución razonada

E = ~S3·S2·S1·~S0: NOTs en S3 y S0. Puerta AND-4 (pines 1,2,4,5→6 del HC21).

Ejercicio 2: código configurable

Segundo DIP como referencia + 4 XNOR + AND-4. ¿Puertas? ¿Ventaja?

Ver solución

4 XNOR + 1 AND-4 (HC86 + HC21): código cambiable sin recablear. Cuesta un chip más.

Ejercicio 3: ENTER con debounce

Botón ENTER que habilita E (E_final = E·ENTER). ¿Por qué RC+Schmitt? ¿Qué pasa sin él?

Ver solución

El botón rebota (Tema 11): sin debounce, el verde parpadea. RC 10k/1µF + HC14 antes del AND.

10 · Síntesis

Ideas para recordar

  • E = S3·~S2·S1·~S0: igualdad contra constante.
  • HC21 + HC04: 2 chips, fail-closed con ~E.
  • DIP a Vcc + pull-down 10k; LED con 1k.
  • Probar 16/16 + quitar chip (rojo).
  • 4 bits = demo, no seguridad.

Primera cerradura andando. Ahora a calcular: en el próximo tema, calculadora de 4 bits.