use OTP lut for EPD_4in2

This commit is contained in:
Shuanglei Tao
2024-12-11 22:55:06 +08:00
parent 07b7b984fc
commit d3b28d010f
2 changed files with 12 additions and 108 deletions

View File

@@ -30,53 +30,6 @@
******************************************************************************/
#include "EPD_4in2.h"
static const unsigned char EPD_4IN2_lut_vcom0[] = {
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01,
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
};
static const unsigned char EPD_4IN2_lut_ww[] = {
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char EPD_4IN2_lut_bw[] = {
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char EPD_4IN2_lut_wb[] = {
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char EPD_4IN2_lut_bb[] = {
0x20, 0x08, 0x08, 0x00, 0x00, 0x02,
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
0x10, 0x08, 0x08, 0x00, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/******************************************************************************
function : Software reset
parameter:
@@ -85,18 +38,13 @@ static void EPD_4IN2_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
for (UBYTE i = 0; i < 3; i++)
{
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(10);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(10);
}
}
/******************************************************************************
@@ -147,34 +95,6 @@ void EPD_4IN2_TurnOnDisplay(void)
EPD_4IN2_ReadBusy();
}
/******************************************************************************
function : set the look-up tables
parameter:
******************************************************************************/
static void EPD_4IN2_SetLut(void)
{
unsigned int count;
EPD_4IN2_SendCommand(0x20);
for(count=0;count<36;count++)
{EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);}
EPD_4IN2_SendCommand(0x21);
for(count=0;count<36;count++)
{EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);}
EPD_4IN2_SendCommand(0x22);
for(count=0;count<36;count++)
{EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);}
EPD_4IN2_SendCommand(0x23);
for(count=0;count<36;count++)
{EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);}
EPD_4IN2_SendCommand(0x24);
for(count=0;count<36;count++)
{EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);}
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
@@ -182,26 +102,12 @@ parameter:
void EPD_4IN2_Init(void)
{
EPD_4IN2_Reset();
EPD_4IN2_SendCommand(0x01); // POWER SETTING
EPD_4IN2_SendData (0x03); // VDS_EN, VDG_EN internal
EPD_4IN2_SendData (0x00); // VCOM_HV, VGHL_LV=16V
EPD_4IN2_SendData (0x2b); // VDH=11V
EPD_4IN2_SendData (0x2b); // VDL=11V
EPD_4IN2_SendCommand(0x06); // boost soft start
EPD_4IN2_SendData (0x17); // A
EPD_4IN2_SendData (0x17); // B
EPD_4IN2_SendData (0x17); // C
EPD_4IN2_SendCommand(0x04); // POWER ON
EPD_4IN2_ReadBusy();
EPD_4IN2_SendCommand(0x00); // panel setting
EPD_4IN2_SendData(0x3f); // 300x400 B/W mode, LUT set by register
EPD_4IN2_SendCommand(0x30); // PLL setting (clock frequency)
EPD_4IN2_SendData (0x3c); // 3c=50HZ 3a=100HZ 29=150Hz 39=200HZ 31=171HZ
EPD_4IN2_SendData(0x1f); // 400x300 B/W mode, LUT from OTP
EPD_4IN2_SendCommand(0x61); // resolution setting
EPD_4IN2_SendData (EPD_4IN2_WIDTH / 256);
@@ -209,13 +115,8 @@ void EPD_4IN2_Init(void)
EPD_4IN2_SendData (EPD_4IN2_HEIGHT / 256);
EPD_4IN2_SendData (EPD_4IN2_HEIGHT % 256);
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
EPD_4IN2_SendData (0x12); // -0.1 + 18 * -0.05 = -1.0V
EPD_4IN2_SendCommand(0x50); // VCOM AND DATA INTERVAL SETTING
EPD_4IN2_SendData(0x97); // LUTB=0 LUTW=1 interval=10
EPD_4IN2_SetLut();
}
/******************************************************************************