Since we first started carrying NeoPixels back in 2012, the chainable RGB LEDs have taken over the world. And a big part of that success is due to the simplicity of their wiring – just one data wire, no matter how many pixels you’ve got. So no surprise they’re everywhere, blinking away in art exhibits, maker faire demos, DJ booths, decorations, and costumes.
But, at some point, every NeoPixel’er bumps into the constraints of that single-data-wire: the timing is very picky and often time your code has to stop completely so that it can burst out the data without any interruptions. This requirement makes it tough to create fast-update lighting effects, and limits the number of pixels you can drive before other hardware peripherals get attention.
Resident pixel-pro Paint Your Dragon (who coined the name NeoPixel dont-cha-know!) took on this challenge and has succeeded gloriously. By carefully examining the ATSAMD51 datasheet he noticed you could use the Timer 0 in ‘waveform’ mode, and create 8 unique waveforms over DMA that would handle all the pixel-pushing for you.
Thus were born the NeoPXL8 Arduino library and NeoPXL8 FeatherWing! The library runs on our Feather M4 and handles all the NeoPixeling for you, up to 8 strands of concurrent DMA output each one can be 1750 RGB pixels long for a total of 8 x 1750 = 14000 pixels. That leaves you some RAM for your code to run in as well. Even though you could connect that many pixels, what we think this ‘Wing does best is it take advantage of DMA + the SAMD51’s blazingly-fast 120MHz processor to manage animations for hundreds of pixels with ease
If you have a SAMD21 Feather, check out the sister product – NeoPXL8 FeatherWing for M0 boards.
To make connection easy, this FeatherWing does the level-shifting and pin arrangements for you. All 8 strands have a level shifter that converts the 3.3V logic level to 5V logic, there’s a little switch-cap converter that generates the clean 5V power supply for you. Then a 100 ohm resistor in line after the buffer reduces ringing on long wiring runs.
You get two options for connecting NeoPixels:
- 2 x 8 Header with ground and 5V-logic signal, in pairs
- 2 x RJ-45 ‘Ethernet’ Jacks, with ground and 5V-logic signal per twisted pair. This matches the same wiring as the OctWS2811
To keep the ‘Wing compact we let you choose which wiring you’d like to go with, just solder in the connectors you prefer. Then you’ll also need to provide power to the NeoPixels. Since you’ll need many Amps of current, we don’t manage that through the Wing – the PCB copper would be too limiting. We recommend using terminal blocks or bus bars to connect all the ground/5V power wires together and powering them from their own chunky 5V supply.
Since we are using TCC0 (Timer 0), we are limited in what pins can be used for NeoPixel output. Here are the options you have:
- Output #0 comes from either SPI SCK or RX (selectable)
- Output #1 comes from either D5 or TX (selectable)
- Output #2 comes from either D9 or I2C SCL (selectable)
- Output #3 comes from either D6 or I2C SDA (selectable)
- Output #4 comes from Digital #13
- Output #5 comes from Digital #12
- Output #6 comes from Digital #11
- Output #7 comes from Digital #10
As you can see, some of these pins are fixed (D10, 11, 12 and 13) and the rest have two options. If you absolutely cannot spare both options, you can disable that from the NeoPXL8 DMA output and live with 7 strands only.
While we designed this specifically for use with Feather M4 (SAMD51 based), you could use it with other Feathers, for the level shifting capabilities. You’ll just have to figure out what NeoPixel driver firmware you can use and what pins are available.
If that all sounds groovy to you, pick up one of these wings and check out the NeoPXL8 Arduino library examples to get your massive LED project going!