01 · Punto de partida
Cuatro botones, dos cables
Cuatro alarmas llegan por 4 cables; el micro tiene 2 pines libres: el encoder las numera (I2 activa → 10). Y si suenan dos juntas, la prioridad decide: gana la de mayor número.
- ¿Qué ecuaciones tiene un 4:2?
- ¿Qué pasa con dos activas?
- ¿Cómo decide el 74HC148?
- ¿Para qué sirven GS y EO?
02 · Encoder 4:2
Dos OR y listo
Y1 vale con I2 o I3; Y0 con I1 o I3: dos OR arman el encoder (verificar por tabla). Restricción: una sola entrada activa; I0 no entra a ninguna ecuación (00 = “nadie”, ambiguo sin GS).
03 · 74HC148
Prioridad cableada
| Activas (bajo) | A2 A1 A0 | GS |
|---|---|---|
| I7 | 0 0 0 | 0 (válido) |
| I5, I3 | 1 0 1 | 0 (gana I5) |
| ninguna | 1 1 1 | 1 (nadie) |
Entradas y salidas en bajo (bolitas por todos lados): I7 activa = A = 000. GS en 0 = “hay dato”; EO enciende el siguiente 148 en cascada a 16+.
Simple (ORs)
Barato y frágil
Dos activas = número falso. Solo donde una sola puede activarse.
Prioridad (148)
Árbitro incluido
Gana la mayor + GS valida. Interrupciones y teclados reales.
04 · Teclados
Diez teclas, 4 cables
- 74147: decimal a BCD
- 10 teclas con prioridad a BCD activo-bajo: la calculadora discreta antes de los micros.
- Matriz de teclas
- Filas×columnas con diodos o barrido: 16 teclas con 8 pines (el micro hace de encoder por software).
- Cerradura (T30)
- Teclas + comparador de código: el encoder numera, la lógica verifica. Proyecto a la vista.
05 · Encoder en código
Numerar y priorizar
4:2 con ORs, restricción chequeada, y prioridad estilo 148.
Python en tu navegador. Activá dos y mirá quién gana.
def encoder42(i0, i1, i2, i3):
ins = [i0, i1, i2, i3]
if sum(ins) != 1:
print(f"{ins}: invalido (simple pide 1 sola)")
return None
y = (i3 or i2, i3 or i1)
print(f"{ins} -> Y={int(y[0])}{int(y[1])}")
return y
encoder42(0, 0, 1, 0)
encoder42(0, 1, 0, 1)
Solo I2 → 10. I1+I3 → inválido en simple. ¿Qué daría con prioridad?
Prioridad 148
def prioridad(ins):
activos = [i for i, v in enumerate(ins) if v == 0]
if not activos:
print(f"{ins} -> nadie (GS=1)")
return None
g = max(activos)
a = [(g >> 2) & 1, (g >> 1) & 1, g & 1]
print(f"{ins} -> gana I{g}, A={a} (GS=0)")
return g
prioridad([1, 1, 1, 0, 1, 1, 1, 1])
prioridad([1, 1, 1, 0, 1, 0, 1, 1])
prioridad([1, 1, 1, 1, 1, 1, 1, 1])
06 · Analogía programador
Arbitro con niveles
- 1Encoder = compresión.
One-hot a binario: como guardar un enum en vez de 8 booleanos.
- 2Prioridad = nice.
Procesos que compiten: gana el de mayor prioridad, los demás esperan.
- 3GS = flag válido.
Distinguir “cero” de “nadie”: como null vs 0, siempre explícito.
07 · Exploración
Laboratorio: numerar alarmas
Cuatro alarmas I0–I3 y modo simple/prioridad: el laboratorio numera y valida.
Numerador
Simple · I2 → 10
Simple I2: Y=10.
Preguntas para explorar
- Activá I1 e I3 en simple. ¿Y? ¿Por qué inválido?
- Pasá a prioridad con las mismas. ¿Y? ¿Quién gana?
- Apagá todo en prioridad. ¿Y? ¿GS? ¿Por qué importa?
Ver respuestas sugeridas
- Inválido: dos activas rompen el supuesto. El número mentiría.
- 11 (gana I3): la mayor manda. GS = válido.
- 00 con GS = nadie: sin GS, “nadie” se confunde con I0. El flag distingue.
08 · Comprensión
Confusiones frecuentes
«Dos activas vale igual»
En simple da un número falso (ORs mezclan): o se garantiza una sola, o se usa prioridad.
«Gana la primera»
Gana la de mayor índice (I7 sobre I0): prioridad numérica, no temporal ni física.
«GS es decoración»
Sin GS no distinguís I0 de silencio: el flag es parte del dato. Siempre cablearlo o emularlo.
«Encoder = decoder»
Direcciones opuestas: decoder 2→4 líneas, encoder 4→2 bits. Inversos, no gemelos.
09 · Práctica guiada
Ejercicios de numerar
Ejercicio 1: 4:2 con ORs
Dibujá Y1 = I3+I2, Y0 = I3+I1 con 74HC32. ¿Cuántas puertas sobran? ¿I0 dónde va?
Ver solución razonada
2 OR (sobran 2 del chip). I0 no se cablea (00 = nadie): documentarlo o GS discreto con NOR.
Ejercicio 2: teclado 0–9
Diez teclas a BCD con 74147 (activo-bajo). ¿Salida con tecla 5? ¿Sin tecla?
Ver solución
0101 invertido (1010 en bajo): leer al revés o invertir. Sin tecla: 1111 + GS dice “nadie”.
Ejercicio 3: cascada 16:4
Dos 148: EO del bajo al EI del alto. Si el bajo tiene I3, ¿responde el alto? ¿Salida total?
Ver solución
No: EO=1 apaga el alto (GS del bajo avisa). Total: bit alto 0 + A del bajo (0–7).
10 · Síntesis
Ideas para recordar
- 4:2 = 2 ORs; simple pide 1 sola activa.
- 148: prioridad a la mayor, todo activo-bajo.
- GS distingue dato de silencio; EO expande.
- Teclados: 147 a BCD, matriz con barrido.
- Encoder comprime; decoder expande.
Números asignados. Ahora a sumar: en el próximo tema, sumador medio y completo.