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)