40 entradas binarias a salida de 6 bits número codificado en binario [cerrado]

-2

Soy nuevo en electrónica digital. Quiero encontrar una unidad de circuito que pueda convertir 40 entradas binarias en números binarios de 6 bits, pero no puedo encontrar ningún circuito que pueda hacerlo. Creo que debo hacer usando codificador, mux pero apilado. ¿Alguien puede ayudarme?

    
pregunta burakim

4 respuestas

0

Probablemente una de las opciones más baratas y sin duda una de las más rápidas sería utilizar un CPLD como esto Xilinx uno. El paquete de 64 pines debería ser suficiente, pero sugiero el paquete de 100 pines para dejar algo de espacio. Tan bueno como 5ns de respuesta pin a pin, solución de chip único y solo $ 2.86 cantidad 1. Puede decidir qué función de salida (contar los 1, contar los 0, el codificador de prioridad, el codificador de prioridad de entrada invertida o lo que sea) en cualquier momento y reprogramalo

A diferencia de la mayoría de los FPGA, estas piezas de CPLD contienen una memoria flash interna no volátil, por lo que no necesita un componente externo de almacenamiento de programas.

Desafortunadamente, la curva de aprendizaje es un poco empinada para los 7G bytes requeridos (o lo que sea) de software (gratuito), el HDL (Verilog o VHDL) o el método esquemático que usaría para describir la funcionalidad, y necesita una Programador JTAG-USB (hay clones baratos disponibles), pero una vez que lo aprendas, probablemente encontrarás muchas otras aplicaciones.

    
respondido por el Spehro Pefhany
1

Un codificador de prioridad emitiría un número binario que representa la entrada activa "más significativa", es decir, si las entradas 1,12 y 24 estuvieran activas, un codificador de prioridad emitiría 24.

Hay IC de codificador de prioridad de 8 bits, como el 74LS148 que se pueden interconectar para manejar más de 8 bits.

    
respondido por el Peter Bennett
1

Supongo que desea activar una de las 40 entradas, como los interruptores, y obtener un número binario que identifique qué entrada está activa, ¿no?

Suponiendo que la forma "más simple" es usar codificadores de prioridad. El 74HC148 es probablemente lo que quieres. La hoja de datos de TI enlace muestra cómo extender de 8 bits a 16. Necesitará Para ampliar aún más esto a 40 bits. Esto requerirá 5 74HC148 para el primer nivel de codificación, luego 3 74HC30 para proporcionar los 3 LSB y otro 74HC148 para codificar los 3 bits superiores. Esto requerirá, por supuesto, un total de 9 IC de 16 pines.

    
respondido por el WhatRoughBeast
1

Conecte las 40 entradas a los cinco registros de desplazamiento paralelo a serie de 8 bits (8 entradas cada uno). Los registros de desplazamiento pueden ser en serie. Léalos en un microprocesador simple como el AVR en un Arduino. Puede "golpearlos" con una salida digital para sincronizar los registros de desplazamiento y una entrada digital para recolectar los bits a medida que ingresan. Luego encuentre los bits que se encuentran en el estado lógico que busca con un código simple. El registro de los datos probablemente lleva alrededor de 40 microsegundos en un Arduino Uno de 8 MHz, por ejemplo ($ 11 o más, creo que en eBay). En una serie M ARM Cortex, más como 4 microsegundos. Consulte 74HC165 o 74LV165.

¿Se supone que la salida de 6 bits es una representación entera de una sola línea de entrada activa? Puede contar los relojes hasta que encuentre e ingrese lo que está activado (o ninguno). Probablemente guarde los datos y luego revise los cinco bytes y luego calcule el valor. Si la velocidad es importante, una tabla de consulta para cada byte será más rápida. Creo que hay una forma inteligente de encontrar el valor de 6 bits con lógica y cambio que es óptimo. Algo así para 8 bits a la vez: x es el byte que se está probando. Números en hexadecimal.

si x = 0 regresa (el valor que desea para ninguna de las entradas confirmadas. ¿Quizás 0?)
n = 0
si x AND F0 == 0 entonces n = 4; Desplazar x a la izquierda por 4 bits
si xY 3F == 0 entonces n = n + 2; Desplazar x a la izquierda por 2 bits
si x AND 7F == 0 entonces n = n + 1
devuelve n

Agregue 8 a n para el segundo byte, 16 para el tercero, 24 para el cuarto y 32 para el quinto.

Para 32 bits a la vez, va así.

FFFF0000 n = 16 turno 16
FF000000 n = n + 8 turno 8
F0000000 n = n + 4 turno 4
3F000000 n = n + 2 shift 2
7F000000 n = n + 1

Esto cuenta desde el bit de orden superior hasta el bit de orden bajo (llamado conteo de los ceros iniciales). Los cambios son de bajo a alto y asume que los 0 se desplazan a medida que los datos se desplazan. Es solo una idea, ya que puede hacer varias cosas con la forma en que ordena los datos a medida que se ingresan. No hay garantía de que lo haya hecho bien, sino un punto de partida.

Tenga en cuenta que en un ARM, puede cargar 4 bytes a la vez y tiene un cambiador de barril que hará cambios arbitrarios en un ciclo. En ARM verdadero (no en el pulgar) todas las instrucciones son condicionales, por lo que if + add + shift es una sola instrucción. Entonces, todo el asunto es de 9 o 10 instrucciones largas. Si no necesita una solución de hardware pura, pruebe los 5 chips más un Arduino y algún código.

Si necesita ayuda, un foro de Arduino (o el procesador que use) o el canal IRC puede ser excelente. Simplemente proporcione el número de referencia, como 75HC165 y una descripción de una línea, y la gente sabrá lo que está tratando de hacer y podrá dar sugerencias más detalladas para adaptarse a su implementación.

Las personas con más experiencia pueden encontrar una solución más económica con un chip de tipo de matriz de compuerta.

    
respondido por el C. Towne Springer

Lea otras preguntas en las etiquetas