always power off after refresh

This commit is contained in:
Shuanglei Tao
2025-02-21 22:02:34 +08:00
parent 551a217210
commit 857e5317e6
5 changed files with 41 additions and 30 deletions

View File

@@ -61,15 +61,29 @@ void EPD_4IN2_ReadBusy(void)
}
}
void EPD_4IN2_PowerOn(void)
{
EPD_WriteCommand(0x04);
EPD_4IN2_ReadBusy();
}
void EPD_4IN2_PowerOff(void)
{
EPD_WriteCommand(0x02);
EPD_4IN2_ReadBusy();
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void EPD_4IN2_TurnOnDisplay(void)
void EPD_4IN2_Refresh(void)
{
EPD_4IN2_PowerOn();
EPD_WriteCommand(0x12);
DEV_Delay_ms(100);
EPD_4IN2_ReadBusy();
EPD_4IN2_PowerOff();
}
/******************************************************************************
@@ -83,16 +97,8 @@ void EPD_4IN2_Init(void)
EPD_WriteCommand(0x00); // panel setting
EPD_WriteByte(0x1f); // 400x300 B/W mode, LUT from OTP
EPD_WriteCommand(0x61); // resolution setting
EPD_WriteByte (EPD_4IN2_WIDTH / 256);
EPD_WriteByte (EPD_4IN2_WIDTH % 256);
EPD_WriteByte (EPD_4IN2_HEIGHT / 256);
EPD_WriteByte (EPD_4IN2_HEIGHT % 256);
EPD_WriteCommand(0x50); // VCOM AND DATA INTERVAL SETTING
EPD_WriteByte(0x97); // LUTB=0 LUTW=1 interval=10
EPD_WriteCommand(0x04); // POWER ON
}
/******************************************************************************
@@ -119,7 +125,7 @@ void EPD_4IN2_Clear(void)
}
}
EPD_4IN2_TurnOnDisplay();
EPD_4IN2_Refresh();
}
static void _setPartialRamArea(UWORD x, UWORD y, UWORD w, UWORD h)
@@ -162,13 +168,9 @@ parameter:
******************************************************************************/
void EPD_4IN2_Sleep(void)
{
EPD_WriteCommand(0x50); // DEEP_SLEEP
EPD_WriteByte(0XF7);
EPD_4IN2_PowerOff();
EPD_WriteCommand(0x02); // POWER_OFF
EPD_4IN2_ReadBusy();
EPD_WriteCommand(0x07); // DEEP_SLEEP
EPD_WriteCommand(0x07); // deep sleep
EPD_WriteByte(0XA5);
}
@@ -182,6 +184,6 @@ const epd_driver_t epd_driver_4in2 = {
.send_byte = EPD_WriteByte,
.send_data = EPD_WriteData,
.write_image = EPD_4IN2_Write_Image,
.display = EPD_4IN2_TurnOnDisplay,
.refresh = EPD_4IN2_Refresh,
.sleep = EPD_4IN2_Sleep,
};

View File

@@ -60,15 +60,29 @@ void EPD_4IN2B_V2_ReadBusy(void)
DEV_Delay_ms(50);
}
void EPD_4IN2B_V2_PowerOn(void)
{
EPD_WriteCommand(0x04);
EPD_4IN2B_V2_ReadBusy();
}
void EPD_4IN2B_V2_PowerOff(void)
{
EPD_WriteCommand(0x02);
EPD_4IN2B_V2_ReadBusy();
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void EPD_4IN2B_V2_TurnOnDisplay(void)
void EPD_4IN2B_V2_Refresh(void)
{
EPD_4IN2B_V2_PowerOn();
EPD_WriteCommand(0x12); // DISPLAY_REFRESH
DEV_Delay_ms(100);
EPD_4IN2B_V2_ReadBusy();
EPD_4IN2B_V2_PowerOff();
}
/******************************************************************************
@@ -81,8 +95,6 @@ void EPD_4IN2B_V2_Init(void)
EPD_WriteCommand(0x00);
EPD_WriteByte(0x0f);
EPD_WriteCommand(0x04);
}
/******************************************************************************
@@ -109,7 +121,7 @@ void EPD_4IN2B_V2_Clear(void)
}
}
EPD_4IN2B_V2_TurnOnDisplay();
EPD_4IN2B_V2_Refresh();
}
static void _setPartialRamArea(UWORD x, UWORD y, UWORD w, UWORD h)
@@ -159,12 +171,9 @@ parameter:
******************************************************************************/
void EPD_4IN2B_V2_Sleep(void)
{
EPD_WriteCommand(0X50);
EPD_WriteByte(0xf7); //border floating
EPD_4IN2B_V2_PowerOff();
EPD_WriteCommand(0X02); //power off
EPD_4IN2B_V2_ReadBusy(); //waiting for the electronic paper IC to release the idle signal
EPD_WriteCommand(0X07); //deep sleep
EPD_WriteCommand(0X07); // deep sleep
EPD_WriteByte(0xA5);
}
@@ -178,6 +187,6 @@ const epd_driver_t epd_driver_4in2bv2 = {
.send_byte = EPD_WriteByte,
.send_data = EPD_WriteData,
.write_image = EPD_4IN2B_V2_Write_Image,
.display = EPD_4IN2B_V2_TurnOnDisplay,
.refresh = EPD_4IN2B_V2_Refresh,
.sleep = EPD_4IN2B_V2_Sleep,
};

View File

@@ -157,7 +157,7 @@ static void epd_service_process(ble_epd_t * p_epd, uint8_t * p_data, uint16_t le
break;
case EPD_CMD_DISPLAY:
p_epd->driver->display();
p_epd->driver->refresh();
break;
case EPD_CMD_SLEEP:

View File

@@ -53,7 +53,7 @@ typedef struct
void (*send_byte)(UBYTE Reg); /**< send byte */
void (*send_data)(UBYTE *Data, UBYTE Len); /**< send data */
void (*write_image)(UBYTE *black, UBYTE *color, UWORD x, UWORD y, UWORD w, UWORD h); /**< write image */
void (*display)(void); /**< Sends the image buffer in RAM to e-Paper and displays */
void (*refresh)(void); /**< Sends the image buffer in RAM to e-Paper and displays */
void (*sleep)(void); /**< Enter sleep mode */
} epd_driver_t;

View File

@@ -104,6 +104,6 @@ void DrawCalendar(uint32_t timestamp)
GFX_end(&gfx);
NRF_LOG_DEBUG("display start\n");
driver->display();
driver->refresh();
NRF_LOG_DEBUG("display end\n");
}