6 botones, 2 cables, 1 microcontrolador

0

En primer lugar, probablemente debería mencionar que soy un principiante cuando se trata de electrónica.

Estoy planeando agregar algunos botones a un controlador pero tengo espacio limitado para los cables. Solo cabrán 2 de los cables que tengo (3 con una pequeña modificación, tal vez). Me gustaría que al menos 6 botones (2 grupos de 3) se conecten al microcontrolador utilizando solo estos cables. Hay un montón de pines digitales y analógicos disponibles.

¿Cuáles son mis mejores opciones? He leído sobre la multiplexación y el uso de un pin analógico con resistencias en los botones para dar a cada uno su propio voltaje, pero ambos solo permiten presionar un botón a la vez. Lo ideal es poder presionar al menos dos botones al mismo tiempo (uno de cada grupo).

    
pregunta James Coyle

4 respuestas

5

La técnica estándar utilizada en los controles remotos cableados de los reproductores de CD antiguos y como tal utiliza una serie de resistencias. Los resistores se eligen para proporcionar un cambio de caída de voltaje aproximadamente igual para cada pulsación única del botón.

simular este circuito : esquema creado usando CircuitLab

Tenga en cuenta que este esquema de conexión no permite que se ingresen valores ilegales al convertidor A / D. Si se presiona más de un botón, el botón superior tiene prioridad y los botones restantes se ignoran.

Tenga en cuenta que los valores de resistencia mostrados NO son óptimos. El cálculo de esos valores de resistencia se deja como un ejercicio para el estudiante.

[Editar]

El póster original quiere dos conjuntos independientes de 3 botones cada uno. Eso también es bastante fácil, pero la desventaja es que ahora toma DOS líneas del microcontrolador en lugar de una sola línea más tierra.

simular este circuito

En uso, configure uno de los pines de E / S HI, luego lea el voltaje en el otro pin. Luego invierta las dos clavijas: configure la otra clavija HI, lea el voltaje en la primera clavija.

Es necesario tener en cuenta la caída de voltaje del diodo cuando se calculan los valores de resistencia para lograr los voltajes deseados. La ventaja de esto es que está buscando solo 3 (4) niveles de voltaje discretos, lo que hace que sus voltajes de umbral tengan MUCHO margen de maniobra y aún le brinden una detección precisa de la presión de los botones.

De nuevo, los valores de la resistencia NO son óptimos. Pida ayuda si necesita ayuda para calcularlos.

    
respondido por el Dwayne Reid
3

Hay algunas maneras.

Lo más simple es usar 7 resistencias en serie, con las primeras 6 duplicando su valor y la última igual que la 6a. Así que 1-2-4-8-16-32-32 por ejemplo. Luego, conecte el botón para hacer un cortocircuito en una resistencia cada uno, excepto el 'superior'. Entonces tiene un valor único para cada combinación de botones que puede muestrear con un convertidor A / D. Tenga en cuenta que solo necesita dos cables para el teclado (suponiendo que pueda soldar la resistencia a través de las teclas / botones). La séptima resistencia puede sentarse cerca del microcontrolador.

También puede poner todos los botones en paralelo, con una resistencia en serie que duplica el valor de cada botón. Cree un divisor de voltaje con los botones y una resistencia que le ofrezca el mejor rango de voltaje para los valores de resistencia que eligió para los botones. Sin embargo, esto da un "rango dinámico" y una "resolución" peores en comparación con el enfoque anterior, pero un poco más de matemáticas solo para comprender a continuación:

Con 6 botones, esto le da (por ejemplo) 10,20,40,160,320 y 640 ohmios en serie con una resistencia de 640ohmios. La secuencia binaria significará que cada combinación dará un valor diferente, no trivial, pero deberías poder crear una tabla de búsqueda con los 64 valores.

Tenga en cuenta que necesita usar una entrada analógica con suficiente resolución para resolver el valor más alto y más bajo y las dos coincidencias más cercanas.

El valor más alto es 640ohm, el más bajo es de aproximadamente 5 ohmios. 1: 100 o menos, no hay problema.
La diferencia más pequeña será 10 // 320 = 9.48ohm y 10 // 640 = 9.69ohm

Entonces, deberías poder detectar una diferencia de 0,3 ohmios en una escala de 640 ohmios, o 1: 2100 aproximadamente. Esto significa que necesitará al menos un convertidor A / D de 12 bits y poco ruido.

Si la resolución y el rango dinámico de su A / D no son suficientes, puede probar algunos trucos con diodos y alternar el signo de voltaje (positivo / negativo) usando dos salidas digitales. Necesitarías tres cables para ir a los botones.
Esto le daría dos juegos de 3 botones, lo que significa una resolución mucho mejor, pero tendría que lidiar con una configuración de software más compleja para enfrentar este escenario. Aunque no imposible. Con 10, 20 y 40 ohmios formando un divisor de voltaje con una resistencia de 40 ohmios, obtendría los siguientes voltajes para una fuente de 5V (ignorando la caída de diodo aquí):

R1      R2      R3      V
1E+18   1E+18   1E+18   5.00
1E+18   1E+18   40      2.50
1E+18   20      1E+18   1.67
1E+18   20      40      1.25
10      1E+18   1E+18   1.00
10      1E+18   40      0.83
10      20      1E+18   0.71
10      20      40      0.63

Dicho esto, si vas a utilizar 3 cables de todos modos, una tercera forma sería para ChaliePlex los botones. Esto es un poco más complejo en cuanto a software, pero lo bueno es que no necesita una entrada analógica. Google 'Charlieplex 6 botones' para más información.

    
respondido por el RJR
0

Con solo dos E / S disponibles para realizar el trabajo, puede usar una de ellas para cargar de manera amplia los estados del conmutador en un registro de desplazamiento externo de salida en serie paralelo, como un HC165, y luego usar la otra E / S para sincronizar alternativamente los datos adquiridos a través del registro y leer los datos entre los relojes cambiando la E / S de salida a entrada y utilizando un diodo para la dirección.

Hacerlo de esa manera te permitirá presionar cualquier número de botones a la vez y leerlos todos sin interacción entre ellos.

    
respondido por el EM Fields
0

Con solo 2 cables disponibles, puede dedicar uno de los cables a GND y el otro a un bus de 1 cable transportar tanto la potencia (cuando se transmiten 1 bits) como los datos bidireccionales (0 y 1 bits).

Luego, puede cargar los estados del interruptor en uno (pocos) chip (s) GPIO de 1 cable y enviar los datos adquiridos a través de esa línea al microcontrolador.

Cada botón requiere una resistencia de pull-up, y un diodo y un condensador pueden suministrar almacenamiento de energía local para todos los botones y chips GPIO de 1 cable.

(Esto es muy similar a la respuesta de los campos EM, excepto que esta respuesta solo usa 2 cables, incluido el cable GND).

    
respondido por el davidcary

Lea otras preguntas en las etiquetas