Arduino. Multiplexor HEF4051B

Lectura Analogica usando MUX 8a1 HEF4051B

Arduino tiene seis entradas/salidas analogicas de contro disponibles, pero como hacerle si necesitamos mas de 6 puertos analogicos para nuestro proyecto o aplicacion, digamos que queremos controlar 8 parametros usando los puertos analogicos, bien podemos multiplexar las señales usando un multiplexor 8a1 pero ¿como lo hacemos?
Empezemos con el MUX
Los multiplexores son circuitos combinacionales con varias entradas y una única salida de datos, están dotados de entradas de control capaces de seleccionar una, y sólo una, de las entradas de datos para permitir su transmisión desde la entrada seleccionada hacia dicha salida. Una señal que está multiplexada debe demultiplexarse en el otro extremo.

En este ejemplo vamos a emplear un Multiplexor/demultiplexor HEF4051B (datasheet) de 8a1 canales analógicos, usaremos el integrado para seleccionar una de ocho fuentes de tensión conectadas a los pines analogicos. Las entradas analógicas se conectan a los pines  Y0 a Y7 del 4051. Hay que asegurarse que el voltaje en los pines de canal de entrada (Y0 a Y7) nunca sea mayor a 15 V.

Esquema Logico mux4051

Alambrado:

Alambrado mux4051 y Arduino

El HEF4051B es un multiplexor / demultiplexor de 1 a 8 canales analógico con tres entradas de seleccion (S1 a S3),  ocho entradas/salidas independientes (Y0 a Y7), una  entrada /salida común (Z) y una entrada de habilitación (E), con E  en bajo (LOW)  uno de los ocho interruptores se selecciona por S1 a S3. VDD y VSS son las conexiones de tensión de alimentación para las entradas digitales de control. Es mas facil entender para que sirve (E) mirando la tabla de verdad de este mux

mux Function table

Emplee este codigo como ejemplo:

Codigo:
//Retorna 1 valor al pin analogico 0 de Arduino de los 8 parametros (Y0 a Y7) conectados al
// mux dependiendo de pines de control (S1, S2, S3)

const int select [ ] ={2,3,4}; //pines se conectan a las lineas de seleccion del mux (S1,S2,S3)
const int analogPin = 0; //pin analogico conectado al la salida del mux (Z)

int getValue( int channel) { //function que returna el valor del canal seleccionado en el mux
for(int bit = 0; bit < 3; bit++) {
int pin = select [ bit ];
int isBitSet = bitRead(channel, bit);
digitalWrite(pin, isBitSet); }
return analogRead(analogPin); }

void setup ( ) {
Serial.begin(9600); //inicializa monitor serial
for(int bit = 0; bit < 3; bit++)
pinMode(select[ bit ], OUTPUT); // pines de seleccion configurados como salida
}

void loop ( ) {

for(int channel = 0; channel < 8; channel++) { //Imprime cada uno de los canales del mux
int value = getValue(channel);
Serial.print(“Channel “);
Serial.print(channel);
Serial.print(” = “);
Serial.println(value); }
delay (1000); //Espera un segundo
}

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s