¿Cómo manejar un mux analógico cd4051 con botones como selector de canal?

Me gustaría controlar un multiplexor analógico cd4051 como un interruptor 8-1 con botones que actuarán como selector de canal (1-8) Sé cómo hacerlo con Arduino pero hay alguna otra forma de leer el estado de 8 botones y proporcionar una palabra de 3 bits como señales digitales separadas?

Un CPLD sería una forma de hacerlo.

Respuestas (4)

Si desea hacerlo con interruptores momentáneos, puede hacerlo con un par de paquetes IC (flip-flops o compuertas cruzadas) para tener un pestillo SR de 3 bits y luego activar y desactivar los pestillos con diodos o compuertas. de tal manera que al presionar cualquier interruptor se forzará la salida de 3 bits al estado deseado.

Necesitaría 6 resistencias en total y 3 diodos por interruptor, para un total de 24 diodos, o podría usar 6 puertas NAND de 8 entradas acopladas en cruz y 8 resistencias (y sin diodos).

P.ej. (alrededor de 1/3 del circuito se muestra parcialmente)

esquemático

simular este circuito : esquema creado con CircuitLab

La solución más fácil: use un interruptor SPDT en cada una de las entradas seleccionadas (A, B, C). Esto le permitirá seleccionar manualmente el canal, pero deberá hacer la selección usando una combinación de los 3 interruptores en lugar de un botón por canal.

Solución más difícil: agregue un codificador de prioridad 8 a 3 como SN74HC148 . Si usa 8 interruptores SPDT como entradas, siempre que solo encienda uno a la vez, debería hacer lo que quiere. Sin embargo, es un poco más engorroso que simplemente presionar un botón, ya que debe encender el interruptor que desea y apagar el que no.

La solución más difícil: agregue un flip flop a cada entrada. Esta celda de memoria le permite presionar un botón instantáneamente para "configurar" una de las 8 chanclas. Podrías usar un 74HC574 . Si las 8 entradas son normalmente bajas y al presionar el botón la entrada aumenta, todo lo que necesita es una señal de "reloj" que enganche los estados de los 8 botones. Entonces, digamos que usa una puerta OR de 8 vías entre los 8 botones para generar el reloj? Luego, obtiene un borde de reloj ascendente cada vez que se presiona cualquier botón, que se bloquea en el nuevo estado del botón. Si el retardo de propagación de la puerta OR es más largo que el tiempo de configuración del flip flop, el tiempo debería funcionar bien. Es posible que se encuentre con problemas de rebote del interruptor y necesite un circuito de rebote analógico en cada botón, pero creo que de forma inherente eliminará la señal.

Use un codificador de prioridad como un 74xx148

ingrese la descripción de la imagen aquí

O si lo prefieres CMOS un CD4532

ingrese la descripción de la imagen aquí

Solo un interruptor debe estar activo a la vez, por lo que funcionó mejor con interruptores agrupados, ya sea botones como el que se muestra a continuación o uno giratorio de varias posiciones.

ingrese la descripción de la imagen aquí

Pero, de nuevo, uno tiene que preguntarse, si tiene todos esos interruptores, ¿por qué necesita el CD4051?

¿Esos botones liberan los otros 7 cuando se presiona un botón? ¿Cuál es el número de parte? ¡El interruptor giratorio es una buena idea!
@Selvek por lo general vienen en ambas variaciones. Ese en particular se puede encontrar aquí
¡Oh, eso es bastante ingenioso!

No sé con cuántas líneas i/o tienes que trabajar desde tu micro. Pero he hecho esto antes de usar un teclado de control remoto. Los interruptores están cableados en una matriz.

(foto)

Si no puede programar pull ups como lo hace con el MSP430, tendrá que agregarlos. La belleza de esto es doble. No necesitas un dispositivo externo. Y no tiene que escanear si no se presiona una tecla. Mantenga todas sus salidas bajas y establezca interrupciones en sus entradas. Deje que un disparador bajo en las entradas inicie un escaneo. El primer interruptor detectado cerrado, gana. Puede dejar de escanear y dejar que una interrupción disparada de alto nivel le avise cuando se suelta el interruptor.