Has anyone else written any code for these bad boys?
If you haven't heard the news - the APA102 is like a WS2812B on steroids.
They use data and clock lines, not just data, so the timing isn't critical (and you control them with normal SPI, albeit in a weird mode). They have 4 bytes per pixel. 3 1's, 5 bit global brightness, then 8 bits per color. The per-color brightness is PWM'ed at 20khz, while the global brightness is PWMed separately at ~600hz. So yeah - these are like WS2812B's, only you can do dim colors better (0/255 to 1/255 to 2/255 is a very visible change in brightness - you need more than 255 steps to smoothly dim all the way down to nothing), or you can use them in fast-moving things without getting the dashed-tracers that you get from WS2812B's or things PWMed at low frequencies.
I've got these working on the bench (ie, controlling them by hand) and will be writing usable code to control them, but I wanted to check that I wasn't going to reinvent the wheel.
If nobody else has, I'll write up what I did to control them and submit to the docs.
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Has anyone else written any code for these bad boys?
If you haven't heard the news - the APA102 is like a WS2812B on steroids.
They use data and clock lines, not just data, so the timing isn't critical (and you control them with normal SPI, albeit in a weird mode). They have 4 bytes per pixel. 3 1's, 5 bit global brightness, then 8 bits per color. The per-color brightness is PWM'ed at 20khz, while the global brightness is PWMed separately at ~600hz. So yeah - these are like WS2812B's, only you can do dim colors better (0/255 to 1/255 to 2/255 is a very visible change in brightness - you need more than 255 steps to smoothly dim all the way down to nothing), or you can use them in fast-moving things without getting the dashed-tracers that you get from WS2812B's or things PWMed at low frequencies.
I've got these working on the bench (ie, controlling them by hand) and will be writing usable code to control them, but I wanted to check that I wasn't going to reinvent the wheel.
If nobody else has, I'll write up what I did to control them and submit to the docs.