Sometimes, finding new ways to use old hardware requires awesome feats of reverse engineering, software sleight of hand, and a healthy dose of good fortune. Other times, though, it’s just as simple as reading the data sheet and paying attention to details.
Not that we’re knocking [upir]’s accomplishment with these tricked-out 16×2 OLED displays. Far from it, in fact — the smoothly animated bar graph displays alphanumerics look fantastic. What’s cool about this is that he accomplished all this without resorting to custom characters. We’ve seen him use this approach before; this time around, the hack involves carefully shopping for a 16×2 OLED display with the right driver chip — a US2066 chip. You’ll still need a few tricks to get things working, like extra pull-up resistors to get the I2C display talking to an Arduino, plus a little luck that you got a display with the right character ROM.
Once all that is taken care of, getting the display to do what you want is mainly a matter of coding. In the video below, [upir] does a great job of walking through the finer points, and the results look great. The bar graphs in particular look fantastic, with silky-smooth animations.
US2066 is actually a controller chip, not a driver chip. My understanding is that drivers are used for powering things.
The US2066 is both display controller and driver for OLED/PLED integrated into one chip.
So, uh, it’s not possible to use more than eight custom characters on a typical 16×2 LCD, so instead, let me show you how to do more with an OLED module with an entirely different driver chip.
Did I get that right?
TL:DR You don’t need custom characters if the controller ROM already contains enough fancy characters.
https://www.displayfuture.com/Display/datasheet/controller/US2066.pdf
Page 24: By writing font data to CGRAM, user defined character can used (refer to Table 5-5).
+1
I’m still using the old slow to refresh 16×2 LCD displays, I need to get some of these OLED displays.
You see his display memory can hold 80 (?) characters per line, in the past I would draw an entire screen of characters in this off-screen memory, then you can shift where the driver reads the characters from, resulting in “turning the page” instead of overwriting all the characters each time. Like having a static message in the off-screen area and simply sending one command to display that message rather than upload the new message overwriting what is visible.