← Índice del curso

Circuitos Secuenciales y Memoria · Tema 19

Contadores módulo N y BCD

Un contador binario de 4 bits cuenta de 0 a 15, pero el mundo rara vez cuenta así: los segundos llegan a 59, las horas a 23, los dígitos de un display a 9. Para que un contador recorra solo N estados hay que cortar la cuenta en el punto justo. Este tema reúne las tres técnicas para hacerlo, muestra cuál no deja estados prohibidos, y las aplica a los contadores de década (BCD) con los que se arman los relojes y los contadores de eventos.

01 · Punto de partida

Cuando 16 no es el número

Un contador de n bits tiene 2n estados. Para recorrer solo N de ellos hay que decidir qué estado es el último y qué pasa después. Hay cuatro motivos habituales para necesitarlo:

  • Mostrar números decimales: cada dígito es un contador de 0 a 9.
  • Medir tiempo: segundos y minutos van de 0 a 59; las horas, de 0 a 23.
  • Dividir una frecuencia por un número que no es potencia de dos (por ejemplo, por 10 o por 60).
  • Recorrer una zona: direcciones de una memoria que no ocupa todo el espacio, o pasos de una secuencia.

El contador que limitamos puede ser asíncrono o síncrono, pero para que el resultado sea confiable conviene partir de un contador síncrono, que ya tiene los tres controles necesarios: clear, carga y habilitación (tema 18). Falta decidir con cuál de ellos se corta la cuenta.

02 · Técnicas

Tres técnicas para limitar la cuenta

Para un módulo N = 10 en un contador de 4 bits (que debe recorrer 0 a 9), estas son las tres formas de cortar la cuenta. Todas usan una compuerta que detecta un valor; lo que cambia es qué detecta y qué control acciona.

Tres técnicas de módulo N con un contador de 4 bits (ejemplo: N = 10).
TécnicaQué se detectaQué haceSecuencia visible
Clear asíncronoEl valor N = 10 (1010)Borra de inmediato0 1 2 … 9 A 0 1 … (el 10 aparece unos 20 ns)
Clear síncronoEl último valor, N − 1 = 9 (1001)Borra en el flanco siguiente0 1 2 … 9 0 1 … (sin estado prohibido)
Carga síncronaEl valor terminal 15 (RCO)Carga 16 − N = 6 en el flanco siguiente(6) 7 8 … 15 6 7 …

Clear asíncrono: ya lo conocés

Es la técnica del tema 17: se detecta el primer valor que no debería existir y se lo borra de inmediato. Es la más rápida de armar y la peor desde el punto de vista del diseño: el estado N sí aparece en las salidas durante tdetección + tclear, y cualquier circuito que mire esas salidas puede interpretarlo. Además, el borrado es una carrera entre flip-flops. Solo se justifica para divisores donde el pulso falso no importa.

Clear síncrono: detectar el último, borrar en el flanco

Se detecta N − 1, el último valor legítimo, y se activa el clear síncrono (como el del 74HC163). Al llegar el siguiente flanco, en vez de sumar uno, el contador va a cero. El estado N nunca existe: el contador pasa de N − 1 a 0 directamente. Las únicas señales que viven fuera del ciclo son las de la lógica de detección, y esas se capturan en el flanco (setup y hold) como cualquier dato.

Para N = 10 se detecta 1001 con la compuerta que mira Q3 y Q0 (nadie antes de 1001 tiene ambos en 1): SR̅ = NAND(Q3, Q0). Para N = 6 se detecta 0101 (Q2 y Q0).

Carga síncrona: elegir dónde empieza

En vez de borrar, se carga un valor. El contador cuenta hacia arriba hasta su valor máximo (15), la salida RCO lo avisa y esa señal activa la carga: en el flanco siguiente, en lugar de pasar a 0, salta a 16 − N. Para N = 10 se carga 6: la secuencia es 6, 7, … 15, 6, 7 …, que son 10 estados. La ventaja es que el rango deja de empezar en cero: se puede contar de cualquier valor L hasta 15, con N = 16 − L, o hasta cualquier valor final detectando ese valor y cargando el inicial.

Valor de carga para distintos módulos (el contador cuenta de L a 15).
Módulo NValor a cargar L = 16 − NEstados visitados
610 (1010)10, 11, 12, 13, 14, 15
106 (0110)6 … 15
124 (0100)4 … 15
151 (0001)1 … 15
Resumen de ventajas y costos.
TécnicaEstado prohibido visibleRango no empieza en 0Lógica extraCuándo usarla
Clear asíncronoSí (≈ 20 ns)NoUna compuertaDivisores donde el pulso falso no importa
Clear síncronoNoNoUna compuertaContadores de 0 a N − 1
Carga síncronaNoSíUna compuerta y entradas de datos fijasRangos arbitrarios y cuentas regresivas

03 · Decimal

Contador BCD (década)

BCD (Binary Coded Decimal) representa cada dígito decimal con su propio grupo de 4 bits. El número 59 no es 111011 (binario) sino 0101 1001: un nibble para el 5 y otro para el 9. Es menos eficiente que el binario puro (4 bits pueden guardar 16 valores y BCD solo usa 10), pero tiene una gran ventaja práctica: cada nibble se puede enviar directamente a un decodificador de display de 7 segmentos (tema 20) sin ninguna conversión.

Códigos BCD. Los nibbles 1010 a 1111 no existen en BCD.
DígitoBCD (Q3 Q2 Q1 Q0)DígitoBCD
0000050101
1000160110
2001070111
3001181000
4010091001

Un contador de década es un contador módulo 10 que recorre 0 a 9 y vuelve a 0, con la propiedad de que el paso de 9 a 0 produce una salida de acarreo (RCO) para la década siguiente. Se obtiene con cualquiera de las técnicas anteriores; el 74HC160 y el 74HC162 ya lo traen resuelto: son idénticos al 161 y al 163 (clear asíncrono y síncrono, respectivamente), pero cuentan 0 a 9. Su RCO vale ENT · Q3 · Q0 (el estado 9 = 1001).

De binario a BCD y al revés

Un número binario no se convierte a BCD por simple reagrupamiento de bits: hay que dividir entre 10 (o usar el algoritmo de «doble-dabble»). En cambio, pasar de BCD a número es multiplicar cada dígito por su peso: 0101 1001 = 5 · 10 + 9 = 59. Además, cualquier nibble mayor que 1001 indica un error: 0101 1100 no es un BCD válido.

04 · Varias cifras

Cascada de décadas

Para contar con más de una cifra se encadenan décadas de la misma manera que los contadores binarios del tema 18: el reloj es común y el RCO de cada década habilita (ENT) a la siguiente. La década de las decenas solo avanza cuando las unidades están en 9; la de las centenas, cuando unidades y decenas están en 99:

Tres décadas en cascada (BCD: centenas decenas unidades).
PulsoCuentaBCDQué ocurrió
90090000 0000 1001Las unidades llegan a 9; su RCO sube
100100000 0001 0000Unidades a 0; decenas a 1
990990000 1001 1001RCO de unidades y de decenas en 1
1001000001 0000 0000Avanzan las tres a la vez
9999991001 1001 1001Todas en 9
10000000000 0000 0000Desborda: con 999 el RCO de la última estaba en 1

Cada década suma una cifra decimal. Con k décadas se cuenta de 0 a 10k − 1. Si el RCO de la última década se lleva a un indicador, queda un aviso de desbordamiento («overflow») que un contador de eventos puede mostrar.

05 · Aplicación

Relojes: 59 y 23

Un reloj digital es una cascada de décadas con módulos mixtos. Cada par de dígitos tiene un módulo distinto:

Módulos de cada dígito de un reloj hh:mm:ss.
DígitoRangoMóduloCómo se logra
Unidades de segundo0 a 910Década BCD
Decenas de segundo0 a 56Detectar 5 (0101) y borrar con clear síncrono
Unidades de minuto0 a 910Década BCD, habilitada por el acarreo de 59 s
Decenas de minuto0 a 56Igual que las de segundo
Horas (2 dígitos)00 a 2324Detectar 23 y borrar ambas décadas a la vez

Los minutos y los segundos son simples: unidades módulo 10, decenas módulo 6 y el RCO de las unidades habilitando a las decenas. Las horas tienen la dificultad de no ser un producto de módulos independientes: las unidades llegan a 9 (de 00 a 09 y de 10 a 19) pero solo hasta 3 en la decena 2. La solución es una compuerta que detecte el estado 23 (decenas = 0010, unidades = 0011) y borre ambas décadas en el flanco siguiente. Así 23:59:59 pasa a 00:00:00 sin que aparezca 24.

El pulso de entrada es una señal de 1 Hz. Un cristal de 32 768 Hz y 15 etapas de división (tema 17) la generan con precisión de cristal; de ahí en adelante, todo el reloj es una cadena de décadas y detectores.

06 · Divisores

Divisor por N con ciclo del 50 %

Un contador módulo N usado como divisor entrega una salida de frecuencia f / N, pero normalmente no simétrica. En módulo 10, el bit Q3 está en alto solo durante 8 y 9: 2 de cada 10 pulsos, un ciclo de trabajo del 20 %. Para algunas aplicaciones (generar un reloj, un tren de pulsos limpio, excitar una carga) hace falta un 50 %.

Si N es par, hay una solución simple: se divide por N/2 con el contador y luego se pasa la salida por un flip-flop T (que divide por dos). La salida del flip-flop cambia una vez cada N/2 pulsos y queda en alto exactamente la mitad del tiempo. Para dividir por 10: módulo 5 seguido de un divisor por 2.

Dos formas de dividir por 10 (20 pulsos de entrada).
MétodoSalida durante 20 pulsosCiclo de trabajo
Q3 de un contador módulo 100000000011000000001120 %
Módulo 5 + flip-flop T0000011111000001111150 %

Cuando N es impar no se puede lograr un 50 % exacto con flancos de un solo sentido (habría que usar los dos flancos del reloj). Si no es necesario, se acepta un ciclo asimétrico.

07 · Componentes

Contadores reales: 160 a 163

Los cuatro contadores síncronos de 4 bits de la familia 74HC comparten patillado y controles; difieren en la cuenta y en el tipo de clear:

La familia 160 a 163 (confirmá detalles en la hoja de datos de tu fabricante).
ChipCuentaClearCargaAcarreo
74HC160Década BCD (0 a 9)MR̅ asíncronoPE̅ síncronaRCO = ENT · Q3 · Q0
74HC161Binaria (0 a 15)MR̅ asíncronoPE̅ síncronaRCO = ENT · 1111
74HC162Década BCD (0 a 9)SR̅ síncronoPE̅ síncronaRCO = ENT · Q3 · Q0
74HC163Binaria (0 a 15)SR̅ síncronoPE̅ síncronaRCO = ENT · 1111

Dos reglas prácticas: para relojes y contadores de eventos, el 162 y el 163 (clear síncrono) son los más seguros; para un módulo N cualquiera, el 161 o 163 con carga o clear síncrono. Para cualquiera de ellos conviene conectar las entradas de datos de carga a niveles fijos, aunque no se use la carga, para que no queden al aire.

08 · Módulo N y BCD en código

Comparar técnicas, encadenar décadas y armar un reloj

Los bloques ponen las tres técnicas lado a lado, simulan tres décadas en cascada, arman un reloj hh:mm:ss con módulos mixtos y resuelven conversiones BCD, rangos y divisores con 50 %.

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

Paso 1: las tres técnicas con módulo 10

def secuencia(tecnica, N, pulsos):
    v, vistos, prohibido = 0, [0], 0
    for _ in range(pulsos):
        if tecnica == "libre":
            v = (v + 1) & 15
        elif tecnica == "clear asincrono":
            v = (v + 1) & 15
            if v == N:                     # el estado N aparece un instante y se borra
                vistos.append(v)
                prohibido += 1
                v = 0
        elif tecnica == "clear sincrono":
            v = 0 if v == N - 1 else (v + 1) & 15      # se detecta N-1 y el borrado ocurre en el flanco siguiente
        elif tecnica == "carga sincrona":
            v = 16 - N if v == 15 else v + 1           # se detecta 15 (RCO) y se carga 16-N
        vistos.append(v)
    return vistos, prohibido


N = 10
for tecnica in ("libre", "clear asincrono", "clear sincrono", "carga sincrona"):
    s, p = secuencia(tecnica, N, 24)
    texto = " ".join(f"{x:X}" for x in s)
    print(f"{tecnica:16s} {texto}")
    print(f"{'':16s} estados prohibidos vistos: {p}")

La cuenta libre llega a F (15). El clear asíncrono intercala una A (10) antes de cada 0: son los dos «estados prohibidos vistos». El clear síncrono recorre 0 a 9 limpio. La carga síncrona hace un primer ciclo completo de 0 a F (arrancó en 0) y desde ahí cuenta 6 a F, que son 10 estados. Cambiá N a 6 o 12 y comprobá los resultados.

Paso 2: tres décadas en cascada

class Decada:
    """Un contador BCD tipo 74HC160/162: cuenta 0 a 9; RCO = ENT · (Q = 9)."""

    def __init__(self):
        self.q = 0

    def rco(self, ent):
        return int(ent and self.q == 9)

    def flanco(self, ent=1):
        if ent:
            self.q = (self.q + 1) % 10


def pulso(decadas):
    ent = 1
    ents = []
    for d in decadas:                      # unidades, decenas, centenas: el RCO de cada una habilita la siguiente
        ents.append(ent)
        ent = d.rco(ent)
    for d, e in zip(decadas, ents):
        d.flanco(e)


def bcd(decadas):
    return " ".join(f"{d.q:04b}" for d in reversed(decadas))


dec = [Decada(), Decada(), Decada()]
marcas = {9, 10, 11, 99, 100, 101, 999}
for k in range(1, 1001):
    pulso(dec)
    if k in marcas or k == 1000:
        valor = dec[2].q * 100 + dec[1].q * 10 + dec[0].q
        print(f"pulso {k:4d}: cuenta {valor:3d}   BCD {bcd(dec)}")

En el pulso 10 las unidades vuelven a 0000 y las decenas avanzan a 0001; en el 100 avanzan las tres (0001 0000 0000), todo en el mismo flanco. El pulso 999 deja las tres décadas en 1001 y el 1000 las lleva a cero: desborda. Los enables se calculan antes del flanco para que todas se muevan con el estado anterior.

Paso 3: un reloj de pared

MODS = [10, 6, 10, 6, 10, 3]        # unidades y decenas de segundos, minutos y horas


def tick(d):
    ent = 1
    for i, m in enumerate(MODS):
        if i == 4 and ent and d[5] == 2 and d[4] == 3:      # 23 -> 00: se borran ambos dígitos de la hora
            d[4] = d[5] = 0
            return
        rco = ent and d[i] == m - 1
        if ent:
            d[i] = (d[i] + 1) % m
        ent = rco


def texto(d):
    return f"{d[5]}{d[4]}:{d[3]}{d[2]}:{d[1]}{d[0]}"


d = [5, 5, 9, 5, 3, 2]              # 23:59:55  (unidades de segundo primero)
print("inicio", texto(d))
for _ in range(8):
    tick(d)
    print("  +1 s ->", texto(d))

Desde 23:59:55 el reloj sube 56, 57, 58, 59 y en el quinto pulso pasa a 00:00:00 sin mostrar 24:00:00, porque la detección de 23 borra ambos dígitos de la hora. Después sigue 00:00:01, 02 y 03. Probá arrancar en 12:59:58 o en 09:59:59 y verificá que los acarreos se propagan bien.

Paso 4: BCD, rangos y divisor con 50 %

def a_bcd(n):
    return " ".join(f"{int(c):04b}" for c in str(n))


def de_bcd(texto):
    nibbles = texto.split()
    if any(int(x, 2) > 9 for x in nibbles):
        return "BCD inválido (nibble mayor que 1001)"
    return int("".join(str(int(x, 2)) for x in nibbles))


for n in (7, 59, 99, 255):
    print(f"{n:3d} = binario {n:08b}  |  BCD {a_bcd(n)}")
print("de BCD '0101 1001' ->", de_bcd("0101 1001"))
print("de BCD '0101 1100' ->", de_bcd("0101 1100"))
print()

# Contar de 3 a 12 con carga síncrona (módulo 10 con arranque distinto de cero)
v, seq = 3, [3]
for _ in range(14):
    v = 3 if v == 12 else v + 1
    seq.append(v)
print("rango 3..12 (detecta 12, carga 3):", *seq)
print()

# Salida con 50 % de ciclo de trabajo: módulo 5 seguido de un flip-flop T
mod10 = [(k % 10) for k in range(20)]
q3 = [(x >> 3) & 1 for x in mod10]
mod5 = [(k % 5) for k in range(20)]
div2 = []
t = 0
for k, x in enumerate(mod5):
    if x == 0 and k > 0:
        t ^= 1
    div2.append(t)
print("Q3 del módulo 10   :", "".join(map(str, q3)), f"-> {sum(q3[:10]) * 10} % en alto")
print("módulo 5 + T       :", "".join(map(str, div2)), f"-> {sum(div2[:10]) * 10} % en alto (÷10)")

255 se escribe en BCD como 0010 0101 0101 (tres nibbles, no ocho bits); el nibble 1100 se detecta como inválido. El rango 3..12 tiene 10 estados y se logra detectando 12 y cargando 3. Q3 de un módulo 10 está en alto el 20 % del tiempo; un módulo 5 seguido de un flip-flop T da exactamente 50 % con la misma frecuencia de salida (÷10).

En los cuatro bloques el estado cambia una vez por flanco y las decisiones de acarreo y detección se toman con el estado anterior. Es el mismo modelo que el hardware, donde la lógica de control ve las salidas de antes del flanco.

09 · Exploración interactiva

El laboratorio: módulo N y relojes

El simulador tiene dos modos. En «Un contador de 4 bits» elegís la técnica (libre, clear asíncrono, clear síncrono o carga síncrona) y el módulo N (2 a 16), y mirás qué estados se visitan, cuántos estados prohibidos aparecen y cuál es el módulo realmente medido. En los otros modos se arman dos décadas BCD en cascada con módulos de reloj: 00–99, 00–59 (segundos o minutos) y 00–23 (horas).

Contador módulo N y relojes BCD

Contador módulo N simulado Los bits del contador (o de las dos décadas BCD), la regla de corte activa y la secuencia de estados del último pulso. El borde naranja marca una condición de detección activa.
Valor actual0 (0000)
¿Condición de detección activa?No
Estados distintos vistos—
Módulo medido (cantidad de estados)0
Estados prohibidos vistos0
AcarreoRCO = 0
Pulsos dados0

Contador de 4 bits con clear síncrono y módulo 10. Presioná «10 pulsos» y comprobá que recorre 0 a 9.

Últimos 8 pulsos desde el inicio de la simulación.
N.ºAntesDespuésEstado prohibidoDetección activa
Sin pulsos registrados.

Recorrido guiado

  1. Con «Clear síncrono» y N = 10, dale «10 pulsos»: los estados vistos son 0 a 9 (10 estados) y los «estados prohibidos vistos» valen 0.
  2. Cambiá a «Clear asíncrono» (se reinicia) y repetí con 10 pulsos: en el pulso 10 aparece la A (10) un instante antes de volver a 0 y el contador de estados prohibidos sube a 1. Cada vuelta suma uno.
  3. Elegí «Carga síncrona» con N = 10 y dale «100 pulsos» sin más: el módulo medido da 16 porque el primer ciclo recorrió 0 a 15. Presioná «Reiniciar simulación», elegí otra vez «Carga síncrona», presioná «Valor inicial» (carga 6) y volvé a dar pulsos: ahora el módulo medido es 10, de 6 a 15.
  4. Probá N = 6 con clear síncrono (0 a 5) y N = 12 con carga síncrona (valor inicial 4: 4 a 15). Comprobá en cada caso que la cantidad de estados vistos coincide con N.
  5. Cambiá a «Dos décadas BCD: 00 a 99» y dale «10 pulsos»: aparece 10, con las unidades en 0 y las decenas en 1. Con «100 pulsos» pasa por 99 y vuelve a 00; los estados vistos llegan a 100.
  6. Pasá a «00 a 59» y «100 pulsos»: el reloj llega a 59, pasa a 00 y sigue; los estados distintos son 60.
  7. Pasá a «00 a 23» y dale «100 pulsos»: recorre 00 a 23 y vuelve a 00; el valor 24 nunca aparece, porque se detecta 23 y se borran ambas décadas. Con 100 pulsos queda en 04.
  8. Mirá «Acarreo» en el modo de reloj: el RCO de las unidades solo vale 1 cuando están en 9, que es cuando las decenas avanzan en el próximo flanco.
Desafío: módulo 7 sin estado prohibido

Con el contador de 4 bits y N = 7, probá las tres técnicas. Con clear síncrono, la secuencia es 0 a 6; con carga síncrona, el valor a cargar es 16 − 7 = 9 y la secuencia es 9 a 15 (siete estados); con clear asíncrono aparece el 7 un instante. ¿Cuál de las tres elegirías si la salida alimenta a otro contador? La que no deja estados prohibidos: clear o carga síncronos.

10 · Comprensión

Confusiones frecuentes

«El módulo 10 se detecta con el 10»

Solo con clear asíncrono. Con clear síncrono se detecta el 9 y con carga síncrona, el 15; así el estado 10 no llega a existir.

«Con carga síncrona el módulo es correcto desde el primer pulso»

Solo si el valor de carga se aplicó al arrancar. Si no, el primer ciclo recorre todos los estados desde el valor inicial hasta 15.

«BCD es lo mismo que binario»

No: BCD usa un nibble por dígito decimal. 59 es 0011 1011 en binario y 0101 1001 en BCD. Los nibbles 1010 a 1111 no son BCD válidos.

«Para encadenar décadas se usa el RCO como reloj de la siguiente»

Se usa como habilitación (ENT) y el reloj es común. Usarlo como reloj vuelve asíncrona la cascada y reintroduce estados intermedios falsos.

«Las horas son módulo 24, así que alcanzan dos contadores módulo 10 y módulo 3»

Ese par produce 00 a 29. Hay que detectar el 23 y borrar las dos décadas para que la cuenta salte de 23 a 00.

«Un divisor por N siempre da un 50 % de ciclo de trabajo»

Solo si se lo arma para eso: módulo N/2 más un flip-flop T. El bit más alto de un contador módulo 10 está en alto 2 de cada 10 pulsos.

«El 74HC160 y el 74HC161 son intercambiables»

Tienen el mismo patillado pero cuentan distinto: el 160 llega a 9 y vuelve a 0, el 161 llega a 15.

«El clear síncrono tarda lo mismo que el asíncrono»

No: el síncrono espera al siguiente flanco, así que actúa un ciclo de reloj después de la detección. Es el costo de evitar el estado prohibido.

11 · Práctica guiada

Predecí antes de simular

1. Carga para módulo 12

Con un 74HC161 y carga síncrona, ¿qué valor se carga para obtener módulo 12 y qué estados recorre?

Ver solución

L = 16 − 12 = 4 (0100). Recorre 4, 5, 6, … 15 (12 estados) y al detectar 15 (RCO) carga 4 en el flanco siguiente.

2. Clear síncrono para módulo 6

¿Qué valor se detecta y con qué compuerta se arma el clear síncrono de un contador módulo 6?

Ver solución

Se detecta el último estado legítimo, 5 (0101). Entre 0 y 5, el único estado con Q2 = 1 y Q0 = 1 es 5, así que alcanza SR̅ = NAND(Q2, Q0). Al llegar el flanco, el contador pasa de 5 a 0.

3. Rango 3 a 12

Se quiere contar de 3 a 12 (10 estados). ¿Qué se detecta, qué se carga y con qué compuerta?

Ver solución

Se detecta el valor final 12 (1100) y se carga el inicial 3 (0011) en el flanco siguiente. Entre 3 y 12, el único valor con Q3 = Q2 = 1 es 12, así que alcanza PE̅ = NAND(Q3, Q2) con las entradas de datos fijas en 0011.

4. Conversiones BCD

Escribí 87 en BCD y decidí qué número es 0100 0011 en BCD.

Ver solución

87 → 8 y 7 → 1000 0111. Y 0100 0011 → 4 y 3 → 43. En binario, 87 sería 01010111, un valor sin relación con el BCD.

5. Cascada de tres décadas

Tres décadas en cascada cuentan desde 000. Después de 487 pulsos, ¿qué muestran en BCD? ¿Cuántas veces subió el RCO de las unidades y el de las decenas?

Ver solución

487 → 0100 1000 0111. El RCO de las unidades subió con las unidades en 9, es decir en los valores 9, 19, 29, … 479: 48 veces. El de las decenas (unidades y decenas en 99) subió en 99, 199, 299 y 399: 4 veces.

6. Diagnóstico

Un reloj muestra las horas 21, 22, 23, 24, 25 … 29 y recién después 00. ¿Qué falta en el diseño?

Ver solución razonada

Las decenas de hora cuentan módulo 3 y las unidades módulo 10, así que la cuenta natural llega hasta 29. Falta la detección del 23 (decenas = 2 y unidades = 3) con el borrado de ambas décadas en el flanco siguiente. Con esa compuerta, 23 pasa directamente a 00.

12 · Síntesis

Ideas para recordar

  • Un contador módulo N recorre solo N estados de los 2n posibles, cortando la cuenta con una compuerta que detecta un valor.
  • Clear asíncrono: detecta N y borra de inmediato; el estado N aparece unos 20 ns. Clear síncrono: detecta N − 1 y borra en el flanco; no hay estado prohibido. Carga síncrona: detecta 15 (RCO) y carga 16 − N; permite rangos que no empiezan en cero.
  • Con carga síncrona el primer ciclo es largo si no se cargó el valor inicial al arrancar.
  • BCD guarda un nibble por dígito decimal; los nibbles 1010 a 1111 son inválidos.
  • Una década cuenta de 0 a 9 y su RCO (ENT · Q3 · Q0) habilita a la siguiente; el reloj es común a toda la cascada.
  • Un reloj usa décadas con módulos 10, 6, 10, 6 y 24; las horas necesitan detectar 23 y borrar ambas décadas.
  • Un divisor módulo N no tiene 50 % de ciclo; si N es par, módulo N/2 más un flip-flop T lo corrige.
  • Los 74HC160/162 son décadas (clear asíncrono y síncrono) y los 161/163 son binarios; para diseños confiables conviene el clear síncrono.

¿Listo para el tema 20?

Antes de avanzar, explicá de memoria por qué el clear síncrono evita el estado prohibido, cómo se encadenan dos décadas y por qué un reloj necesita detectar el 23. Si podés justificar las tres respuestas, ya podés contar eventos y mostrarlos en decimal.

En el próximo tema armaremos el taller del contador de eventos: un pulsador sin rebotes, un contador de décadas y un display de siete segmentos para mostrar el conteo decimal.