Developing a high fidelity LED Magnet Matrix

preview_player
Показать описание

This is a little story about my journey making a super fast RGB LED matrix thingy.

Tools & Parts (affiliate):

Twitter: @bitluni

#rgb #riscv
Рекомендации по теме
Комментарии
Автор

LED driver nerd here! What you're referring to as "frames per second" here is really the PWM cycle time, which is a separate measurement to frame rate (the rate at which the colours can be updated). With a 400kHz timing resolution, that 12-bit depth is running at an effective PWM frequency of just 98Hz. This puts you well into the increased flicker risk zone as per IEEE1789, meaning you're going to get significant stroboscopic effects that may be quite unpleasant to viewers, and would potentially pose a small risk to people with photosensitive epilepsy (PSE). This is slightly alleviated by the population count approach (multiple shorter pulses per cycle instead of a single on/off duty per cycle) but the worst-case flicker remains identical to plain PWM. At 8-bit depth and 1.5kHz you're back in the low flicker risk zone, so that's much better, although with just 8 bits of depth and no dithering your perceptual dimming ratio only ends up being 20:1 (based on sRGB EOTF) due to the nonlinearity between radiant intensity and perceptual intensity. If you decouple your update rate from the PWM frequency and implement temporal dithering, you can get 10-bit depth (8-bit linear, 2-bit dither) for a 79:1 dimming ratio, with the lower bound of the dither ripple frequency being 390Hz (and therefore the maximum FPS also being 390), which is ok. I built a whole calculator for this stuff; if you search "LED PWM calculator" it should come up as the top result.

Getting high dimming ratios out of linear PWM without stroboscopic effects is hard work. To reach 256 perceptually linear steps without dithering you need about 12 bits of PWM. But to fully avoid stroboscopic effects, you also need 3kHz or more of PWM frequency. That leaves you needing a timing resolution equivalent to 12.3MHz. That means your driver rise/fall times need to be on the order of 20 nanoseconds, which means about 1A/us of dI/dt per 20mA LED, so you start to have to consider parasitic inductance in your power delivery network and both conducted and radiative EMI in the HF bands. A 2L board won't cut it, you'll need 4L with an SGGS stackup and good layout. It's quite the challenge!

gsuberland
Автор

1) It's reassuring that even a professional can make silly mistakes
2) It's *incredibly valuable* (especially to someone like myself that's never made a PCB) what some of the "gotchas" could be in making one and that you've documented it 👍

ethzero
Автор

Optical links might be more stable for data connections. That's what we do for the majority of data in our slip rings. Two chunky brushes for ground and +300V, and all data goes through a fibre connection which is free to rotate in the centre.

timonix
Автор

Seeing your mistakes right off the bat makes me feel a lot better about the silly mistakes I make while working on projects. I tend to beat myself up over them even if I know that it isn't fair to myself to do so

coreymartin
Автор

These remind me of an old electronic game i had as a kid, Scrabble Flash. They were little tiles with mono LCDs and a button that would display a letter and then communicate either wirelessly or via IR to tell if they were in the right order to be a word. They would also function as a multi display menu for the 3 different games.
Oh the memories.

AmusementLabs
Автор

I love your solution! I wrote Windows automation many years ago, and wrote a ChatSleep() function. It would take a minimum time to wait -- so it doesn't hammer on the CPU, like your solution -- and an interval, and function to call to check a state, which it would then start checking. Each time through it would double the interval. Something of the reverse of yours, but the use case was different: it was to catch the next state change, so the automation could proceed, so doing it as fast as possible was a goal. Neat to see a reflection of it! Thank you!

kennethbeal
Автор

0:10 The internet has rotted my brain. Even at 2k frame rate, I instantly recognized our good 'ol pal Rick Astley.

durvius
Автор

11:50 I wonder if you could display an image at a higher resolution for a camera this way, since you can basically control each line at image capture. Or even include secret messages only for video cameras, not visible to the naked eye.

Maxjoker
Автор

Never in my life have I ever been so happy to be Rickrolled.
What a great little project! The PWM solution is genius.

Rouverius
Автор

This is super inspiring. I've been imagining how a magnetic LED tile would work and this is almost exactly how I would have done it. I'm excited to see how much of a difference the magnetic connectors will make compared to the pogo pins.

Tech-Random
Автор

3:40 Editing genius, I LOL'd at the sound and the forehead clip. The workaround was also genius!

jason
Автор

I did something similar to that a few years ago, not with pogo pins and magnets, just pin headers and jumpers, and programmed a game of life for it. The total playing field would configure itself depending on the placement of adjacent matrices. Not at runtime, but I think that would be a trivial addition to the software.

MatthiasWelwarsky
Автор

Brute force versus elegance, that's how I see the difference between methods.

I love your videos.

timmturner
Автор

this is super super cool. I have a lot of those 8x8 black framed matrices lying around as well and have always had something like this in mind.

well done

fishychair
Автор

I have been looking for a high-side driver for years... YEARS!!! THANKYOU for putting me out of my misery!!! ❤❤❤😭😭😭
Also thankyou for going through the PCB assembly process, I'm only just starting to learn about it and have found it very intimidating, so again, thankyou! ❤

LordPhobos
Автор

It's cool to see someone using the pogo pin connectors and separate magnets. My brain has wanted to use these for something at some point so it's really cool to see them in action with such success! Also, I 100% understand the feeling of being judged by parts I bought many years ago... the struggle is all too real.

SmithHayward
Автор

Nice project! BTW the trick you used at 9:05 is also used in DMD chips.

HuygensOptics
Автор

That’s really cool. One thing you could do to ensure better connections between blocks is to use 2 pins for + and 2 for - instead of just 1 each. Then use a data over power scheme with capacitors to separate the a/c from d/c. So the left 2 pins could be + and transmit and the right 2 pins could be - and receive. Good luck!

kevyyt
Автор

"You are typically covered by the engineering team, they will contact you if something is wrong"

Proceeds to receive 5 board with a flipped driver.

NicoWagner
Автор

This reminds me of the MBLed project which was done by three french students about a decade ago, they used used similar matricies and used optical transceivers for data. They have a yt channel by the name of "MBLedRose".

pvim
join shbcf.ru