¿Cómo puedo leer una gran variedad de interruptores con algún microcontrolador?

2

Alguien me ha preguntado si podría o no hacer algo de programación en una gran variedad de interruptores analógicos (algo así como 18 x 16).

Me gustaría conectar una serie de conmutadores analógicos (ya saben, conmutadores de activación / desactivación) que están en un patrón de cuadrícula con filas y columnas para que pueda comprender el estado de todos los conmutadores en un solo momento y hacer algo con el código en base a ello.

Me doy cuenta de que los microprocesadores tienen GPIOs limitados, necesitaría 288 puertos para leer tantos switches. ¿Qué es un circuito que puedo usar para reducir la cantidad de puertos a algo más manejable, como menos de 48?

    
pregunta The Doc

3 respuestas

2

Para su ejemplo de una matriz de 18x16, necesitará un máximo de 34 líneas GPIO. Un lado se configurará como salidas push-pull y el otro como entradas.

Aquí hay una matriz más pequeña como ejemplo:

Usaremoslascolumnascomoentradasylasfilascomosalidas.Inicialmente,establezcatodaslassalidasbajas.

Configurelasentradasdecolumnaparausarresistenciasdesplegablesinternas,osuministrelasexternas(porejemplo,100K).

Alleerlamatriz,unoporunocambiaunodelospinesdelafilaalto.Luegomirelospinesdelacolumnayveasialgunoesaltoenlugardebajo(debidoalosdespliegues).

Porejemplo,siSW2estáhabilitado,entoncesCol1seráaltosolocuandoRow2seaalto.

Losdiodosevitanlaretroalimentacióncuandoselanzanmúltiplesinterruptores(gracias,Tut).

Puedeguardarotros12pinesutilizandoundecodificadorde4a16líneascomoel 74HCT7514 para controlar las salidas de la fila, por lo que ahora necesita solo 22 pines GPIO para leer los 288 interruptores.

    
respondido por el tcrosley
0

Su mención de los interruptores "analógicos" es engañosa. Aparentemente desea leer una matriz de conmutadores de palanca de 18 x 16. Deberías haber dicho esto por adelantado.

Sí, en el caso de fuerza bruta, esto requeriría 288 líneas de entrada al microcontrolador. Sin embargo, puede hacer algo llamado multiplexación . Ya que sus interruptores están dispuestos físicamente en un patrón de 18 x 16, y eso es casi óptimo de todos modos, usted los organiza eléctricamente en una matriz X-Y. Esto solo requiere 18 + 16 líneas en lugar de 18 x 16 líneas.

Digamos que tienes 18 columnas y 16 filas. Cada uno de los 18 cables de la columna está conectado a un lado de los interruptores en su columna. Las líneas de fila están conectadas a los otros lados de los interruptores en su fila. Al encender un interruptor, por lo tanto, se corta una línea de columna en una línea de fila.

Dado que 16 es un buen número de bits para leer al mismo tiempo, haremos una secuencia a través de las columnas. Imagine que el firmware eleva una de las líneas de columna a la vez, con descensos débiles en las líneas de fila. Si un interruptor está activado, elevará su línea de fila cuando se active su línea de columna. Las secuencias de firmware a través de las líneas de columna, y lee las líneas de fila por separado para cada columna.

Esa es la idea básica, pero no funciona de forma eléctrica, al menos no si más de un interruptor podría estar encendido a la vez. Los interruptores funcionan en ambos sentidos. Si un interruptor está activado, su línea de fila se eleva cuando se activa su columna. Sin embargo, cualquier otro interruptor cerrado en esa fila ahora eleva su línea de columna, lo que puede aumentar otras líneas de fila, etc.

La solución es hacer que los switches sean unidireccionales. Esto se hace poniendo un diodo en serie con cada uno. El diodo permite que un interruptor cerrado aumente su línea de fila cuando su línea de columna es alta, pero hace que sea imposible levantar una línea de fila desde una línea de columna alta, independientemente del estado del interruptor.

    
respondido por el Olin Lathrop
-2

No está claro lo que necesita, pero supongamos que necesita cambiarlos, 0 para encendido, 1 para apagado. Por lo tanto, necesitará un expansor de IO, como PCA9500 ( enlace ) y tendrá que operarlos por comunicación , tal vez I2C.

La pregunta es, ¿por qué microcontrolador? ¿Por qué no los dispositivos IO de National Instruments? ¿O algún controlador IO industrial? ¿Por qué desarrollar algo que alguien más ha hecho mejor de lo que nunca lo harás?

    
respondido por el Gregory Kornblum

Lea otras preguntas en las etiquetas