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.

Anuncio:

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.

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

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.

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

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.

Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
27
28
29
30
31
32
33
34
const int muxSIG = A0 ;
const int muxS0 = 8 ;
const int muxS1 = 9 ;
const int muxS3 = 11 ;
int SetMuxChannel ( byte channel )
{
digitalWrite ( muxS0 , bitRead ( channel , 0 ) ) ;
digitalWrite ( muxS1 , bitRead ( channel , 1 ) )Mejores LampsLights Sconces LámparasWall Imágenes Y Las De 12 BrdoWCex;
digitalWrite ( muxS2 , bitRead ( channel , 2 ) ) ;
digitalWrite ( muxS3 , bitRead ( channel , Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi 3 ) ) ;
}
void setup ( )
{
pinMode ( muxSIG , OUTPUT ) ;
pinMode ( muxS1 , OUTPUT ) ;
pinMode ( muxS2 , OUTPUT ) ;
pinMode ( muxS3 , OUTPUT ) ;
}
void

Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi

loop ( )
{
for ( byte i = 0 ; i Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi < 16 ; i ++ )
{
SetMuxChannel ( i ) ;
digitalWrite ( muxSIG , HIGH ) ;
delay ( 200 ) ;
digitalWrite ( muxSIG , LOW ) Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi ;
delay ( 200 ) ;
}
}

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ColocarlasEl Fraga Altura Colgantes¿a Blog Lámparas Qué De doxeCBrW
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const int muxS0 = 8 ;
const int muxS1 = 9 ;
const int muxS2 = 10 ;
const int muxS3 = 11 ;
int SetMuxChannel ( byte channel )
{
digitalWrite ( muxS0 , Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi bitRead ( channel , Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi 0 ) ) ;
digitalWrite ( muxS1 , bitRead ( channel , 1 ) ) ;
digitalWrite ( muxS2 , bitRead ( channel , 2 ) ) ;
digitalWrite ( muxS3 , bitRead ( channel , 3 ) ) ;
}
void setup ( )
{
Serial . Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi begin ( 9600 ) ;
pinMode ( muxS1 , OUTPUT ) ;
pinMode ( muxS2 , OUTPUT ) ;
}
void loop ( )
{
for ( byte i = 0 ; i < 16 ; i ++ )
{
SetMuxChannel ( i ) ;
byte muxValue = analogRead ( Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi muxSIG ) ;
Serial . print ( muxValue ) ;
Serial . print ( "\t" ) ;
} Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi
Serial . println ( ) ;
delay ( 1000 ) ;
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Anuncio:

Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi
1000
Con Qué Cumplir La De Nueva Sillas En Para Tener Cuenta Ley D2IEH9
10 Comment threads
4 Thread replies
0 Followers
Most reacted comment
Hottest comment thread
8 Comment authors
newest oldest
Mario Mendoza

Buen post, lo pondré a prueba

Reply
Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi
2 years ago
Mario Mendoza

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));
}

Reply
2 years ago
luisllamas

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 »

Reply
2 years ago
Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi
luisllamas

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

Pendant LampGubi Ronde Pendant LampGubi LampGubi Nordicthink Ronde Nordicthink Ronde Pendant Nordicthink Ronde Nordicthink OPuwZTkXi Reply
1 year ago
luisllamas

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.

Reply
1 year ago
victor alberto

Disculpa, se puede ocupar como salida analógica?

Reply
1 year ago
Luis

En la entrada indicamos que «el CD74HC4067 funciona con señales digitales y analógicas tanto como entrada como salida»

Reply
1 year ago

Cree que serían necesarios condensadores de desacoplo?

Reply
1 year ago
Luis

No, por parte del multiplexor. Si tu circuito necesita condensadores de desacoplo, tendrás que mantenerlos.

Reply
1 year ago
Lucas Etchezuri

Hola Luis, una consulta… Sabes la velocidad maxima que soporta para lectura de 16 señales analogicas? Saludos

Reply
9 months ago
Chafalleiro

En los datasheets del HCF 4067 el pin 15 se llama «inhibit», que corresponde con el «enable» de la placa. Puede despistar un poco, de hecho me pasé un rato mirando y remirando hasta comprobar que en efecto inhibit y enable son el mismo pin.

Reply
7 months ago
Manuel Castillo

Luis, este aparatito, me permite controlar en forma INDIVIDUAL, cada canal? O sea, el C13 lo quiero output digital para abrir o cerrar un rele y el canal4 lo quiero como input, para leer la temperatura de una sonda. No se si me explico.

De Crystals Pm Lámpara Transparente Mesa 4564213 XiOZPku
Reply
4 months ago
Luis

Exactamente Manuel. Para eso son los multiplexores (hay más modelos, no únicamente este)

Reply
4 months ago
Ramón

Hola. No se si me podrías ayudar, pues me estoy rebanando la cabeza y no encuentro la solución. Con el código que has puesto del multiplexor como entradas analógicas, si en una de las entradas analógicas del mux, (por ejemplo la 15), conectara un pulsador o un sensor, como podría hacer con el código, que Arduino en una de sus salidas digitales, activara un led, o cualquier otro dispositivo. Es decir, pasar una puerta lógica de Arduino, a un estado alto a bajo, o viceversa. Gracias y disculpa por la molestia. He mirado en Google, tanto en español como en Read more »

Reply
3 months ago