Rendered FPS vs maximum refresh rate ... for strobing

I have a WS2812 string running at 800KHz which I believe corresponds to 60Hz refresh rate. I would like to strobe some pixels at 30Hz. Even frames on, odd frames off. However, my pattern is rendering at ~106 FPS (on a pico at 80Hz … it’s a very simple pattern).

Does the Pixelblaze only render as many frames as can be displayed, so ~106 is the theoretical frame rate based on time left over each frame? If so, I can strobe just by alternating frames.

Or maybe … extra frames are rendered but not sent on the wire, so the parity of the frame number can’t be used to determine the state of the strobe. I guess I could accumulate delta to determine when 1/60 of a second has passed, but it seems like that could happen on a displayed or not-displayed frame, which would likely give some weird jitter.

In the gaming world, e.g. first person shooters, it’s fine to render faster than your display, because your computer is a space heater and you pulled the trigger at exactly the right moment on a frame that wasn’t displayed and still want to have hit your target. Or, you can turn on ‘sync to vblank’ and only render up to the display’s framerate.

Pixelblaze renders as fast as the cpu and pixels can keep up. It will stall a frame if it is still busy sending data out. The latest version now pipelines ws2812, rendering the next frame as the last one streams out. So it’s possible, you are just limited by data bandwidth.

You should be able to toggle each frame, getting a 53hz flash.

It’s possible to overdraw on an output expander that is unbalanced, e.g. if you only used one output, you could render and send twice as many frames as it can draw. In that case it skips frames.

2 Likes

Awesome, thanks for the details! Come to think of it, it doesn’t make sense that a particular LED type would have a specific frame limit rate, since that depends on the number of pixels. Not sure where I got the idea that these were capped at 60Hz.

1 Like