The ESP32 series from Espressif have been a successful line of products, offering a powerful microcontroller with on-chip wireless networking. There’s a snag though in their practice of calling all of them ESP32s despite wildly varying specifications and even different processor cores, such that it’s easy to lose track of exactly what the chip in front of you can do. [Bitluni] was faced with updating his VGA library to include a newer variant, and was pleasantly surprised to find that it includes a far more capable display peripheral which enables significantly higher resolutions than previously.
The part in question is the ESP32-S3, a version of the chip with the dual Extensa cores we’re familiar with from earlier versions, but the interesting addition of an LCD controller. His previous VGA on ESP32 used the I2S peripheral and sacrificed some of the available bits to create sync pulses, while this version is not only faster but also includes dedicated sync hardware. He can now do up to 16-bit colour in as much as 1024×768 resolution as can be seen in the video below the break, though this feat requires a slightly out of spec framerate that only works on some screens. It’s by no means perfect because the peripheral is intended for LCD rather than VGA use, but it’s pushing microcontroller VGA to new heights and we look forward to any other uses people will put it to.
We covered the original Bitluni ESP32 VGA library when it first appeared.
It’s Xtensa, not Extensa
“He can now do up to 16-bit colour in as much as 1024×768 resolution”
Unfortunately the S3 has only 512KB of RAM, using 196KB of is would us give 2 bit per Pixel. Or 294KB for
3 bits per Pixel.
So you can have 8 colors out of the 16 Bit Palette on screen.
or you could watch the video and learn about 8MB of psram :)
What is with this website and people who should absolutely know better (and know what they’re talking about) and making wildly incorrect assumptions based off a short little written blurb by the article’s author?
What you’re describing is The Internet Disease, where people read four words from a title, assume they know what the source material is about, and write a strawman rebuttal about how wrong it is, when they have no clue what the actual material covered. Hackaday has a pretty virulent strain of this in its comment culture.
Cliff Biffle did 16-bit 800×600@60FPS on an STM32F407. No graphics hardware, not enough RAM to hold a single 800×600 color image, and only enough speed for four CPU cycles _per pixel_. It can be done ;)
https://github.com/cbiffle/m4vga-rs
This problem was solved before memory was cheap and fast enough to have at least one bit per pixel. A display list was processed to generate the data stream on the fly.
So more like EGA rather than VGA?
I remember an early VGA card that came with a whopping 256k and had 3 empty sockets for 512k and 1mb upgrade, which allowed up to 8 bits on 640×480. It was a pain in the butt to insert the huge 12″ video card in those long 486’s ISA and VESA slot, glad VESA died quickly in favor of smaller PCI slot that were faster, more reliable, and a whole lot easier to insert and remove.
Cirrus Logic made cards like that.
They’re still in business…
no VLB VGA card came with 256KB of ram ever :)
I always print the gerber copper layers to check fitting after i did not do that the first time with a batch of 100 boards…
And proven good footprints end up in my own library after checking them on a real board.
Always do this, whenever I get lazy or forget it comes back to bite me!
That is an excellent idea. I just guessed on some cap sizes recently and a short walk to the printer could have saved me the hassle of trying to bodge capacitors on to a PCB that are much too large lol.
I have replaced physical fitting with 3D models. Fortunately more and more manufacturers are offering them.
https://www.youtube.com/watch?v=VaT23TRO9U8&ab_channel=GeorgiAngelov
Not the first to use the LCD driver to do this….
https://github.com/bitfixer/esp32s3vga/blob/main/src/VGA.cpp
Oh its definitely the first, because:
– its not just using the driver, its using raw peripheral
– its not limited to 800×600, its doing 1024×768
– thanks to skipping/rewriting parts of the driver its no longer doing individual transfers per V-blank thus letting CRTs maintain PLL lock. esp32 driver produces artefacts on CRTs and some LCDs that fail to resync quick enough every frame. Video @7:00
Is the ESP32-S3 capable of generating video seen here with *stable* wifi switched on and active at the same time? A lot of these projects previously sacrificed usability and stability of wifi for pushing the ESP32 to its limits. IE wifi must be switched off or used sparingly. Does the S3 LX7 dual core have enough in it for streaming video over wifi? The S3 is more expensive and starts to run into the domain of low cost ARM chips with dedicated HDMI. What is the cost/feature advantage here?