9 votos

¿Cómo se pueden conectar 16 botones con sólo 8 alambres?

Aquí está el producto. Entiendo la idea: estos 16 botones de utilizar una matriz de 4x4. 4 líneas para las filas, 4 líneas para las columnas, y tenemos 8 cables.

enter image description here

Pero:

  1. Cómo puede este trabajo sin ningún tipo de multiplexor ?

  2. Este puede detectar con precisión las prensas de varios botones? Incluso si los botones de uso de la misma fila o en la misma columna? Ejemplo: botones en la posición (2,2) (2,3), (3,2), y (3,3) presiona al mismo tiempo.

  3. ¿Cómo funciona?

23voto

RelaXNow Puntos 1164
Cómo puede este trabajo sin ningún tipo de multiplexor?

No. El teclado de la junta parecen tener interruptores, tal vez con algunos diodos que no pueden ver. Sin embargo, la izquierda junta parece que tiene un procesador. Casi sin duda, la multiplexación es el que se realiza en el firmware.

La multiplexación algoritmo funciona algo como esto:

La unidad de una fila alta, los otros bajo.

Habilitar pasivo jalones en la columna de las líneas.

Ver que la columna de líneas de alta. Los botones situados en las intersecciones de los de la columna de líneas con el que afirmó línea de fila se presiona. Los otros botones de la fila son liberados.

Repita el paso uno, la afirmación de la fila siguiente en la secuencia.

El proceso anterior se repite lo suficientemente rápido para que todos los botones se comprueban dentro de un tiempo que todavía se siente instantáneo para un observador humano. El límite humano de "instantánea" en este contexto es de alrededor de 50 ms. Incluso un final bajo microcontrolador puede escanear un teclado 4x4 en mucho menos tiempo que eso.

Este puede detectar con precisión las prensas de varios botones?

Probablemente sí. Una forma es poner un diodo en serie con cada botón. Esto podría ser en la parte inferior de la tabla se muestran. Con los diodos, el algoritmo descrito anteriormente funciona.

Otra manera es poner resistencias en serie con las líneas y la medición de su tensión analógica. Incluso con múltiples botones de cortocircuito múltiples fila/columna, líneas juntas, que con el tiempo puede averiguar que se pulsan los botones. Esto requiere entradas a/D en el micro, no sólo de las entradas digitales como cuando los diodos se utilizan.

9voto

SchighSchagh Puntos 116

Sin diodos... obtendrás fantasma rectángulos.

Por ejemplo, en tu ejemplo (2,2) (2,3), (3,2), y (3,3); eligió un irónico ejemplo, mediante la elección de un rectángulo. Si usted realmente prensa de los cuatro, va a trabajar. Pero si se pulsa cualquiera de las tres esquinas del rectángulo, el cuarto de la esquina también parecen ser presionado, a pesar de que no.

Que teclado es claramente la intención de teclado de entrada de datos, donde el usuario convención es uno de pulsación de tecla a la vez. Te aviso que no hay "shift" en el teclado, en una estación de servicio de la tarjeta de crédito de la entrada de teclado, por ejemplo.

Sin embargo, si usted hizo S1 la tecla mayús, y S3 un alt-tecla mayús tal que los usuarios puedan razonablemente pulsada mientras pulsa también S13, entonces S15 parecería también ser presionado.

1voto

ShaneB Puntos 1384

Aquí es cómo hacerlo sin exploración continua:

  • Establezcan todos los controladores de alta
  • Permiten pasivo jalones en las líneas de recepción
  • Interrupción de cambio de pin set para detectar una de las líneas de alta (o cambio de nivel)
  • Cuando esto sucede, habilitar exploración de teclado, decir cada 10ms
  • Escanear normalmente y procesar pulsaciones de teclas
  • Después de un tiempo sin acontecimientos, detener el escaneo y reiniciar en el primer punto de la bala

0voto

He hecho esto con el Lenguaje ensamblador en desnudo de microcontroladores Atmel AVR.
Para simplificar: Teclado Filas: el uso de los Pines de Arduino 4,5,6 y 7 (AVR pines PD4, PD5, PD6 y PD7) Teclado Columnas: el uso de los Pines de Arduino 8, 9, 10 y 11 (AVR pines PB0, PB1, PB2 y PB3) Hacer Fila de pines de entradas con pull-ups habilitado. Hacer de la Columna de los pines de Salida y la de salida de ceros para ellos. Habilitar el Cambio de Pin Interrupciones en toda la fila y columna de los pines. http://playground.arduino.cc/Main/PinChangeInterrupt Pulsando un botón en el teclado de tirar de una Fila de pines baja. La rutina de interrupción debe leer la fila de pines y encontrar que el pin es baja. La parte superior de 4 bits deben ser tres y uno a cero. Si utiliza un uint8_t 8 bits variable se puede dividir por 16 o (var >> 4) para poner el 4 bits en la parte inferior de los bits del número. Usted puede utilizar un bit a bit O | operación con 240 para establecer la parte superior de 4 bits a 1 y un bit a bit NO ~ operación para invertir todos los bits de modo que sólo tiene un conjunto de bits que representa la fila al pulsar el botón. Guardar este número como 0, 1, 2 o 3.
Cambiar la configuración de los pines:
Hacer de la Columna de pines de entradas con pull-ups habilitado. Hacer Fila de pines de Salida y la de salida de ceros para ellos. Lea la columna de pines y encontrar que el pin es baja. Hacer una manipulación similar con este valor, excepto que usted no tiene que cambiar el número a la derecha. Después de la var ^ 240 y ^var tiene un solo bit para representar la columna de la pulsación de la tecla. Recuerda deshabilitar las interrupciones antes de volver a configurar los puertos como es probable que desencadenar interrupciones no deseadas. Puede que tenga que borrar la interrupción banderas al salir de la rutina de interrupción para evitar la duplicación de manejo de la interrupción.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X