Electrónica Digital · Tema 22

Codificadores

De líneas a número: quién habla, con prioridad cuando hablan varios a la vez.

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).

1 línea activa →ORs →número de 2 bits

03 · 74HC148

Prioridad cableada

74HC148 (todo activo-bajo, EI = 0).
Activas (bajo)A2 A1 A0GS
I70 0 00 (válido)
I5, I31 0 10 (gana I5)
ninguna1 1 11 (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

  1. 1
    Encoder = compresión.

    One-hot a binario: como guardar un enum en vez de 8 booleanos.

  2. 2
    Prioridad = nice.

    Procesos que compiten: gana el de mayor prioridad, los demás esperan.

  3. 3
    GS = 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.

LABORATORIO 22

Numerador

Simple · I2 → 10

Y1 Y01 0
Válido/GSVálido ✓
GanaI2
EstadoOK ✓

Simple I2: Y=10.

Preguntas para explorar

  1. Activá I1 e I3 en simple. ¿Y? ¿Por qué inválido?
  2. Pasá a prioridad con las mismas. ¿Y? ¿Quién gana?
  3. Apagá todo en prioridad. ¿Y? ¿GS? ¿Por qué importa?
Ver respuestas sugeridas
  1. Inválido: dos activas rompen el supuesto. El número mentiría.
  2. 11 (gana I3): la mayor manda. GS = válido.
  3. 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.