Electronic – Easiest way to read a large bank of LED’s

adcioledmultiplexer

I have a pretty straight forward question but every answer I come up with seems over complicated or just plain wrong. I'm designing a data logger/fault detection system to be used for a large piece of industrial equipment. The gist is that the only output for the current status of this machine is a large bank of LEDs (>64) either lit RED, GREEN or a BOTH (Common cathode or anode led lights) and we would like to make this output remotely accessible. I have no access to the control system of the machine so I cannot tap into the signal that controls which lights are on or off but I do have the ability to read the voltage drop across each LED with respect to either the cathode using a microcontroller. Imagine the circuit for the LED's is just a common cathode connection of all the LEDs and then >128 wires coming in connecting the anodes (no access to the current limiting resistor).

My question for you is how would you go about determining if each of the LED's has either RED, GREEN or BOTH lights lit so that it could be read by a microcontroller?

My current thought is to take a massive bank of analog multiplexers and then just multiplex the voltage of each LED (>128 different voltages to read) into an ADC and use a software threshold to determine if its on or not however this method seems way to complicated and expensive and I'm sure there is a better option. I know daisy-chaining a bunch of IO expanders together and connecting the voltages w.r.t. the cathode would work but the voltages seem too low for TTL (1.65V and 2.5V) and probably wouldn't work to produce a '1' when the LED is lit.

Could you suggest a circuit or IC or a combination of both to make this work? Thanks!

Best Answer

If an IO expander seems OK to you, I don't see the problem. You can get them in various supply voltages, including 1.8 and 2.5 volts. So if you used 1.8 units for the red LEDs and 2.5 for the greens, I think you'd be in business. A TI TCA9534 would seem to do the trick, and you can get 64 bits on an I2C bus with them. So you'd actually need two sets of IO expanders, one for red and one for green. But it seems a lot better than the brute force approach.