Increasing framerate?

Hi all,
Does the Serial to 8x WS2812/APA102 Driver increase framerate? I am running a 192 pixel 3D fixture using UCS1903 chips. It’s working very well, but I would like to increase the framerate. I’m used to using a teensy and FastLED - I have that set up as an alternate driver. With FastLED, I use the teensy in parallel mode to increase the framerate. Does the expander do the same thing? If I output 12 channels (12 because of how the fixture is built) will I get an increase in framerate and more time for math on the PB?

Hi @clfaye,
It depends.

For WS2812 type LEDs (the UCS1903 seems to be a clone of these) the data rate can be a limitation, and the board can help out there. Are you running the 400khz or 800khz variants? The driver as an output expander has about double the 800khz bandwidth. Unfortunately it doesn’t support the 400khz variant. You’d also need to split up your 192 pixels across multiple channels to benefit from that.

I wouldn’t think the CPU is a limiting factor for 192 pixels, but it is another possible reason, especially for complex patterns. If a simple pattern doesn’t have significantly more FPS, then I would think it’s a data rate limitation.

Another way to scale up both LED data bandwidth and CPU at the same time is to use multiple Pixelblazes with Firestorm to synchronize them.

By the way, you can experiment before buying - disconnect your LEDs and switch it to Output Expander in Settings and configure it for 1-2 boards with the channel config you are looking for - the FPS will be accurate as if the hardware was connected.

You can likewise set it to “No LEDs” just to see how fast the CPU is crunching numbers.

1 Like

Thanks wizard - where can I find the reported FPS?

On the top nav bar there are a bunch of stats. Stuff like version, fps, pattern memory, expansion board.

Thanks - it looks like there may be some benefit, although the math may be the more limiting factor for fps. It also seems like there is more going on under the hood because the low brightness color changes at my framerate (about 70 fps) look REALLY good. It looks like there is some good dithering going on at a fadecandy level of quality. I’ve ordered some more parts to explore it some more.

My effects use a lot of trig in 3d space, so it’s pretty computational and that seems to be the limiting factor. Any progress on the PixelBlaze Pro based on the ESP32? Faster math, parallel output, and some more i/o would be really useful.

Yeah, especially if you have APA102/SK9822 type LEDs, Pixelblaze was designed from the beginning to support more than 8 bits per channel color. These LEDs have an additional 5 bits of brightness control per pixel that gives an equivalent range to a 13 bits per channel LED. Very few LED controllers take advantage of this.

FadeCandy does some neat things with “temporal dithering” by sending different values very quickly (~400 a sec) to the 8 bits per channel type LEDs to eek out a little more resolution and does so on the WS2812 type LEDs.

Pixelblaze V3 based on the ESP32 is in late beta stage. There have been several speed bumps along the way to ensuring a smooth running system, but these are all ironed out and the finishing touches are being worked on now. Several features built for V3 have already been backported to V2, so V3 isn’t a huge leap in features yet, but will unlock so much more in addition to the raw CPU boost. Right now I’m looking at crowd funding options

I’d love to hear what you are doing in 3D space - I’m considering adding some transformation APIs, and perhaps matrix math APIs that would significantly speed things up.

1 Like

Here’s the project. I have also posted it on LEDs are awesome. It’s 192 3d printed pixels arranged in a spere. I’ve set up a teensy with FastLED, but this video is using PixelBlaze. I’ve been learning the syntax over the last few days.

3D printed sphere

1 Like

Yes, I remember seeing your post a while ago with a partial panel piece. Very nice to see it all together! Can you share a little on the math stuff? Are you doing coordinate transformations mainly?

Those are 3 of your wave functions, one each for r g and b. Each of them is a wave in xyz space propagating out from a different origin for r g and b. I then move the origins around using your triangle function to create the feeling of motion and rotation. I really like how everything in your environment happens between 0 and 1, it makes the visualization and equations a lot more intuitive. In these kind of animations I like to change the speed of movement and rotation over time, and vary the palette. I haven’t done that yet but I’m going to play around with it some more. The math is a lot for the current PB processor. I’m used to coding on the teensy, which requires a lot more lines of code - but the new 4.1 is insanely fast. I’ve switched over to all floating point math but using FastLED in parallel I can really do basically all the math I can imagine and still hit 400 fps. I can’t wait to try out your pro version!

1 Like

The sphere looks awesome!

A thought – since the radius is fixed, you might be able to pick up a ton of speed by using 2D angular (azimuth/elevation) coordinates instead of x/y/z. Pixelblaze’s pixel mapper feature makes it pretty easy to do this – the mapper function runs only at setup time and looking up coordinate values is very fast.

If you haven’t already, take a look. It requires a slightly different mindset about how your patterns work, but it works extremely well with the rest of the Pixelblaze’s waveform & trig functions. Makes a lot of calculations, like distance between pixels on the sphere, way easier. Plus, no 4x4 transform matrices!

1 Like