Open segfault16 opened 5 years ago
Quick estimation on the achievable framerate per 512 LED long strip:
Taken from a datasheet (https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) for WS2812B LEDs, each controller can display 1677721 distinct colors (i.e. 24bit per LED, 8bit per R/G/B). So in order to update the whole strip, you'd need to write 24*512 = 12288 bits. Taken from the same datasheet, the controller on the WS2812B LED can handle 800kbit/s, so writing the whole strip will take 12288bits / 800kbit/s = 0.01536s, which is ~65 Hz. So in theory, aiming for 60 FPS is feasible. The Adafruit 16-Channel 12-bit PWM/Servo Driver supports up to 1.6 kHz PWM frequency, so no issue here as well. Given you can provide the data for all 48 Channels fast enough via RPi I2C, I don't see why this shouldn't work in a parallelized setup, at least on paper.
Edit: I have to correct myself. In my mind I've read this to be up to 1.6 MHz PWM frequency on the Adafruit board. 1.6 kHz is not sufficient for the WS2812B LED controllers, which have max timings for data input of 1.25µs per bit (i.e. 800 kHz). So no, the Adafruit PCA9685 is not an option here !
As for right now we can drive up to 1000 LED's @ 30 Hz with the GPIO pin of the RaspberryPi 3. We want to be able to drive around 7000 LED's at a framerate of 60 Hz.
So far I've seen the following options in order to drive more LEDs at higher framerates:
RaspberryPi + Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface
Sources:
Beagle Board Black/Green
Sources:
Using the video interface
Sources: