dIGITAL MUX PROGRAMMING

Dear all.

I am having totally 18 Digital Io. Where 8 pins are being used to select device ID.I have followed 8:1 digital mux circuit to reduce the no of pins. I am using S0,s1,s2 Pins for selecting analog and digital multiplexer.My question Here How can select proper Device in program If Mypins are keep switching.Please help out here.

http://www.nxp.com/documents/data_sheet/74HC_HCT251.pdf

Datasheet attached below.

There are totally 26 analog 18 digital io required for application, 24 analog channel are maintained by 8:1 multiplexer. which is working fine. I am facing problem choosing or set device ID here.If any code available will be more help full.

Below code only for analog reading values. Now I need some idea to choose Device ID between 0~255 based on digital multiplexer.

#include <avr/wdt.h>
int SO_enable=7;
int S1_enable=6;
int S2_enable=5;
int Enablepin=4;
int Sensor_Value0=0;
int Sensor_Value1=0;
int Sensor_Value2=0;
float  voltage0;
float voltage1;

float Current_Mux1[9];
float Current_Mux2[9];
float Current_Mux3[9];
float ARDUINO_ANALOG_SCALING=0.004799608993157;
int row,column;
int DigitalHigh=8;
int DigitalHigh1=9;
static float  Mux1_array[8]={
  0.0};
static float  Mux2_array[8]={
  0.0};
  static float  Mux3_array[8]={
  0.0};
  
 float Current_Value1[8]={0.0};
 float Current_Value2[8]={0.0};
int array[8][4]={
  {    0,0,0,0  }
  ,
  {    0,0,0,1  }
  ,
  {    0,0,1,0  }
  ,  
  {    0,0,1,1  }
  ,
  {    0,1,0,0  }
  ,
  {    0,1,0,1  }
  ,
  {    0,1,1,0  }
  ,
  {    0,1,1,1  }
 

};

void setup()
{
  wdt_enable(WDTO_8S);
  pinMode(SO_enable, OUTPUT) ;// pin can enable/disable using digital IO 7 of arduino
  pinMode(S1_enable, OUTPUT) ;// pin can enable/disable using digital IO 6 of arduino
  pinMode(S2_enable, OUTPUT) ;// pin can enable/disable using digital IO 5 of arduino
  pinMode(Enablepin, OUTPUT) ;// pin can enable/disable using digital IO 4 of arduino
  pinMode(A0, INPUT) ;
  pinMode(A5, INPUT) ;
  pinMode(DigitalHigh,OUTPUT);
  pinMode(DigitalHigh1,OUTPUT);
  Serial.begin(9600);
/*  Serial.print("Channel\t");
 Serial.print("MUX1_V \t"); Serial.print("MUX1_C \t");
   Serial.print("MUX2_V \t"); Serial.print("MUX2_C \t");
   Serial.print("MUX3_V \t"); Serial.println("MUX3_C \t");*/
}

void loop()
{
  wdt_reset();
  digitalWrite(DigitalHigh,HIGH);
  digitalWrite(DigitalHigh1,HIGH);
  for(row=0;row<8;row++)
  {
    int k=(8*array[row][0]+4*array[row][1]+2*array[row][2]+1*array[row][3]);
    
   // Serial.print("k:");
    Serial.print(k);
    Serial.print("\t");
    digitalWrite(Enablepin,array[row][0]);
    digitalWrite(SO_enable,array[row][1]);
    digitalWrite(S1_enable,array[row][2]);
    digitalWrite(S2_enable,array[row][3]); 
   delay(500); 
    Sensor_Value0=analogRead(A0);
    Sensor_Value1=analogRead(A3);
    Sensor_Value2=analogRead(A5);
   

    Mux1_array[row]=(Sensor_Value0 * 0.004398826979472141);
   
//   Mux1_array[row]=(Sensor_Value0 * ARDUINO_ANALOG_SCALING);
   Mux2_array[row]=(Sensor_Value1 * ARDUINO_ANALOG_SCALING);
   Mux3_array[row]=(Sensor_Value2 * ARDUINO_ANALOG_SCALING);
    Current_Mux1[row] = (Mux1_array[row]*35.1428571429)-87.6571428571;
    Current_Mux2[row]=(Mux2_array[row]*35.1428571429)-87.6571428571;
    Current_Mux3[row]=(Mux3_array[row]*35.1428571429)-87.6571428571;
    
  Serial.print( Mux1_array[row]);Serial.print("\t");Serial.println( Current_Mux1[row]);//Serial.print("\t");
//Serial.print( Mux2_array[row]);Serial.print("\t");Serial.print( Current_Mux2[row]);Serial.print("\t");
//Serial.print( Mux3_array[row]);Serial.print("\t");Serial.println( Current_Mux3[row]);
 
 
  }
 Serial.println("...................................................................");
/* Serial.print("Channel\t");
 Serial.print("MUX1_V \t"); Serial.print("MUX1_C \t");
   Serial.print("MUX2_V \t"); Serial.print("MUX2_C \t");
   Serial.print("MUX3_V \t"); Serial.println("MUX3_C \t");*/
 //delay(1000);
}

dIGITAL.pdf (48.8 KB)

It's late :sleeping:

Are you trying to use the 251 to pass an analog voltage?

Why do you have two pullups on pin 15 of your 74HC251, and none at all on pin 12?
Why do you have three pull-downs on pin 3, and none at all on pins 1 and 2?
Is TheRe soMethIng wrONg witH yoUr Shift kEY?

LarryD:
It's late :sleeping:

Are you trying to use the 251 to pass an analog voltage?

Assume that i have 255 device to be added in future. I have shortage of analog and digital pins. depend on status of DIP switch i.e We can decide which is device ID. I.e 2^8 combination. Depend on status of digital output i am planning judge the device ID and assign to device. Question How can do that here.