Cómo hacer que un botón active su dirección binaria correspondiente

6

Tengo 15 botones de salida y 4 entradas digitales. Como en la foto: ¿Cómo hago para que cada botón active su dirección correspondiente? Por ejemplo, cuando presiono s3, quiero que se envíe GND a las entradas 0 y 1. Cuando presiono s7, quiero que se envíe GND a las entradas 0,1 y 2. Tengo que hacer esto sin que un botón influya en el otro

    
pregunta Eduardo Cardoso

4 respuestas

6

De los comentarios:

  

Sí, mis entradas ya son desplegables, el problema es que con este tipo de configuración solo puedo reconocer una tecla a la vez, si activo las teclas 1 y 2 al mismo tiempo, la entrada recibirá 3.

Parece que necesita un controlador de matriz de teclado adecuado.

Figura1.El MM74C922 codificador de 16 teclas.

  • El MM74C922 y el MM74C923 (versión de 20 teclas) proporcionan toda la lógica necesaria para codificar completamente una matriz de conmutadores SPST.
  • Dispositivos de extracción en el chip.
  • No se necesitan diodos.
  • Debounce interno con un solo condensador externo.
  • "Datos disponibles" sube cuando se realiza una entrada válida.
  • La salida disponible vuelve a un nivel bajo cuando se suelta la tecla ingresada, incluso si se presiona otra. Los datos disponibles volverán a ser altos para indicar la aceptación de la nueva clave después de un período de rebote normal. Este cambio de dos teclas se proporciona entre dos interruptores cualquiera.

¡Incluso puedes detectar SW0 gracias a la señal de datos disponibles!

Figura 2. Esquema interno del MC74C922.

No podrá utilizar su disposición de interruptor de conexión a tierra común, pero se resolverán todos los demás problemas potenciales.

    
respondido por el Transistor
12

La forma más directa de hacerlo es construir una matriz de diodos:

simular este circuito : esquema creado usando CircuitLab

Los diodos de cada columna codifican directamente la "dirección" del conmutador.

Tenga en cuenta que asumo que las entradas aumentan a un voltaje positivo si no están conectadas a tierra; es decir, que generan corriente cuando están conectados a tierra. (Agregue resistencias pullup si es necesario). Si el voltaje es negativo, invierta la dirección de los diodos.

    
respondido por el Dave Tweed
8

Puede usar un par de codificadores 74LS148 como se muestra en su hoja de datos.

Tambiénhaychipsespecíficosqueescaneanlosbotonesconectadoscomounamatrizcomo 74C922

O si tiene la capacidad de programar una, una pequeña ROM o FPGA puede hacerlo.

Hay otras formas que usan muchos diodos.

Sin embargo su declaración "tiene que hacer esto sin que un botón influya en el otro" y los comentarios implican que necesita la capacidad de detectar más de un botón al mismo tiempo. Esa es una proposición completamente diferente.

En ese caso, necesitarías algún tipo de escáner de teclado. Tal vez se comunique a través de I2C como un TCA8418 .

Otra alternativa es convertir tus botones en un convertidor analógico a analógico rudimentario y transferir ese valor analógico a cualquier convertidor analógico a digital que tengas disponible. Aunque tener 16 botones usando ese método sería empujar esa técnica un poco.

ADDICIÓN

Como solo hay 15 conmutadores, otra manera de hacer esto es usar un registro de desplazamiento en lugar de una matriz. Eso significará que solo necesita tres pines en el micro y un algoritmo adecuado para manipular el registro de desplazamiento.

Tipo de unidad: serie en paralelo 74LS673: alimenta una salida baja a través del registro de desplazamiento y vuelve a leer el estado en la línea común.

Tipodelectura:paraleloenlasalidaenserie74LS674:Carguedesdelosconmutadoresenelregistrodedesplazamiento.Todoslos16conmutadoresestánconectadosa16detectores,luegotransfierenlapalabraalmicro.

Creo que lo que más me gusta es lo último, ya que puedes tomar el estado completo del interruptor en un momento dado.

Con todo esto, deberías manejar el rebote en el código.

    
respondido por el Trevor_G
2

Una solución simple es conectar un diodo de cada entrada a cada interruptor que debe tirar de esa entrada a un nivel bajo.

simular este circuito : esquema creado usando CircuitLab

Figura 1. Una sencilla disposición de diodos para codificar los botones.

Cómo funciona:

  • Al presionar SW1 se despliega IN0 solamente.
  • Al presionar SW2 se despliega solo IN1.
  • Al presionar SW3 se despliega tanto IN0 como IN1.
  • Presionando SW4 baja IN2.
  • etc.
respondido por el Transistor

Lea otras preguntas en las etiquetas