Pervasive Displays [no power displays - e-paper]

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:

I've been eagerly waiting for a real e-Ink display, so am eager to find out more on this. From what I can gather, an SD card reader is pretty much needed for a lot of Arduino projects, and should have been included onboard in the first place. Between suxxer and ThunderFT, you guys seem to have a pretty good grasp of what this display does. It might not be ready for 'production', but how much of that original library is useable? Any chance of a writeup on just how to wire it up and talk to it, even with text only ?

For temperature I did that:

#include "Wire.h"
#define address 0x49
#define delayC 1000
#define baudrate 9600

void setup()
{
Wire.begin();
Serial.begin(baudrate);
}

void loop()
{
Serial.print("temperature in Celsius: ");
int temperature;
Wire.beginTransmission(address);

Wire.write(0x00);

Wire.requestFrom(address, 1);
if (Wire.available())
{
temperature = Wire.read();
Serial.println(temperature);
}
else
{
Serial.println("---");
}
Wire.endTransmission();
//end the transmission

delay(delayC);
}

And it worked, the temperature was around 24°C in a classroom.

But afterwards I used the code from repaper and it doesn't need any temperature.

For my matrix problem, I already got a NFC shield, because I'm sending data with an Android Application by the NFC transmission to Arduino, and I'm trying to display those information. And if I get a new shield, I will have problems with my chip selects.
Do you think there are no other possibilities?
Is it possible to write on an .xbm file?

I wish I could be of more help. I don't have my SD reader yet to play with, but since they only uses 4 digital pins it may work as well as the NFC reader? With the NVRAM being R/O at runtime, it looks like the SD card would be the only option.

The temperature sensor had me confused; it's not intrinsic to the displays operation I imagine. So, would this work, with an SPI interface and their library? I only want to display text, and it doesn't have to be updated that often.

And it worked, the temperature was around 24°C in a classroom.

But afterwards I used the code from repaper and it doesn't need any temperature.

Well the repaper-code is setting the temp fix to 25.

I tried your code, but i don't get any readings from my sensor. A look into the datasheet of the lm75b revealed that temperature is stored in two bytes. Your line of code " Wire.requestFrom(address, 1);" cannot work as it should request two bytes. Maybe you have another temp chip on your board??

I managed to squeeze three custom .xbm pictures onto my Leonardo. I'll have to get me a sd shield (SparkFun microSD Transflash Breakout - BOB-00544 - SparkFun Electronics) for more space ;( This means i have to multiplex the ssel pin, cause i'm running out of pins free...

For my matrix problem, I already got a NFC shield, because I'm sending data with an Android Application by the NFC transmission to Arduino, and I'm trying to display those information. And if I get a new shield, I will have problems with my chip selects.
Do you think there are no other possibilities?
Is it possible to write on an .xbm file?

I guess this needs a lot of changes in the current code. The image is stored at the beginning of the code with the PROGMEM statement. You could try to overwrite the .xbm file on runtime and see what happens. I'm not familiar with the progmem stuff - so I have to trial and error my way :wink: