Updated FAQ #5 (markdown)

Michael Miller
2023-07-17 13:50:11 -07:00
parent c340779c05
commit b0f0d8b4c3

@@ -21,7 +21,9 @@ On some tests I ran for a 3000 pixel strip, I found the following:
For the `NeoEsp8266BitBang800KbpsMethod`, it took 91518us to send the data. 1500us more overhead than the calculation would account for. For the `NeoEsp8266BitBang800KbpsMethod`, it took 91518us to send the data. 1500us more overhead than the calculation would account for.
* For the `NeoEsp8266Uart800KpbsMethod`, it took 89679us to send the data. This is faster due to the 128 byte hardware buffer. * For the `NeoEsp8266Uart800KpbsMethod`, it took 89679us to send the data. This is faster due to the 128 byte hardware buffer.
* For the `NeoEsp8266Dma800KbpsMethod`, the default for Esp8266, it took 904us to copy the data. This is faster as it uses the hardware to send the data. But it still does have to copy the working buffer into the DMA buffer. This copying of the buffers will also vary depending on the pixel count, but now we are talking on the order of 0.7us per pixel if running at 80mhz and 0.4us per pixel at 160mhz. Once its copied, it will return from 'Show()' to let you start preparing the next frame of data. * For the `NeoEsp8266Dma800KbpsMethod`, the default for Esp8266, it took 904us to copy the data. This is faster as it uses the hardware to send the data. But it still does have to copy the working buffer into the DMA buffer. This copying of the buffers will also vary depending on the pixel count, but now we are talking on the order of 0.7us per pixel if running at 80mhz and 0.4us per pixel at 160mhz. Once its copied, it will return from 'Show()' to let you start preparing the next frame of data.
* For AVR, it doesn't have enough memory for 3000. When I tried timing smaller counts using `micros()`, it showed extremely unreliable time values. This leads me to believe that `micros()` is not good enough for timing code and I am left with no alternative. * For AVR, it doesn't have enough memory for 3000. When I tried timing smaller counts using `micros()`, it showed extremely unreliable time values. This leads me to believe that `micros()` is not good enough for timing code and I am left with no alternative.
* For ESP32 it uses either the I2S DMA or the RMT DMA, so will also be very fast as it sends asynchronously. The time is just the copy and translation time into the sending buffer.
* For the NRF52840 (Nano 33 BLE) it uses PWM DMA, so will also be very fast as it sends asynchronously. The time is just the copy and translation time into the sending buffer.
#### How fast can my code provide data for the NeoPixels? #### How fast can my code provide data for the NeoPixels?
This truly depends on how complex your sketch is. How many animations, how complex the animations, and what other things are you doing. This truly depends on how complex your sketch is. How many animations, how complex the animations, and what other things are you doing.