do you know what chips it comes with ? I see that since June 2022 it ships with these https://cdn-shop.adafruit.com/product-files/1655/SKC6812RV__12VOP0274E_REV.A1_EN%2812%29.pdf
The timing of the low signal here is slightly different from what's in O2L. Try changing
{.min = 750, .max = 950}, // T0L
in AddressableLeds.h to
{.min = 850, .max = 1000}, // T0L
and change
static constexpr double kSpiLeadingZerosNs = 50000; // determined empirically
to
static constexpr double kSpiLeadingZerosNs = 220000; // determined empirically
See if that changes anything.
Now for the real stuff: according to the electric specs in the datasheet the power supply Vdd needs to be 3.7V < Vdd < 5.5V and the high "Input signal flip threshold" VIH has to be at least Vdd*0.7, so if you are powering it from 5V, the 3.3V signal from Bela will not be enough.
This means you need some way of providing an in-spec voltage. A few options:
- power the LED board not from 5V but from 5V in series with a power diode. The dropout on the diode 0.6V will give a Vdd of 4.4V and a VIH = 0.7 * 4.4V = 3.08V so the Bela's output should be sufficient to drive the data line. As the PWM drivers are supposedly constant-current, then the drop in power shouldn't affect brightness, but if you have many LEDs, then you may have to be careful about the current limits of the diode: I recommend an 1n4007 or better. This is probably the easiest to try out (as it's common to have spare power diodes around).
- level shifter: add a 3.3V to 5V non-inverting level shifter
- transistor: use a transistor as an inverting amplifier to turn 3.3V into 0V and 0V into 5V. I think this needs the following changes in the code, but I cannot test it:
- set kSpiLeadingZerosNs = 0;
- change
if(value)
in AddressableLeds.cpp to
if(!value)