Pervasive Displays [no power displays - e-paper]

wow, the linked github repository also contains a library for Arduino.

https://github.com/repaper/gratis/tree/master/Arduino

Oliver

MrPozor:
The NDA situation seems to have changed now.

Much more detailed information about how to drive the display is now available here:
http://repaper.org/doc/cog_driving.html

MrPozor

Many thanks for the info. I am really interested in this and it is good news that in one month the first devices with breakout and cable will be shipped

Hi,

WOW! Looks good!

In his code he has a PIN-Mapping that I could not map to the 14-PIN-Connector on my Display from EA.

I don't want to destroy and try any combination.
Has somebody a mapping-example for me?

Oliver, is the code from github only available on Arduino Leonardo?

I think the code was just tested with the Arduino Leonardo. I have not seen any Leonardo specific code except for the usual "serial wait loop". I guess the code will work with any 5V Arduino Board, but i have not verified this. Just ordered my first e-paper display (EA Modul) today XD

Oliver

Oh ok, thanks.
I have an Arduino UNO and an E-Paper Display from EA (2.7 inch) and i'm trying to make it work with the Pins.
I don't know what FLASH_CS and EPD_CS correspond to.

From what i read so far: The EPD_CS is the chip select signal of the el. paber device. The flash-chip-select is the chip select of the flash memory, which seems to be part of the upcoming EPD extension board. The EA Module does not have a build in flash memory. At least from this perspective, the code from repaper.org needs some modification to make it work with the EA modul.

Oliver

Does it mean that I have to put the flash memory off the code for just an EA module?

Does it mean that I have to put the flash memory off the code for just an EA module?

I guess you have two choices:

  1. Add a SPI flash memory IC to your hardware environment.
  2. Remove the SPI flash code from the examples (if this is possible).

Note: I have not even started to analyse any possibilities here. I just had a look at some sections of repaper.org

Oliver

Thank you! I'll try that, but I don't really get how the pins match.

Hi
I started to compare the "EPD extension board" (EPD) with the embedded artists E-Paper Adapter Board (EA)

Here are some of my results (not sure if i am correct, please confirm or correct me)

EPD: 5V, with serial flash, 5V tolerant, analog Temperature value
EA: 3.3V, no serial flash, not 5V tolerant, I2C Temperature sensor

Here is a table of matching pins (at least what i think). Please note, that the polarity might be different for EPD and EA.

EA Pin EA Name EPD Pin EPD Name Code
1 GND 20 GND -
2 3.3V 1 5V -
3 SCLK 7 SPI CLK -
4 MOSI 15 SPI MOSI -
5 MISO 14 SPI MISO -
6 SSEL 19 /EPD_CS Pin_EPD_CS
7 BUSY 8 BUSY Pin_BUSY
12 Reset_Disp 10 /RESET Pin_RESET
11 PWM 9 PWM Pin_PWM
14 Discharge 12 Discharge Pin_DISCHARGE
13 PWR CTRL 11 Panel On Pin_PANEL_ON
- - 13 Border Control Pin_BORDER
9 I2C SCL - - -
10 I2C SDA - - -
- - 6 Temperature Pin_TEMPERATURE
- - 18 /FLASH_CS Pin_FLASH_CS

Use this information on your own risk. Perhaps someone can confirm this table...

Oliver

Oh great, thank you very much for your help!!

olikraus:
Hi
I started to compare the "EPD extension board" (EPD) with the embedded artists E-Paper Adapter Board (EA)

Here are some of my results (not sure if i am correct, please confirm or correct me)

EPD: 5V, with serial flash, 5V tolerant, analog Temperature value
EA: 3.3V, no serial flash, not 5V tolerant, I2C Temperature sensor

Here is a table of matching pins (at least what i think). Please note, that the polarity might be different for EPD and EA.

...

Any luck with the above configuration? If yes, will the EA board work with the supplied example-code of repaper.org?

Thanks

I tried it on my EA device, it doesn't work. I don't really understand why. Maybe it is because of a problem with the wire, that I don't connect properly.

Or maybe it's a problem with the code (or both ^^ ) . But I noticed that the re-paper code, does not use temperature pin to change the display of the screen. And by looking at the data sheet of the 2.7" E paper, I see that to change the display, and input display data, we need to use the temperature sensor.
Maybe the extra pins of the extension board of the re paper code are used to simplify the code and not use the temperature sensor. I don't really know.

I think that the repaper needs to be modified to work on the device. I only tested the code called intro, that is supposed to display some image and some text. Did somebody manage to make this code work without the extension board?

Actually I don't know why the code of Re-paper does not work on my device. I think the code called intro should work, since I think it doesn't use the extra pins of the extension board.
Did anyone tried it on his device?

I wanted to finally power the display, but just ran out of level converters. Well - ordered a couple of 08745 Logic Level Converters and waiting for them (cause the EA-Board is using 3.3V and Arduino Leonardo supplies 5V).

Looking at the code reveals this line:

// configure temperature sensor
S5813A.begin(Pin_TEMPERATURE);

this will redirect to:

void S5813A_Class::begin(int input_pin) {
pinMode(input_pin, INPUT);
analogReference(ANALOG_REFERENCE);
this->temperature_pin = input_pin;
}

As the EA has a I2C temperature sensor we need to play with those lines (remove analogReference).

After that the main loop wants to read the temperature:

int temperature = S5813A.read();

this will trigger:

int S5813A_Class::read() {
return Tstart_C + ((this->readVoltage() - Vstart_uV) / Vslope_uV);
}

Again - as EA is using a I2C sensor we have to play withthe code. I think Arduino uses the Wire.h to communicate over I2C? But then we need the address of the temp sensor on the bus. EA writes "I2C address (0x92/0x93)" on the datasheet.

So we should be able to get the temp by modifying above code to:

Wire.beginTransmission(addr) <- (where addr is defined futher up int addr = 92;)
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(addr,1);
While(wire.available == 0) ;
int temp = Wire.receive();
return temp;

After reading the temp the code wants to run the setFactor funtion

EPD.setFactor(temperature)

This function is defined in EPD.h. But it looks like 25 is a fixed value here. Well maybe it works like that??

void setFactor(int temperature = 25) {
this->factored_stage_time = this->stage_time * this->temperature_to_factor_10x(temperature) / 10;
}

I still have some questions concerning the code. But unless I have my logic level converters I cannot work on the display. Maybe someone can get that thing to work in the meantime.

Oh – I almost forgot! As the EA doesn’t come with a Flash chip, we'll either have to use the onboard flash, get a SD Shield or leave out the whole flash-code. At least the code is prepared if doesn’t find any flash chip (or a unsupported one):

FLASH.begin(Pin_FLASH_CS, SPI);
if (FLASH.available()) {
Serial.println("FLASH chip detected OK");
} else {
Serial.println("unsupported FLASH chip");
}

Hi,

I succeeded to change the display on my EA device :slight_smile:

Hi,

I have a new problem. I did find a way to change the display on my 2.7 Inch E-Paper Device.
But for my project, I need to change frequently the display.

My problem is:

  • The matrix is therefore a 176 lines for 33 columns.
    -> It is actually a matrix of hexadecimals in a .xbm file for the moment

#define test_width 264
#define test_height 176
static char Matrix_bits[] =
{
0x00, 0x00, 0xFF, 0x10, ....
0x00, 0x00, 0x1F, 0xAA, ....
}

  • It has to be a dynamic matrix because I would like to change some part of the matrix.

Have you an idea how I could do this?

I know that if i create a matrix directly on the code as:

byte Matrix[176] [33]

Arduino is not capable because the Matrix is too wide.

So I thought about creating a matrix with the Flash Library such as:

FLASH_TABLE(byte, 33,
{0x00, 0x00, 0xEE, 0x77 ...},
{0x00, 0x00, 0xEE, 0x77 ...},
{0x00, 0x00, 0xEE, 0x77 ...},



);

But I cannot change the values in this matrix...

I also thought about changing the matrix in the .xbm file, or create a new one every time the code is running.. But I don't know if it is actually possible.

As anyone ever did something like that with such a wide matrix on Arduino?

If I'm not clear with my demand, please ask, I really need some help.

Thanks

Awesome thread! I did notice this:

http://www.embeddedartists.com/support/faq.php?id=29

It seems that these displays are not suitable for production, which of course makes me wonder what they are suitable for.

@ThunderFT:
I've been thinking about this problem. What about solving it by using a I2C-EEprom to store the matrix? Or use a Sdcard-shield on arduino? I think the only way of getting the necessary data for the xbm-files is to use an expansion. Arduino's mem is just too small.

I finally got the LLC from Sparkfun. Now I can try to talk to the display at last.

Currently I'm stuck with the I2C-Temperature sensor on the EA-Board. The sensor is a LM75B temp sensor and is using 3,3V on the I2C lines (so we need the Sparkfun LLC to talk to it from Arduino's 5V-I2C). The slave address of the LM75B is 1|0|0|1|A2|A1|A0 (where A2, A1, A0 can be set by the user). On my board, A2, A1, A0 are 0,0,1 - so the address is 1|0|0|1|0|0|1 (equals 73 DEC or 0x49 HEX).

But I cannot talk to the sensor. I tried with some easy code to get the values, but I don't receive anything. Anyone has more luck??

#include <Wire.h>
int t,l;
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
Wire.requestFrom(0x49, 2);
while(Wire.available())
{
t = Wire.read();
l = Wire.read();
Serial.print("temperature = ");
Serial.println(t);
Serial.print("lsb = ");
Serial.println(l);
}
delay(500);
}

As I already mentioned in my last post is that the temperature reading seems to be set to 25 in EPD.h. I'll just leave out all the temp sensor stuff and try to focus on the display.

I'll report as soon as i have more results.

@ThunderFT: Maybe you could post some code&infos on how you managed to get the display to live. I guess that would be very usefull for a lot of us :wink: Thnx.

EDIT: Got it to work using the gratis-master from the repaper site. It turns out that the temperature sensor is really not relevant for the code to run :wink: