Hacker News new | ask | show | jobs
by i336_ 3411 days ago
This is ever so slightly thread-hijacking but I've been wondering something slightly related for a while now: what's the downright cheapest way to get into really really big LED matrixes? Like the kind used for signs (of various sizes; let's say I'm referring to around <2ft sq).

The major issue I'm completely ignorant of is how to get enough I/O that can drive the LEDs directly - I'm assuming something with lots of direct drive I/O and no intermediary components would be the cheapest way to do it (?).

I understand multiplexing is the only way to survive at scale, but for small displays (say, 5x30 (= 150 LEDs)), what solutions would have enough I/O to drive each LED emitter individually, without scanning? I've always wondered what a truly flickerless LED matrix would look like. *

(* Several years ago I had an odd incident where after using a scientific calculator I'd see weird swirling patterns overlaid on top of whatever I was looking at. The LCD itself was not faulty or damaged, and I couldn't see any flickering at all. Considering LCDs run at 30-100Hz, the whole incident (it stopped after a while, I have some theories as to why) made me curious what a truly DC-driven LED matrix would look like.)

2 comments

As it turns out this is getting pretty easy. A de-facto standard has emerged for these[1] LED modules, both in interfacing and in mounting. I used a couple in a LED clock[2] which can also tell time in QR Code[3] :-). Basically at $25 each you're looking at $3,750 in modules for a 640 x 480 display that in the "P3" (3mm dot pitch) size would be 1.92M wide (75.6") by 1.44M tall (56.7").

All of the LED driving is taken care of by the module, except for multiplexing the 'lines'. So these work by having drivers for one 'line' or LEDs (or 2 lines on the 32 LED high modules). You shift out the bits to them on a 16 pin plug. My clock as using an STM32F4 chip on a 1Bitsy[4] and was doing 240 FPS. Since these micros can be easily paralleled and synchronized you can drive an arbitrarily large sign by adding about $25 per 16 panels. Feeding them all data is a bit more complicated but not terribly so.

[1] https://www.aliexpress.com/item/3mm-Indoor-SMD0606-rgb-led-d...

[2] https://twitter.com/ChuckMcManis/status/794023527720620032

[3] https://twitter.com/ChuckMcManis/status/794025248203022336

[4] https://1bitsquared.com/collections/embedded-hardware/produc...

_Wow_, that is truly impressive. $3.7k for a ~2x1.5m² RGB (!!) display - and no added costs (besides a like <$50 interface controller setup). Nice!

Hmm. I wonder what the weatherproofing (particularly heatproofing) on these things is like. I know of a time/temp display high up on a building (probably around 1x1.2m²) that is constantly corrupted, I'm wondering if it's the 40°C days around here (Sydney Australia) that keep hitting it...

It's fascinating watching how QR encoding shifts and changes data - some of the time updates just adjust a few pixels, some of them adjust the whole barcode. I wonder what the source data for each frame was (but not terribly so).

So... if I understand right, these are line-buffered? You send it a line's worth of data, hit "go", and it redraws that line? 240FPS is good, wow.

One question: in the first couple of "ticks" of the second hand on the first clock video, I noticed how there appears to be a minor bit of "LED bleed" where some of the LEDs don't switch off for a couple fractions of a second. Curious, I had a look at the video frames: http://imgur.com/a/EVYB2. Is this an intrinsic problem in the driver system or perhaps a camera or encoding/compression glitch?

The interface is this: "on/off", "line selectx4", "clock", "latch", "R", "G", and "B".

So the loop is:

1) Clock out a row of R, G, B values for the number of panels you have linked together (64 x n)

2) Turn off the LEDs on that row (enable goes low)

3) Latch the value

4) Select the next row

5) Turn on the display (enable goes high)

(my repo which does this: https://github.com/ChuckM/1bitsy-examples/tree/master/demos/... )

Since there are 16 "rows" multiplexed on to one "row driver" you need to at least clock out a set of all the rows every mS to get a 60Hz refresh rate (or every 250uS for a 240hz rate).

It is "easy" to do 3 bit RGB color (8 colors) since each value in R, G, and B has one bit. To get shades you need to PWM the bits and that consumes more bandwidth (with the 240Hz I can get a nominal 4 'intensities' per color by PWM'ing within the 60 fps rate, more by PWMing across a longer period. (which leads to interesting effects btw).

The panels all come with these neodymium magnetic feet so you can just put up a piece of 20ga sheet and stick up your display very simply.

On the video I expect it is a camera problem, the LEDs turn off pretty much instantly. The only caveat to that would be propagation from board to board of the 'enable' line but that is less than a microsecond.

After staring at that repo for a bit (my understanding of C is minimal, and I've never done any embedded work although I definitely want to) I finally got the "OH, the six set_pin() calls are R, G, B for two sets of rows on two panels" (in clock_two_rows()) it kinda clicked and made sense.

I'm not 100% on what "line selectx4" does though. And this is all much more foreign than I'd like... but that's fine, I'll figure it out eventually. (The main thing with software is that accidents/learning/experimentation don't cost anything :P)

It would be interesting to get a microcontroller, or set of microcontrollers connected together at very high speed, to clock data out to the panel in perfect lockstep. An excuse to use assembly language perhaps, but only if the driver microcontroller itself is deterministic (a bit of an unknown).

I'm surprised about the bit with the magnets (I guess if you're trying to bolt a computer with a spinning HDD onto the back of it you're doing it wrong).

Good to know the LEDs turn off instantly. Thanks very much for that bit. I do wonder about the board-to-board propagation time, yeah. I take it each board is chained to the next board's enable line (?), or are they all driven from the microcontroller?

You don't need assembly, you just need a common "sync" line where all the computers start at a given point.
Right. That makes sense.

I haven't fully mentally appropriated how far embedded computing has come. I would have solved this by counting instruction lengths :)

You can get an 80 inch TV for the same cost and roughly the same dimensions.

I am curious to understand what this can offer that a TV can't

Referencing the parent's comment, this lets you replace subpanels or even individual (sub)pixels as needed --- with a TV, if the panel is damaged, it's all or nothing.

I wonder what the weatherproofing (particularly heatproofing) on these things is like.

LEDs are more sensitive to heat than CRTs or incandescent lamps, but less than LCDs.

1) a LED "wall" is far brighter than a comparably sized TV, that's important when you place stuff high on a building

2) An ordinary TV is designed to be looked at from the front, a slight angle skews the colors and if it's extreme enough the screen gets totally unreadable.

3) A TV eats up tons of power, a LED wall not so much.

Regarding point 3: At 150 modules consuming about 25W each, your LED wall is consuming about 3750W max. An 80" TV will consume about 300W.

Power consumption of the LED wall will, however, be highly dependent on the displayed content. A white screen will consume most, a black screen basically nothing, but displaying only dark images is not exactly what LED walls are usually used for.

The equation is simple: The brighter, the more power you'll need, and an LED wall is, as you say, far brighter.

With a LED wall, only the lit pixels will consume power - the backlight of most TVs is full-on all the time. Only exceptions (iirc) are OLED TVs where the pixels themselves generate the light, and TVs which have their background light partitioned to achieve true(r) black by turning down all-black areas.
These particular modules consume seem to consume at most about 10W each. But yes, it is brighter than a TV.
Some LEDs have an integrated chip, making it easy to daisy chain them as a big shift register. Example: https://www.adafruit.com/product/2343 You can find many similar type of LED in strips, trough holes etc. Some are faster than others. Addressable strips can be used to make big displays it seems: http://hackaday.com/2013/02/25/building-huge-displays-with-l...