You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
6.0 KiB
C

/**
******************************************************************************
* @file edp1in54.h
* @author Waveshare Team
* @version V1.0.0
* @date 23-January-2018
* @brief This file describes initialisation of 1.54 and 1.54b e-Papers
*
******************************************************************************
*/
int EPD_Init_1in54()
{
int EPD1in54 = 2;
if(EPD1in54 == 1) {
Serial.print("\r\nEPD1in54 V1");
EPD_Reset();
EPD_Send_3(0x01, 199, 0, 00);//DRIVER_OUTPUT_CONTROL: LO(EPD_HEIGHT-1), HI(EPD_HEIGHT-1). GD = 0; SM = 0; TB = 0;
EPD_Send_3(0x0C, 0xD7, 0xD6, 0x9D);//BOOSTER_SOFT_START_CONTROL
EPD_Send_1(0x2C, 0xA8);//WRITE_VCOM_REGISTER: VCOM 7C
EPD_Send_1(0x3A, 0x1A);//SET_DUMMY_LINE_PERIOD: 4 dummy lines per gate
EPD_Send_1(0x3B, 0x08);//SET_GATE_TIME: 2us per line
EPD_Send_1(0x11, 0x03);//DATA_ENTRY_MODE_SETTING: X increment; Y increment
EPD_lut(0x32, 30, &lut_full_mono[0]);
EPD_Send_2(0x44, 0, 24);//SET_RAM_X_ADDRESS_START_END_POSITION: LO(x >> 3), LO((w-1) >> 3)
EPD_Send_4(0x45, 0, 0, 200, 0);//SET_RAM_Y_ADDRESS_START_END_POSITION: LO(y), HI(y), LO(h - 1), HI(h - 1)
EPD_Send_1(0x4E, 0);//LO(x >> 3)
EPD_Send_2(0x4F, 0, 0);//LO(y), HI(y >> 8)
EPD_SendCommand(0x24);//WRITE_RAM
delay(2);
} else {
Serial.print("\r\nEPD1in54 V2");
EPD_Reset();
while (digitalRead(PIN_SPI_BUSY) == 1) delay(100);
EPD_SendCommand(0x12); //SWRESET
while (digitalRead(PIN_SPI_BUSY) == 1) delay(100);
EPD_SendCommand(0x01); //Driver output control
EPD_SendData(0xC7);
EPD_SendData(0x00);
EPD_SendData(0x01);
EPD_SendCommand(0x11); //data entry mode
EPD_SendData(0x01);
EPD_SendCommand(0x44); //set Ram-X address start/end position
EPD_SendData(0x00);
EPD_SendData(0x18); //0x0C-->(18+1)*8=200
EPD_SendCommand(0x45); //set Ram-Y address start/end position
EPD_SendData(0xC7); //0xC7-->(199+1)=200
EPD_SendData(0x00);
EPD_SendData(0x00);
EPD_SendData(0x00);
EPD_SendCommand(0x3C); //BorderWavefrom
EPD_SendData(0x01);
EPD_SendCommand(0x18);
EPD_SendData(0x80);
EPD_SendCommand(0x22); // //Load Temperature and waveform setting.
EPD_SendData(0XB1);
EPD_SendCommand(0x20);
EPD_SendCommand(0x4E); // set RAM x address count to 0;
EPD_SendData(0x00);
EPD_SendCommand(0x4F); // set RAM y address count to 0X199;
EPD_SendData(0xC7);
EPD_SendData(0x00);
while (digitalRead(PIN_SPI_BUSY) == 1) delay(100);
Serial.print("\r\n init over");
EPD_SendCommand(0x24);//DATA_START_TRANSMISSION_1
}
return 0;
}
void EPD_1IN54_Show(void)
{
int EPD1in54 = 2;
if(EPD1in54 == 1) {
Serial.print("\r\n EPD_1IN54_Show");
// Refresh
EPD_Send_1(0x22, 0xC4);// DISPLAY_UPDATE_CONTROL_2
EPD_SendCommand( 0x20);// MASTER_ACTIVATION
EPD_SendCommand( 0xFF);// TERMINATE_FRAME_READ_WRITE
EPD_WaitUntilIdle();
// Sleep
EPD_SendCommand(0x10);// DEEP_SLEEP_MODE
EPD_WaitUntilIdle();
}
else {
Serial.print("\r\n EPD_1IN54_V2_Show");
EPD_Send_1(0x22, 0xc7); //Display Update Control
EPD_SendCommand(0x20); //Activate Display Update Sequence
EPD_WaitUntilIdle();
EPD_Send_1(0x10, 0x01);
}
}
int EPD_Init_1in54b()
{
EPD_Reset();
EPD_Send_4(0x01, 0x07, 0x00, 0x08, 0x00);//POWER_SETTING
EPD_Send_3(0x06, 0x07, 0x07, 0x07);//BOOSTER_SOFT_START
EPD_SendCommand(0x04);//POWER_ON
EPD_WaitUntilIdle();
EPD_Send_1(0x00, 0xCF);//PANEL_SETTING
EPD_Send_1(0x50, 0x37);//VCOM_AND_DATA_INTERVAL_SETTING
EPD_Send_1(0x30, 0x39);//PLL_CONTROL
EPD_Send_3(0x61, 0xC8, 0x00, 0xC8);//TCON_RESOLUTION
EPD_Send_1(0x82, 0x0E);//VCM_DC_SETTING_REGISTER
EPD_SetLutBw (&lut_vcom0[0], &lut_w[0], &lut_b[0], &lut_g1[0], &lut_g2[0]);
EPD_SetLutRed(&lut_vcom1[0], &lut_red0[0], &lut_red1[0]);
EPD_SendCommand(0x10);//DATA_START_TRANSMISSION_1
delay(2);
return 0;
}
int EPD_1IN54B_V2_Init(void)
{
EPD_Reset();
EPD_WaitUntilIdle_high();
EPD_SendCommand(0x12); //SWRESET
EPD_WaitUntilIdle_high();
EPD_Send_3(0x01, 0xc7, 0x00, 0x01); //Driver output control
EPD_Send_1(0x11, 0x01); //data entry mode
EPD_Send_2(0x44, 0x00, 0x18); //set Ram-X address start/end position
EPD_Send_4(0x45, 0xc7, 0x00, 0x00, 0x00); //set Ram-Y address start/end position
EPD_Send_1(0x3C, 0x05); //BorderWavefrom
EPD_Send_1(0x18, 0x80); //Read built-in temperature sensor
EPD_Send_1(0x4E, 0x00); // set RAM x address count to 0;
EPD_Send_2(0x4F, 0xc7, 0x00); // set RAM y address count to 0X199;
EPD_WaitUntilIdle_high();
EPD_SendCommand(0x24);
delay(2);
return 0;
}
void EPD_1IN54B_V2_Show(void)
{
//refresh
EPD_Send_1(0x22, 0xf7); //Display Update Control
EPD_SendCommand(0x20); //Activate Display Update Sequence
EPD_WaitUntilIdle_high();
//sleep
EPD_Send_1(0x10, 0x01); //enter deep sleep
delay(2);
}
int EPD_Init_1in54c()
{
EPD_Reset();
EPD_Send_4(0x01, 0x07, 0x00, 0x08, 0x00);//POWER_SETTING
EPD_Send_3(0x06, 0x17, 0x17, 0x17);//BOOSTER_SOFT_START
EPD_SendCommand(0x04);//POWER_ON
EPD_WaitUntilIdle();
//EPD_Send_2(0x00, 0x0F, 0x0D);//PANEL_SETTING
EPD_Send_1(0x50, 0xF7);//VCOM_AND_DATA_INTERVAL_SETTING
EPD_Send_1(0x30, 0x39);//PLL_CONTROL
EPD_Send_3(0x61, 0x98, 0x00, 0x98);//TCON_RESOLUTION
EPD_Send_1(0x82, 0xF7);//VCM_DC_SETTING_REGISTER
EPD_SetLutBw (&lut_vcom0[0], &lut_w[0], &lut_b[0], &lut_g1[0], &lut_g2[0]);
EPD_SetLutRed(&lut_vcom1[0], &lut_red0[0], &lut_red1[0]);
EPD_SendCommand(0x10);//DATA_START_TRANSMISSION_1
delay(2);
return 0;
}