« Back to “Driving waveforms”

Comments for “Driving waveforms”

Hi Petteri,
your WebM video is not playing in Firefox (Linux Mint 15 AMD64), it is returning this error:
"Video format or MIME type is not supported"

It is strange because WebM support is working fine in Firefox, for example I can watch this video with no problem:

I suspect there is some issue in the video tag, but I didn't figure out it.

Best Regards,


— Alan Carvalho de Assis on 10.10.2013 at 18:58 (UTC)


Thanks, it was an issue with the Content-Type that Apache gave it. Should be fixed now.

— Petteri Aimonen on 10.10.2013 at 19:05 (UTC)


This is the quickest fix I've seen in my entire life! You beat the world record lol!

Petteri, it should be nice to test it using a little bit larger E-link display, like the 9.7" ED097OC1 of Kindle DX. I would like to create a blackboard-like version of "Boogie Board 8.5 Inch LCD Writing Tablet" using an E-ink.

Do you plan to sales this STM32 board? Case it is not possible, could you please release the KiCAD schematic?



— Alan Carvalho de Assis on 10.10.2013 at 19:21 (UTC)

Nice project - it inspired me one month ago to start making my own board, which was just few minutes ago coupled first time to the display, powers applied - no smoke. All other signals still unconfigured.

— Kimmo on 14.10.2013 at 20:35 (UTC)


I added the example schematic on the electronics page:

— Petteri Aimonen on 24.10.2013 at 08:01 (UTC)

Hi Petteri, I really appreciate all your hardwork that you put into this.  I made a little breakout board for the connector and I have been playing around with this for a couple weeks now and I can't seem to get the screen to output anything significant.  I do not have an actual Kindle to do any logic analysis so I am relying on your post and code.  I captured my output and posted my results online.  I was hoping I could get some feedback. http://threadedthinking.com/eink/

— Alex on 05.07.2014 at 20:12 (UTC)

Hi Petteri, my friend recently told me about your site and about the possibility to buy one of these cheap. I was quite surprised and I've immediately ordered one for $20. For that price, it is a good challenge to make one work. I also appreciate that you do the stuff on STM32. So I will order some connectors, I've found these for about $3. It is horribly expensive for a small piece of plastic with a little metal. I look forward to receive my display and begin the work. I will inform you about the progress. Thank you for this helpful site,

— Yanxinoh on 03.11.2014 at 20:59 (UTC)

Thanks for your work Petteri! Some material about waveform LUT from E-INK:

— Alvaro Aguirre on 05.11.2014 at 22:07 (UTC)

Alternative approach: http://youtu.be/2TUUaBrhwAQ

— Petteri Aimonen on 01.02.2015 at 12:50 (UTC)

I've tried the given waveforms with a 9,7" EINK. But nothing happened. Then I took the pattern from https://spritesmods.com/?art=einkdisplay&page=3
and I could change the display. I am a little bit confused because I was assuming that "spritesmods" took the the same display and therefore the same pattern as yours. But on the website I find different waveforms.
It would be a pleasure, if you can help me.
Thanks a lot

— Dave on 09.02.2017 at 10:57 (UTC)


Sprite_tm also found that my waveforms didn't work for him. It appears there are two kinds of the display: LBxxx and EDxxx, and that my waveforms work only for LBxxx while sprite_tm's updated ones work for also EDxxx. But neither of us knows the details fully because we have only tested a few displays.

— Petteri Aimonen on 09.02.2017 at 13:07 (UTC)

I already have setup as per spritesmods.com, where as tried your waveforms as the spritesmod' didn't worked fully with the setup :(
Any how, the panel I am holding is ED060SC4(lf) [I believe so, as the china manufacturer has put the sticker on it] and some of your waveforms worked there like bulkclear(). 
Now my issue is, some how I have managed to get the panel responsive, but at the moment it is writing the row data to all 600 rows at a time. (Can visualize the vertical lines while writing data). Will you please elaborate the CKV timing section? 
What I am considering about CKV can be encoded in following pseudo code 
os_delay_us(3); //since we have taken 1 us delay after SPV(LOW), else we could have taken 4 us delay directly as mentioned in table on essentialscrap.com

for(i =0; i<200;i++){
os_delay_us(200); // will need to understand the timing here. no guess.

— Aaditya Dengle on 13.05.2017 at 10:59 (UTC)

@Aaditya Do the all rows get written quickly (in less than 0.2 seconds or so), or slowly? If quickly, you have somehow managed to get them all active at once, which sounds like wrong SPV polarity for some reason. If slowly, the are probably all inactive and changing through leakage, which would point to SPV getting completely ignored for some reason.

As for the 200us delay after row write - it seems to be some kind of recharge / discharge delay needed by the panel. I found that completely by trial and error and don't know the underlaying reason.

— Petteri Aimonen on 13.05.2017 at 11:22 (UTC)

Rows are getting set very quickly, like you cant notice the same, my SPV is +3.3v (My SPV pin is on Shift Register). I doubt the gate driver has got damaged some how. BTW I checked the datasheet available for SPV polarity ref. but couldn't find any data about; what it should be?

— Aaditya on 13.05.2017 at 19:46 (UTC)

OK, finally I got the replacement display which works well with the code. But now one new issue arises, whenever My row data changes it fades away the earlier written rows. I think it has to do with leakage current somewhere in the circuit, probably at FPC connector. Just for getting sure before touching the working board, can any one confirm my assumption?

— Aaditya Dengle on 26.05.2017 at 13:31 (UTC)


I don't think leakage at FPC connector should cause fading, because those are digital signals.

But make sure you turn off GMODE and OE as soon as writing is complete, because leaving them on causes the driver chips to stay enabled and that will give some leakage.

— Petteri Aimonen on 26.05.2017 at 13:35 (UTC)

Hi Petteri,

I am currently working on a project where I am using multiple eink displays and I want to control them with a single microcontroller. I had planned on only powering the VDD, VPOS, VNEG, GVDD, and GVEE of the display I wanted to update. 

One question I had is would using a single output from my microcontroller for each of the logic pins on the display (D0-D7, GMODE, LE, etc.) cause issues for the displays that were not powered? Also, could I get away with independently controlling fewer of the power lines?


— Nate on 02.07.2017 at 01:15 (UTC)


Yes, at least for longer periods it will cause issues. I left one of my displays in a faulty state where VDD was off but one of the IO pins was high, and in the morning it no longer worked.

I would rather suggest having all the power lines together, but controlling the CKV and CL signals separately. I haven't tried this, but it might work.

— Petteri Aimonen on 02.07.2017 at 05:22 (UTC)

Hi Petteri,

Thanks for this great article series, it prompted me to to something with eink too.

I used a TPS65185 for the power stage (the devkit (TPS65185EVM) in fine, as I gave up after burning too many TPS65185. The TQFN package is really tought to reflow weld without a pick and place machine...) and it work great, I've got all the good tensions with an accessible I²C interface for activation/managment, a dream !

However, I've come to some problem when trying to display something. I've first tried with applying directly the waveform you described with an arduino but with no result. So I've tried, as you did, outputing random high/low on the pins and I've got... a weird result : the only thing that change is the first line... between the gray border (the one controlled bu the VBORDER) and the plastic white outer one.

It's like the gate driver don't move from where it is. As i did plug it into my olds faulty bords, it is possible that the gate driver was shot (altrought i would find it unlikly to have appened to both of my test screens). Anyways , I've ordered 2 more screen to try with brand new ones. 

What's your take on this ?

— Remy GRANDIN on 27.07.2017 at 22:29 (UTC)


Yeah, sounds like a gate driver problem. Does the connector on your display have the GMODE pins connected? It seems that there are different variants of the display and some require more toggling on GMODE. There are more details on sprite_tm's blog.

— Petteri Aimonen on 28.07.2017 at 08:33 (UTC)

I've finally managed to make it work ! 
In the end I tested all combination of GMODE1, GMODE2, U1CE1, U1CE2, U2CE1, U2CE2 and here are my observation :
 - GMODE1&2 don't seam to do anythings
 - to rite on the first path of the panel, I used U1CE1 = 0, U1CE2 = 1, U2CE1 = 0, U2CE2 = 0 and to write on the seconnd half U1CE1 = 0, U1CE2 = 0, U2CE1 = 0, U2CE2 = 1.
I havn't found any combination that allow the gate "pulse" to travel from one gate driver to the other.
However, something I've just noticed, when I write my row to my panel, it's going from the side of the connector to the other whereas in your first video, it goes the other way around, from the "exterior" side to the connector side.
I had alignement issue between the first and the second halft and I've found that the first gate driver manage 301 lines and the second one 300, making it a 800*601 screen :-)
By using a raspbery pi zero W with wiringpi, I was able to wite frame at 13 Hz, without envent bothering on the timing (I mean without having to add delays in the CKV for exemple), allowing me to do easily 8 grayscale picture (16 worked but the 4-5 last gray scale were not distinct enough) by writing multiple times.

— Remy GRANDIN on 11.08.2017 at 10:00 (UTC)