Go Down

Topic: Good Dispay ePaper for Arduino (Read 113804 times) previous topic - next topic

zhongshanliyu

hi ZinggJM, I would like to known did you any plan add GDEW075T7 7.5" b/w/r 800x480 into GxEPD.

because I notify by good display GDEW075T8 7.5" b/w was End-of-life. and I asking to use  GDEW075T7 .

I created a PCB and working good.

thank you.



I am trying clone 583T7 driver to make 75T7 working in ESP8266, when I compile in Arduino got an error below:

arduino_build_897221/stream_screen.ino.elf section `.bss' is not within region `dram0_0_seg'





ZinggJM

I am trying clone 583T7 driver to make 75T7 working in ESP8266, when I compile in Arduino got an error below:

arduino_build_897221/stream_screen.ino.elf section `.bss' is not within region `dram0_0_seg'

Quote
I intend to add GDEW075T7 7.5" b/w 800 * 480 to GxEPD also, it is supported by GxEPD2.
I started work on this. Your posts are not the kind that motivate me to hurry.

Why don't you use GxEPD2?
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

Zentris

Hello all,

I cloned the Git-Repo https://github.com/ZinggJM/GxEPD2 and started to try the examples with my new eInk paper.

The code is translated with the Arduino GUI.

In the file GxEPD2/examples/GxEPD2_Example/GxEPD2_Example.ino the following error occurs when compiling:

/home/wiese/workspace/GxEPD2/examples/GxEPD2_Example/GxEPD2_Example.ino: In function 'void helloWorld()':
GxEPD2_Example:343:65: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
  display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh);


The problem is that the API of display.getTxtBounds() expects a char* as text, but a const char* is provided in the code.
Since this is obviously only noticeable with the compiler switch [-fpermissive]...:

const char HelloWorld[] = "Hello World!";
...
void helloWorld()
{
 ...
 display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh);
...


Of course i can't change the API, and so the char arrays just can't be declared as const...

Has nobody noticed that yet?

What do you think? Am I wrong?

best regards..

ZinggJM

@Zentris,

Please check and update your version of Adafruit_GFX.

This is the actual signature of this method. It was wrong in earlier versions.

Code: [Select]
    getTextBounds(const char *string, int16_t x, int16_t y,
      int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h),


Jean-Marc
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

ZinggJM

GxEPD Version 3.0.9 is available, installable or updated with Library Manager.

- fixed BMP handling, e.g. for BMPs created by ImageMagick
- see also Arduino Forum Topic https://forum.arduino.cc/index.php?topic=642343.0
- added support for GDEW075T7 7.5" b/w 800x480
- GDEW075T7 has differential update (1.6s) using a charge balancing waveform
- added "fast partial update" (differential update) for GDEW0371W7 3.7" b/w 240x416
- improved differential update waveform for GDEW026T0 2.6" b/w 152x256
- fixed init code & improved differential update for GDEW042T2 4.2" b/w 300x400
- note that all differential refresh waveforms are a compromise (ghosting, big font use)
- parameters for differential waveform for these display can easily be changed for experimenting
- GDEW042T2 would have greyed background without sustain phase
- GDEW042T2 needs multiple full refreshes after extended use of partial updates

Please note that I recommend to use GxEPD2 for Newbies or new projects.

Both GxEPD and GxEPD2 are known by Library Manager and can be installed directly.

Jean-Marc

No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

FlatFootFox

Hey there ZinggJM,

I feel a little foolish asking, "What's the deal with a display that's not on the supported display list", but I'm curious if you've taken a look at the GDEW0154T8 any? I'm looking for a small square epaper display which supports 4 shades of gray to show BMPs for an upcoming project. I noticed that you've included an Aliexpress link to the GDEW0154T8 in the comments of the GxEPD IoT_SHT31LP_Example_1.54inchEPD.ino example code, so I figured it wouldn't hurt to ask.

I'm considering switching to a B/W/R display and getting rid of one shade of fidelity so that I could use something like the supported GDEW0154Z17. Just out of curiosity, does GxEPD/GxEPD2 support 4 shades of gray on supported boards like the GDEW029T5? If it's not clear, I haven't bought any displays or boards yet.

Thanks for your time.

ZinggJM

Hello FlatFootFox,

Note that GxEPD2 and GxEPD support only b/w on 2-color e-papers, b/w/r or b/w/y on 3-color e-papers.

Some of the b/w SPI e-paper display could also produce grey levels, as a feature of the controller.
And Good Display has recently discovered that b/w e-papers that support "differential" refresh can alternately produce 4 grey levels, using a special waveform. For those of these that I have I created a new (experimental) library GxEPD2_4G

The GDEW0154T8 is a special case: I don't have it, but I had added it to GxEPD as an exception, as it has a known controller. For GxEPD2 I am strict and support only e-papers that I have (sponsors welcome).

GDEW029T5 is supported by GxEPD2_4G.

Jean-Marc
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

FlatFootFox

Thanks for the quick response Jean-Marc! That helped clear things up for me.

mutexx

I use GxEPD 3.09 with TTGO T5 (2.13" GxGDE0213B72B) and have some kind problem. Sometimes, very rarely, the screen fades to white, after a partial update it works fine, but sometimes it fades to white again. Fade to white occurs quickly in about 2-3 seconds. This can happen a few minutes after turning on, sometimes after several hours of working. There is no any system. Then the device can work again for several hours without problems. I use full update "displayInit ();" only when turning on / rebooting the device, in the future only "display.updateWindow (0, 0, display.width (), display.height (), true);"  to avoid screen blinking.
I can't repeat the glitch while debugging, I don't understand the reasons for this screen behavior. How can I fix this, any ideas?

ZinggJM

I use GxEPD 3.09 with TTGO T5 (2.13" GxGDE0213B72B) and have some kind problem. Sometimes, very rarely, the screen fades to white, after a partial update it works fine, but sometimes it fades to white again. Fade to white occurs quickly in about 2-3 seconds. This can happen a few minutes after turning on, sometimes after several hours of working. There is no any system. Then the device can work again for several hours without problems. I use full update "displayInit ();" only when turning on / rebooting the device, in the future only "display.updateWindow (0, 0, display.width (), display.height (), true);"  to avoid screen blinking.
I can't repeat the glitch while debugging, I don't understand the reasons for this screen behavior. How can I fix this, any ideas?
Hi mutexx,

I don't really understand what is happening, with your description.

With GxEPD you need to make sure that the first update after power on is a full update. And it needs to be followed by a partial update to full screen with the same content, for subsequent partial updates to work correctly.

But your description rather looks like marginal power voltage to the display, or fluctuation.
You should call powerDown() or powerOff() after a partial update, if the next update does not occur soon.

You could also try with GxEPD2. I recommend GxEPD2 for Newbies or new projects.

Jean-Marc
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

mutexx

#310
Nov 20, 2019, 04:54 pm Last Edit: Nov 20, 2019, 05:26 pm by mutexx
Thank you for fast answer!

I don't really understand what is happening, with your description.
The video is of very poor quality, but I think the problem can be understood:
02-06-08b2.mp4 - https://drive.google.com/file/d/1FaztkDn9y4iU6kB7vF654lRK34iOifv3/view?usp=sharing
The problem is not hardware most likely, the image appears after a partial update, not after bumps


But your description rather looks like marginal power voltage to the display, or fluctuation.
Supply voltage is implemented using LiPo batterie and LDO Regulator me6211c33. I think the problem is not in flaw or malfunction, since it is present on different devices of different users

You should call powerDown() or powerOff() after a partial update, if the next update does not occur soon.
"Soon" is how long? If partial updates happen every 10 seconds, should I call powerDown() or powerOff()?

With GxEPD you need to make sure that the first update after power on is a full update. And it needs to be followed by a partial update to full screen with the same content, for subsequent partial updates to work correctly.
I have such code in setup (call once on start/reset device):
Quote
// Start the Display
    display.init();
    display.setRotation(1);
    display.eraseDisplay();
    display.setTextColor(GxEPD_BLACK);
    display.setFont(&DEFALUT_FONT);
    display.setTextSize(0);
  display.setFont(&FreeSansBold9pt7b);
  displayText(sketchName, 250, 64, CENTER_ALIGNMENT);
  displayText("*******"), 250, 30, CENTER_ALIGNMENT);
  //display.update();
  display.updateWindow(0, 0, display.width(), display.height(), true);
I must uncomment row "display.update();"?

ZinggJM

#311
Nov 20, 2019, 06:49 pm Last Edit: Nov 20, 2019, 06:56 pm by ZinggJM
The video doesn't help me in any way.

"Soon" would be about one minute. 10s is fine to keep panel driving power on.

eraseDisplay() or eraseDisplay(false) clears both previous and current controller buffer, no update() needed.

update() writes to both controller buffers, no partial update to full screen would be needed anymore with the actual version.

I have no idea, and I don't want to comment on TTGO T5.

I would check if the RESE resistor has the correct value for this panel; consult the Good Display web-site.

I might feel mis-treated if I were your e-paper display, after having seen your video.
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

mutexx

Jean-Marc thank you so much, get plus to karma!
and the last plea, confirm that I understood correctly:
1. eraseDisplay () clear previous and current controller buffer
2. updateWindow () what is being executed after eraseDisplay() puts information into the current buffer, does the previous one remain empty
3. the next updateWindow() execution writes information to the current buffer, is the previous information shifted to the previous buffer
4. update () clears both buffers and writes to both controller buffers again at any state of buffers before this
5. for the screen to work properly, should we make the state of both buffers equal in any way from time to time

it is correct?

ZinggJM

#313
Nov 20, 2019, 08:22 pm Last Edit: Nov 20, 2019, 08:25 pm by ZinggJM
Code: [Select]
void GxGDEH0213B72::updateWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool using_rotation)
{
  if (_current_page != -1) return;
  if (using_rotation) _rotate(x, y, w, h);
  if (x >= GxGDEH0213B72_WIDTH) return;
  if (y >= GxGDEH0213B72_HEIGHT) return;
  uint16_t xe = gx_uint16_min(GxGDEH0213B72_WIDTH, x + w) - 1;
  uint16_t ye = gx_uint16_min(GxGDEH0213B72_HEIGHT, y + h) - 1;
  uint16_t xs_d8 = x / 8;
  uint16_t xe_d8 = xe / 8;
  _Init_Part(0x03);
  _SetRamArea(xs_d8, xe_d8, y % 256, y / 256, ye % 256, ye / 256); // X-source area,Y-gate area
  _SetRamPointer(xs_d8, y % 256, y / 256); // set ram
  _waitWhileBusy();
  _writeCommand(0x24);
  for (int16_t y1 = y; y1 <= ye; y1++)
  {
    for (int16_t x1 = xs_d8; x1 <= xe_d8; x1++)
    {
      uint16_t idx = y1 * (GxGDEH0213B72_WIDTH / 8) + x1;
      uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
      _writeData(~data);
    }
  }
  _Update_Part();
  delay(GxGDEH0213B72_PU_DELAY);
  // update erase buffer
  _SetRamArea(xs_d8, xe_d8, y % 256, y / 256, ye % 256, ye / 256); // X-source area,Y-gate area
  _SetRamPointer(xs_d8, y % 256, y / 256); // set ram
  _waitWhileBusy();
  _writeCommand(0x26);
  for (int16_t y1 = y; y1 <= ye; y1++)
  {
    for (int16_t x1 = xs_d8; x1 <= xe_d8; x1++)
    {
      uint16_t idx = y1 * (GxGDEH0213B72_WIDTH / 8) + x1;
      uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
      _writeData(~data);
    }
  }
  delay(GxGDEH0213B72_PU_DELAY);
}


Quote
// update erase buffer
comment is wrong, should be update previous buffer

1. correct
2. writes to current buffer, updates using differential waveform, writes to previous buffer.
   most controllers switch buffer after update, so write to current buffer again instead (as next partial window might be somewhere else!)
3. see 2.
4. update writes same to both buffers
5. this is done by GxEPD (or GxEPD2). But you should do full update from time to time to avoid ghosting or fading caused by the panel.
No personal message please; any question may be useful for other users. Use code tags for code. Make links clickable with URL tags. Provide links to the product in question.

mutexx

#314
Nov 20, 2019, 09:28 pm Last Edit: Nov 20, 2019, 10:09 pm by mutexx
I would check if the RESE resistor has the correct value for this panel; consult the Good Display web-site.
3 Ohm on referense scheme (found only for GDEH0213B72 instead my GDE0213B72B), 0.48 Ohm on T5 scheme, and ~0.6 Ohm in real life.

And what does it mean? Ok or not? To change the resistor for testing is mission  impossible for me, the smallest smd resistors are used on the board

P. S. I reviewed all the possible screens on the site of good displays, and found that the board installed on the T5 looks exactly like GDEH0213B73 (flat cable marking SLH 1914), although GDE0213B72B is specified in the description of TTGO T5. But these China, mistakes are not surprising. I tried connecting the GDEH0213B73 library instead of GDE0213B72B to the sketch and the screen works fine. I'm not sure that the glitch has disappeared, it takes a long test, but it inspires hope

Go Up