Help: Understanding the Library

Hi there,

I’m having trouble understanding the claim that a chain of 32 panels would still maintain a refresh rate of around 100Hz with full 24-bit color.

My calculations, however, suggest a significantly lower FPS:

Assuming we use 64x64 pixel panels with a 1:32 scan rate and a maximum data throughput of 30MHz, chaining 32 of these panels would mean a total of 2048x64 pixels need regular updating.

To update a single row of pixels, 2048 clock cycles are required, taking 68.3µs (2048 / 30MHz). Given the 1:32 scan rate, shifting data of one complete bit plane would require 32*68.3 = 2.18ms.

For 24-bit color, BCM is deployed based on 8 bit planes. These 8 bit planes are displayed across 2^8 - 1 = 255 equally distributed time slices. Thereby, the duration of a single time-slice must be at least the time needed to output one complete bit plane, which is 2.18ms.

Thus, the total time to render a 24-bit frame would be 255*2.2ms = 557ms, resulting in a frame rate of approximately 1.8 FPS.

Even for smaller panels, such as 32x16 pixels, a maximum framrate of 14.4 FPS can be reached based on my calculations.

These calculated framerates are significantly lower than the promised 100Hz. Could someone please help me understand where my calculations might be incorrect? I guess that PWM is implemented in a more efficient way than BCM but I cannot figure out how to control the matrix based on PWM signals combined with the daisy chained shift registers of the led panels.

I would very greatful if anyone could give me a hint. Thank you in advance!

I think your calculations are pretty close to reality. I setup about that many panels and was able to run them at about 30 to 40 fps but the timing was way off at the end of the chain causing some artifacts. I decided to go buy some of the cheap fpga boards instead of using a rpi.

Hi Bryan, thank you for your swift response!

Assuming the calculation is accurate, the primary bottleneck would be the 30MHz data throughput of the panel’s internal shift registers. This means that even FPGA-based boards may not reach higher frame rates for 24-bit color resolution as they also need to perform a sort of “software” PWM. The FPGA boards may improve stability through more accurate timing, but they are still bound by the maximum data rate of 30MHz for the shift registers and thus shouldn’t achieve higher FPS rates than a raspberry pi.

To attain refresh rates of 100Hz or higher (as mentioned in the GitHub repository) the library would have to extend the standard BCM technique somehow, assuming the initial calculations are correct.

Thus, there must be a missing piece or technique that increases the framerate. I would be very grateful for any further input and feedback!

Hello babsher, can you point me to that FPGA boards? they act as sending card/box?

Novastar is the most popular company I have seen that make them. There are other knock offs however. These companies don’t support all types of panels however so you mileage may vary.

You might have some luck asking on Reddit. Reddit - Dive into anything

There are a few video / vjing subreddit with some smarter people than me on there.

So the thing with the FPGA boards is they can do a lot more output in parallel so your chains can be smaller. This is how they get around the 30mhz limit. So you would have more FPGA boards with 24 parallel chains of 2 - 4 boards. The best board I have seen has a max pixel area of 512 x 512. It says it can refresh that at 60 FPS with 16 parallel chains.

Thanks for the help , I really appreciate it

I already knew a little about that cards, the point is: how are you sending image to them? :innocent:

Since their protocol is proprietary I am using one of their LED controller to talk to the FPGA boards.