Diseñe un contador: 12-10-8-6-4-2-0-1-3-5-7-9-11 usando D Flip Flop.
Mi primer enfoque es diseñar un contador 8 - 6 - 4 - 2 - 0 - 1 - 3 - 5 - 7 - 9 - 8 - 6 ... y mostrarlos en LED de 7 segmentos.
Después de escribir el código binario de estos números de arriba, me doy cuenta de que parecen obedecer a una regla.
1 0 0 0 (8)
0 1 1 0 (6)
0 1 0 0 (4)
0 0 1 0 (2)
0 0 0 0 (0)
0 0 0 1 (1)
0 0 1 1 (3)
0 1 0 1 (5)
0 1 1 1 (7)
1 0 0 1 (9)
Se puede ver que el LSB de los números pares siempre es 0, mientras que para los impares siempre es 1. En cuanto a los 3 bits izquierdos, son simétricos. Entonces, mi idea para este problema es que después de contar de 8 a 0, el LSB cambiaría de 0 a 1 y comenzaría a contar (usando 3 o 4 D-Flip-Flop y puertas lógicas). Pero después de escribir Next State Table, me enfrento a la forma de forzar que mi número inicial sea 8.
Estado actual ---- Estado siguiente
0 0 0 0 ------------ 1 0 0 0 (el siguiente estado es 8 si el número inicial es 0)
1 0 0 0 ------- ----- 0 1 1 0 (muestra 8, el siguiente estado es 6)
0 1 1 0 ------------ 0 1 0 0 (muestra 6, el siguiente estado es 4)
0 1 0 0 ------------ 0 0 1 0 (muestra 4, el siguiente estado es 2)
0 0 1 0 ------------ 0 0 0 0 (muestra 2, el siguiente estado es 0)
0 0 0 0 ------------ 0 0 0 1 (muestra 0, cambia LSB a 1 y activa la cuenta progresiva)
El problema aquí es que el estado 0 0 0 0 se usa dos veces (una para forzar que el número inicial sea 8 y otra para cambiar LSB a 1) y creo que mi contador se confundiría. Entonces, me pregunto si hay alguna forma de implementar este tipo de contador.
Gracias de antemano por cualquiera de sus respuestas.
Mi circuito funciona, se basa en el circuito de @Trevor. Gracias a todos por sus increíbles ideas.
Parece que se espera que resuelva esto con un circuito de tipo máquina de estado, sin embargo, también se puede hacer usando un circuito contador clásico.
La clave de este problema es reconocer que para la mitad de la cuenta está invirtiendo los bits de salida del contador. Además, su bit de salida 0 es en realidad el bit más significativo del contador, solo se presenta como el LSB.
Como tal, no necesita contar hacia abajo y luego hacia arriba. Un contador tipo D síncrono clásico con algunos inversores XOR será suficiente para la secuencia de conteo.
Las puertas adicionales en la salida detectan la condición de acarreo que obliga a las entradas de D-Type a volver al número de inicio.
Tenga en cuenta también que he invertido el flip-flop inferior. Como resulta que su condición inicial para su secuencia 12....11 es en realidad 1 en el contador, no 0, esto efectivamente le da la condición de inicio que desea, al menos en el simulador. También agregué una línea de pulso de reinicio solo por si acaso.
Por supuesto, otra columna de D-Type enganchada en el otro borde del reloj en la salida lo haría aún mejor.
Dado que es una tarea, no voy a trabajar con la lógica. Sin embargo, en todas esas preguntas, puede reducirlo a un circuito con dos pasos:
Tiene un binario 0
para n-1
contrarrestar, donde n
está el número de estados requeridos (13 en su caso). Este puede ser un contador binario síncrono estándar que comienza en 0000 y luego, cuando llega, n
se restablece a 0000.
Un circuito lógico combinacional que asigna los valores del contador a los valores de salida. La estructura de esto puede ser puertas lógicas discretas, cuyo circuito se puede derivar utilizando Karnaugh Maps: un mapa por bit en la salida. Alternativamente, podría ser una ROM simple con el mapeo almacenado en ella, donde las líneas de dirección van al mostrador y las líneas de datos son su salida.
Este enfoque será mucho más simple y mucho más genérico (piense flexible) que usar cientos de bits de registro de desplazamiento.
La solución más aburrida, y la que realmente recomendaría, es simplemente construir un registro de desplazamiento circular de 8 bits de ancho y 13 etapas de profundidad, donde siete bits representan cada uno el estado de encendido/apagado de uno de sus 1er siete Los segmentos LED y un segmento representan los dos segmentos que necesita encender para mostrar un 1 en 10ers.
En efecto, serían solo ocho registros de desplazamiento de 13 etapas en paralelo. Los registros de desplazamiento son triviales de implementar usando D FF, así que aquí tienes:
simular este circuito : esquema creado con CircuitLab
El problema sería obtener los valores iniciales en ese registro de desplazamiento, pero podría simplemente declarar que el registro tiene los valores de reinicio correctos y terminar con eso. Nada dice que no puedas.
Por supuesto, 8·13 = 104 registros de desplazamiento pueden no ser bellos , pero nada en la tarea dice que bello es mejor que flexible , rápido o fácil .
Dado que este es un problema puramente académico, siéntase libre de optimizarlo al máximo.
Puedes buscar simplificaciones.
Por ejemplo, puede encontrar que parte del contador simplemente cuenta hacia arriba y hacia abajo en una secuencia sencilla; hay patrones (incluso chips lógicos TTL) que puede usar como contadores ascendentes y descendentes directos.
Para esa parte del contador, simplemente necesita detectar las dos condiciones finales y establecer un bit que controle la función de cuenta ascendente/descendente.
Para el bit restante, ¿puede identificar un patrón o regularidad en su salida? ¿Se deriva fácilmente del contador ascendente/descendente y/o de su lógica de control?
A menudo, esto es más trabajo que un simple contador que controla una tabla de búsqueda, pero probablemente produzca una solución más pequeña.
Para ampliar la excelente respuesta de Tom :
Si el problema es construir un circuito con la menor cantidad posible de elementos lógicos, es posible que desee evitar ese contador 0…12 (que deberá ser un contador de cuatro bits), y en su lugar, use un registro de desplazamiento de retroalimentación lineal para generar los diferentes estados, y lidiar con el hecho de que no son secuenciales en la lógica combinatoria.
Este era un truco común que hacías cuando estabas haciendo cosas como tomar muestras de sonido de una ROM para generar una señal periódica en una época en la que el estado real de la oblea de unos pocos medios sumadores te perjudicaría económicamente. Es muy posible que aún encuentre ese truco en los circuitos integrados modernos que necesitan realizar una tarea similar (es decir, generar una secuencia de salida periódica) a una velocidad muy alta o con un presupuesto de energía muy ajustado.
Sinceramente, no creo que tu escuela espere que diseñes algo así en este momento, pero creo que realmente vale la pena saber que puedes, con un registro de desplazamiento de etapas, encuentre una configuración de registro de desplazamiento de retroalimentación lineal que produzca un ciclo de diferentes estados Esto realmente tiene muchas aplicaciones (especialmente en la comunicación digital), y es muy probable que las encuentre más adelante en sus estudios.
UTILIZANDO D FLIP FLOP... Diseñar este contador es muy fácil... Necesita comprender algunos conceptos básicos de las máquinas de estado antes de resolverlo (NOTA: puede usar la tabla de verdad para simplificar la lógica, y perdón por no dibujar la lógica) aquí está el solución
Y aquí está el diagrama de bloques básico de la máquina de estado/contador de secuencia arbitraria
harry svensson
daniel nguyen
QueRosaBestia
Trevor_G
daniel nguyen
daniel nguyen
Trevor_G
Trevor_G
marcus muller
marcus muller
marcus muller
mitu raj
daniel nguyen
daniel nguyen
Paebbels
Trevor_G
QueRosaBestia