From 0895fc1e5a4c70ff39855a5e4eac294fbf262c58 Mon Sep 17 00:00:00 2001 From: SSYYL <1032789891@qq.com> Date: Tue, 14 Dec 2021 16:08:50 +0800 Subject: [PATCH] 2in13_V3 Add some comments --- Arduino/epd2in13_V3/epd2in13_V3.cpp | 97 ++++++++++++---- .../c/lib/e-Paper/EPD_2in13_V3.c | 23 ++++ .../python/lib/waveshare_epd/epd2in13_V3.py | 108 +++++++++++++++--- .../User/e-Paper/EPD_2in13_V3.c | 24 +++- 4 files changed, 214 insertions(+), 38 deletions(-) diff --git a/Arduino/epd2in13_V3/epd2in13_V3.cpp b/Arduino/epd2in13_V3/epd2in13_V3.cpp index 2a133b5..20dd22c 100644 --- a/Arduino/epd2in13_V3/epd2in13_V3.cpp +++ b/Arduino/epd2in13_V3/epd2in13_V3.cpp @@ -78,6 +78,10 @@ Epd::~Epd() { }; +/****************************************************************************** +function : Pin definition +parameter: +******************************************************************************/ Epd::Epd() { reset_pin = RST_PIN; @@ -88,27 +92,32 @@ Epd::Epd() height = EPD_HEIGHT; }; -/** - * @brief: basic function for sending commands - */ +/****************************************************************************** +function : send command +parameter: + command : Command register +******************************************************************************/ void Epd::SendCommand(unsigned char command) { DigitalWrite(dc_pin, LOW); SpiTransfer(command); } -/** - * @brief: basic function for sending data - */ +/****************************************************************************** +function : send data +parameter: + Data : Write data +******************************************************************************/ void Epd::SendData(unsigned char data) { DigitalWrite(dc_pin, HIGH); SpiTransfer(data); } -/** - * @brief: Wait until the busy_pin goes HIGH - */ +/****************************************************************************** +function : Wait until the busy_pin goes LOW +parameter: +******************************************************************************/ void Epd::WaitUntilIdle(void) { while(1) { //LOW: idle, HIGH: busy @@ -118,6 +127,14 @@ void Epd::WaitUntilIdle(void) } } +/****************************************************************************** +function : Setting the display window +parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position + Xend : End position of X-axis + Yend : End position of Y-axis +******************************************************************************/ void Epd::SetWindows(unsigned char Xstart, unsigned char Ystart, unsigned char Xend, unsigned char Yend) { SendCommand(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION @@ -131,6 +148,12 @@ void Epd::SetWindows(unsigned char Xstart, unsigned char Ystart, unsigned char X SendData((Yend >> 8) & 0xFF); } +/****************************************************************************** +function : Set Cursor +parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position +******************************************************************************/ void Epd::SetCursor(unsigned char Xstart, unsigned char Ystart) { SendCommand(0x4E); // SET_RAM_X_ADDRESS_COUNTER @@ -141,6 +164,11 @@ void Epd::SetCursor(unsigned char Xstart, unsigned char Ystart) SendData((Ystart >> 8) & 0xFF); } +/****************************************************************************** +function : Send lut data and configuration +parameter: + lut : lut data +******************************************************************************/ void Epd::Lut(unsigned char *lut) { unsigned char count; @@ -161,6 +189,11 @@ void Epd::Lut(unsigned char *lut) SendData(*(lut+158)); } +/****************************************************************************** +function : Initialize the e-Paper register +parameter: + Mode : Mode selection +******************************************************************************/ int Epd::Init(char Mode) { /* this calls the peripheral hardware interface, see epdif */ @@ -236,11 +269,10 @@ int Epd::Init(char Mode) return 0; } -/** - * @brief: module reset. - * often used to awaken the module in deep sleep, - * see Epd::Sleep(); - */ +/****************************************************************************** +function : Software reset +parameter: +******************************************************************************/ void Epd::Reset(void) { DigitalWrite(reset_pin, HIGH); @@ -251,6 +283,10 @@ void Epd::Reset(void) DelayMs(20); } +/****************************************************************************** +function : Clear screen +parameter: +******************************************************************************/ void Epd::Clear(void) { int w, h; @@ -270,6 +306,11 @@ void Epd::Clear(void) WaitUntilIdle(); } +/****************************************************************************** +function : Sends the image buffer in RAM to e-Paper and displays +parameter: + frame_buffer : Image data +******************************************************************************/ void Epd::Display(const unsigned char* frame_buffer) { int w = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); @@ -291,6 +332,11 @@ void Epd::Display(const unsigned char* frame_buffer) WaitUntilIdle(); } +/****************************************************************************** +function : Refresh a base image +parameter: + frame_buffer : Image data +******************************************************************************/ void Epd::DisplayPartBaseImage(const unsigned char* frame_buffer) { int w = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); @@ -319,7 +365,12 @@ void Epd::DisplayPartBaseImage(const unsigned char* frame_buffer) WaitUntilIdle(); } -void Epd::DisplayPart(const unsigned char* frame_buffer) +/****************************************************************************** +function : Sends the image buffer in RAM to e-Paper and partial refresh +parameter: + frame_buffer : Image data +******************************************************************************/ +void Epd::DisplayPart(const unsigned char* ) { int w = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); int h = EPD_HEIGHT; @@ -340,6 +391,10 @@ void Epd::DisplayPart(const unsigned char* frame_buffer) WaitUntilIdle(); } +/****************************************************************************** +function : Clear screen +parameter: +******************************************************************************/ void Epd::ClearPart(void) { int w, h; @@ -359,14 +414,10 @@ void Epd::ClearPart(void) WaitUntilIdle(); } -/** - * @brief: After this command is transmitted, the chip would enter the - * deep-sleep mode to save power. - * The deep sleep mode would return to standby by hardware reset. - * The only one parameter is a check code, the command would be - * executed if check code = 0xA5. - * You can use Epd::Init() to awaken - */ +/****************************************************************************** +function : Enter sleep mode +parameter: +******************************************************************************/ void Epd::Sleep() { SendCommand(0x10); //enter deep sleep diff --git a/RaspberryPi_JetsonNano/c/lib/e-Paper/EPD_2in13_V3.c b/RaspberryPi_JetsonNano/c/lib/e-Paper/EPD_2in13_V3.c index 41c147b..4729390 100644 --- a/RaspberryPi_JetsonNano/c/lib/e-Paper/EPD_2in13_V3.c +++ b/RaspberryPi_JetsonNano/c/lib/e-Paper/EPD_2in13_V3.c @@ -146,6 +146,10 @@ static void EPD_2in13_V3_TurnOnDisplay(void) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Turn On Display +parameter: +******************************************************************************/ static void EPD_2in13_V3_TurnOnDisplay_Partial(void) { EPD_2in13_V3_SendCommand(0x22); // Display Update Control @@ -154,6 +158,11 @@ static void EPD_2in13_V3_TurnOnDisplay_Partial(void) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Set lut +parameter: + lut : lut data +******************************************************************************/ static void EPD_2IN13_V3_LUT(UBYTE *lut) { UBYTE count; @@ -163,6 +172,11 @@ static void EPD_2IN13_V3_LUT(UBYTE *lut) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Send lut data and configuration +parameter: + lut : lut data +******************************************************************************/ static void EPD_2IN13_V2_LUT_by_host(UBYTE *lut) { EPD_2IN13_V3_LUT((UBYTE *)lut); //lut @@ -181,6 +195,10 @@ static void EPD_2IN13_V2_LUT_by_host(UBYTE *lut) /****************************************************************************** function : Setting the display window parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position + Xend : End position of X-axis + Yend : End position of Y-axis ******************************************************************************/ static void EPD_2in13_V3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend) { @@ -198,6 +216,8 @@ static void EPD_2in13_V3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWOR /****************************************************************************** function : Set Cursor parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position ******************************************************************************/ static void EPD_2in13_V3_SetCursor(UWORD Xstart, UWORD Ystart) { @@ -270,6 +290,7 @@ void EPD_2in13_V3_Clear(void) /****************************************************************************** function : Sends the image buffer in RAM to e-Paper and displays parameter: + Image : Image data ******************************************************************************/ void EPD_2in13_V3_Display(UBYTE *Image) { @@ -291,6 +312,7 @@ void EPD_2in13_V3_Display(UBYTE *Image) /****************************************************************************** function : Refresh a base image parameter: + Image : Image data ******************************************************************************/ void EPD_2in13_V3_Display_Base(UBYTE *Image) { @@ -316,6 +338,7 @@ void EPD_2in13_V3_Display_Base(UBYTE *Image) /****************************************************************************** function : Sends the image buffer in RAM to e-Paper and partial refresh parameter: + Image : Image data ******************************************************************************/ void EPD_2in13_V3_Display_Partial(UBYTE *Image) { diff --git a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd2in13_V3.py b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd2in13_V3.py index 1c6c35b..c5cccfc 100644 --- a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd2in13_V3.py +++ b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd2in13_V3.py @@ -91,7 +91,10 @@ class EPD: 0x22, 0x17, 0x41, 0x0, 0x32, 0x36, ] - # Hardware reset + ''' + function :Hardware reset + parameter: + ''' def reset(self): epdconfig.digital_write(self.reset_pin, 1) epdconfig.delay_ms(20) @@ -99,43 +102,75 @@ class EPD: epdconfig.delay_ms(2) epdconfig.digital_write(self.reset_pin, 1) epdconfig.delay_ms(20) - + + ''' + function :send command + parameter: + command : Command register + ''' def send_command(self, command): epdconfig.digital_write(self.dc_pin, 0) epdconfig.digital_write(self.cs_pin, 0) epdconfig.spi_writebyte([command]) epdconfig.digital_write(self.cs_pin, 1) + ''' + function :send data + parameter: + data : Write data + ''' def send_data(self, data): epdconfig.digital_write(self.dc_pin, 1) epdconfig.digital_write(self.cs_pin, 0) epdconfig.spi_writebyte([data]) epdconfig.digital_write(self.cs_pin, 1) - + + ''' + function :Wait until the busy_pin goes LOW + parameter: + ''' def ReadBusy(self): logger.debug("e-Paper busy") while(epdconfig.digital_read(self.busy_pin) == 1): # 0: idle, 1: busy epdconfig.delay_ms(10) logger.debug("e-Paper busy release") - + + ''' + function : Turn On Display + parameter: + ''' def TurnOnDisplay(self): self.send_command(0x22) # Display Update Control self.send_data(0xC7) self.send_command(0x20) # Activate Display Update Sequence self.ReadBusy() - + + ''' + function : Turn On Display Part + parameter: + ''' def TurnOnDisplayPart(self): self.send_command(0x22) # Display Update Control self.send_data(0x0f) # fast:0x0c, quality:0x0f, 0xcf self.send_command(0x20) # Activate Display Update Sequence self.ReadBusy() - + + ''' + function : Set lut + parameter: + lut : lut data + ''' def Lut(self, lut): self.send_command(0x32) for i in range(0, 153): self.send_data(lut[i]) self.ReadBusy() + ''' + function : Send lut data and configuration + parameter: + lut : lut data + ''' def SetLut(self, lut): self.Lut(lut) self.send_command(0x3f) @@ -148,7 +183,15 @@ class EPD: self.send_data(lut[157]) # VSL self.send_command(0x2c); # VCOM self.send_data(lut[158]) - + + ''' + function : Setting the display window + parameter: + xstart : X-axis starting position + ystart : Y-axis starting position + xend : End position of X-axis + yend : End position of Y-axis + ''' def SetWindow(self, x_start, y_start, x_end, y_end): self.send_command(0x44) # SET_RAM_X_ADDRESS_START_END_POSITION # x point must be the multiple of 8 or the last 3 bits will be ignored @@ -160,7 +203,13 @@ class EPD: self.send_data((y_start >> 8) & 0xFF) self.send_data(y_end & 0xFF) self.send_data((y_end >> 8) & 0xFF) - + + ''' + function : Set Cursor + parameter: + x : X-axis starting position + y : Y-axis starting position + ''' def SetCursor(self, x, y): self.send_command(0x4E) # SET_RAM_X_ADDRESS_COUNTER # x point must be the multiple of 8 or the last 3 bits will be ignored @@ -169,7 +218,11 @@ class EPD: self.send_command(0x4F) # SET_RAM_Y_ADDRESS_COUNTER self.send_data(y & 0xFF) self.send_data((y >> 8) & 0xFF) - + + ''' + function : Initialize the e-Paper register + parameter: + ''' def init(self): if (epdconfig.module_init() != 0): return -1 @@ -205,7 +258,12 @@ class EPD: self.SetLut(self.lut_full_update) return 0 - + + ''' + function : Display images + parameter: + image : Image data + ''' def getbuffer(self, image): img = image imwidth, imheight = img.size @@ -222,7 +280,11 @@ class EPD: buf = bytearray(img.tobytes('raw')) return buf - + ''' + function : Sends the image buffer in RAM to e-Paper and displays + parameter: + image : Image data + ''' def display(self, image): if self.width%8 == 0: linewidth = int(self.width/8) @@ -234,7 +296,12 @@ class EPD: for i in range(0, linewidth): self.send_data(image[i + j * linewidth]) self.TurnOnDisplay() - + + ''' + function : Sends the image buffer in RAM to e-Paper and partial refresh + parameter: + image : Image data + ''' def displayPartial(self, image): if self.width%8 == 0: linewidth = int(self.width/8) @@ -274,7 +341,12 @@ class EPD: for i in range(0, linewidth): self.send_data(image[i + j * linewidth]) self.TurnOnDisplayPart() - + + ''' + function : Refresh a base image + parameter: + image : Image data + ''' def displayPartBaseImage(self, image): if self.width%8 == 0: linewidth = int(self.width/8) @@ -292,6 +364,10 @@ class EPD: self.send_data(image[i + j * linewidth]) self.TurnOnDisplay() + ''' + function : Clear screen + parameter: + ''' def Clear(self, color): if self.width%8 == 0: linewidth = int(self.width/8) @@ -305,7 +381,11 @@ class EPD: self.send_data(color) self.TurnOnDisplay() - + + ''' + function : Enter sleep mode + parameter: + ''' def sleep(self): self.send_command(0x10) #enter deep sleep self.send_data(0x01) diff --git a/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in13_V3.c b/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in13_V3.c index 41c147b..efe2898 100644 --- a/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in13_V3.c +++ b/STM32/STM32-F103ZET6/User/e-Paper/EPD_2in13_V3.c @@ -146,6 +146,10 @@ static void EPD_2in13_V3_TurnOnDisplay(void) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Turn On Display +parameter: +******************************************************************************/ static void EPD_2in13_V3_TurnOnDisplay_Partial(void) { EPD_2in13_V3_SendCommand(0x22); // Display Update Control @@ -154,6 +158,11 @@ static void EPD_2in13_V3_TurnOnDisplay_Partial(void) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Set lut +parameter: + lut : lut data +******************************************************************************/ static void EPD_2IN13_V3_LUT(UBYTE *lut) { UBYTE count; @@ -163,6 +172,11 @@ static void EPD_2IN13_V3_LUT(UBYTE *lut) EPD_2in13_V3_ReadBusy(); } +/****************************************************************************** +function : Send lut data and configuration +parameter: + lut : lut data +******************************************************************************/ static void EPD_2IN13_V2_LUT_by_host(UBYTE *lut) { EPD_2IN13_V3_LUT((UBYTE *)lut); //lut @@ -181,6 +195,10 @@ static void EPD_2IN13_V2_LUT_by_host(UBYTE *lut) /****************************************************************************** function : Setting the display window parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position + Xend : End position of X-axis + Yend : End position of Y-axis ******************************************************************************/ static void EPD_2in13_V3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend) { @@ -198,6 +216,8 @@ static void EPD_2in13_V3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWOR /****************************************************************************** function : Set Cursor parameter: + Xstart : X-axis starting position + Ystart : Y-axis starting position ******************************************************************************/ static void EPD_2in13_V3_SetCursor(UWORD Xstart, UWORD Ystart) { @@ -270,6 +290,7 @@ void EPD_2in13_V3_Clear(void) /****************************************************************************** function : Sends the image buffer in RAM to e-Paper and displays parameter: + image : Image data ******************************************************************************/ void EPD_2in13_V3_Display(UBYTE *Image) { @@ -287,10 +308,10 @@ void EPD_2in13_V3_Display(UBYTE *Image) EPD_2in13_V3_TurnOnDisplay(); } - /****************************************************************************** function : Refresh a base image parameter: + image : Image data ******************************************************************************/ void EPD_2in13_V3_Display_Base(UBYTE *Image) { @@ -316,6 +337,7 @@ void EPD_2in13_V3_Display_Base(UBYTE *Image) /****************************************************************************** function : Sends the image buffer in RAM to e-Paper and partial refresh parameter: + image : Image data ******************************************************************************/ void EPD_2in13_V3_Display_Partial(UBYTE *Image) {