hpwit / I2SClocklessVirtualLedDriver

MIT License
32 stars 6 forks source link

S3 support #26

Open JChalka opened 1 week ago

JChalka commented 1 week ago

Working on a board with the ESP32-S3 instead of the ESP32. Obviously this library won't compile for the S3, am possibly looking for pointers in how I could adapt the library to work with it. Was thinking to fork it and then could possibly do a PR for an S3 branch

I see you also have created the I2SClocklessLedDriverESP32-S3 library which I'm sure could be a good reference for such a thing. I typically work with Teensys and bare FastLED so still becoming aquainted with these libraries for ESP32, although from what I can understand you're using the ESP32's LCD interface to be able to output to the ESP with up to 24 lanes for LEDs (and if what I've gathered is correct, the S3 would be limited to 16 lanes instead)

bit of info about the panels themselves;

I might try to bring it to the P4 at some point as I have a dev kit on-hand, but its not exactly a high priority yet as the chip isn't exactly at release status yet.

hpwit commented 1 week ago

Hello Thank you for using my libraries. I have a first draft of the virtual driver for the esp32 s3 but I think in your case this is a too much has your panel are 8x8 matrices I would join them by packets of 4 which will still gives you 130 fps or by two which will make 260fps while using 15 pins only.

I can still send you the code for the virtualdriver (really early build)

JChalka commented 1 week ago

Sure I'd love to give it a shot, thanks for writing these libraries! they're pretty neat

etleli commented 4 days ago

@JChalka I'm also working on the S3 and was wondering if you adapted the library or if you went with the 15 pin approach?

JChalka commented 4 days ago

@JChalka I'm also working on the S3 and was wondering if you adapted the library or if you went with the 15 pin approach?

I have yet to work on adapting the library, still working on getting myself familiar with the ESP-IDF Docs. In my case the 15 pin (actually 16 since the mainboard itself has 128 LEDs split into two lines) approach wouldn't exactly work as I'm also driving a keyswitch matrix of the same amount (5 rows 6 columns) which leaves me about 2 physical pins left to work with in its current state. I'm using the N16R8 so I can't use the pins dedicated to the octal PSRAM also. Of course there's always io extension options but I'm trying to avoid adding more unnecessary ICs.

Driving the LEDs as fast as I possibly can given the matrix size is also pretty important, although I'm aware that FPS needs to be limited to around 400fps or so otherwise the ws28xx start to not perform as to their expected behavior. I typically implement my own take on Black Frame Insertion which sets every other frame or so to black which I use to reduce the perceived brightness. I'm using the SK6805-EC10 and the LEDs are embedded inside the keycaps so not blinding myself is pretty important, but so is having a bit of color depth. with black frame insertion I can set values such as 24 or 32 for brightness but still have a perceived brightness that looks essentially like if you were to set the brightness to 8. The faster I can drive the displays the more black frames I can insert which also helps in lowering the temperature output of the LEDs. Although there is some sort of an upper limit of frames you can insert before the human eye starts to notice flicker, this is especially so at lower FPS values.