Ways of controlling individual RGB leds for a display-like project?

I've just finished making a simple 24x24 single color matrix display using shift registers and I gotta say that I like the way these things work. I am now looking to find a way to sort of make the same thing with RGB LEDs. Now I have some limitations that I need to follow due to my design and purpose of the display.

The limitation is that I can currently use only the individual RGB LEDs that actually have 4 pins for ground,R,G,B. If there are any drivers or controller chips that I can attach to each individual led to save up the pi usage like you would with the shift register, I'd love to know.

I've seen some of those LEDs that usually come in a form of cut-able led strip that have i2c chips built in each individual led that actually handle color changes These usually have 4 pins as well but they are Vcc,GND,Serial1 and Serial2. These LEDs are way down at the bottom of my list if all other possibilities have been exhausted.

My thoughs for now are that I could technically just daisy chain more bit shift registers and make up an algorithm to address certain shift registers channels for certain colors. other than that, I guess I'd have to go with those led strips.

Are there any specific rgb i2c

My thoughs for now are that I could technically just daisy chain more bit shift registers and make up an algorithm to address certain shift registers channels for certain colors. other than that, I guess I'd have to go with those led strips.

That's pretty much it... Add to your existing shift register daisy chain, or go with the pre-wired and pre-daisy chained strips.

It's a major undertaking to wire a 24x24 matrix one-by-one! I wouldn't want to do it at all, but if I "had to", I'd probably try making it from 4x4 or 8x8 sub-modules.

You can certainly control RGB LEDs with shift registers. You can save yourself some wiring issues by multiplexing the LEDs.

Many inexpensive RGB 8x8 arrays have a common anode to eight LEDs (or 24 depending on how you define “LED”) in a row. The cathodes of the individual colors are joined in columns. There’s a schematic of the layout.

The eight anodes are driven high one after the other and then the cathodes are controlled to allow the LED to be turned on or not.

Since the current from eight LEDs need to be controlled at once, I used high power shift registers to control the cathodes. Each color had its own 8-bit shift register.

There are a lot bits which need to be shifted out. I was able to shift the bits fast enough to PWM the individual LEDs. The best compromise I found was two arrays with 5-bit PWM resolution per color. There’s a trade of between the number of LEDs you can control with PWM and the number of brightness levels you can have before the LEDs appear to flicker.

I made a long and boring video showing some of the tradeoffs between the number of LEDs and the color depth.

It took me a year and a half to get around to uploading the video to YouTube. I thought the colors didn’t look very good. I have a hard time capturing LED projects on video.

Make sure to keep the enable pins of the shift registers available. Don’t tie them low. Being able to adjust the overall brightness level with the enable pins is a huge advantage shift register type displays have over NeoPixel type displays.

As I mentioned, it’s tough trying to control the LEDs with PWM using shift registers. This is one area where NeoPixel type LEDs have an advantage over using shift registers. Do you just want to turn the LEDs on and off or do you want full brightness/color control of the individual LEDs?

I think you’ll be hard pressed to match the color depth of NeoPixels using shift registers but I think there’s something cool about controlling LEDs with shift registers. I seems like there’s something lacking with NeoPixel type displays. NeoPixels kind of seem like cheating (though I’m a fan of these type of LEDs too).

Yeah I found the rgb leds that use build in ic chips and take data in 8bit increments. I think they themselves act as bit shift registers when daisy chained. I'll try both solutions.

TobiasRipper: Yeah I found the rgb leds that use build in ic chips and take data in 8bit increments. I think they themselves act as bit shift registers when daisy chained. I'll try both solutions.

The RGB LEDs with built in chips don't take as much overhead to control. Once the LED receives the color information, it will use PWM to control the LED without further work from the microcontroller.

Using shift registers to produce PWM on the individual LEDs is a full time job for a processor. One of the eight 80MHz processors in the chip I was using was entirely devoted to shifting bits out to the shift register ICs. The NeoPixel type LEDs only need data shifted out once to set the color. The processor is then free to perform other tasks.

You might want to have a look at Adafruit 16-Channel 12-bit PWM/Servo Shield - I2C interface. With one board you can control 16 (normal) LEDs (so 5 RGB LEDs max). 5 Boards will give you 25 RGB LEDs.

With PWM you can even set the intensity of individual LEDs. If you don't need that, you can do a search for I2C port expander; you will find a number of devices (mostly integrated circuits) and next search for boards that contain them (or wire them yourself as you probably did now). The MCP23017 is one IC that you might find. 16 I/O pins per device, 8 devices maximum allows for 128 LEDs (42 RGB LEDs).

Note: Be aware that most ICs can only source a few milliamps while they can sink much more. In which case you need to wire the LED/resistor between the positive voltage and the output pin and not between the output pin and ground or use an additional transistor to 'drive' the LED. Just read the sdatasheet of the IC on Iol and Ioh.

//Edit With RGB LEDs that have a common GND, you can not connect them between the positive voltage and the output pin (all 3 colours would be affected at the same time); if the output source current of the IC (Ioh) is not enough to drive the LED, you definitely need some additional electronics.

Basically this project is an 8 by 8 RGB matrix. http://www.thebox.myzen.co.uk/Hardware/Hexome.html There is a lot of wiring in this.