Electrónica Digital · Tema 31

Proyecto: calculadora

Dos números de 2 bits entran, un dígito sale: suma cableada con display que nunca hace blanking.

01 · Especificación

0–3 más 0–3 igual dígito

Dos DIP de 2 bits (A1A0, B1B0), suma de 0 a 6 directo al display vía 7448. Truco elegante: el máximo es 6, así el BCD siempre es válido (blanking jamás se activa). Tres HC + 7448 + display.

  • ¿Cómo se encadenan los sumadores?
  • ¿Cómo entra la suma al 7448?
  • ¿Por qué nunca hay blanking?
  • ¿Qué BOM lleva?

02 · Diseño

Cadena y adaptación

FA0 medio (S0 = A0⊕B0, C1 = A0·B0); FA1 completo (S1 = A1⊕B1⊕C1, Cout = mayoría). Al 7448: D = 0, C = Cout, B = S1, A = S0 (el valor como BCD de 4 bits: 5 = 0101).

DIP-A + DIP-B →FA0 → FA1 → 7448 →dígito

03 · BOM

Lista de compras

Puertas: 3 XOR + 3 AND + 2 OR.
ÍtemDetalle
DIP ×2 + R 10k ×4A1A0 y B1B0 con pull-down
74HC863 XOR (S0, S1 en 2 pasos)
74HC083 AND (C1 + carry ×2)
74HC322 OR (carry + S1)
7448 + display CC + R 270 ×7Dígito 0–6 directo

Puertas: FA0 (XOR+AND), FA1 (2 XOR + 2 AND + 1 OR carry + …): carry = A1·B1 + C1·(A1+B1): 2 AND + 2 OR. Total 3 XOR + 3 AND + 2 OR: un chip de cada uno con resto.

04 · Tabla de la máquina

16 casos, 0 sorpresas

Filas testigo (A+B → DCBA → display).
ABSumaDCBADisplay
000000000000
111010101015
111111001106
100101100113

3+2 = 5: Cout=1, S1=0, S0=1 → DCBA 0101 ✓. Nunca A–F: el diseño lo garantiza por rango.

05 · Calculadora en código

Gemelo de 16 casos

Cadena FA0–FA1 + adaptación BCD más barrido total.

Python en tu navegador. Recorré las 16 y buscá un blanking (no hay).

def calc(a, b):
    s0 = a & 1 ^ b & 1
    c1 = (a & 1) and (b & 1)
    a1, b1 = (a >> 1) & 1, (b >> 1) & 1
    s1 = a1 ^ b1 ^ c1
    cout = (a1 and b1) or (a1 and c1) or (b1 and c1)
    valor = (cout << 2) | (s1 << 1) | s0
    bcd = (0, cout, s1, s0)
    print(f"{a}+{b} = {valor} DCBA={bcd} display={valor}")
    return valor


calc(3, 2)
calc(3, 3)
calc(0, 0)

3+2 = 5 (0101). 3+3 = 6 (0110). ¿Algún resultado con D=1? (Imposible: máx 6.)

Barrido total

vals = [calc(a, b) for a in range(4) for b in range(4)]
print(f"min={min(vals)} max={max(vals)} blanking={'NUNCA' if max(vals) <= 9 else 'PELIGRO'}")

06 · Analogía programador

Pipeline con test matrix

  1. 1
    Cadena = pipeline.

    Etapas FA0→FA1→display: cada una transforma y pasa. Como middleware en serie.

  2. 2
    16 casos = test matrix.

    4×4 exhaustivo: coverage total en 5 minutos de mesa.

  3. 3
    Rango = contrato.

    Máx 6 garantiza BCD válido: diseñar el rango es diseñar la ausencia de bugs.

07 · Taller

Laboratorio: sumar con dedos

A y B de 0 a 3: el laboratorio suma, adapta a BCD y muestra el dígito.

TALLER 31

Calculadora 2+2

3+2 = 5

Suma binaria101
DCBA0101
Display5
Decimal5

3+2: 101 = display 5.

Preguntas para explorar

  1. Probá 3+3. ¿Binario? ¿DCBA? ¿Display? ¿Cout?
  2. Probá 0+0. ¿Display? ¿Blanking alguna vez?
  3. ¿Qué cambiaría para sumar 0–7 (3 bits)? ¿Display alcanzaría?
Ver respuestas sugeridas
  1. 110, DCBA 0110, display 6, Cout=1. El máximo del diseño.
  2. 0, display 0: nunca blanking (0–6 siempre BCD). Garantía por rango.
  3. Máx 14: dos displays + conversión binario→BCD (doble-dabble o ROM). Proyecto 2.0.

08 · Comprensión

Confusiones frecuentes

«Binario directo al 7448»

El 7448 lee BCD: 101 debe entrar como 0101 (D=0,C=Cout,B=S1,A=S0), no como “101”. Mapear, no enchufar.

«Cout se ignora»

Es el bit 2 (el 4): sin él, 3+3 daría 2. Cout es dígito, no descarte.

«AND-3 no existe»

Existe (HC11): el carry lo usa. Revisar catálogo antes de armar con 2 AND-2.

«Display sin R»

Siete veces no: 270 Ω por segmento (Tema 21). El 7448 no limita corriente.

09 · Práctica guiada

Ejercicios de cálculo

Ejercicio 1: 2+1 a mano

Bits, carries, S, DCBA y display. Verificá con calc().

Ver solución razonada

b0: 0+1 = 1 c0; b1: 1+0+0 = 1 c0. S = 011 = 3, DCBA 0011, display 3 ✓.

Ejercicio 2: resta 3−1

Agregá M (XOR en B + Cin): 11−01. ¿S? ¿Display? ¿Cout?

Ver solución

10 = 2, display 2, Cout=1 (alcanzó). DCBA 0010 ✓. Calculadora ± con un XOR más.

Ejercicio 3: montar y recorrer

16 combinaciones anotadas A+B → display. ¿Alguna falla? ¿Cuál sería la sospechosa?

Ver solución

16/16 ✓. Sospechosa: 3+3 (única con Cout=1): si da 2, el bit C del 7448 está suelto.

10 · Síntesis

Ideas para recordar

  • FA0 (Cin=0) → FA1 → 7448 con D=0,C=Cout,B=S1,A=S0.
  • Rango 0–6: BCD válido siempre, blanking nunca.
  • Cout es el bit 2: nunca se ignora.
  • 3 HC + 7448 + display + R×7.
  • 16/16 verificado; 3+3 es el caso borde.

Segunda máquina andando. Solo falta el balance: en el último tema, cierre y puente al curso 6.