Connecting multiplexers using a shared BUS

Hi guys, first of all let me start by saying that I know nothing about electronics so excuse me if I ask something stupid.
Currently I'm in the designing fase of a project where I need to connect a large array of analog inputs (around 90).
For this project I'm using an Arduino Uno and I'm considering using 6 multiplexers with 16 channels.
As you figured out, the Uno as a small number of digital and analog pins to do this.
After scratching my head for a while I came up with something but I don't know if this is doable or not, I would like to know what you think.
I've attached a simplified diagram with the idea, sorry if it's not very detailed.
On the top you can see the analog sensors array, each row of sensors is connected to a MUX.
Each MUX is connected to an analog pin where it sends the selected sensor signal.
Lastly all MUXs are connected to a shared BUS.
The idea is relatively simple, the Uno sends the channel to be selected by de MUXs to the shared BUS. All MUXs pick the same value and start sending the channel signal to the analog pins.
Since they are all connected to different rows we can read an entire column at a time.
This way I only use 3 pins to select the channel on all MUXs.
Is this possible?

The diagram is not clear. The text is not clear.

The diagram shows one mux, maybe it has 6 inputs (black), one output (yellow), and three address lines (orange). If I have guessed correctly, then I do not see how this is going to work for a 16 input mux that needs four address lines to select one of 16 inputs.

Of course the diagram shows other muxes but they only seem to have one input each. Strange or oversimplified muxes.

Of course, perhaps the diagram is incomplete. There are enough digital pins to control the address lines, and there are enough analog inputs for the 6 muxes. The Arduino has an internal mux that will select one of the 6 external muxes. You cannot actually read an entire column at a time. The Arduino and the ATMega328P is not built that way.

By the way, the word is phase and not fase.

You do not say what you are using for muxes. I hope that the shared bus can drive 6 muxes. I also hope that the muxes are compatible (in terms of voltage) with the Arduino.

Have I guessed correctly? I do not like guessing games.

Thank you for your reply vaj4088.
As i said here:

I've attached a simplified diagram with the idea, sorry if it's not very detailed.

I over simplified the diagram so it wouldn't become too cluttered.
The middle and right MUXs have the same connections as the left one, but are connected to the middle and bottom rows.
I explained here what the diagram was all about:

On the top you can see the analog sensors array, each row of sensors is connected to a MUX.
Each MUX is connected to an analog pin where it sends the selected sensor signal.
Lastly all MUXs are connected to a shared BUS.

But you've guessed it correctly.

My actual doubt is related to the shared BUS.
You wrote this:

The Arduino has an internal mux that will select one of the 6 external muxes. You cannot actually read an entire column at a time. The Arduino and the ATMega328P is not built that way.

If I write the address into the shared BUS won't it be picked up by all of the MUXs at the same time?
If they all switch to the same channel (remember they are connected to different rows), wont I be able to read the values from all the analog pins in the same iteration of the loop() function?

You do not say what you are using for muxes.

I was thinking of using something like this for multiplexing:
74HC4067

There is no issue sharing the 4 address lines between different 4067s. Your 4067 outputs are still individual lines going to the Arduino inputs.

Nwik:
This way I only use 3 pins to select the channel on all MUXs.
Is this possible?

Yes, that's how its usually done, although often the outputs of the MUXs are fed to
another MUX to allow only one ADC. But the microcontroller already has 6 multiplexed
analog inputs so that's not needed.

I think the diagram is clear enough, and the problem is easy to understand when you've
done it before yourself!

Nwik wrote (in part):

If I write the address into the shared BUS won't it be picked up by all of the MUXs at the same time?

Answer: Yes.

If they all switch to the same channel (remember they are connected to different rows), wont I be able to read the values from all the analog pins in the same iteration of the loop() function?

Answer: Yes, but this is not what I think of when I read "...an entire column at a time". My mistake.

MarkT:
Yes, that's how its usually done, although often the outputs of the MUXs are fed to
another MUX to allow only one ADC. But the microcontroller already has 6 multiplexed
analog inputs so that's not needed.

To my knowledge, one can actually connect all outputs of the 4067 together. But that will require the use of the enable line on the 4067.

Yes, you need an enable pin to share devices on a bus, I assumed that (without checking, sorry).

I would think that :

  • All six 74HC4067's could be enabled.
  • Each output could be connected to an analog input (A0-A5).
  • Select lines S0-S3 could be connected in parallel, then to 4 digital outputs on the Arduino.
  • The analog signals (up to 96) would be selected and read independently just by controlling S0-S3 and reading A0-A5.

Thank you for your replies guys, although I'm not sure what you mean by this:

you need an enable pin to share devices on a bus

I checked the documentation of the 4067 but I didn't see any mention to an enable pin.
For faster reference it can be found here:

At a certain point there is this paragraph:

The power supply for the part is applied to pin 24, and GND to … pin 12. Pin 15 is used to turn the control the current flow through the inputs/outputs – if this is connected to Vcc the IC stops flow, and when connected to GND it allows flow. You can always control this with a digital output pin if required, or just tie it to GND if this doesn’t matter.

Is Pin 15 the aforementioned "enale pin"?

Yes. See 2nd paragraph of description in the datasheet.