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.


Adafruit publishes a wide range of writing and video content, including interviews and reporting on the maker market and the wider technology world. Our standards page is intended as a guide to best practices that Adafruit uses, as well as an outline of the ethical standards Adafruit aspires to. While Adafruit is not an independent journalistic institution, Adafruit strives to be a fair, informative, and positive voice within the community – check it out here: adafruit.com/editorialstandards

Join Adafruit on Mastodon

Adafruit is on Mastodon, join in! adafruit.com/mastodon

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.

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!

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

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


Maker Business — Philips, an electronics giant, has faded from its former glory

Wearables — You’re a gem

Electronics — Copper keepout!

Python for Microcontrollers — Python on Microcontrollers Newsletter: 100 CircuitPython Community Libraries, a New Arduino UNO and much more! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi

Adafruit IoT Monthly — Boxing Glove Tracker, Disconnecting Smart Appliances, and more!

Microsoft MakeCode — MakeCode Thank You!

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 3/31/2023 Featuring Adafruit Feather RP2040 RFM69 Packet Radio – 868 or 915MHz – RadioFruit and STEMMA QT! (Video)

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.