Propeller as LED Matrix Controller?
rwgast_logicdesign
Posts: 1,464
So recently I built an eight by eight common anode grid of amber LEDs out of Tie Wire and Ping Pong balls. Originally I had planned on using another micro controller along with TLC5940, the TLC5940 is 12bit PWM controller which also acts as a constant current sync, this is why I built my matrix as common anode. The Matrix can easily be coveted to common cathode if it makes things easier.
Basically I was looking at the little RGB 8 by 8 matrix parallax sells, I couldn't find a schematic but I noticed the board does not have any PWM driver chips or Shift registers. So I am assuming that some how this board has 64 RGB leds which allows 3 pwm channels per led, using only a Propeller?? I am only looking to control a 64 LED monochrome display, but I would like to be able to PWM each LED individually, this is why I was going to use 4 16 channel TLC5940s originally, if this can somehow be done using a propeller only I would much rather go that route!
If I understand standard row/column multiplexing correctly a PWM signal would have to apply to the whole row, and two LEDS in the same row could not be set to two different PWM values. Yet somehow it seems like the parallax RGB matrix is able to individually PWM 64x3 channels using only the props 32 i/o pins??
Basically I was looking at the little RGB 8 by 8 matrix parallax sells, I couldn't find a schematic but I noticed the board does not have any PWM driver chips or Shift registers. So I am assuming that some how this board has 64 RGB leds which allows 3 pwm channels per led, using only a Propeller?? I am only looking to control a 64 LED monochrome display, but I would like to be able to PWM each LED individually, this is why I was going to use 4 16 channel TLC5940s originally, if this can somehow be done using a propeller only I would much rather go that route!
If I understand standard row/column multiplexing correctly a PWM signal would have to apply to the whole row, and two LEDS in the same row could not be set to two different PWM values. Yet somehow it seems like the parallax RGB matrix is able to individually PWM 64x3 channels using only the props 32 i/o pins??
Comments
The Parallax board does have a one '595 shift register. Make sure and take note of how small the Parallax array is before ordering to make sure you want a display that small.
As I just posted in another thread, I used shift registers on the cathodes of my RGB LED array project.
And yes, the Parallax display has 24-bit color on each pixel. They are using a Prop pin for each column so the Prop can't do much else besides drive the display. I know there is a schematic on the forum for the array somewhere.
I can't get that color resolution with shift registers but I can drive two displays with 15-bit color (which looks pretty good IMO).
My latest boards break out the enable pins of the shift registers so I can maintain color resolution while dimming the display.
Im having a hard time understanding how the parallax module only uses a single shift register a long with 32 i/o pins on the prop to drive 192 PWM channels. If I could find it's schematic I could connect a shift register and experiment with the firmware. I am eventually looking at a 64x32 or 128x64 RGB wall so im basically just looking for the most cost effective fastest way to PWM 1000's of channels.
You pay a price in time when you try to PWM through a shift register. Parallax's displays are PWM on the cathode end IIRC with 24 Prop pins. Each row is on one eighth of the time and if a specific column is turned on or not is dependent on its brightness value. A LED with a brightness of 255 will be on 1/8th of the time. A LED with the brightness of 127 will be on 1/16 of the time. The trick it to make sure a LED on about 1/2000 of the time (which is about what the dimmest setting would require) doesn't flash. Since the Parallax display is controlling the cathodes directly, they can get more resolution from the PWM before the on and offs become noticeable.
My PCB uses three shift registers on the cathodes. The time it takes to clock out 24-bits (or 48 if I'm driving two arrays) limits the resolution I can achieve with PWM. The more displays I attempt to drive, the less resolution.
I should post some video of the LEDs being driven at various resolutions. I'm not sure how it will look on camera but as I increase the resolution the display begin to flash since the time it takes to clock out all the bits becomes perceptible. I know I can modify the resolution on the fly with my displays and I think I can also change the number of displays being driven with my current code. It's been awhile since I've work on the LED arrays so I'm not sure what features I finished adding. If I limit the LEDs to being either on or off without any brightness control I can drive six arrays from a single cog with a single data line without noticeable flash.
As I mentioned, my new PCBs have the enable pins accessible so I can use it for brightness control. I've had the new PCBs back from the fab house for a while but I haven't tested them yet. This latest batch used the 25mm boards which cost $1 each when I buy ten. At $1, the price of the PCB isn't too bad. I'm using high power shift registers so I can drive the arrays at near their full brightness without overloading a normal shift register.
The Parallax display is very dim compared to the ebay arrays driven with high power shift registers. I'm not sure if I can capture the difference on camera or not. It's surprisingly difficult to take good photos of LEDs.