Más salidas/entradas en Arduino con multiplexor CD74HC4067


arduino-multiplexor-cd74hc4067

¿Qué es un multiplexor CD74HC4067?

Los multiplexores y demultiplexores son dispositivos que nos permiten controlar un mayor número de dispositivos con un número menor de entradas o salidas. Podemos emplear estos dispositivos para ampliar el número de entradas y salidas de un procesador como Ardunio.

Un multiplexor (o mux) permite dirigir múltiples señales a una única entrada. El dispositivo inverso se denomina demultiplexor (o demux) y permite dirigir una única señal a múltiples salidas.

El CD74HC4067 es un Multiplexor/Demultiplexor de 16 canales bidireccionales. Podemos considerarlo como un interruptor controlado digitalmente, que conecta el pin común con uno de los canales disponibles.

Esto permite escribir o leer de 16 dispositivos con solo 5 pines. 4 de ellos controlan el dispositivo que queremos leer. El pin restante recoge la señal leída o escrita en el canal seleccionado.

EL CD74HC4067 funciona con señales digitales y analógicas tanto como entrada como salida. Por este motivo a este tipo de dispositivos se les denomina ampliadores de entradas y salidas (I/O expanders).

EL CD74HC4067 también puede ser empleado en dispositivos de comunicación como el puerto serie, bus I2C o bus SPI. Por ejemplo, podemos conectar el pin TX del UART para enviar información a múltiples dispositivos. No obstante, para una comunicación completa necesitaremos más de un CD74HC4067, uno por cada pin que intervenga en la comunicación.

El máximo de corriente que puede proporcionar es 20 mA, limitado, pero tampoco es un gran problema dado que es similar a la intensidad máxima que puede proporcionar un pin de Arduino. Para corriente superiores será necesaria una etapa de amplificación mediante transistor, o salida por relé.

La tensión de alimentación del CD74HC4067 es entre 2V a 6V. En cualquier caso, las tensiones de las señales de los dispositivos no pueden superar a la tensión Vcc.

Precio

Los multiplexores CD74HC4067 son dispositivos baratos. Podemos encontrarlos por 0.80€ en vendedores internacionales de eBay o AliExpress.

arduino-multiplexor-cd74hc4067-componente

Esquema montaje

La conexión es sencilla. Por un lado, alimentamos el CD74HC4067 conectando Vcc y Gnd respectivamente a 5V y Gnd en Arduino. También conectamos el chip EN a 5V, para activar el CD74HC4067.

Por otro lado, conectamos los pines S0, S1, S2 y S3, que controlan el canal activo, a 4 salidas digitales cualquier de Arduino. Finalmente, conectamos el pin de señal a una entrada o salida de Arduino. En el esquema emplearemos el pin A0, pero podría ser cualquier otro pin analógico o digital.

arduino-multiplexor-cd74hc4067-esquema

La conexión, vista desde Arduino, sería la siguiente, donde nuevamente hemos empleado el pin A0 pero podríamos emplear cualquier otro pin.

arduino-multiplexor-cd74hc4067-conexion

Ejemplos de código

CD74HC4067 como salida

En el primer ejemplo mostramos el uso del CD74HC4067 para añadir salidas. El siguiente código enciende y apaga progresivamente los 16 canales. Para ello cambiamos los pins de dirección, y empleamos una salida digital de Arduino para encender y apagar el pin de señal.

CD74HC4067 como entrada

El siguiente ejemplo muestra la lectura de valores mediante el CD74HC4067. El siguiente código realiza secuencialmente la lectura analógica del pin A0, y muestra la lectura por el puerto serie. Igual que en el código anterior cambiamos los pines de dirección, pero ahora empleamos la lectura analógica del pin de señal.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino
Previous Resistencia variable con Arduino y Digipot MCP41XXX
Next Más pines digitales con Arduino y expansor E/S I2C PCF8574

¡Deja un comentario!...

avatar
1000
Sort by:   newest | oldest | most voted
Mario Mendoza
Guest

Buen post, lo pondré a prueba

Mario Mendoza
Guest

Disculpa, podrías explicar esta parte?

int SetMuxChannel(byte channel)
{
digitalWrite(muxS0, bitRead(channel, 0));
digitalWrite(muxS1, bitRead(channel, 1));
digitalWrite(muxS2, bitRead(channel, 2));
digitalWrite(muxS3, bitRead(channel, 3));
}

luisllamas
Guest
Si claro. El canal encendido del CD74HC4067 es controla a través de los pines S0 a S3, según un número binario de 4 dígitos (de 0000 a 1111), que hacen el total de 16 canales Para elegir el canal, una forma sencilla es emplear una función como la escrita, que reciba un byte (porque es el número más pequeño que podemos almacenar) de 8 bits (de 00000000 a 11111111). Y para convertir el byte a las salidas que necesitan los pines S0 a S3, una forma eficiente es emplear la función bitRead para repartir los 4 primeros bits de nuestro… Read more »
luisllamas
Guest

Simplemente, pon el número del canal que quieres en la función SetMuxChannel();
(en tu caso, SetMuxChannel(1) para C1)

luisllamas
Guest

Con Jumpers a machos en una placa breadboard, nunca. Para uniones permanentes, cable soldado (a ser posible, soldado a un conector mejor que un terminal dupont).
Y en el caso de pruebas etc, le sueldo un header macho, y uso cables dupont hembra.

victor alberto
Guest

Disculpa, se puede ocupar como salida analógica?

wpDiscuz