|
| 1 | +WS2811 multiple strips library |
| 2 | +============================== |
| 3 | + |
| 4 | +The WS2811 RGB LED strips have extremely many potential uses. In some |
| 5 | +of them, like POV displays, very high refresh rates are needed. If all |
| 6 | +your LEDs are connected serially, the time required to update all of the |
| 7 | +pixel values or any subset of them is 30us times the total number of |
| 8 | +LEDs connected -- even if you don't need to update all of their colours. |
| 9 | +At, say, 100 LEDs that's already 3ms per refresh, which limits your |
| 10 | +total frame rate to 300 Hz and on an Arduino if you add all other |
| 11 | +overheads you may end up with even lower rates. |
| 12 | + |
| 13 | +To improve on this a little, you can connect various strips in parallel |
| 14 | +instead of serially, i.e. with their data lines connected to different |
| 15 | +Atmega GPIO pins. The routines in this version of WS2811.h allow |
| 16 | +outputting the pixel data to up to 4 strips at the same time, if |
| 17 | +connected to GPIOs on the same Atmega port (e.g. PC0, PC1) of 2 strips |
| 18 | +if connected to different ports (e.g. PC2 and PB4). |
| 19 | + |
| 20 | +For example 4 strips of 25 LEDs connected to PC0 - PC3 (A0 to A3 in |
| 21 | +Arduino naming) can be updated in about 750us. Not an order of |
| 22 | +magnitude jump but enough to make some projects practical. |
| 23 | + |
| 24 | +Further improvement |
| 25 | +=================== |
| 26 | + |
| 27 | +With some further assumptions you can probably drive up to at least 16 |
| 28 | +different LED strips from an Arduino, this library doesn't have any |
| 29 | +support for that. It would require some preprocessing of the pixel |
| 30 | +data before outputting it to the AVR digital pins, so if you're |
| 31 | +animating something that may not be viable, but if you've got static |
| 32 | +data it might work. This also requires a good amount of memory, so |
| 33 | +your strips probably can't be too long if you're on an Atmega328P. |
| 34 | +Someone has already implemented that and explains the details here |
| 35 | +with the 8 LED strips case: |
| 36 | +http://rurandom.org/justintime/index.php?title=Driving_the_WS2811_at_800_kHz_with_an_8_MHz_AVR |
| 37 | + |
| 38 | +Installation |
| 39 | +============ |
| 40 | + |
| 41 | +Like with every Arduino library, put the files in a "libraries" |
| 42 | +directory in one of the various standard paths, and restart the |
| 43 | +Arduino IDE. The name of the subdirectory inside "libraries" needs to |
| 44 | +be WS2811. For example, clone this repository, cd inside, and do |
| 45 | +ln -s `pwd` ~/Arduino/libraries/WS2811 |
0 commit comments