Răsfoiți Sursa

Merge pull request #103 from ZinggJM/work_in_progress

Version 1.6.3
ZinggJM 1 an în urmă
părinte
comite
266d7abcef

+ 11 - 6
README.md

@@ -57,11 +57,11 @@
 - https://github.com/olikraus/u8glib/wiki/tpictureloop
 
 ### Note on issues and pull requests
-- issues should be reported in the Arduino Forum Displays.
+- issues should be reported in https://github.com/ZinggJM/GxEPD2/discussions.
 - issues on GitHub are disabled; there were too many false issues.
 - pull requests are not welcome, will not be merged.
 - pull requests can't be disabled, but will be closed.
-- please place information about interesting fork additions in the Arduino Forum Displays.
+- please place information about interesting fork additions in https://github.com/ZinggJM/GxEPD2/discussions.
 
 ### Supported SPI e-paper panels from Good Display:
 - GDEW0102T4     1.02" b/w 80x128, UC8175
@@ -159,11 +159,16 @@
 - ES103TC1     10.3" grey levels, 1872x1404, on Waveshare e-Paper IT8951 Driver HAT
 
 ### I can and will only support e-paper panels I have!
-- I can accept panel donations to add support to GxEPD2.
-- But only few panels at any time, and only panels from known sources. 
-- Adding support will take as much time as needed.
+- I accept panel donations to add support to GxEPD2 only on exception.
+- I support only panels from known sources that are well documented.
+- Let me know about interesting panels that fall into this category.
+- I occasionally buy new panels, but adding support will take as much time as needed.
 
-### Version 1.6.2
+### Version 1.6.3
+- updated GxEPD2_4C.h with WIDTH_VISIBLE (for GDEY0213F51)
+- updated GxEPD2_154_Z90c.cpp powerOff() handling
+- updated powerOff() handling for other 3-color displays
+#### Version 1.6.2
 - fixed support for GDEY029T71H 2.9" b/w 168x384, SSD1685
 - GxEPD2_WiFi_Example: added direct (non-buffered) BMP download to 7-color displays
 - some minor fixes

+ 1 - 1
library.properties

@@ -1,5 +1,5 @@
 name=GxEPD2
-version=1.6.2
+version=1.6.3
 author=Jean-Marc Zingg
 maintainer=Jean-Marc Zingg
 sentence=Arduino Display Library for SPI E-Paper displays from Dalian Good Display and Waveshare. 

+ 2 - 2
src/GxEPD2_4C.h

@@ -79,9 +79,9 @@ class GxEPD2_4C : public GxEPD2_GFX_BASE_CLASS
   public:
     GxEPD2_Type epd2;
 #if ENABLE_GxEPD2_GFX
-    GxEPD2_4C(GxEPD2_Type epd2_instance) : GxEPD2_GFX_BASE_CLASS(epd2, GxEPD2_Type::WIDTH, GxEPD2_Type::HEIGHT), epd2(epd2_instance)
+    GxEPD2_4C(GxEPD2_Type epd2_instance) : GxEPD2_GFX_BASE_CLASS(epd2, GxEPD2_Type::WIDTH_VISIBLE, GxEPD2_Type::HEIGHT), epd2(epd2_instance)
 #else
-    GxEPD2_4C(GxEPD2_Type epd2_instance) : GxEPD2_GFX_BASE_CLASS(GxEPD2_Type::WIDTH, GxEPD2_Type::HEIGHT), epd2(epd2_instance)
+    GxEPD2_4C(GxEPD2_Type epd2_instance) : GxEPD2_GFX_BASE_CLASS(GxEPD2_Type::WIDTH_VISIBLE, GxEPD2_Type::HEIGHT), epd2(epd2_instance)
 #endif
     {
       _page_height = page_height;

+ 11 - 8
src/epd3c/GxEPD2_154_Z90c.cpp

@@ -282,7 +282,7 @@ void GxEPD2_154_Z90c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -341,11 +341,14 @@ void GxEPD2_154_Z90c::_PowerOn()
 
 void GxEPD2_154_Z90c::_PowerOff()
 {
-  _writeCommand(0x22);
-  _writeData(0xc3);
-  _writeCommand(0x20);
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x22);
+    _writeData(0xc3);
+    _writeCommand(0x20);
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_154_Z90c::_InitDisplay()
@@ -369,13 +372,11 @@ void GxEPD2_154_Z90c::_InitDisplay()
 void GxEPD2_154_Z90c::_Init_Full()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_154_Z90c::_Init_Part()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_154_Z90c::_Update_Full()
@@ -384,6 +385,7 @@ void GxEPD2_154_Z90c::_Update_Full()
   _writeData(0xF7);
   _writeCommand(0x20);  //Activate Display Update Sequence
   _waitWhileBusy("_Update_Full", full_refresh_time);
+  _power_is_on = false;
 }
 
 void GxEPD2_154_Z90c::_Update_Part()
@@ -392,4 +394,5 @@ void GxEPD2_154_Z90c::_Update_Part()
   _writeData(0xF7);
   _writeCommand(0x20);  //Activate Display Update Sequence
   _waitWhileBusy("_Update_Part", partial_refresh_time);
+  _power_is_on = false;
 }

+ 16 - 13
src/epd3c/GxEPD2_154c.cpp

@@ -376,19 +376,22 @@ void GxEPD2_154c::_PowerOn()
 
 void GxEPD2_154c::_PowerOff()
 {
-  _writeCommand(0x50);
-  _writeData(0x17);    //BD floating
-  _writeCommand(0x82);     //to solve Vcom drop
-  _writeData(0x00);
-  _writeCommand(0x01);     //power setting
-  _writeData(0x02);    //gate switch to external
-  _writeData(0x00);
-  _writeData(0x00);
-  _writeData(0x00);
-  delay(1500);     //delay 1.5S
-  _writeCommand(0x02); // power off
-  //_waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x50);
+    _writeData(0x17);    //BD floating
+    _writeCommand(0x82);     //to solve Vcom drop
+    _writeData(0x00);
+    _writeCommand(0x01);     //power setting
+    _writeData(0x02);    //gate switch to external
+    _writeData(0x00);
+    _writeData(0x00);
+    _writeData(0x00);
+    delay(1500);     //delay 1.5S
+    _writeCommand(0x02); // power off
+    //_waitWhileBusy("_PowerOff", power_off_time); // causes busy timeout
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_154c::setPaged()

+ 8 - 5
src/epd3c/GxEPD2_213_Z19c.cpp

@@ -205,7 +205,7 @@ void GxEPD2_213_Z19c::_writeImagePart(uint8_t command, const uint8_t* bitmap, in
 }
 
 void GxEPD2_213_Z19c::writeImagePartPrevious(const uint8_t* black, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
-                                             int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
+    int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
 {
   _writeImagePart(0x10, black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
 }
@@ -271,7 +271,7 @@ void GxEPD2_213_Z19c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -329,9 +329,12 @@ void GxEPD2_213_Z19c::_PowerOn()
 
 void GxEPD2_213_Z19c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_213_Z19c::_InitDisplay()

+ 2 - 2
src/epd3c/GxEPD2_213_Z98c.cpp

@@ -375,13 +375,11 @@ void GxEPD2_213_Z98c::_InitDisplay()
 void GxEPD2_213_Z98c::_Init_Full()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_213_Z98c::_Init_Part()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_213_Z98c::_Update_Full()
@@ -390,6 +388,7 @@ void GxEPD2_213_Z98c::_Update_Full()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Full", full_refresh_time);
+  _power_is_on = false;
 }
 
 void GxEPD2_213_Z98c::_Update_Part()
@@ -398,4 +397,5 @@ void GxEPD2_213_Z98c::_Update_Part()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Part", partial_refresh_time);
+  _power_is_on = false;
 }

+ 7 - 4
src/epd3c/GxEPD2_213c.cpp

@@ -290,7 +290,7 @@ void GxEPD2_213c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -348,9 +348,12 @@ void GxEPD2_213c::_PowerOn()
 
 void GxEPD2_213c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_213c::_InitDisplay()

+ 2 - 2
src/epd3c/GxEPD2_266c.cpp

@@ -375,13 +375,11 @@ void GxEPD2_266c::_InitDisplay()
 void GxEPD2_266c::_Init_Full()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_266c::_Init_Part()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_266c::_Update_Full()
@@ -390,6 +388,7 @@ void GxEPD2_266c::_Update_Full()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Full", full_refresh_time);
+  _power_is_on = false;
 }
 
 void GxEPD2_266c::_Update_Part()
@@ -398,4 +397,5 @@ void GxEPD2_266c::_Update_Part()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Part", partial_refresh_time);
+  _power_is_on = false;
 }

+ 7 - 4
src/epd3c/GxEPD2_270c.cpp

@@ -278,7 +278,7 @@ void GxEPD2_270c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -340,9 +340,12 @@ void GxEPD2_270c::_PowerOn()
 
 void GxEPD2_270c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_270c::_InitDisplay()

+ 2 - 2
src/epd3c/GxEPD2_290_C90c.cpp

@@ -374,13 +374,11 @@ void GxEPD2_290_C90c::_InitDisplay()
 void GxEPD2_290_C90c::_Init_Full()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_290_C90c::_Init_Part()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_290_C90c::_Update_Full()
@@ -389,6 +387,7 @@ void GxEPD2_290_C90c::_Update_Full()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Full", full_refresh_time);
+  _power_is_on = false;
 }
 
 void GxEPD2_290_C90c::_Update_Part()
@@ -397,4 +396,5 @@ void GxEPD2_290_C90c::_Update_Part()
   _writeData(0xf7);
   _writeCommand(0x20);
   _waitWhileBusy("_Update_Part", partial_refresh_time);
+  _power_is_on = false;
 }

+ 10 - 7
src/epd3c/GxEPD2_290_Z13c.cpp

@@ -205,7 +205,7 @@ void GxEPD2_290_Z13c::_writeImagePart(uint8_t command, const uint8_t* bitmap, in
 }
 
 void GxEPD2_290_Z13c::writeImagePartPrevious(const uint8_t* black, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
-                                             int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
+    int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm)
 {
   _writeImagePart(0x10, black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
 }
@@ -271,7 +271,7 @@ void GxEPD2_290_Z13c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -330,11 +330,14 @@ void GxEPD2_290_Z13c::_PowerOn()
 
 void GxEPD2_290_Z13c::_PowerOff()
 {
-  _writeCommand(0x50);
-  _writeData(0xf7); // border floating
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x50);
+    _writeData(0xf7); // border floating
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_290_Z13c::_InitDisplay()

+ 9 - 6
src/epd3c/GxEPD2_290c.cpp

@@ -290,7 +290,7 @@ void GxEPD2_290c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -348,11 +348,14 @@ void GxEPD2_290c::_PowerOn()
 
 void GxEPD2_290c::_PowerOff()
 {
-  _writeCommand(0x50);
-  _writeData(0xf7); // border floating
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x50);
+    _writeData(0xf7); // border floating
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_290c::_InitDisplay()

+ 7 - 4
src/epd3c/GxEPD2_420c.cpp

@@ -306,7 +306,7 @@ void GxEPD2_420c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -365,9 +365,12 @@ void GxEPD2_420c::_PowerOn()
 
 void GxEPD2_420c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_420c::_InitDisplay()

+ 7 - 4
src/epd3c/GxEPD2_583c.cpp

@@ -348,7 +348,7 @@ void GxEPD2_583c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -427,9 +427,12 @@ void GxEPD2_583c::_PowerOn()
 
 void GxEPD2_583c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_583c::_InitDisplay()

+ 7 - 4
src/epd3c/GxEPD2_750c.cpp

@@ -345,7 +345,7 @@ void GxEPD2_750c::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -424,9 +424,12 @@ void GxEPD2_750c::_PowerOn()
 
 void GxEPD2_750c::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_750c::_InitDisplay()

+ 7 - 4
src/epd3c/GxEPD2_750c_Z08.cpp

@@ -307,7 +307,7 @@ void GxEPD2_750c_Z08::refresh(int16_t x, int16_t y, int16_t w, int16_t h)
   int16_t y1 = y < 0 ? 0 : y; // limit
   w1 = x1 + w1 < int16_t(WIDTH) ? w1 : int16_t(WIDTH) - x1; // limit
   h1 = y1 + h1 < int16_t(HEIGHT) ? h1 : int16_t(HEIGHT) - y1; // limit
-  if ((w1 <= 0) || (h1 <= 0)) return; 
+  if ((w1 <= 0) || (h1 <= 0)) return;
   // make x1, w1 multiple of 8
   w1 += x1 % 8;
   if (w1 % 8 > 0) w1 += 8 - w1 % 8;
@@ -365,9 +365,12 @@ void GxEPD2_750c_Z08::_PowerOn()
 
 void GxEPD2_750c_Z08::_PowerOff()
 {
-  _writeCommand(0x02); // power off
-  _waitWhileBusy("_PowerOff", power_off_time);
-  _power_is_on = false;
+  if (_power_is_on)
+  {
+    _writeCommand(0x02); // power off
+    _waitWhileBusy("_PowerOff", power_off_time);
+    _power_is_on = false;
+  }
 }
 
 void GxEPD2_750c_Z08::_InitDisplay()

+ 2 - 2
src/epd3c/GxEPD2_750c_Z90.cpp

@@ -400,13 +400,11 @@ void GxEPD2_750c_Z90::_InitDisplay()
 void GxEPD2_750c_Z90::_Init_Full()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_750c_Z90::_Init_Part()
 {
   _InitDisplay();
-  _PowerOn();
 }
 
 void GxEPD2_750c_Z90::_Update_Full()
@@ -415,6 +413,7 @@ void GxEPD2_750c_Z90::_Update_Full()
   _writeData(0xC7);    //
   _writeCommand(0x20); // Master Activation
   _waitWhileBusy("_Update_Full", full_refresh_time);
+  _power_is_on = false;
 }
 
 void GxEPD2_750c_Z90::_Update_Part()
@@ -423,4 +422,5 @@ void GxEPD2_750c_Z90::_Update_Part()
   _writeData(0xC7);    //
   _writeCommand(0x20); // Master Activation
   _waitWhileBusy("_Update_Part", partial_refresh_time);
+  _power_is_on = false;
 }