From 15763b12b115c71f4a8327dde16adb8f5cf461dd Mon Sep 17 00:00:00 2001 From: mrfaptastic <12006953+mrfaptastic@users.noreply.github.com> Date: Wed, 1 Feb 2023 21:04:19 +0000 Subject: [PATCH] Update documentation on higher scan rate panels Also breaks the VirtualMatrixPanel backward compatibility for 1/4 scan panels. --- README.md | 119 ++++++++++-------- doc/ScanRateGraphic.jpg | Bin 0 -> 113911 bytes doc/ScanRateGraphic.odp | Bin 0 -> 35732 bytes .../Four_Scan_Panel.ino} | 40 +++--- .../README.md | 0 src/ESP32-VirtualMatrixPanel-I2S-DMA.h | 32 +++-- 6 files changed, 105 insertions(+), 86 deletions(-) create mode 100644 doc/ScanRateGraphic.jpg create mode 100644 doc/ScanRateGraphic.odp rename examples/{One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino => Four_Scan_Panel/Four_Scan_Panel.ino} (70%) rename examples/{One_Eight_1_8_ScanPanel => Four_Scan_Panel}/README.md (100%) diff --git a/README.md b/README.md index 55568db..31ca561 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# HUB75 RGB LED matrix library utilizing ESP32 DMA Engine +# HUB75 RGB LED matrix panel library utilizing ESP32 DMA __[BUILD OPTIONS](/doc/BuildOptions.md) | [EXAMPLES](/examples/README.md)__ | [![PlatformIO CI](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-DMA/actions/workflows/pio_build.yml/badge.svg)](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-DMA/actions/workflows/pio_build.yml) @@ -28,43 +28,57 @@ __[BUILD OPTIONS](/doc/BuildOptions.md) | [EXAMPLES](/examples/README.md)__ | [! - [Thank you!](#thank-you) ## Introduction -This ESP32 Arduino/IDF library for HUB75 / HUB75E connector type 64x32 RGB LED 1/16 Scan OR 64x64 RGB LED 1/32 Scan LED Matrix Panel, utilities the DMA functionality provided by the ESP32's 'LCD Mode'. +* This is an ESP32 Arduino/IDF library for HUB75 / HUB75E RGB LED panels. +* This library 'out of the box' (mostly) supports HUB75 panels where TWO rows/lines are updated in parallel... referred to as 'two scan' panels within this library's documentation. +* 'Four scan' panels are also supported - but please refer to the Four Scan Panel example. +* The library uses the DMA functionality provided by the ESP32's 'LCD Mode' for faster output. ### Features -- **Low CPU overhead** - once initialized pixel data is pumped to the matrix inputs via DMA engine directly from memory -- **Fast** - updating pixel data involves only bit-wise logic over DMA buffer memory, no pins manipulation or blocking IO -- **Full screen BCM** - library utilizes [binary-code modulation](http://www.batsocks.co.uk/readme/art_bcm_5.htm) to render pixel color depth / brightness over the entire matrix -- **Variable color depth** - up to TrueColor 24 bits output is possible depending on matrix size/refresh rate required -- **CIE 1931** luminance [correction](https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/) (aka natural LED dimming) -- **Adafruit GFX API** - library could be build with AdafruitGFX, simplified GFX or without GFX API at all +- **Low CPU overhead** - Pixel data is sent directly with the use of hardware-backed DMA, no CPU involvement +- **Fast** - Updating pixel data involves only bit-wise logic over DMA buffer memory, no pins manipulation or blocking IO +- **Full screen BCM** - Library utilizes [binary-code modulation](http://www.batsocks.co.uk/readme/art_bcm_5.htm) to render pixel color depth / brightness over the entire matrix to give reasonable colour depth +- **Variable color depth** - Up to TrueColor 24 bits output is possible depending on matrix size/refresh rate required +- **CIE 1931** luminance [correction](https://ledshield.wordpress.com/2012/11/13/led-brightness-to-your-eye-gamma-correction-no/) (aka natural LED dimming) implemented +- **Adafruit GFX API** - Library can be built with AdafruitGFX, simplified GFX or without a GFX API at all -If you wanna ask "*...OK, OK, than what's the price for those features?*" I'll tell you - "[memory](/doc/memcalc.md), you pay it all by precious MCU's internal memory (SRAM) for the DMA buffer". - -Please use the ['Memory Calculator'](/doc/memcalc.md) to see what is actually achievable with a typical ESP32. -![Memory Calculator](doc/memcalc.jpg) - -Note: Things are better for more recent ESP32 variants, refer [below](#memory-constraints) on how to use external SPIRAM/PSRAM for the DMA buffer which drives the HUB75 panels. - - -## ESP32 Supported -This library supports the: -* Original ESP32 - That being the ESP-WROOM-32 module with ESP32‑D0WDQ6 chip from 2017. This MCU has 520kB of SRAM which is much more than all the recent 'reboots' of the ESP32 such as the S2, S3 etc. +## ESP32 variants supported +* Original ESP32 - That being the ESP-WROOM-32 module with ESP32‑D0WDQ6 chip from ~2017. * ESP32-S2; and * ESP32-S3 -RISC-V ESP32's (like the C3) are not, and will never be supported as they do not have parallel DMA output required for this library. +RISC-V ESP32's (like the C3) are not supported as they do not have the hardware 'LCD mode' required for this library. -## Panels Supported -* 64x32 (width x height) pixel 1/16 Scan LED Matrix 'Indoor' Panel, such as this [typical RGB panel available for purchase](https://www.aliexpress.com/item/256-128mm-64-32-pixels-1-16-Scan-Indoor-3in1-SMD2121-RGB-full-color-P4-led/32810362851.html). -* 64x64 pixel 1/32 Scan LED Matrix 'Indoor' Panel. -* 32x16 pixel 1/4 Scan LED Matrix 'Indoor' Panel using an ingenious workaround as demonstrated in the 32x16_1_4_ScanPanel example. -* 126x64 [SM5266P](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164) 1/32 Scan Panel +## Memory is required! +"*What's the price for those features?*" - It's [memory](/doc/memcalc.md), you pay it all by precious MCU's internal memory (SRAM) for the DMA buffer". + +A typical 64x32px panel at 24bpp colour uses about 20kB of internal memory. + +Please use the ['Memory Calculator'](/doc/memcalc.md) to see what is *typically* achievable with the typical ESP32. ![Memory Calculator](doc/memcalc.jpg) + +For the ESP32-S3 only, you can use SPIRAM/PSRAM to drive the HUB75 DMA buffer when using **Octal SPI-RAM** (i.e. ESP32 S3 N8R8 variant). However, due to bandwidth limitations, the maximum output frequency is limited to approx. 13Mhz, which will limit the real-world number of panels that can be chained without flicker. + +To enable PSRAM support on the ESP32-S3, refer to [the build options](/doc/BuildOptions.md) to enable. + +For all other ESP32 variants (like the most popular ‘original’ ESP32), [only *internal* SRAM can be used](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/55), so you will be limited to the ~200KB or so of 'free' SRAM (because of the memory used for your sketch amongst other things) regardless of how many megabytes of SPIRAM/PSRAM you may have connected. + + +## Suported panels +### Parallel scan lines +* 'Two scan' panels where **two** rows/lines are updated in parallel. + * 64x32 (width x height) 'Indoor' panels, such as this [typical RGB panel available for purchase](https://www.aliexpress.com/item/256-128mm-64-32-pixels-1-16-Scan-Indoor-3in1-SMD2121-RGB-full-color-P4-led/32810362851.html). Often also referred to as 1/16 'scan panel' as every 16th row is updated in parallel (hence why I refer to it as 'two scan') + * 64x64 pixel 1/32 Scan LED Matrix 'Indoor' Panel + +* 'Four scan' panels where **four** rows/lines are updated in parallel. + * 32x16 pixel 1/4 Scan LED Matrix 'Indoor' Panel using an ingenious workaround as demonstrated in the Four_Scan_Panel example. + * 126x64 [SM5266P](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/164) Ones interested in internals of such matrices could find [this article](https://www.sparkfun.com/news/2650) useful. Due to the high-speed optimized nature of this library, only specific panels are supported. Please do not raise issues with respect to panels not supported on the list below. -## Panel driver chips known to be working well +![Panel Scan Types](doc/ScanRateGraphic.jpg) + +### Driver chips known to be working well * ICND2012 * [RUC7258](http://www.ruichips.com/en/products.html?cateid=17496) @@ -72,28 +86,19 @@ Due to the high-speed optimized nature of this library, only specific panels are * SM5266P ## Panels Not Supported -* 1/8 Scan LED Matrix Panels are not supported. * RUL5358 / SHIFTREG_ABC_BIN_DE based panels are not supported. * ICN2053 / FM6353 based panels - Refer to [this library](https://github.com/LAutour/ESP32-HUB75-MatrixPanel-DMA-ICN2053), which is a fork of this library ( [discussion link](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-DMA/discussions/324)). * Any other panel not listed above. Please use an [alternative library](https://github.com/2dom/PxMatrix) if you bought one of these. -## Cool uses of this library -There are a number of great looking LED graphical display projects which leverage this library, these include: -* [128x64 Morph Clock](https://github.com/bogd/esp32-morphing-clock) -* [FFT Audio Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/149) -* [Clock, GIF Animator and Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/153) -* [Aurora Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/188) -* [Big Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/155) -* [Clockwise](https://jnthas.github.io/clockwise/) - # Getting Started ## 1. Library Installation -* Dependency: You will need to install Adafruit_GFX from the "Library > Manage Libraries" menu. -* Download and unzip this repository into your Arduino/libraries folder (or better still, use the Arduino 'add library from .zip' option. -* Library also tested to work fine with PlatformIO, install into your PlatformIO projects' lib/ folder as appropriate. Or just add it into [platformio.ini](/doc/BuildOptions.md) [lib_depth](https://docs.platformio.org/en/latest/projectconf/section_env_library.html#lib-deps) section. +* Dependancy: You will need to install Adafruit_GFX from the "Library > Manage Libraries" menu. +* Install this library from the Arduino Library manager. + +Library also tested to work fine with PlatformIO, install into your PlatformIO projects' lib/ folder as appropriate. Or just add it into [platformio.ini](/doc/BuildOptions.md) [lib_depth](https://docs.platformio.org/en/latest/projectconf/section_env_library.html#lib-deps) section. ## 2. Wiring the ESP32/ESP32-S2/ESP32-S3 to an LED Matrix Panel @@ -113,7 +118,7 @@ If you want to change the GPIO mapping at runtime, simply provide the wanted pin #define B_PIN 19 #define C_PIN 5 #define D_PIN 17 -#define E_PIN -1 // required for 1/32 scan panels, like 64x64. Any available pin would do, i.e. IO32 +#define E_PIN -1 // required for 1/32 scan panels, like 64x64px. Any available pin would do, i.e. IO32 #define LAT_PIN 4 #define OE_PIN 15 #define CLK_PIN 16 @@ -136,25 +141,18 @@ Various people have created PCBs for which one can simply connect an ESP32 to a Please contact or order these products from the respective authors. +### Can I use with a larger panel (i.e. 64x64px square panel)? +If you want to use with a 64x64 pixel panel (typically a HUB75*E* panel) you MUST configure a valid *E_PIN* to your ESP32 and connect it to the E pin of the HUB75 panel! Hence the 'E' in 'HUB75E' + + ## 3. Run a Test Sketch Below is a bare minimum sketch to draw a single white dot in the top left. You must call begin() before you call ANY pixel-drawing (fonts, lines, colours etc.) function of the MatrixPanel_I2S_DMA class. Once this is working, refer to the [PIO Test Patterns](/examples/PIO_TestPatterns) example. This sketch draws simple colors/lines/gradients over the entire matrix and it could help to troubleshoot various issues with ghosting, flickering, etc... ->Note: Requires the use of [PlatformIO](https://platformio.org/), which you should probably use if you aren't already. -# More Information -## Build-time options -Although Arduino IDE does not [seem](https://github.com/arduino/Arduino/issues/421) to offer any way of specifying compile-time options for external libs there are other IDE's (like [PlatformIO](https://platformio.org/)/[Eclipse](https://www.eclipse.org/ide/)) that could use that. Check [Build Options](doc/BuildOptions.md) document for reference. -## Memory constraints -If you are going to use large/combined panels make sure to check for [memory constraints](/doc/i2s_memcalc.md). - -NOTE: You can use SPIRAM/PSRAM to drive the HUB75 DMA buffer only on the ESP32-S3 and with Octal SPI-RAM (i.e. ESP32 S3 N8R8 variant). However, due to bandwidth limitations, the maximum output frequency is limited to approx. 16Mhz, which will limit the real world number of panels that can be chained without flicker being obvious. This is enabled at compile time, refer to [the build options](/doc/BuildOptions.md) to enable. - -For all other ESP32 variants (like the most popular ‘original’ ESP32), [only *internal* SRAM can be used](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/issues/55), so you will be limited to the ~200KB or so of 'free' SRAM regardless of how many megabytes of SPIRAM/PSRAM you may have connected. - -## Can I use with a larger panel (i.e. 64x64px square panel)? -If you want to use with a 64x64 pixel panel (typically a HUB75*E* panel) you MUST configure a valid *E_PIN* to your ESP32 and connect it to the E pin of the HUB75 panel! Hence the 'E' in 'HUB75E' +Note: Requires the use of [PlatformIO](https://platformio.org/), which you should probably use if you aren't already. +# Further information ## Can I chain panels? Yes! @@ -168,7 +166,7 @@ Resolutions beyond 128x64 are more likely to result in crashes due to [memory](/ ![ezgif com-video-to-gif](https://user-images.githubusercontent.com/12006953/89837358-b64c0480-db60-11ea-870d-4b6482068a3b.gif) - ## Panel Brightness +## Adjusting Panel Brightness By default you should not need to change / set the brightness value (which is 128 or 50%) as it should be sufficient for most purposes. Brightness can be changed by calling `setPanelBrightness(xx)` or `setBrightness8(xx)`. @@ -185,7 +183,8 @@ Serial.begin(115200); ``` ![Brightness Samples](https://user-images.githubusercontent.com/55933003/211192894-f90311f5-b6fe-4665-bf26-2f363bb36047.png) - +## Build-time options +Although Arduino IDE does not [seem](https://github.com/arduino/Arduino/issues/421) to offer any way of specifying compile-time options for external libs there are other IDE's (like [PlatformIO](https://platformio.org/)/[Eclipse](https://www.eclipse.org/ide/)) that could use that. Check [Build Options](doc/BuildOptions.md) document for reference. ## Latch blanking If you are facing issues with image ghosting when pixels has clones with horizontal offset, than you try to change Latch blanking value. Latch blanking controls for how many clock pulses matrix output is disabled via EO signal before/after toggling LAT signal. It hides row bits transitioning and different panels may require longer times for proper operation. Default value is 1 clock before/after LAT row transition. This could be controlled with `MatrixPanel_I2S_DMA::setLatBlanking(uint8_t v)`. v could be between 1 to 4, default is 1, larger values won't give any benefit other than reducing brightness. @@ -209,6 +208,16 @@ This project was inspired by: * 'SmartMatrix': https://github.com/pixelmatix/SmartMatrix/tree/teensylc * Sprite_TM's demo implementation here: https://www.esp32.com/viewtopic.php?f=17&t=3188 + +## Cool uses of this library +There are a number of great looking LED graphical display projects which leverage this library, these include: +* [128x64 Morph Clock](https://github.com/bogd/esp32-morphing-clock) +* [FFT Audio Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/149) +* [Clock, GIF Animator and Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/153) +* [Aurora Audio Visualiser](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/188) +* [Big Visualisation](https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/discussions/155) +* [Clockwise](https://jnthas.github.io/clockwise/) + # Thank you! * [Brian Lough](https://www.tindie.com/stores/brianlough/) ([youtube link](https://www.youtube.com/c/brianlough)) for providing code contributions, hardware and suggestions * [Vortigont](https://github.com/vortigont) for his game changing code contributions and performance optimisations diff --git a/doc/ScanRateGraphic.jpg b/doc/ScanRateGraphic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a875316fdaddca351a2caafcffdd31d4f7fb496c GIT binary patch literal 113911 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 literal 0 HcmV?d00001 diff --git a/examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino b/examples/Four_Scan_Panel/Four_Scan_Panel.ino similarity index 70% rename from examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino rename to examples/Four_Scan_Panel/Four_Scan_Panel.ino index d44bb76..856d7e5 100644 --- a/examples/One_Eight_1_8_ScanPanel/One_Eight_1_8_ScanPanel.ino +++ b/examples/Four_Scan_Panel/Four_Scan_Panel.ino @@ -2,12 +2,14 @@ * Description: * * The underlying implementation of the ESP32-HUB75-MatrixPanel-I2S-DMA only - * supports output to 1/16 or 1/32 scan panels - which means outputting - * two lines at the same time, 16 or 32 rows apart. This cannot be changed - * at the DMA layer as it would require a messy and complex rebuild of the - * library's DMA internals. + * supports output to HALF scan panels - which means outputting + * two lines at the same time, 16 or 32 rows apart if a 32px or 64px high panel + * respectively. + * This cannot be changed at the DMA layer as it would require a messy and complex + * rebuild of the library's internals. * - * However, it is possible to connect 1/8 scan panels to this same library and + * However, it is possible to connect QUARTER (i.e. FOUR lines updated in parallel) + * scan panels to this same library and * 'trick' the output to work correctly on these panels by way of adjusting the * pixel co-ordinates that are 'sent' to the ESP32-HUB75-MatrixPanel-I2S-DMA * library. @@ -39,7 +41,7 @@ MatrixPanel_I2S_DMA *dma_display = nullptr; // placeholder for the virtual display object - VirtualMatrixPanel *OneEightMatrixDisplay = nullptr; + VirtualMatrixPanel *FourScanPanel = nullptr; /****************************************************************************** * Setup! @@ -88,11 +90,11 @@ dma_display->clearScreen(); delay(500); - // create OneEightMatrixDisplaylay object based on our newly created dma_display object - OneEightMatrixDisplay = new VirtualMatrixPanel((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); + // create FourScanPanellay object based on our newly created dma_display object + FourScanPanel = new VirtualMatrixPanel((*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y, SERPENT, TOPDOWN); // THE IMPORTANT BIT BELOW! - OneEightMatrixDisplay->setPhysicalPanelScanRate(ONE_EIGHT_32); + FourScanPanel->setPhysicalPanelScanRate(FOUR_SCAN_32PX_HIGH); } @@ -111,7 +113,7 @@ // Try again using the pixel / dma memory remapper for (int i=PANEL_RES_X+5; i< (PANEL_RES_X*2)-1; i++) { - OneEightMatrixDisplay->drawLine(i, 0, i, 7, dma_display->color565(0, 0, 255)); // blue + FourScanPanel->drawLine(i, 0, i, 7, dma_display->color565(0, 0, 255)); // blue delay(10); } */ @@ -120,10 +122,10 @@ int offset = PANEL_RES_X*((NUM_ROWS*NUM_COLS)-1); for (int i=0; i< PANEL_RES_X; i++) { - OneEightMatrixDisplay->drawLine(i+offset, 0, i+offset, 7, dma_display->color565(0, 0, 255)); // blue - OneEightMatrixDisplay->drawLine(i+offset, 8, i+offset, 15, dma_display->color565(0, 128,0)); // g - OneEightMatrixDisplay->drawLine(i+offset, 16, i+offset, 23, dma_display->color565(128, 0,0)); // red - OneEightMatrixDisplay->drawLine(i+offset, 24, i+offset, 31, dma_display->color565(0, 128, 128)); // blue + FourScanPanel->drawLine(i+offset, 0, i+offset, 7, dma_display->color565(0, 0, 255)); // blue + FourScanPanel->drawLine(i+offset, 8, i+offset, 15, dma_display->color565(0, 128,0)); // g + FourScanPanel->drawLine(i+offset, 16, i+offset, 23, dma_display->color565(128, 0,0)); // red + FourScanPanel->drawLine(i+offset, 24, i+offset, 31, dma_display->color565(0, 128, 128)); // blue delay(10); } @@ -134,15 +136,15 @@ // This only really works for a single horizontal chain for (int i = 0; i < NUM_ROWS*NUM_COLS; i++) { - OneEightMatrixDisplay->setTextColor(OneEightMatrixDisplay->color565(255, 255, 255)); - OneEightMatrixDisplay->setCursor(i*PANEL_RES_X+7, OneEightMatrixDisplay->height()/3); + FourScanPanel->setTextColor(FourScanPanel->color565(255, 255, 255)); + FourScanPanel->setCursor(i*PANEL_RES_X+7, FourScanPanel->height()/3); // Red text inside red rect (2 pix in from edge) - OneEightMatrixDisplay->print("Panel " + String(i+1)); - OneEightMatrixDisplay->drawRect(1,1, OneEightMatrixDisplay->width()-2, OneEightMatrixDisplay->height()-2, OneEightMatrixDisplay->color565(255,0,0)); + FourScanPanel->print("Panel " + String(i+1)); + FourScanPanel->drawRect(1,1, FourScanPanel->width()-2, FourScanPanel->height()-2, FourScanPanel->color565(255,0,0)); // White line from top left to bottom right - OneEightMatrixDisplay->drawLine(0,0, OneEightMatrixDisplay->width()-1, OneEightMatrixDisplay->height()-1, OneEightMatrixDisplay->color565(255,255,255)); + FourScanPanel->drawLine(0,0, FourScanPanel->width()-1, FourScanPanel->height()-1, FourScanPanel->color565(255,255,255)); } delay(2000); diff --git a/examples/One_Eight_1_8_ScanPanel/README.md b/examples/Four_Scan_Panel/README.md similarity index 100% rename from examples/One_Eight_1_8_ScanPanel/README.md rename to examples/Four_Scan_Panel/README.md diff --git a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h index b2aba42..c79c376 100644 --- a/src/ESP32-VirtualMatrixPanel-I2S-DMA.h +++ b/src/ESP32-VirtualMatrixPanel-I2S-DMA.h @@ -9,9 +9,17 @@ grid. However, the function of this class has expanded now to also manage - the output for 1/16 scan panels, as the core DMA library is designed - ONLY FOR 1/16 scan matrix panels. - + the output for + + 1) HALF scan panels = Two rows updated in parallel. + * 64px high panel = (incorrectly) referred to as 1/32 scan + * 32px high panel = (incorrectly) referred to as 1/16 scan + * 16px high panel = (incorrectly) referred to as 1/8 scan + + 2) FOUR scan panels = Four rows updated in parallel + * 32px high panel = (incorrectly) referred to as 1/8 scan + * 16px high panel = (incorrectly) referred to as 1/4 scan + YouTube: https://www.youtube.com/brianlough Tindie: https://www.tindie.com/stores/brianlough/ Twitter: https://twitter.com/witnessmenow @@ -36,9 +44,9 @@ struct VirtualCoords enum PANEL_SCAN_RATE { - NORMAL_ONE_SIXTEEN, - ONE_EIGHT_32, - ONE_EIGHT_16 + NORMAL_TWO_SCAN, NORMAL_ONE_SIXTEEN, // treated as the same + FOUR_SCAN_32PX_HIGH, + FOUR_SCAN_16PX_HIGH }; #ifdef USE_GFX_ROOT @@ -129,7 +137,7 @@ protected: bool _chain_top_down = false; // is the ESP at the top or bottom of the matrix of devices? bool _rotate = false; - PANEL_SCAN_RATE _panelScanRate = NORMAL_ONE_SIXTEEN; + PANEL_SCAN_RATE _panelScanRate = NORMAL_TWO_SCAN; }; // end Class header @@ -198,18 +206,18 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t &x, int16_t &y) coords.y = (panelResY - 1) - coords.y; } - /* START: Pixel remapping AGAIN to convert 1/16 SCAN output that the + /* START: Pixel remapping AGAIN to convert 1/2 SCAN output that the * the underlying hardware library is designed for (because - * there's only 2 x RGB pins... and convert this to 1/8 or something + * there's only 2 x RGB pins... and convert this to 1/4 or something */ - if (_panelScanRate == ONE_EIGHT_32) + if (_panelScanRate == FOUR_SCAN_32PX_HIGH) { /* Convert Real World 'VirtualMatrixPanel' co-ordinates (i.e. Real World pixel you're looking at on the panel or chain of panels, per the chaining configuration) to a 1/8 panels double 'stretched' and 'squished' coordinates which is what needs to be sent from the DMA buffer. - Note: Look at the One_Eight_1_8_ScanPanel code and you'll see that the DMA buffer is setup + Note: Look at the FourScanPanel example code and you'll see that the DMA buffer is setup as if the panel is 2 * W and 0.5 * H ! */ @@ -238,7 +246,7 @@ inline VirtualCoords VirtualMatrixPanel::getCoords(int16_t &x, int16_t &y) Serial.print("to ("); Serial.print(coords.x, DEC); Serial.print(","); Serial.print(coords.y, DEC); Serial.println(") "); */ } - else if (_panelScanRate == ONE_EIGHT_16) + else if (_panelScanRate == FOUR_SCAN_16PX_HIGH) { if ((y & 8) == 0) {