Aquí está el producto. Entiendo la idea: estos 16 botones usan una matriz de 4x4. 4 líneas para filas, 4 líneas para columnas y tenemos 8 cables.
Pero:
¿Cómo puede funcionar esto sin ningún multiplexor?
¿Puede esto detectar con precisión las pulsaciones de varios botones? ¿Incluso si los botones usan la misma fila o la misma columna? Ejemplo: botones en la posición (2,2) (2,3), (3,2) y (3,3) presionados al mismo tiempo.
¿Como funciona?
¿Cómo puede funcionar esto sin ningún multiplexor?
no lo hace La placa del teclado parece tener solo interruptores, tal vez con algunos diodos que no podemos ver. Sin embargo, la placa izquierda parece tener un procesador. Es casi seguro que la multiplexación se realiza en el firmware.
El algoritmo de multiplexación funciona de la siguiente manera:
El proceso anterior se repite lo suficientemente rápido como para que todos los botones se verifiquen en un tiempo que aún parece instantáneo para un observador humano. El límite humano de "instantáneo" en este contexto es de unos 50 ms. Incluso un microcontrolador de gama baja puede escanear un teclado 4x4 en mucho menos tiempo que eso.
¿Puede esto detectar con precisión las pulsaciones de varios botones?
Probablemente si. Una forma es poner un diodo en serie con cada botón. Esos podrían estar en la parte inferior del tablero que muestres. Con los diodos, el algoritmo descrito anteriormente simplemente funciona.
Otra forma es poniendo resistencias en serie con líneas y midiendo su voltaje analógico. Incluso con varios botones que acortan varias líneas de fila/columna, eventualmente puede averiguar qué botones se presionan. Esto requiere entradas A/D en el micro, no solo entradas digitales como cuando se usan diodos.
Sin diodos... obtendrás rectángulos fantasma.
Por ejemplo, en su ejemplo (2,2) (2,3), (3,2) y (3,3); elegiste un ejemplo irónico al elegir un rectángulo. Si realmente presiona los cuatro, funcionará. Pero si presiona cualquiera de las tres esquinas del rectángulo, la cuarta esquina también parecerá estar presionada, aunque no lo esté.
Ese teclado está claramente destinado a la entrada de datos del teclado, donde la convención del usuario es presionar una tecla a la vez. Observa que no hay teclas de "cambio" en el teclado de entrada de una tarjeta de crédito de una gasolinera, por ejemplo.
Sin embargo, si convirtió S1 en una tecla de mayúsculas y S3 en una tecla de mayúsculas y minúsculas, de modo que los usuarios puedan razonablemente mantener presionadas ambas mientras presionan S13, entonces S15 también parecería estar presionado.
He aquí cómo hacerlo sin escaneo continuo:
He hecho esto con lenguaje ensamblador en microcontroladores Atmel AVR desnudos.
Para simplificar: Filas del teclado: use los pines Arduino 4,5,6 y 7 (pines AVR PD4, PD5, PD6 y PD7) Columnas del teclado: use los pines Arduino 8, 9, 10 y 11 (pines AVR PB0, PB1, PB2 y PB3 ) Realice entradas de pines de fila con pull-ups habilitados. Hacer salida de pines de columna y salida de ceros para ellos. Habilite las interrupciones de cambio de pin en todos los pines de fila y columna. http://playground.arduino.cc/Main/PinChangeInterruptAl presionar un botón en el teclado, se bajará un pin de Fila. La rutina de interrupción necesita leer los pines de las filas y encontrar cuál es el pin bajo. Los 4 bits superiores deben ser tres unos y un cero. Si usa una variable de 8 bits uint8_t, puede dividirla por 16 o (var >> 4) para colocar los 4 bits en los bits inferiores del número. Puede utilizar un OR bit a bit | operación con 240 para establecer los 4 bits superiores en 1 y una operación NOT ~ bit a bit para invertir todos los bits, de modo que solo tenga un bit establecido que represente la fila en la que se presionó el botón. Guarde este número como 0, 1, 2 o 3.
Cambie la configuración de pines:
Haga entradas de pines de columna con pull-ups habilitados. Hacer salida de pines de fila y salida de ceros para ellos. Lea los pines de la columna y encuentre qué pin está bajo. Haz una manipulación similar con este valor, excepto que no tienes que desplazar el número a la derecha. Después de var ^ 240 y ^var, tiene un solo bit para representar la columna en la que se presionó la tecla. Recuerde deshabilitar las interrupciones antes de reconfigurar los puertos, ya que es probable que desencadene interrupciones no deseadas. Es posible que deba borrar las banderas de interrupción al salir de la rutina de interrupción para evitar el manejo de interrupciones duplicadas.
TonyM
bajo
marcelo espinoza vargas
bajo
marcelo espinoza vargas
TonyM
bajo
TonyM
bajo
MOV A,@0X11;disable WDT
no es particularmente simple de entender cómo funciona un teclado con varios botones presionados al mismo tiempo...Gábor
mateo blanco
nick t
dormilón
chris h
woliveirajr