JRP Innovations
Posted on
Programming

E-Ink Project - Start

Author
E-Ink Project - Start

Let's start from the beginning,

I'm a tech hoarder with a penchant for collecting embedded development hardware and coming up with projects that force me to learn, often I find myself flipping through projects and leaving things for an extended period when they get hard. After several months, I will face a harder problem as I progress, and looking for respite, I eagerly pick up the original project. Hopefully having a blog will help me launch back in from my drop-off points in the future.

Such is the case with my e-ink display, several months ago I picked up an 800x480p 7-color e-ink from a local retailer after doing minimal research (Unaffiliated link to the display from Pimoroni); when I went to use it I was surprised to see they only included a Python library! My original use was to have a slow refresh calendar that would update by push from a local server that sent bitmaps to a Raspberry Pi Nano.

Napkin math makes me reckon that the 800x480 display in a frame buffer would have to represent 512,000 pixels. So with the 264KB of onboard RAM on the Pico I would have to be careful since even a byte per pixel, (512KB), is just under double the total RAM available before even writing any code. Even still, I also presumed that I could use 3 bits for each pixel and have a 154KB data structure for a frame buffer that would also be quicker to iterate through when needed.

The Python library was a heartbreaker because I would have to use MicroPython. #1, I'm not even sure that's possible, #2, if it is possible I'm still not doing that when there is a wonderful C/C++ SDK for the device. I ended up getting a basic grasp for the few supported use cases of a 45-second refreshing, Python-driven display (with a glass panel, excellent resolution, and color clarity) with Python3 on Pi Zero W.

Fast Forward to Today

I'm certainly not picking back up from where I left off last time, after another season or two of experience I want to circle back with a different approach. The device is relatively advanced of an E-Ink as far as I can tell look at it versus other smaller displays, it has bright colors and supposedly 7 of them.

The model number is... Illusive, the datasheet from Pimoroni, calls it a "PIM667", (That is nothing but their internal model number). At first finding this made me relatively unenthused because it still left me without an idea of the backend the display may have. Now, I was not a prodigy as a child and I'm further removed more so now than ever from pretending to be one. The first thing I learned today was that the display has a microcontroller (At least by my definition), you can see what I'm attempting to describe below. ac073tc1a display silicone

I was led to believe that after watching this YouTube video. This video is a dose of copium that I need to continue looking at this display.

Either way, it at least gives my brain something to latch onto as to how the display is drawn from I2C or SPI and how it's being managed.

Now, a positive about the original driver library; since it's a Python library, it's all just plain text :). Link to their relevant GitHub repo (MIT License).

Ok, I read through that, found the relevant module for my display, and figured out a reasonable idea of what's going but like every time I touch this display I'm left with confusion. I dabble in embedded but not writing device drivers, (yet™), so seeing all the definitions at the top of the display is familiar to me in an only slightly new fashion. Where do I find definitions to those at? What features might be possible that are being abstracted away from me? I suppose there may be some insight to comparing the hex values to the manufacturer's datasheet but I'll get to that later. Oh, I mentioned the manufacturer's datasheet, yeah, that was a nightmare to find.

So this display has gone discontinued, or at least moved to a new name, it was originally the AC073TC1A buuuuttttttt now it's the EL073TF1 (ref).

Anyway, there is a very, very, very long line of thread that got me to the final manufacturer, If needed, see here. I am 99% sure this is the right display or at least a similarly capable display from the same manufacturer with enough specs to fool me into thinking it's the same which for now is fine.

So now I have the datasheet for the real display which is a 6 color 7.3" 800x640 display, not 7 apparently. Documentation has been wrong a lot in all my projects lately, I'm trying to not let it jade me but the SKUs just line up too well along with literally everything else.

This datasheet is marked confidential and it's actively available so I will not be showing it here, you can download a copy after providing them your contact information. I do not feel fully informed still but hey we're cooking with grease, the datasheet doesn't indicate to me quite exactly why there is so much to be defined before/while communicating with it.

Next Order of Operations

Now I have a Raspberry PI 5 8GB connected to the display and we will see if I can get any C++ implementation of the Python library working. May progress be fast.