Close
0%
0%

Understanding ACeP Tecnology

A journey towards driving full-color e-Paper displays

Similar projects worth following
I'm working on a project which uses a color e-paper display.
Out of the box, this display has only 7 colors.

What I want to do is to design some custom waveforms to be able to display more than 7 colors.

Since there is not much information on how to drive e-paper displays on the internet, especially color ones, with this project I want to share what I learn by playing with this display.

The display that I'm working with is an AC057TC1 that I bought from Waveshare.

Thanks to a comment on one of my other projects I found out that the controller for the display is compatible with the UC8159.

The controller uses LUTs (Look Up Tables) to generate the appropriate waveforms to drive the display. The supplied LUTs are preprogrammed inside a FLASH memory that is soldered directly to the flat-flex cable. The process of updating the display works as follows first, pixel values are loaded into the internal frame buffer, then a command is sent and the update sequence starts. The controller first reads the ambient temperature from the internal temperature sensor then it loads the appropriate LUTs from FLASH. There is a set of LUTs for each temperature range.

Display back

Turns out that it is possible to bypass the FLASH and make the controller use internal LUTs that are loaded from the SPI interface. To do that there is an undocumented bit in the Panel Setting Register.

Undocumented PSR register bit
5.65inch e-Paper Module (F) Specification (Page 8)

This is what I want to accomplish:

  • Understand how ACeP displays work and how to drive them
  • Make a model to simulate the behavior of the display and use it to developed waveforms
  • Write some software to make custom LUTs that can possibly display "every" color

Log History:

How ACeP Displays Work (Pixel construction and TFT matrix)

Extracting Factory LUTs (Breakout board modification, LUT structure, Stock waveforms)

Test Waveforms (Appling a constant voltage for an x amount of frames)

References:

5.65inch e-Paper Module (F) Schematic

5.65inch e-Paper Module (F) Specification

UC8159 - (compatible controller) All-in-one driver IC with Timing Controller for Color Application

SPD1656 - 640 Source x 480 Gate Active Matrix EPD Display Driver with Controller for color application

US8717664B2 - Color Display Device

  • Test Waveforms

    Manuel Tosone05/12/2021 at 17:56 3 comments

    Time has come to poke at the display and see what color comes out. The simplest test that we can do, is to apply a constant voltage for an x amount of frames.
    The controller can apply 9 different voltages (-30V -25V -15V -5V 0V +5V +15V +25V +30V). We already know that 0V doesn't do anything, so we can focus on the other values. I made two sets of waveforms one positive and one negative.

    Starting with the positive one. The picture below shows the waveform. It is made up of 3 phases. The first one is to prevent any DC buildup in the panel. The second serves to drive the particles ard towards the top and bottom layers, leaving the display in the extreme optical state. The last phase applies the target voltage for the desired number of frames.

    Below are the results of the experiments. For each experiment, starting from the top left and ending at the bottom right, the voltage is applied for 2, 4, 8, 16, 32, 64, 128, 255 frames.

    Testing is done at 21°C, framerate is 50Hz.

    Positive 5V Step
    Positive 5V step
    Positive 15V step
    Positive 15V step
    Positive 25V step
    Positive 25V step
    Positive 30V step
    Positive 30V step

    The negative waveform is the same as above, with all the polarities reversed. It is made up of the same 3 phases. The first one is to prevent any DC buildup in the panel. The second serves to drive the particles ard towards the top and bottom layers, leaving the display in the extreme optical state. The last phase applies the target voltage for the desired number of frames.

    Below are the results of the experiments. For each experiment, starting from the top left and ending at the bottom right, the voltage is applied for 2, 4, 8, 16, 32, 64, 128, 255 frames.

    Testing is done at 21°C, framerate is 50Hz.

    Negative 5V step
    Negative 5V step
    Negative 15V step
    Negative 15V step
    Negative 25V step
    Negative 25V step
    Negative 30V step
    Negative 30V step

    Conclusions

    What can we derive from the positive step?

    • There isn't much change at 5V.
    • We can clearly see that white and yellow particles are negatively charged.
    • The yellow ones are faster than the white ones, but only if the applied voltage is at least 25V. 
    • White particles are quite slow, at 25V they take 255 frames to reach the top.
    • Cyan seems to be faster than magenta, at 15V the initial dark blu color becomes pink before fading to white.

    What can we derive from the positive step?

    • At 15V yellow fades to green, which indicates that cyan rises faster than magenta.
    • At 25V and 30V yellow goes away quickly, leaving cyan.

    What do you see? leave a comment below.

  • Extracting Factory LUTs

    Manuel Tosone05/02/2021 at 07:15 1 comment

    Extracting LUTs from embedded FLASH

    Before going too deep into designing custom LUTs from scratch, I thought it would be interesting to see how the stock ones look like. We have already seen that the LUTs are stored on a FLASH memory that's soldered directly on the FLEX cable. The package is a bit of a pain to work with, it's an 8 pin USON with a 0.5 mm pin pitch. Fortunately, the controller has a mode where the internal SPI master is bypassed, and the memory can be accessed via the main SPI bus. To make this work, two more pins have to be connected, MFCSB and FMSDO, they are respectively the memory chip select and data out. The breakout board doesn't provide connections for them, some modification is needed. Conveniently, the level translator has two unused lines that we can use to interface with the microcontroller.

    Display breakout board modified schematic
    Display breakout board modified schematic.

    I used magnet wire to make the connections, secured them in place with hot glue. The two extra lines come out from the bottom header. The center conductor is ground. Originally I tried without it, but it didn't work. With 30 cm of cable, only one ground wasn't enough to run a 1Mb SPI.

    Display breakout board mod
    Display breakout board mod.

    I'm using an STM32F4 Discovery as my development platform. After connecting the display, I wrote some code to spit out the FLASH content over the serial port. From the manufacture and device ID, I determined that the memory is a Winbound 2Mbit W25X20CL. With PuTTY running in log mode on my desktop, I was able to extract the contents of the memory. All the code that I've used is on GitHub, here is a link to the memory dump.

    Flash memory content

    Waveshare recently released more information about the controller. The right one is the SPD1656. On page 15 of the datasheet, there is the complete memory layout. Besides LUTs, there are also voltages and framerates for each temperature range. In this particular case, they are the same for every temperature, but they don't need to be. The full listing can be found here.

    ------------------------------------------
     VCOM DC OFFSET SAME FOR ALL TEMPERATURES 
    ------------------------------------------
    VCM_DC = 1.050000e+00 V
    
    ---------------------------------------------------
     VOLTAGES AND FRAMERATE FOR DIFFERENT TEMPERATURES 
    ---------------------------------------------------
    T0 TEMP < 18°C
    VSHC_LVL   =   10 V
    VSLC_LVL   =  -10 V
    LVL2_EN    =    0
    VSLC_LVL2  =    3 V
    FRAME RATE =   50 Hz
    
    T1 18°C <= TEMP < 21°C
    VSHC_LVL   =   10 V
    VSLC_LVL   =  -10 V
    LVL2_EN    =    0
    VSLC_LVL2  =    3 V
    FRAME RATE =   50 Hz
    
    ...
    

    From LUTs to waveforms

    Now I want to explain how the waveforms are constructed. Taking as an example the previously measured VCOM voltage, we can see the correspondence between the trace and what's inside the LUT.

    VCOM waveform analysis
    VCOM waveform analysis. 

    More LUTs

    Besides VCOM, there are 8 more waveforms one for each color. I made a couple of MATLAB scripts that can plot them for us. Since the display cares only about the difference in voltage between the common electrode and the pixel electrodes, the following plots represent the difference between VCOM and the color waveform. The waveforms are positive when the voltage on the common electrode is higher than that of the pixel electrodes.

    The display supports 10 temperature ranges. Here I show only the waveforms for the range 21°C to 24°C the others can be found on GitHub.

    Black waveform, 21°C to 24°C temperature range.

    Blue waveform, 21°C to 24°C temperature range.

    White waveform, 21°C to 24°C temperature range.

    Green waveform, 21°C to 24°C temperature range.

    Red waveform, 21°C to 24°C temperature range.

    Yellow waveform, 21°C to 24°C temperature range.

    Orange waveform, 21°C to 24°C temperature range.

    Clean waveform, 21°C to 24°C temperature range.

    Conclusion

    What can we derive from this?

    First of all, VCOM has a DC...

    Read more »

  • How ACeP Displays Work

    Manuel Tosone04/12/2021 at 18:09 0 comments

    Pixel Construction

    Advanced Color ePaper (ACep) displays remove the need for a color filter by having all the colored pigments in every pixel. The pixels are small capsules filled with some sort of a liquid substance. Each capsule contains fore different pigments (yellow, cyan, magenta, and white), the colored pigments are transparent while the white pigment is not. Two of the pigments are positively charged while the others are negatively charged. Pigments have also different sizes and/or different charge densities. Size determines the speed at which particles move (smaller particles move faster), charge density determines the minimum required voltage for a particle to move (slightly charged particles require more voltage). By applying a variable external electric field across the capsules it's possible to change the relative position of the particles. The light that enters the pixel is scattered by the white particles, if they are on top then the pixel appears white, if there's some other pigment before the withe ones, light that passes through picks up the pigment color before been reflected by the white particles. Been the colored pigments transparent it doesn't matter the order in which they are found, all that matters is what's in front of the white particles.

    The following picture shows how it is possible to obtain the eight primary colors with only four colored pigments. It should also be possible to make lighter or darker colors by hiding a faction of the colored pigments being the white pigment.

    Primary colors

    Display Construction

    This section describes how the controller is able to drive each pixel with the proper electric field. 
    The display uses a TFT matrix like an LCD screen. The grid of pixels is sandwiched between two electrode layers. The top electrode layer is transparent and common for all pixels, spreading over the entire surface. The bottom electrode layer is chopped up into little squares, one for each pixel. Each one of these tiny electrodes is connected to the drain of a transistor. The gates of all transistors in a row are connected together, same for the source connections in a column.

    TFT matrix

    The matrix is scanned line by line sequentially, a positive voltage is applied to one of the gate lines while the others are held at a negative voltage. This turns on the corresponding line of transistors. At the same time, the source lines determine what voltage is applied to the pixels in the active line. By sequentially activating one line at a time and at the same time driving the appropriate voltage on the source lines, every pixel can be individually addressed.

    Frame Rate

    The first time I heard of frame rate in the context of e-Paper displays I didn't really understand it. I mean we know that e-Papers take a long time to update, so why is the default frame rate 50Hz?

    PLL register
    5.65inch e-Paper Module (F) Specification (Page 12)

    This is where the difference between LCDs and e-Paper comes in. With LCD screens the image updates every time the TFT matrix is scanned, with e-Papers it takes multiple frames to change the state of the pixels. The frame rate specifies the frequency at which the TFT matrix is scanned, with each scan it's possible to change the voltage applied to each pixel, but it takes multiple scans to update the image.

    The following picture shows the measured VCOM (voltage on the common electrode) during an update cycle. Conveniently this voltage is exposed on the display connector and it easy to probe. All the features in this waveform appear at multiples of the frame period (20ms in this case). 

    Measured VCOM voltage during update
    Measured VCOM voltage during update

    LUTs

    Look-up tables are what determines the sequence of voltages that are applied across every single pixel. For each voltage to be generated there is a corresponding LUT.
    The display controller that I'm working with has 10 different LUTs

    • VCOM: controls the voltage of the common electrode
    • LUT0 - LUT7: control the voltage applied to the individual...
    Read more »

View all 3 project logs

Enjoy this project?

Share

Discussions

smarthomeagentur wrote 10/27/2022 at 14:13 point

Hi, did you ever try something like in this video (kind of quick refresh) ? https://youtu.be/MsbiO8EAsGw?t=163 it would be amazing with this screen

  Are you sure? yes | no

Mike wrote 01/29/2022 at 20:22 point

Hi Manuel,

really awsome work, I'm deeply impressed.

I have questions concerning reading out the Flash:

Did you use the 0x65 (DMA) command of the controller? (bypasses the SPI directly to the flash, but obviusly only the shared lines, I guess?

I've tried to find the Flash readout code in the STM program you prvided, unfortunately without success - I'm not familiar with the STM32 and all the extra code, it's easier for me to understand Arduino & Co...

Could you please guide me to the relevant part in your code, please?

Thanks a lot,

Mike

  Are you sure? yes | no

diadatp wrote 04/25/2021 at 09:34 point

Glad that someone is working on this! Perhaps you've seen this work by Dmitry here: https://dmitry.gr/?r=05.Projects&proj=29.%20eInk%20Price%20Tags

Specifically the section about three colour panels.


  Are you sure? yes | no

diadatp wrote 04/25/2021 at 09:35 point

I've been trying to model the particles as roughly equally charged particles of different polarity and radius under the influence of an uniform electric field in a viscous fluid.

A color sensor placed on the panel while driving at different frame times might help nail some of the unknown system parameters.

  Are you sure? yes | no

Manuel Tosone wrote 04/26/2021 at 06:05 point

Are you working with a similar display? Does your model work?

A color sensor may be a good idea. I was trying to take some high-speed video of the display but my lighting was crap. I was using LEDs but the colors were barely distinguishable on video, next I want to try with halogen lamps.

  Are you sure? yes | no

Manuel Tosone wrote 04/26/2021 at 06:04 point

yes, the effort he put into it is amazing.

  Are you sure? yes | no

diadatp wrote 05/01/2021 at 19:12 point

> Are you working with a similar display? Does your model work?

Nope. Can't afford to ship it to my country anytime soon. Plan on it when restrictions are lifted.

> A color sensor may be a good idea....

I was thinking anything that could sample faster than the fastest frame time that the controller supports. Don't recall exactly but I think that's 50Hz. Would be nice to see what the real equivalent colours are after mixing.

If you have the time, please compare the LUTs programmed into the device and maybe if they're posted anywhere online. I'd like to visualize the waveform and maybe even run a simple simulation with them!

  Are you sure? yes | no

Manuel Tosone wrote 05/01/2021 at 19:40 point

I managed to extract the factory LUTs out of the FLASH. I'll be posting them soon.

We were wrong about the controller, the right one is the SPD1656. Waveshare released more info recently, so that's cool! https://www.waveshare.com/w/upload/b/bf/SPD1656_1.1.pdf

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates