Diseñar un 8 - 6 - 4 - 2 - 0 - 1 - 3 - 5 - 7 - 9… Contador

3

Diseñe un contador: 12-10-8-6-4-2-0-1-3-5-7-9-11 utilizando 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 el 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 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 siempre son 1 para los números impares. En cuanto a 3 bits a la izquierda, son simétricos. Así que mi idea para este problema es después de contar de 8 a 0, el LSB cambiaría de 0 a 1 y comenzará a contar (usando 3 o 4 D-Flip-Flop y puertas lógicas). Pero después de escribir la siguiente tabla de estados, me enfrento a la forma de obligar a 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 (pantalla 8, el estado siguiente es 6)
  0 1 1 0 ------------ 0 1 0 0 (pantalla 6, el siguiente estado es 4)
  0 1 0 0 ------------ 0 0 1 0 (pantalla 4, el siguiente estado es 2)
  0 0 1 0 ------------ 0 0 0 0 (pantalla 2, el estado siguiente es 0)
  0 0 0 0 ------------ 0 0 0 1 (muestra 0, cambia LSB a 1 y activa el conteo ascendente)

El problema aquí es que el estado 0 0 0 0 se usa dos veces (una vez para forzar que el número inicial sea 8 y una vez para cambiar LSB en 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 tus respuestas.

Mi circuito funciona, se basa en el circuito de @Trevor Gracias a todos por sus ideas increíbles.

    
pregunta Daniel Nguyen

6 respuestas

7

Parece que se espera que resuelvas 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 del conteo 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, simplemente se presenta como el LSB.

Como tal, no es necesario contar hacia abajo y luego hacia arriba. Un clásico contador síncrono de tipo D con algunos inversores XOR será suficiente para la secuencia de conteo.

simulator.io

Las puertas adicionales en la salida detectan la condición de transporte que obliga a las entradas a D-Type a regresar al número de inicio.

Tenga en cuenta también, he invertido el flip-flop inferior. Dado que resulta que su condición inicial para su secuencia 12 .... 11 es en realidad 1 en el contador, no 0, esto le brinda efectivamente la condición de inicio que desea, al menos en el simulador. También agregué una línea de pulso de restablecimiento solo por si acaso.

Por supuesto, otra columna de D-Types bloqueada en el otro borde del reloj en la salida lo haría aún mejor.

    
respondido por el Trevor_G
10

Dado que es una tarea, no voy a trabajar a través de la lógica. Sin embargo, en todas estas preguntas, puede reducirlo a un circuito con dos pasos:

  1. Tienes un contador binario de 0 a n-1 , donde n es el número de estados requeridos (13 en tu caso). Este puede ser un contador binario síncrono bog estándar que comienza en 0000 y luego, cuando alcanza n , se restablece a 0000.

  2. Un circuito lógico combinacional que mapea los valores del contador a los valores de salida. La estructura de esto puede ser puertas lógicas discretas, el circuito para el cual se puede derivar usando Karnaugh Maps, un mapa por bit en la salida. Alternativamente, podría ser una ROM simple con la asignación almacenada en ella, donde las líneas de dirección van al contador 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.

    
respondido por el Tom Carpenter
4

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 el estado de encendido / apagado de uno de su 1er siete segmentos LED, y un segmento representa los dos segmentos que necesita activar para mostrar un 1 en los 10ers.

En efecto, eso sería solo ocho registros de desplazamiento de 13 etapas en paralelo. Los registros de turnos son triviales de implementar usando FFs D, así que, aquí tienes:

simular este circuito : esquema creado usando CircuitLab

El problema sería obtener los valores iniciales en ese registro de desplazamiento, pero simplemente podría declarar que el registro tiene los valores de restablecimiento correctos y terminar con él. Nada dice que no puedes.

Por supuesto, 8 · 13 = 104 los registros de turnos podrían no ser hermosos , pero nada en la asignación dice que hermosos es mejor que flexible , rápido o fácil .

  • Flexible : con este circuito, puede implementar cualquier secuencia de 13 pasos en un registro de desplazamiento.
  • Fácil: ya que trabaja directamente con el estado activado / desactivado del segmento 7 pantallas, evitas la sobrecarga de tener que convertir cualquier cosa de Una representación de un número, a otra.
  • Rápido: La velocidad de reloj de este está limitada solo por el tiempo de un solo flip flop, y eso significa que esta implementación es probablemente la más rápida de todas Implementaciones que involucren al menos un D-flip flop. No ese reloj la velocidad es importante para el problema en cuestión, pero nuevamente, obtienes la esencia, la declaración de su problema no define los objetivos de diseño.

Ya que este es un problema puramente académico, siéntase libre de optimizar este infierno.

    
respondido por el Marcus Müller
4

Puedes buscar simplificaciones.

Por ejemplo, puede encontrar que parte del contador simplemente cuenta hacia arriba y hacia abajo en una secuencia directa; hay patrones (incluso chips lógicos TTL) que puedes usar como contadores rectos hacia arriba-abajo.

Para esa parte del contador, simplemente necesita detectar las dos condiciones finales y establecer un bit que controle la función de conteo arriba / abajo.

Para el bit restante, ¿puede identificar un patrón o regularidad en su salida? ¿Se deriva fácilmente del contador arriba / abajo y / o su lógica de control?

A menudo, esto es más trabajo que un simple contador que maneja una tabla de búsqueda, pero probablemente produce una solución más pequeña.

    
respondido por el Brian Drummond
3

Para ampliar la excelente respuesta de Tom:

Si el problema es construir un circuito con los menos elementos lógicos posibles, es posible que desee evitar ese contador 0 ... 12 (que deberá ser un contador de cuatro bits), pero en su lugar use un registro de desplazamiento de realimentación lineal para genera los diferentes estados y trata el hecho de que no son secuenciales en la lógica combinatoria.

Este fue un truco común que hiciste cuando estabas haciendo cosas como tomar muestras de sonido de una ROM para generar una señal periódica en un momento en que la propiedad de la oblea de unas cuantas medias sumas te perjudicaría económicamente. Es muy posible que todavía encuentre ese truco en los circuitos integrados modernos que necesitan realizar tareas similares (es decir, generación de una secuencia de salida periódica) a una velocidad muy alta o con un presupuesto energético muy ajustado.

Honestamente, 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 turno de \ $ N \ $ etapas, encontrar un Linear Feedback Shift Register que produce un ciclo de \ $ 2 ^ N -1 \ $ estados diferentes. Esto realmente tiene muchas aplicaciones (especialmente en comunicación digital), y es muy probable que encuentres estas más adelante en tus estudios.

respondido por el Marcus Müller
1

UTILIZANDO D FLIP FLOP ... Diseñar este contador es muy fácil ... Debe 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 disculpe por no dibujar la lógica) Aquí está la solución

Yaquíestáeldiagramadebloquesbásicodelamáquinadeestados/contadordesecuenciasarbitrarias

    
respondido por el Paran Bharali

Lea otras preguntas en las etiquetas