Electrónica Digital · Tema 19

Demultiplexores

El multiplexor juntaba muchos caminos en uno. El demultiplexor hace lo contrario: una sola entrada llega a una de N salidas, la que elige el selector, y las demás quedan quietas. Es el reparto, el despacho de eventos, la centralita. Y tiene un gemelo con otro nombre, el decodificador, que vas a usar en cada placa que tenga más de un chip.

≈ 55 minutos Sin materiales: solo el navegador Incluye simulador y Python

01 · Punto de partida

Una alarma, cuatro zonas

Un sistema de seguridad tiene una sola señal de alarma y cuatro sirenas, una por zona. Cuando salta la alarma, debe sonar solo la sirena de la zona afectada; las demás, calladas. Hay un dato (la alarma) y un selector (la zona), y de las cuatro salidas debe responder exactamente una. Eso es un demultiplexor (DEMUX): una entrada, N salidas, el selector abre una sola «puerta».

Una escena típica. Un microcontrolador tiene tres pines libres y debe manejar ocho dispositivos, cada uno con su señal de «habilitación» (chip select). O un módulo de ocho LED donde solo uno debe encenderse a la vez. O un reloj que hay que repartir a una de varias zonas del circuito. En los tres casos, dos o tres bits de dirección eligen cuál de las líneas de salida se activa.

En software es una tabla de manejadores: handlers[i](evento), donde solo el elegido se ejecuta. El demultiplexor es esa tabla, hecha de puertas.

  • ¿Qué vale cada salida de un DEMUX, y cómo se relaciona con un MUX?
  • ¿Por qué el 74HC139 y el 74HC138 «hablan al revés» (salidas activas en bajo)?
  • ¿En qué se diferencia un DEMUX de un decodificador?
  • ¿Cómo se agranda de 1:4 a 1:8 y 1:16?
  • ¿Cuándo un demultiplexor no es seguro de usar?

02 · DEMUX 1:N

Una puerta abierta

En su forma más simple (lógica positiva, la que se usa para entender), un DEMUX 1:4 tiene un dato D, dos selectores S1 y S0 y cuatro salidas. La salida elegida copia al dato; las demás valen 0:

DEMUX 1:4 en lógica positiva (D = dato).
S1 S0Y0Y1Y2Y3
00D000
010D00
1000D0
11000D

Cada salida es un AND del dato con el minterm del selector que le corresponde: un DEMUX 1:4 son cuatro AND de tres entradas y dos inversores. Los símbolos son un trapecio al revés del MUX: angosto del lado de la entrada y ancho del lado de las salidas.

Una salida activa por vez
En todo momento hay a lo sumo una salida distinta de 0. Si el dato vale 0, ninguna. Esa propiedad (a veces llamada «uno entre N» o one-hot) es lo que hace útil al DEMUX para habilitar un dispositivo a la vez.
El inverso del MUX
Si un MUX junta N entradas en una salida usando un índice, el DEMUX hace el camino inverso con el mismo índice. Si ponés los dos en serie con el mismo selector, la señal de una entrada llega a la salida correspondiente a través de un solo cable: es la base de la transmisión por división de tiempo (sección 06).
El dato puede ser una señal
Si el dato cambia en el tiempo (un reloj, un pulso, un nivel), cada salida copia al dato mientras está seleccionada y vale 0 el resto del tiempo. El DEMUX es un reparto instantáneo, sin memoria.
D llega al DEMUX→ S elige una salida →YS = D, el resto en reposo

03 · Chips

74HC139 y 74HC138: el que habla al revés

Los demultiplexores comerciales de la serie 74HC son en realidad decodificadores/demultiplexores, y todos tienen las salidas activas en bajo: la salida seleccionada da 0 y las demás 1. También la habilitación es activa en bajo. Es una herencia de la lógica TTL, y se mantiene por compatibilidad; además, es muy práctica para controlar señales de selección de chips (~CS), que son activas en bajo.

Mitad del 74HC139 (2 a 4). Con ~E = 0 está habilitado.
~EA1 A0~Y0~Y1~Y2~Y3
0000111
0011011
0101101
0111110
1××1111
¿Dónde entra el dato?
En la entrada de habilitación ~E. Con ~E = 0 la salida elegida baja a 0; con ~E = 1 todas están en 1. Por lo tanto la salida elegida copia el nivel de ~E (sin invertirlo) y las demás quedan en 1. Es un DEMUX en lógica negativa: dato «activo» = nivel bajo.
Salidas en bajo y LED
Para ver una salida activa en bajo se conecta el LED entre VCC y la salida, con su resistencia: cuando la salida baja a 0 circula corriente y el LED enciende. Las salidas HC son simétricas (dan y reciben unos 4 mA), así que sirve cualquiera de los dos montajes; el de VCC es la convención histórica.
74HC138: el 3 a 8
Tres entradas de selección (A, B, C, con C la más significativa), ocho salidas ~Y0 a ~Y7 y tres entradas de habilitación: G1 (activa en alto), ~G2A y ~G2B (activas en bajo). Para que el chip esté habilitado hace falta G1 = 1 y las otras dos en 0. Esa combinación de polaridades permite armar decodificadores grandes sin compuertas extra.
Variantes
El 74HC238 es el 3 a 8 con salidas activas en alto; el 74HC154 es un 4 a 16; el 74HC4051 es un multiplexor/demultiplexor analógico de 8 canales (Tema 18).
Pines del 74HC139 y del 74HC138 (16 pines). Confirmalo en la hoja de datos del fabricante.
Pin74HC13974HC138Pin74HC13974HC138
11~EA16VCCVCC
21A0B152~E~Y0
31A1C142A0~Y1
41~Y0~G2A132A1~Y2
51~Y1~G2B122~Y0~Y3
61~Y2G1112~Y1~Y4
71~Y3~Y7102~Y2~Y5
8GNDGND92~Y3~Y6

04 · DEMUX y decodificador

Gemelos con distinto trabajo

Como DEMUX

Reparte un dato

La entrada de dato (el enable) varía en el tiempo: es una señal. La salida elegida la copia y las demás quedan quietas. Una centralita.

Como decodificador

Marca una línea

El enable está fijo en «habilitado». Los bits de selección son un número y exactamente una salida se activa: la que corresponde a ese número. Es el Tema 20.

El mismo silicio, usado de dos maneras.
UsoEntrada de habilitaciónQué hacen las salidasEjemplo
DemultiplexorRecibe una señal (dato)La elegida copia esa señalRepartir un reloj a una zona
DecodificadorFija en «habilitado»La elegida pasa a su nivel activoElegir un chip por su dirección
Decodificador con controlUna señal de permisoSe activan solo si hay permisoChip select con habilitación de lectura
Entrada «uno entre N»
Un decodificador convierte un número binario (log2 N bits) en N líneas, de las cuales exactamente una está activa. Se llama codificación uno entre N (one-hot) y es la más cómoda para habilitar dispositivos.
El enable no es un reloj
Un reloj tiene flancos que significan «ahora»; el enable de un decodificador es un nivel que significa «mientras». No hay memoria ni sincronismo acá: los flip-flops y los relojes llegan en el curso siguiente.

05 · Crecer

De 1:4 a 1:16

Los demultiplexores grandes se arman con otros más chicos. La clave son las entradas de habilitación: se usan para decidir qué chip responde, mientras que las entradas de selección eligen qué salida dentro de ese chip.

Cómo se arman las distintas salidas.
TamañoChipsConexión
1:4½ × 74HC139Selectores en A0 y A1, dato en ~E
1:81 × 74HC138Selectores en A, B, C. Dato en ~G2A (con G1 = 1 y ~G2B = 0): la salida elegida copia el dato
1:8 (otra forma)1 × 74HC138Dato en G1 (con ~G2A y ~G2B a masa): la salida elegida da el dato invertido
1:162 × 74HC138A, B, C en paralelo. S3 en G1 del segundo y en ~G2A del primero. Dato en ~G2B de los dos
1:16 (directo)1 × 74HC1544 selectores y dos habilitaciones; chip de 24 pines
1:324 × 74HC138 + 1 × 74HC139El 139 elige cuál de los cuatro 138 se habilita

1:16 con dos 74HC138

Las tres entradas bajas de dirección (A, B, C) van a los dos chips en paralelo. La cuarta (S3) decide cuál chip se habilita: el primero con S3 = 0, el segundo con S3 = 1. Para eso se aprovechan las polaridades de las habilitaciones: S3 va a ~G2A del primero (habilitado con S3 = 0) y a G1 del segundo (habilitado con S3 = 1), y no hace falta ningún inversor.

Las habilitaciones de los dos 138 en el esquema de 16 salidas.
PinPrimer 74HC138 (salidas 0 a 7)Segundo 74HC138 (salidas 8 a 15)
G1VCC (siempre 1)S3
~G2AS3GND (siempre 0)
~G2BDato (~E)Dato (~E)
Habilitado cuando…S3 = 0 y dato = 0S3 = 1 y dato = 0

06 · Aplicaciones

Para qué se usa un demultiplexor

Decodificación de direcciones
En un sistema con microprocesador, los bits altos de la dirección eligen el chip: memoria, periféricos, puertos. Con un 74HC138 y tres bits (A15, A14, A13) se divide el espacio de 64 KiB en ocho regiones de 8 KiB, cada una con su propia señal ~CS. Es el uso más extendido del decodificador/demultiplexor.
Controlar muchos dispositivos con pocos pines
Tres pines de un microcontrolador y un 138 habilitan ocho dispositivos, uno por vez. Con un 154 serían dieciséis con cuatro pines.
Multiplexado de displays
Para mostrar cuatro dígitos con un solo decodificador de 7 segmentos, un DEMUX activa el dígito correspondiente mientras un MUX (o el micro) pone los segmentos de ese dígito. Se recorren a gran velocidad y el ojo ve todos encendidos (Tema 21).
Distribuir un dato o un pulso
Enviar un pulso a una de varias zonas: una señal de disparo, un reloj de prueba, un comando. Cada salida solo ve el pulso cuando está seleccionada.
Enlace por división de tiempo (TDM)
Un MUX en un extremo, un DEMUX en el otro y un contador sincronizado que maneja los dos selectores: un solo cable transporta N canales, uno por vez, cada uno en su «ranura» de tiempo. Es la idea detrás de buses serie, telefonía digital y muchos instrumentos.
División de tiempo: cuánto debe correr el reloj según los canales.
Canales (N)Ancho de banda de cada canalReloj mínimo (2·N·B)
4500 Hz4 kHz
8500 Hz8 kHz
820 kHz (audio)320 kHz
324 kHz (voz)256 kHz

07 · Simulador

Laboratorio: repartir y compartir

El simulador tiene dos modos. En Reparto manejás un demultiplexor de 4 u 8 salidas, en lógica positiva (didáctica) o en la del 74HC139/138 (salidas activas en bajo, dato en la habilitación), y mirás los LED. En Enlace por tiempo conectás un MUX, un cable único y un DEMUX con un contador compartido y mirás cómo cuatro canales viajan por un solo cable, cada uno en su turno.

  • Reparto: el trapecio reparte el dato; la salida seleccionada se resalta. Un LED circular muestra cuáles salidas están «activas» según la polaridad elegida.
  • Enlace por tiempo: cada «Paso de reloj» avanza el contador. La salida seleccionada copia el cable, y su registro retiene el valor hasta la próxima vuelta.
  • Resultados: las tarjetas cambian de contenido con el modo.
SIMULADOR 19

Reparto y división de tiempo

Reparto 1:4 · activo en alto

Demultiplexor o enlace por división de tiempo En el modo de reparto, un trapecio con una entrada y N salidas, la salida elegida resaltada y un LED por salida. En el modo de enlace, cuatro canales entran a un multiplexor, viajan por un cable y un demultiplexor los entrega a cuatro registros. UNA ENTRADA, N SALIDAS
Salidas—
Salida elegida—
LEDs encendidos—
Estado—

Reparto 1:4.

Recorrido guiado (8 minutos)

  1. 1
    Empezá en Reparto 1:4, activo en alto.

    Con E = 1 y S = 01 se enciende solo Y1; las otras tres valen 0. Recorré los selectores con los botones: el 1 «viaja» de salida en salida. Poné E = 0: todo apagado, el enable es el interruptor maestro.

  2. 2
    Pasá a «74HC139/138 (activo en bajo)».

    Ahora los LED encienden con un 0. El botón de dato pasa a llamarse «dato en ~E»: con ~E = 0 la salida elegida baja a 0 y su LED enciende; con ~E = 1 todas valen 1 y ninguno enciende. Fijate que la salida elegida copia el nivel de ~E.

  3. 3
    Cambiá a 1:8.

    Tres selectores y ocho salidas: es el 74HC138. El selector más significativo (S2) separa las salidas 0 a 3 de las 4 a 7. Con «Siguiente salida» recorrés las ocho.

  4. 4
    Dejá el dato fijo habilitado y usá los selectores como un número.

    Eso es un decodificador: el número binario S2 S1 S0 enciende exactamente un LED. Es el tema siguiente.

  5. 5
    Pasá a «Enlace por tiempo».

    Hay cuatro canales de un bit (D0 a D3), un MUX, un cable y un DEMUX con el mismo contador. Apretá «Paso de reloj» cuatro veces: cada salida recibe el canal que le toca y lo retiene. En total viajaron cuatro datos por un solo cable.

  6. 6
    Cambiá un canal después de que ya fue entregado.

    El receptor sigue mostrando el valor viejo hasta que el contador vuelva a esa ranura. En un enlace por división de tiempo, la información llega con un retraso de hasta una vuelta completa.

  7. 7
    Contá los cables.

    En lugar de cuatro cables de datos, hay uno, más los dos de selección compartidos entre los dos extremos. Es una ganancia, siempre que los dos contadores estén sincronizados.

  8. 8
    Apretá «Ciclo completo» varias veces.

    Los registros se actualizan en orden 0, 1, 2, 3 una y otra vez. La frecuencia del cable es cuatro veces la de cada canal: esa es la regla de la tabla de la sección 06.

Preguntas para pensar

  1. En el modo activo en alto, apagá E. ¿Qué valen las salidas? ¿Qué papel cumple E?
  2. Con el 74HC139 (activo en bajo), ¿qué valor tiene la salida elegida si ~E = 1? ¿Y si ~E = 0?
  3. En el enlace por tiempo, ¿cuántas veces por segundo se actualiza cada canal si el reloj corre a 8 kHz y hay 4 canales?
  4. Si un canal cambia 100 veces por segundo, ¿alcanza con un reloj de 4 kHz con 4 canales?
Ver respuestas sugeridas
  1. Todas valen 0: sin enable no hay reparto. E es el interruptor maestro: el dato solo atraviesa mientras E está activo.
  2. Con ~E = 0 baja a 0 (activa); con ~E = 1 queda en 1 (inactiva), igual que las demás. La salida elegida copia el nivel de ~E.
  3. 8 kHz / 4 = 2 kHz: cada canal se muestrea 2000 veces por segundo.
  4. Sí de sobra: cada canal se muestrea a 4 kHz / 4 = 1 kHz, y para representar una señal de hasta 100 Hz alcanza con más de 200 muestras por segundo (teorema de muestreo).

08 · Reparto en código

Demultiplexores, decodificadores y glitches

Los bloques verifican las propiedades del DEMUX, modelan el 74HC138 con sus tres habilitaciones, arman 16 salidas con dos chips, simulan un enlace por división de tiempo, decodifican un mapa de memoria y reproducen los glitches de un decodificador cuando cambian varias líneas de dirección.

Python en tu navegador. Los bloques son editables: cambiá los selectores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.

Paso 1: el DEMUX, su propiedad «una entre N» y su relación con el MUX

def demux(d, s, n):
    ys = [0] * n
    ys[s] = d
    return ys


def mux(ds, s):
    return ds[s]


for n in (2, 4, 8):
    una = all(sum(demux(1, s, n)) == 1 and demux(1, s, n)[s] == 1 for s in range(n))
    apagado = all(sum(demux(0, s, n)) == 0 for s in range(n))
    print(f"1:{n}: con dato=1 hay una sola salida activa: {una};  con dato=0 todo apagado: {apagado}")

print("mux(demux(d, s), s) == d:", all(mux(demux(d, s, 4), s) == d for d in (0, 1) for s in range(4)))
print("decodificador = demux con dato fijo en 1:")
for s in range(4):
    print(f"   S={s:02b} -> {demux(1, s, 4)}")

Con el dato en 1 solo la salida elegida vale 1; con el dato en 0, ninguna. Y un MUX puesto a continuación de un DEMUX con el mismo selector devuelve el dato original. Con el dato fijo en 1 se obtiene la tabla de un decodificador.

Paso 2: el 74HC138 y la cascada a 16 salidas

def hc138(a, b, c, g1=1, g2a_n=0, g2b_n=0):
    ys = [1] * 8                                  # salidas activas en bajo: reposo = 1
    if g1 == 1 and g2a_n == 0 and g2b_n == 0:
        ys[4 * c + 2 * b + a] = 0                 # C es el bit más significativo
    return ys


def bits(s):
    return s & 1, (s >> 1) & 1, (s >> 2) & 1


# dato en ~G2A: la salida elegida COPIA el dato
ok_copia = all(hc138(*bits(s), g1=1, g2a_n=d, g2b_n=0) == [d if i == s else 1 for i in range(8)]
               for s in range(8) for d in (0, 1))
# dato en G1: la salida elegida da el dato INVERTIDO
ok_inv = all(hc138(*bits(s), g1=d, g2a_n=0, g2b_n=0) == [1 - d if i == s else 1 for i in range(8)]
             for s in range(8) for d in (0, 1))
print("dato en ~G2A (copia):", ok_copia, "  dato en G1 (invierte):", ok_inv)


def demux16(s, d):
    s3, bajo = s >> 3, s & 7
    a, b, c = bits(bajo)
    primero = hc138(a, b, c, g1=1, g2a_n=s3, g2b_n=d)      # habilitado con S3 = 0
    segundo = hc138(a, b, c, g1=s3, g2a_n=0, g2b_n=d)      # habilitado con S3 = 1
    return primero + segundo


ok16 = all(demux16(s, d) == [d if i == s else 1 for i in range(16)] for s in range(16) for d in (0, 1))
print("1:16 con dos 74HC138, sin compuertas extra:", ok16)
print("ejemplo S=1010 dato=0 :", demux16(0b1010, 0))

Con el dato en ~G2A la salida elegida copia el dato; con el dato en G1 lo invierte. Las polaridades distintas de las habilitaciones (G1 activa en alto, las otras en bajo) permiten armar 16 salidas con dos chips y sin compuertas. En el ejemplo, S = 1010 pone un 0 en la salida 10.

Paso 3: un enlace por división de tiempo

def tdm(canales, vueltas, n=4):
    retenido = [None] * n
    for t in range(vueltas * n):
        s = t % n                          # un contador compartido maneja MUX y DEMUX
        cable = canales(t)[s]              # el MUX pone en el único cable el canal s
        retenido[s] = cable                # el DEMUX lo entrega a la salida s, que lo retiene
        print(f"t={t:>2} ranura={s}  cable={cable}  recibido={['-' if x is None else x for x in retenido]}")


# los canales cambian con el tiempo
canales = lambda t: [(t // 4) % 2, 1, (t // 8) % 2, 0]
tdm(canales, 3)

print()
print("   N  ancho de banda  reloj mínimo (2·N·B)")
for n, B in ((4, 500), (8, 500), (8, 20_000), (32, 4_000)):
    print(f"{n:>4}  {B:>10} Hz  {2 * n * B:>10,} Hz")

Cada salida recibe su canal una vez por vuelta y lo retiene. El canal 0, que cambia en cada vuelta, se ve actualizado con hasta cuatro pasos de retraso; los canales constantes ya no cambian. El reloj debe ser al menos 2·N·B para no perder información.

Paso 4: decodificar un mapa de memoria con un 74HC138

def hc138(a, b, c, g1=1, g2a_n=0, g2b_n=0):
    ys = [1] * 8
    if g1 == 1 and g2a_n == 0 and g2b_n == 0:
        ys[4 * c + 2 * b + a] = 0
    return ys


def region(addr):
    c, b, a = (addr >> 15) & 1, (addr >> 14) & 1, (addr >> 13) & 1      # A15 A14 A13
    ys = hc138(a, b, c)
    return ys.index(0)


for addr in (0x0000, 0x1FFF, 0x2000, 0x7FFF, 0xA123, 0xE000, 0xFFFF):
    y = region(addr)
    print(f"0x{addr:04X}  A15..A13 = {addr >> 13:03b}  ->  ~Y{y} activa  (región 0x{y * 0x2000:04X}..0x{(y + 1) * 0x2000 - 1:04X})")

Tres bits de dirección dividen los 64 KiB en ocho regiones de 8 KiB. 0xA123 cae en la región 5 (0xA000 a 0xBFFF): su ~Y5 baja y habilita el chip conectado a esa salida. Es el mapa de memoria de casi cualquier computadora simple.

Paso 5: glitches de un decodificador y cómo evitarlos

from itertools import permutations


def transitorios(desde, hasta, n=3):
    cambia = [i for i in range(n) if ((desde >> i) & 1) != ((hasta >> i) & 1)]
    res = {}
    for orden in permutations(cambia):
        estado, pasos = desde, []
        for i in orden[:-1]:
            estado ^= (1 << i)
            pasos.append(estado)
        res[orden] = pasos
    return res


for d, h in ((0b011, 0b100), (0b011, 0b010)):
    print(f"cambio {d:03b} -> {h:03b}")
    for orden, pasos in transitorios(d, h).items():
        print(f"   si cambian los bits en orden {orden}: pasa por {[format(p, '03b') for p in pasos]}  "
              f"-> salidas activadas por error: {[f'Y{p}' for p in pasos]}")


def gray(i):
    return i ^ (i >> 1)


print()
print("bits que cambian por paso, contador binario:", [bin(i ^ ((i + 1) % 8)).count("1") for i in range(8)])
print("bits que cambian por paso, contador Gray:   ", [bin(gray(i) ^ gray((i + 1) % 8)).count("1") for i in range(8)])

Al pasar de 011 a 100 cambian los tres bits: según el orden en que lleguen, el decodificador activa por unos nanosegundos dos salidas equivocadas. De 011 a 010 cambia un solo bit y no hay transitorios. Con un contador Gray cada paso cambia exactamente un bit, incluida la vuelta, y la decodificación queda limpia.

09 · Analogía de programador

Dispatch, ruteo y mapa de memoria

El mismo concepto, en dos mundos.
En softwareEn el demultiplexor
handlers[i](evento): un evento al manejador elegidoUn DEMUX: el dato llega solo a la salida seleccionada
Un enrutador web (router) que despacha según la URLEl decodificador de direcciones: el prefijo elige el destino
Un conmutador de red (switch) que envía la trama por un puertoUn DEMUX con la dirección como selector
Un código de error donde 0 significa «ok» (lógica negativa)Las salidas activas en bajo: 0 es «seleccionado»
Un feature flag que apaga todo hasta habilitarLa entrada de habilitación: sin ella, ninguna salida actúa
E/S mapeada en memoria: un rango de direcciones por dispositivoDecodificar A15..A13 para generar ~CS por región
Planificador round-robin que da un turno a cada tareaEl contador compartido de un enlace por división de tiempo
Un pub/sub con un único suscriptor por temaUna salida activa por vez (uno entre N)
Una condición de carrera: dos manejadores se activan a la vez por errorEl glitch del decodificador: dos salidas activas un instante
  1. 1
    DEMUX = dispatch.

    Un evento a un manejador según un índice. Los demás ni se enteran, igual que en un arreglo de funciones.

  2. 2
    Activo en bajo = lógica negativa.

    Como los códigos de retorno donde 0 es éxito: se lee con cuidado y se documenta. La bolita en el esquema equivale al nombre claro de una variable.

  3. 3
    Enable = feature flag.

    Todo apagado hasta habilitar: un despliegue por etapas, hecho en silicio.

Una diferencia con el software: un despachador de software atiende un evento, cambia de estado y recién entonces atiende el siguiente; el hardware cambia de «índice» con transiciones físicas que pueden ser imperfectas. El glitch del decodificador no tiene equivalente exacto en código: es como si una variable pasara brevemente por un valor intermedio que nadie escribió.

10 · Comprensión

Confusiones frecuentes

«El 74HC139 prende en 1»

La salida elegida baja a 0 y las demás quedan en 1. Un LED entre VCC y la salida (con resistencia) enciende con el 0. Esperar un 1 es cablear al revés.

«Las salidas sin usar flotan»

Las salidas de un chip lógico valen siempre 0 o 1 y se pueden dejar sin conectar. Lo que flota son las entradas sin atar, incluidas las de selección y habilitación.

«El enable es un reloj»

El enable es un nivel («mientras»); un reloj es un flanco («ahora»). El decodificador no tiene memoria: si el enable baja, la salida vuelve a reposo.

«En el 139 el dato entra por un pin de datos»

No hay pin de datos: el dato entra por la habilitación (~E). Es un decodificador usado como demultiplexor. En el 138 hay tres habilitaciones y cualquiera puede llevar el dato.

«DEMUX y decodificador compiten»

Son el mismo silicio con la habilitación usada de dos maneras: como señal (reparto) o fija (decodificación). Aprender uno es aprender los dos.

«Dos salidas pueden quedar activas»

En régimen estable, nunca: es la propiedad «uno entre N». Si dos se activan, es un transitorio (glitch) o un error de conexión, no el funcionamiento normal.

«La salida de un decodificador sirve como pulso de escritura»

Con cambios de dirección casi simultáneos, la salida puede mostrar pulsos falsos que escribirían donde no se debe. Se sincroniza con un reloj, se cuida el orden de los cambios o se usan códigos Gray.

11 · Práctica guiada

Ejercicios de reparto

Ejercicio 1: alarma por zonas

La alarma E (activa en bajo) debe encender el LED de la zona S1S0. Conectá un 74HC139 y calculá la resistencia de los LED para unos 4 mA a 5 V (LED con 2 V de caída).

Ver solución razonada

La alarma entra por ~E; S1 y S0 a A1 y A0. Cada LED va de VCC, a través de su resistencia, a la salida ~Y correspondiente: al bajar la salida elegida, circula corriente y enciende. R = (5 − 2) V / 4 mA = 750 Ω → 820 Ω (unos 3,7 mA). Si la alarma no está activa (~E = 1) todas las salidas están en 1 y ninguno enciende.

Ejercicio 2: 1:8 con un 74HC138

Conectá el 138 como DEMUX 1:8 no inversor con el dato en ~G2A. ¿Qué valen las ocho salidas con S = 101 y dato = 0? ¿Y con dato = 1?

Ver solución razonada

G1 = 1 y ~G2B = 0 fijos; el dato va a ~G2A. Con S = 101 (C = 1, B = 0, A = 1: salida 5): con dato = 0 el chip está habilitado y ~Y5 = 0 (las otras siete en 1); con dato = 1 está deshabilitado y las ocho valen 1. La salida elegida copia el dato; las demás permanecen en 1.

Ejercicio 3: 16 salidas con dos chips

Indicá cómo se conectan G1, ~G2A y ~G2B en cada uno de los dos 74HC138 para que S3 elija el chip, y qué salida baja con S3S2S1S0 = 1101 y dato = 0.

Ver solución razonada

Primer chip: G1 = VCC, ~G2A = S3, ~G2B = dato. Segundo chip: G1 = S3, ~G2A = GND, ~G2B = dato. A, B, C en paralelo. Con 1101 (decimal 13) y dato = 0: S3 = 1, el primero queda deshabilitado y el segundo habilitado, y dentro de él la dirección 101 (5) baja su salida: la salida global 13 (8 + 5).

Ejercicio 4: mapa de memoria

Un 74HC138 recibe A15, A14, A13. ¿Qué salida baja con la dirección 0xA123? ¿Qué rango de direcciones habilita cada salida y de qué tamaño es?

Ver solución razonada

0xA123 = 1010 0001 0010 0011: A15 A14 A13 = 101 → ~Y5. Cada salida habilita 213 = 8192 direcciones (8 KiB): ~Y0 de 0x0000 a 0x1FFF, ~Y1 de 0x2000 a 0x3FFF… ~Y5 de 0xA000 a 0xBFFF… ~Y7 de 0xE000 a 0xFFFF.

Ejercicio 5: división de tiempo

Cuatro canales de 1 kHz de ancho de banda cada uno viajan por un solo cable con MUX y DEMUX. ¿Qué frecuencia mínima debe tener el reloj? ¿Cuántos cables hay frente a la versión sin multiplexar?

Ver solución razonada

Cada canal debe muestrearse al menos al doble de su ancho de banda: 2 kHz por canal; con 4 canales, el reloj debe ser de al menos 8 kHz (2·N·B). Sin multiplexar harían falta 4 cables de datos; con multiplexado, 1 de datos más 2 de selección que comparten los dos extremos (o una señal de sincronismo, si el contador está en cada punta).

Ejercicio 6: el glitch de 011 a 100

Un contador pasa de 011 a 100 y maneja un decodificador. Enumerá las salidas que pueden activarse por error según el orden en que cambien los bits, y proponé dos soluciones.

Ver solución razonada

Cambian los tres bits; los órdenes posibles pasan por: S2 primero → 111 (Y7), luego 101 (Y5) o 110 (Y6); S1 primero → 001 (Y1), luego 101 (Y5) o 000 (Y0); S0 primero → 010 (Y2), luego 110 (Y6) o 000 (Y0). Soluciones: usar un contador en código Gray (cambia un bit por paso) o sincronizar la salida con un reloj que la muestree cuando la dirección ya se estabilizó (Tema 28). Verificalo con el Paso 5.

12 · Síntesis

Ideas para recordar

  • Un demultiplexor reparte una entrada a una de N salidas: la elegida copia el dato y las demás quedan quietas. Con dato = 0 o sin enable, todo en reposo.
  • Cada salida es D·mᵢ(S): un DEMUX 1:4 son cuatro AND de tres entradas y dos inversores. Es el inverso del MUX.
  • En la serie 74HC, 139 (2 a 4) y 138 (3 a 8) tienen salidas activas en bajo y el dato entra por la habilitación: la salida elegida copia ~E.
  • El 138 tiene tres habilitaciones (G1 activa en alto, ~G2A y ~G2B en bajo), que permiten armar 1:16 con dos chips y sin compuertas.
  • DEMUX y decodificador son el mismo silicio: con la habilitación fija es un decodificador (uno entre N).
  • Aplicaciones: decodificación de direcciones (~CS), controlar muchos dispositivos con pocos pines, multiplexado de display, enlace por división de tiempo (reloj mínimo 2·N·B).
  • Las salidas no flotan, las entradas sí: atá selectores y habilitaciones. El enable es un nivel, no un reloj.
  • El decodificador puede mostrar glitches cuando cambian varios bits de dirección; un contador Gray o la sincronización lo evitan.

¿Listo para el Tema 20?

Podés avanzar si sos capaz de responder esto sin mirar:

  • Escribir la ecuación de cada salida de un DEMUX 1:4.
  • Decir qué valor tiene la salida elegida de un 74HC139 con ~E = 0 y con ~E = 1.
  • Conectar un 74HC138 como DEMUX 1:8 y como decodificador.
  • Armar 16 salidas con dos 138 indicando las habilitaciones.
  • Decir qué salida del 138 baja con A15 A14 A13 = 110.
  • Explicar por qué la salida de un decodificador no se usa como reloj sin cuidado.

Un demultiplexor reparte un dato; si el dato se fija y lo que importa es el número de selección, tenés un decodificador. En el próximo tema lo exploramos a fondo: decodificadores binarios.