I’m going to ask some questions that have probably been answered a lot, but I find myself not knowing what to look for and a bit confused using the forum search so here we go anyways
I’m building the passe - a geodesic dome lined with ws2811s. Though it is fairly large, and will be around 1500-1600 pixels total. I know i know but i’m not great with tools and needed to start small before scaling up.
I’ve gotten most of them up, but i’ve noticed that as I’m changing the number of pixels to around 700-800, the fps for most patterns starts dropping significantly. By 1000, it’s at 5fps on most patterns or less. I’m assuming it’s just too much for the board to handle.
I’d really like to basically have a setup with two different ecosystems, spliced every 500 pixels. One master artnet controller, and either several pixelblaze synced, or one with multi-out. So that I can both map the dome with cool stuff and just sort of have it do it’s own thing with pixelblaze.
My questions: Is there anything big I’m missing as to why i’m not able to run more pixels on one controller? I have double buffer on and have tried all the timing settings. If not and i just need more horsepower, should i get several pixelblaze, or a multiout (or several if it works like that?) And how can I make it so that i can switch between these ecosystems somehow? If one ecosystem is just not sending data while the other is, connect them both to data in, will that work?
The specs say that Pixelblaze should be able to generate 12K-45K pixels per second; that’s matched my experience pretty closely (but granted, I’m usually driving the faster APA102s/SK9822s). For your project of 1600 pixels, that implies 7-28 FPS; Since you’re seeing 5 FPS at 1000 pixels, I’m guessing it’s because WS2811s are slower.
Have you checked out the $15 output expander? If Pixelblaze’s code is generating high FPS, I think this might help your WS2811s update faster. The specs for the expander mention 66K pixels per second per serial line.
It’s also possible the patterns you’re using have some inefficient code, but I’m guessing you’re running a lot of the default patterns; most of them don’t have nonlinear time complexity (like O(n^2) with respect to pixels or something).
FYI you can 3D map the dome with Pixelblaze’s mapper as well.
If you give up on full individual control and accept some symmetry, you can drive multiple strips off a single output; think 5 dome radial slices at 320 LEDs each driven by a single controller.
Assuming you do want to individually address every LED and you do use multiple Pixelblaze (they’re so cheap, why not) and sync them over the network using Firestorm, let’s talk about how you can drive the same strip from two different controllers.
It might “just work” to connect both controllers data outputs to a strip’s DIN, but my concern is one controller in a low state trying to sink the current from the other in a high state. It doesn’t seem a good recipe for the notoriously fragile neopixel signal timing scheme.
I can think of a few better options off the top of my head:
Switch the power. Use a switch to only power one controller or the other, and tie the data lines together. I would definitely test this with a long run before committing, as I don’t remember whether you can expect enough high frequency impedance from an unpowered level shifter or other IC.
A high-speed OR gate. I think a 74LS32 might be good to 30MHz. The big benefit is you can just always leave it on, and whichever one is sending data will display. To make sure this is a viable solution, I’d scope each controller in some “no pattern” state to be sure it’s truly dead at 0V the whole time.
Data switch - maybe a remotely switched SPDT solid state relay to select which controller’s data line is connected to the strip. I think the proper way to do this might be to use something called a multiplexer (“mux”).
Hope this helps. Please post pics/vids when it’s done!
Sorry for the delay, i had actually been dming with Ben on facebook trying to brainstorm. Okay so FPS is actually about 10 with ws2812, and with “none” selected goes to 15 or so. Ben invited me to the beta for v3, so i’ll be seeing if one can make 30 fps, and two 60 for “that butter” haha. We had also talked about the spdt switch, mux, and power as being viable switching options. But as a beginner, i feel that a hard or soft mux is a bit beyond my skill set. I know one only expands skills by trying but i would need something a little more broken down. However the power and other options work beautifully so no need to reinvent the wheel.
Also, from what Ben said, there is a resistor that would prevent some of the current problems (that is actually intended for impedance matching) if both were connected to DIN, it would just rely on the other controller having a similar resistor setup. Best way is to try and then work from there. So I’ll keep this updated
How exactly would one map the dome using the mapping function?