Better 3D graphics on the Arduino: avoiding flickering and tearing #Arduino #Graphics

The crawlingrobotfortress blog posts about creating better 3D graphics on the Arduino Uno. With the speed and memory of Arduino 328 boards, flickering and image tearing may be common:

A while ago I purchased a cheap $4 Chinese LCD Arduino shield from Ebay. The board arrived with no documentation. … The vendor provided an archive containing a few amusingly translated datasheets, as well as a copy of Adafruit’s Arduino LCD drivers. Evidently the product is a clone of the Adafruit LCD shields, and uses the ILI9341 LCD driver. I had hoped to use the display to show short animated GIF loops. This is not, in practice, possible. Test animations loaded slowly, with noticeable flicker and vertical tearing. The Arduino does not have enough speed or bandwidth to render full-screen animation frames, but what about 3D vector graphics?

Both optimizing ILI9341 LCD drivers and rendering basic wireframe meshes have been done before. XarkLabs provides an optimized fork of Adafruit’s library. Youtube user electrodacus has also implemented an optimize driver for the ILI9341 communicating over SPI. Existing 3D wireframe demonstrations, even ones using optimized drivers, display a noticeable flicker when the animation updates. This flicker is caused by the delay between when the previous frame is erased and when the new frame is drawn.

There simply isn’t enough processing power on the Arduino to render anything significant within one frame length, and isn’t enough memory to perform off-screen rendering. The ILI9341 supports a 16-bit RGB color interface with 320×240 pixels, and buffering even a single frame would take 150 kilobytes of memory, compared to the AtMega328’s two kilobytes of RAM.

The solution is to render animation frames in such a way that the intermediate rendering stages are not noticeable to the human eye. This can be achieved by rendering subsequent frames on top of previous frames without erasing, and then erasing only those pixels that have changed.

See the techniques in the article here and in the video below.


8-6-2021 (August 6, 2021) is the Snakiest day of the year and it’s also this year’s CircuitPython Day! The day highlights all things CircuitPython and Python on Hardware. See you there!

Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on code.org, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.

Join 30,000+ makers on Adafruit’s Discord channels and be part of the community! http://adafru.it/discord

Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7pm ET! To join, head over to YouTube and check out the show’s live chat – we’ll post the link there.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Follow Adafruit on Instagram for top secret new products, behinds the scenes and more https://www.instagram.com/adafruit/

CircuitPython – The easiest way to program microcontrollers – CircuitPython.org


Maker Business — Over 500,000 manufacturing jobs are going unfilled

Wearables — Stop the sweat

Electronics — Hummm… 60Hz noise in your amplifier driving you nuts?

Python for Microcontrollers — Python on Microcontrollers Newsletter: EuroPython 2021, CircuitPython 7.0.0 alpha 5 and more! #Python #Adafruit #CircuitPython @micropython @ThePSF

Adafruit IoT Monthly — Forest Fire Beacons, IoT for Beginners, and more!

Microsoft MakeCode — MakeCode for the micro:bit - 2021 Release!

EYE on NPI — Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey

New Products – Adafruit Industries – Makers, hackers, artists, designers and engineers! — New Products 7/28/21 w/ Adafruit MCP9601 (MCP96L01) I2C Thermocouple Amplifier – STEMMA QT /Qwiic!

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at AdafruitDaily.com !



No Comments

No comments yet.

Sorry, the comment form is closed at this time.