Hello i have been working on this for a few months now, trying to make a multi master/slave 4051 mux/demux. It as taken me that long as i am still very new with arduino, and this was my first real project.
So what this does is:
Arduino Due receives analog voltage from a potentiometer (A0) through mux's then sends it out to demux's (DAC0)
Mux = Potentiometer --> "SiS" --> "SiM" --> "MiM" --> "Arduino Due"
DeMux = "Arduino Due" --> "MoM" --> "SoS"
my problem is it takes to long to do a complete loop from SiS, SiM and MiM = 0 to SiS and SiM = 7 and MiM = 2 and through to MoM and SoS = 0 to MoM = 2 and SoS = 7 and because of this the voltage drops from 2.7v to 0.16v
so i was thinking if i could shorten this code some how like using port manipulation but i couldn't really find much information on that. it maybe that there's to much code to go through to be able to complete it in < 1ms
thank you
int SiS = 0; int SiM = 0; int MiM = 0;
void setup(){
for(int i = 22; i < 37; i++){pinMode(i, OUTPUT);}
}
void loop(){
//cycler
SiS++;
if (SiS > 7) { SiM++; SiS = 0;
if (SiM > 7) { MiM++; SiM = 0;} }
if (MiM > 2) {MiM = 0;}
//SiS setup
if (SiS == 0){ digitalWrite(24, LOW); digitalWrite(23, LOW); digitalWrite(22, LOW); digitalWrite(33, LOW); digitalWrite(32, LOW); digitalWrite(31, LOW);} //0
if (SiS == 1){ digitalWrite(24, HIGH); digitalWrite(23, LOW); digitalWrite(22, LOW); digitalWrite(33, LOW); digitalWrite(32, LOW); digitalWrite(31, HIGH);} //1
if (SiS == 2){ digitalWrite(24, LOW); digitalWrite(23, HIGH); digitalWrite(22, LOW); digitalWrite(33, LOW); digitalWrite(32, HIGH); digitalWrite(31, LOW);} //2
if (SiS == 3){ digitalWrite(24, HIGH); digitalWrite(23, HIGH); digitalWrite(22, LOW); digitalWrite(33, LOW); digitalWrite(32, HIGH); digitalWrite(31, HIGH);} //3
if (SiS == 4){ digitalWrite(24, LOW); digitalWrite(23, LOW); digitalWrite(22, HIGH); digitalWrite(33, HIGH); digitalWrite(32, LOW); digitalWrite(31, LOW);} //4
if (SiS == 5){ digitalWrite(24, HIGH); digitalWrite(23, LOW); digitalWrite(22, HIGH); digitalWrite(33, HIGH); digitalWrite(32, LOW); digitalWrite(31, HIGH);} //5
if (SiS == 6){ digitalWrite(24, LOW); digitalWrite(23, HIGH); digitalWrite(22, HIGH); digitalWrite(33, HIGH); digitalWrite(32, HIGH); digitalWrite(31, LOW);} //6
if (SiS == 7){ digitalWrite(24, HIGH); digitalWrite(23, HIGH); digitalWrite(22, HIGH); digitalWrite(33, HIGH); digitalWrite(32, HIGH); digitalWrite(31, HIGH);} //7
//SiM setup
if (SiM == 0){ digitalWrite(27, LOW); digitalWrite(26, LOW); digitalWrite(25, LOW);;} //0
if (SiM == 1){ digitalWrite(27, HIGH); digitalWrite(26, LOW); digitalWrite(25, LOW);} //1
if (SiM == 2){ digitalWrite(27, LOW); digitalWrite(26, HIGH); digitalWrite(25, LOW);} //2
if (SiM == 3){ digitalWrite(27, HIGH); digitalWrite(26, HIGH); digitalWrite(25, LOW);} //3
if (SiM == 4){ digitalWrite(27, LOW); digitalWrite(26, LOW); digitalWrite(25, HIGH);} //4
if (SiM == 5){ digitalWrite(27, HIGH); digitalWrite(26, LOW); digitalWrite(25, HIGH);} //5
if (SiM == 6){ digitalWrite(27, LOW); digitalWrite(26, HIGH); digitalWrite(25, HIGH);} //6
if (SiM == 7){ digitalWrite(27, HIGH); digitalWrite(26, HIGH); digitalWrite(25, HIGH);} //7
//MiM setup
if (MiM == 0){ digitalWrite(30, LOW); digitalWrite(29, LOW); digitalWrite(28, LOW); digitalWrite(36, LOW); digitalWrite(35, LOW); digitalWrite(34, LOW); } //0
if (MiM == 1){ digitalWrite(30, HIGH); digitalWrite(29, LOW); digitalWrite(28, LOW); digitalWrite(36, LOW); digitalWrite(35, LOW); digitalWrite(34, HIGH); } //1
if (MiM == 2){ digitalWrite(30, LOW); digitalWrite(29, HIGH); digitalWrite(28, LOW); digitalWrite(36, LOW); digitalWrite(35, HIGH); digitalWrite(34, LOW);} //2
analogWrite(DAC1, analogRead(A0));
}