Multiplexing 100 segments with dimming

Hi, I'm trying to determine a way to drive about 100 LED segments but also with dimming capability. I've done this before with about 50 segments and some code that mimics PWM but it was right on the cusp of starting to flicker. Also, at low dimming, the flicker became much more evident. It seems to me that the arduino just barely isn't fast enough to do it. I could drive 100 LEDs using shift registers but this would slow it down even more. Does anyone have any suggestions? Do I need to be looking at different hardware, something more powerful than a typical Arduino?

No, is amazing what you can do with the humble 8 bit 16MHz Arduino. It's just a matter of knowing how to get the best out of what you have.

You say dimming, but do you mean overall dimming for all LEDs, or individual dimming for each led independently? By the first of those two, I mean you can control the on/off state of each led individually, but the dimming level of all the on LEDs is the same.

It can be done with shift registers if you use SPI hardware built into the Arduino, code efficiently, use bit-angle-modulation etc.

A ht16k33 chip can drive 128 LEDs individually and provide overall dimming. 2 X max7219 also.

Tell us more about your project and we can give more specific advice.

Thanks for the reply, glad to hear confidence in the arduino's capability. I'll stick with it then.

For dimming, I'm referring to individual dimming for each segment, independent of each other, to create various patterns.

The LEDs I am dimming are actually those strips with built-in resistors.

For previous installations I've done, I've used direct port manipulation and straight multiplexing, then the microsecond delay function to vary the duty cycle for each segment. Does that sound possible with 100+ segments and no flicker?

I'm only vaguely familiar with the shift register technique, but very curious about performance capabilities of the arduino using them. I can't have any visible flicker.

those strips with built-in resistors

More info needed, I'm afraid!

These strips: they need 12V? Do you realise you cannot individually dim the LEDs on a strip, for most types of strips? (There are types where you can individually dim each led, they are usually RGB.) What colour will the strips be and how long (in terms of number of LEDs) will each be? How bright must they be: is the installation outdoors and must be visible in sunlight, and weatherproof?

RGB individually addressable strips would be the easiest to use, even if you only want a single colour. You would simply wire them all up in one long string, and that would use a single Arduino pin. No shift registers would be needed because they are built into each led.

Thanks for your help Paul, I'll try to be more clear. There are 100+ segments (edge-lit plastic light guides), each lit by a 12V constant-voltage strip (pure white, about 50-200mA per strip depending on segment size). I want to dim the segments individually (not the individual LEDs, that would be black magic I agree). I should be clear, I've done all of this before, but I've had at most 50 segments. Now with 100+ segments I just want to make sure I'm using the best approach in addressing and driving them.

I'm not so concerned about brightness, the installation is for indoors.

Ok. I can suggest a couple of approaches.

Tpic6/a/b/c/595 chips. These are medium current shift registers. Unlike regular 74hc595 shift registers, the tpic series can deal with 12V and from between 100mA and 350mA per channel, and each chip has 8 channels. For 128 segments you would need 16 of these chips. They can be daisy-chained so that only 3 Arduino pins are needed for all 16 chips. The outputs are on/off, so for dimming, the Arduino would need to pwm the outputs at high speed. Using the Arduino's SPI interface combined with bit-angle-modulation, I think 256 dimming levels could be achieved while still having enough processing power available to run some pre-set timed or sensor activated sequences, and avoiding flicker.

Tlc5940 chips have 16 outputs and can also be daisy-chained so that only a few Arduino pins are needed. Each chip's output can deal with 12V strips up to 120mA and has 4000 available dimming levels. These chips perform the pwm dimming by themselves, so the Arduino only needs to send data when dimming levels need to change, and flickering would not be a concern.

Superb info! Thanks my friend. Those both sound like good options. I'm sure I'll have more questions once I dive into this a little more.