Múltiples entradas/salidas analógicas con un 74HC4051
Este ejemplo sencillo explica el funcionamiento de un multiplexor analógico, utilizado para leer el valor de 8 sensores LDR (sensor de luz).
¿Qué es un multiplexor?
En electrónica digital, un 'multiplexor', es un circuito usado para el control de un flujo de información que equivale a un conmutador. En su forma más básica se compone de dos entradas de datos (A y B), una salida de datos y una entrada de control (sel). Cuando la entrada de control se pone a 0 lógico, la señal de datos A es conectada a la salida; cuando la entrada de control se pone a 1 lógico, la señal de datos B es la que se conecta a la salida...
Figura 1. Esquema de un multiplexor 2 a 1. Puede ser comparado a un conmutador controlado.
El multiplexor es una aplicación particular de los decodificadores, tal que existe una entrada de habilitación (EN) por cada puerta AND y al final se hace un OR entre todas las salidas de las puertas AND.
La función de un multiplexor da lugar a diversas aplicaciones:
- Selector de entradas.
- Serializador: Convierte datos desde el formato paralelo al formato serie.
- Transmisión multiplexada: Utilizando las mismas líneas de conexión, se transmiten diferentes datos de distinta procedencia.
- Realización de funciones lógicas: Utilizando inversores y conectando a 0 ó 1 las entradas según interese, se consigue diseñar funciones complejas, de un modo más compacto que con las tradicionales puertas lógicas.
(fuente: Wikipedia)
Para el ejemplo voy a utilizar un multiplexor analógico 74HC4051 que permite conmutar entre 8 entradas o salidas analógicas, dependiendo para que lo usemos. En este caso particular el objetivo en conmutar 8 señales analógicas desde una única entrada analógica en la placa Arduino.
En la siguiente figura se obervan las características del 74HC4051:
- Las 8 entradas, señaladas de A0 a a7.
- Los 3 bits para direccionar las 8 entradas, señalados como S0, S1 y S2.
- El enable, que se habilita poniéndolo a LOW (lógica inversa).
Figura 2. Multiplexor analógico 74HC4051.
A continuación se ve la tabla de valores necesaria para conmutar entre las 8 entradas:
Figura 3. Tabla de valores del multiplexor analógico 74HC4051.
La conexión de Arduino y el Multiplexor analógico 74HC4051 quedaría como a continuación se muestra:
Figura 4. Esquema de conexionado a una una placa Arduino.
Código fuente
/*
Ejemplo de lectura de un conjunto de 8 LDR (sensor de luminosidad)
mediante un multiplexor analógico 74HC4051.
*/
int val = 0; // Vble que almacenará los valores de la LDR
int LDR=2; // PIN analógico de la LDR
int bit1=6; // PIN digital al S2 del multiplexor
int bit2=5; // PIN digital al S1 del multiplexor
int bit3=4; // PIN digital al S0 del multiplexor
void setup() {
beginSerial(9600);
pinMode(bit1,OUTPUT);
pinMode(bit2,OUTPUT);
pinMode(bit3,OUTPUT);
}
void loop() {
for (int i=0;i<8;i++){ // Recorre las 8 posiciones del multiplexor
switch (i) {
case 0:
digitalWrite(bit1,LOW); // Posición 0 --> S0=0, S1=0 y S3 =0 (en binario)
digitalWrite(bit2,LOW);
digitalWrite(bit3,LOW);
break;
case 1:
digitalWrite(bit1,LOW);
digitalWrite(bit2,LOW);
digitalWrite(bit3,HIGH);
break;
case 2:
digitalWrite(bit1,LOW);
digitalWrite(bit2,HIGH);
digitalWrite(bit3,LOW);
break;
case 3:
digitalWrite(bit1,LOW);
digitalWrite(bit2,HIGH);
digitalWrite(bit3,HIGH);
break;
case 4:
digitalWrite(bit1,HIGH);
digitalWrite(bit2,LOW);
digitalWrite(bit3,LOW);
break;
case 5:
digitalWrite(bit1,HIGH);
digitalWrite(bit2,LOW);
digitalWrite(bit3,HIGH);
break;
case 6:
digitalWrite(bit1,HIGH);
digitalWrite(bit2,HIGH);
digitalWrite(bit3,LOW);
break;
case 7:
digitalWrite(bit1,HIGH);
digitalWrite(bit2,HIGH);
digitalWrite(bit3,HIGH);
break;
}
val = analogRead(LDR); // Lee el valor del sensor LDR
Serial.print("Valor de ");
Serial.print(i);
Serial.print(" es: ");
Serial.println(val);
}
delay(100);
}
Referencias
by Igor González Martín 25-02-2008