Pushing The Limits Of A 16×2 LCD With Bad Apple!!

While low-contrast, blue-on-slightly-less-blue 16-character by 2-line LCDs are extremely popular, they really are made specifically for alphanumeric use. They do an admirable job of displaying a few characters, but they don’t exactly spring to mind as a display for non-character purposes. But displaying video on a 16×2 LCD is possible, as long as you’re willing to stretch the definition of “video” a bit and use some imagination while watching.

Normally, a 16×2 display can only display a single character in each spot, chosen from a fixed character set. But [arduinocelantano] was able to leverage the eight custom character slots the display allows to build up images from arbitrary 5×8 pixel bitmaps. After using ffmpeg to scale the original video to a viewport of eight characters, a Python program was used to turn every frame of the scaled video into code to generate the custom bitmaps for each chunk of the viewport. Even with the low refresh rate of the display and the shrunken frame size, the result is a recognizable video, helped no doubt by the choice of the shadow-puppet Bad Apple!! video. Check it out after the break to see how it looks.

We saw a similar rendering of the same video on LCD a while back; that effort was amazing in that it was an EEPROM-only implementation, along with a somewhat bigger LCD with better contrast. That project served as inspiration for [arduinocelantano]’s build here, which in some ways we think looks a bit better — perhaps it’s the inverted pixels. Either way, hats off to both builders for pushing past the normal constraints and teaching us something interesting.

20 thoughts on “Pushing The Limits Of A 16×2 LCD With Bad Apple!!

    1. There is only 8 custom characters in the hd44780 (and compatible) controllers. That 8 you can manipulate per pixel. Even if you had a 20×4, the same 8 character limit applies.

      1. I guess you’d want a fast and smart algorithm to decide which 8 to do custom and which “near enough” ones to use from the character ROM… the freeze frame of the youtube vid is showing 3 that are just blocks, those didn’t need to be custom I’m sure.

      2. Yeah, like someone said, those 8 characters are enough, so long only 7 are used at a time on the screen, the unused or non-displayed custom characters, can be updated each frame as a new character. The video probably wasn’t playing back from a cashiers counter machine. The lcd was probably pulled and plugged into an arduino, or gpio enabled device.

    2. Only problem there is that you’d have more than 8 total characters to populate, which would exceed the custom character capability of the driver if I understand correctly. Not sure if it’s possible to switch those custom characters between lines.

      1. It’s the same type of controller with the same limitations in both cases. While this project here reduced the resolution until the most important limitation – only 8 custom characters – was no longer a limitation, and therefore doesn’t really teach us anything interesting, the other project didn’t compromise and solved the issue in a clever way.

  1. Bad Apple is really bad ass. I wanted to do something like that myself. Where can I find a high quality source of Bad Apple video without inter-frame artifacts? Specifically, a high quality source to generate sharp black & white stills with little dithering needed.

      1. Thanks. I’ve seen the original but the original has a lot of artifacts (you can see during movement). I think for the purpose of rendering B&W. It is best to have clean frames. Since so many people are doing adaptions, I bet most of them work on still frames. It would be preferred to have quality stills than smooth video. I have seen upscaled 4K. I wonder if there are cleaned up still frames (like animation cels)

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.