¿Un buen circuito para una gran cantidad de entradas de botón?

Estoy planeando construir un "control remoto universal" apto para niños para que los niños puedan encender y apagar una miríada de dispositivos controlados por IR con una o dos pulsaciones fáciles...

El control remoto tendrá quizás 20 botones grandes y gruesos que, cuando se presionan, envían múltiples señales IR a todos los dispositivos necesarios para, por ejemplo, encender el canal para niños, configurar la Wii, etc., etc.

La mayoría de los botones se distribuirán en un patrón de cuadrícula, pero algunos se pueden usar para arriba/abajo/izquierda/derecha, entrar, etc.

Usaré un Arduino Pro Mini o Uno como uC.

¿Hay alguna forma inteligente de conectar estos botones? ¿Un circuito tipo rejilla? ¿Entradas analógicas con diferentes resistencias entre cada botón? ¿Un IC que facilitará el trabajo?

Respuestas (3)

Básicamente los enumeraste a todos.

  1. Una Matriz de x filas y y columnas. Necesita pines x+y.

    Matriz

  2. IC de expansión GPIO digital, preferiblemente con interrupción. I2C, SPI, incluso Serial están disponibles. Los pines de interrupción le permiten leer en la interrupción en lugar de sondear. Necesita tener hardware I2C/SPI/UART o agregar código de software. Este enfoque se usa principalmente si necesita mucho más GPIO del que tiene disponible en el microcontrolador principal. En ese momento, básicamente todavía está usando las opciones 1, 3 y 4, o el botón directo por pin.

  3. Escalera de resistencia. Necesita un ADC y un sondeo constante. Es mejor dividirse en algunos grupos similares en múltiples canales ADC, pero puede hacer uno grande de 20 botones si realmente lo necesita.

    ingrese la descripción de la imagen aquí

  4. Charlieplexing . Como una matriz multiplexada (#1), pero con norte × ( norte 1 ) dónde norte es el número de pines utilizados. Requiere tantos diodos como botones, por lo que está cambiando el número de pines por diodos. Sin embargo, podrías usar LED.

ingrese la descripción de la imagen aquí

En su mayor parte, el #1 es el método más común. Cada teclado o teléfono de tonos que haya usado alguna vez, 1000 a 1, lo habría usado. Demonios, incluso los teléfonos celulares lo usan (específicamente, el Nokia 5110 que conozco lo usa). Para 20 botones, una matriz 4x5 solo tomará 9 pines, más que suficiente.

El uso de diodos duplica el número de botones que se pueden admitir en comparación con no tener diodos, pero incluso sin diodos se pueden admitir más botones que con una matriz estándar. La gran limitación con este estilo de multiplexación es que no hay un solo estado en el que se puedan colocar pines de E/S que garanticen que presionar cualquier botón hará que algo cambie.
@supercat sí, requiere sondeo.
Si no se sabe qué clave debe procesarse a continuación, se requiere sondeo. Si la aplicación permite ignorar todas las teclas hasta que se presiona una tecla en particular (o una tecla de ciertos conjuntos pequeños), uno puede dejar los pines configurados para detectar esa/esas teclas.
También es posible combinar #1 y #3: use una escalera de resistencias entre los pines 1,3,5 y GND, y una escalera de resistencias separada entre 2,7,6,4 y un pin ADC. Luego otra resistencia entre ese pin ADC y +5V. Deberá averiguar qué resistencias va a utilizar y qué resultado obtendrá, para distribuir las respuestas de la manera más uniforme posible entre 0 y 5 voltios, optimizadas para que la diferencia más pequeña sea la mayor posible. Construya su circuito y mida los resultados.

Texas Instruments fabrica un codificador de teclado i2C . Montaje superficial. No hay nada más simple que eso.

¿Un IC que facilitará el trabajo?

Definitivamente.

El controlador de teclado y expansor de E/S LM8330 es un dispositivo dedicado diseñado para liberar a un procesador host de la exploración de un teclado con direcciones de matriz y para proporcionar funciones de entrada/salida programables host flexibles y de propósito general. Se proporcionan tres salidas de temporizador de modulación de ancho de pulso (PWM) independientes para la modulación dinámica del brillo del LED.

Se comunica con un procesador host a través de una interfaz serial ACCESS.bus compatible con I 2 C. Puede comunicarse en modo estándar (100 kHz) y modo rápido (400 kHz) solo en modo esclavo.

Con esto, probablemente pueda salirse con la suya usando un ATtinyX5 en lugar de un ATmega.