2019.06.24
This commit is contained in:
parent
e945bfbbf3
commit
1f82e4a488
2990 changed files with 667957 additions and 444550 deletions
300
Raspberry Pi/c/lib/e-Paper/EPD_1in54.c
Normal file
300
Raspberry Pi/c/lib/e-Paper/EPD_1in54.c
Normal file
|
|
@ -0,0 +1,300 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54.C
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_full_update[] => EPD_1IN54_lut_full_update[]
|
||||
* lut_partial_update[] => EPD_1IN54_lut_partial_update[]
|
||||
* EPD_Reset() => EPD_1IN54_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54_ReadBusy()
|
||||
* EPD_SetLut() => EPD_1IN54_SetLut()
|
||||
* EPD_SetWindow() => EPD_1IN54_SetWindow()
|
||||
* EPD_SetCursor() => EPD_1IN54_SetCursor()
|
||||
* EPD_TurnOnDisplay() => EPD_1IN54_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_1IN54_Init()
|
||||
* EPD_Clear() => EPD_1IN54_Clear()
|
||||
* EPD_Display() => EPD_1IN54_Display()
|
||||
* EPD_Sleep() => EPD_1IN54_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54_HEIGHT * EPD_1IN54_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_1in54.h"
|
||||
#include "Debug.h"
|
||||
|
||||
static const unsigned char EPD_1IN54_lut_full_update[] = {
|
||||
0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22,
|
||||
0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51,
|
||||
0x35, 0x51, 0x51, 0x19, 0x01, 0x00
|
||||
};
|
||||
|
||||
static const unsigned char EPD_1IN54_lut_partial_update[] = {
|
||||
0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Setting the display window
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_SetWindow(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
|
||||
{
|
||||
EPD_1IN54_SendCommand(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION
|
||||
EPD_1IN54_SendData((Xstart >> 3) & 0xFF);
|
||||
EPD_1IN54_SendData((Xend >> 3) & 0xFF);
|
||||
|
||||
EPD_1IN54_SendCommand(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION
|
||||
EPD_1IN54_SendData(Ystart & 0xFF);
|
||||
EPD_1IN54_SendData((Ystart >> 8) & 0xFF);
|
||||
EPD_1IN54_SendData(Yend & 0xFF);
|
||||
EPD_1IN54_SendData((Yend >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Set Cursor
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_SetCursor(UWORD Xstart, UWORD Ystart)
|
||||
{
|
||||
EPD_1IN54_SendCommand(0x4E); // SET_RAM_X_ADDRESS_COUNTER
|
||||
EPD_1IN54_SendData((Xstart >> 3) & 0xFF);
|
||||
|
||||
EPD_1IN54_SendCommand(0x4F); // SET_RAM_Y_ADDRESS_COUNTER
|
||||
EPD_1IN54_SendData(Ystart & 0xFF);
|
||||
EPD_1IN54_SendData((Ystart >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_1IN54_SendCommand(0x22); // DISPLAY_UPDATE_CONTROL_2
|
||||
EPD_1IN54_SendData(0xC4);
|
||||
EPD_1IN54_SendCommand(0x20); // MASTER_ACTIVATION
|
||||
EPD_1IN54_SendCommand(0xFF); // TERMINATE_FRAME_READ_WRITE
|
||||
|
||||
EPD_1IN54_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_Init(UBYTE Mode)
|
||||
{
|
||||
EPD_1IN54_Reset();
|
||||
|
||||
EPD_1IN54_SendCommand(0x01); // DRIVER_OUTPUT_CONTROL
|
||||
EPD_1IN54_SendData((EPD_1IN54_HEIGHT - 1) & 0xFF);
|
||||
EPD_1IN54_SendData(((EPD_1IN54_HEIGHT - 1) >> 8) & 0xFF);
|
||||
EPD_1IN54_SendData(0x00); // GD = 0; SM = 0; TB = 0;
|
||||
|
||||
EPD_1IN54_SendCommand(0x0C); // BOOSTER_SOFT_START_CONTROL
|
||||
EPD_1IN54_SendData(0xD7);
|
||||
EPD_1IN54_SendData(0xD6);
|
||||
EPD_1IN54_SendData(0x9D);
|
||||
|
||||
EPD_1IN54_SendCommand(0x2C); // WRITE_VCOM_REGISTER
|
||||
EPD_1IN54_SendData(0xA8); // VCOM 7C
|
||||
|
||||
EPD_1IN54_SendCommand(0x3A); // SET_DUMMY_LINE_PERIOD
|
||||
EPD_1IN54_SendData(0x1A); // 4 dummy lines per gate
|
||||
|
||||
EPD_1IN54_SendCommand(0x3B); // SET_GATE_TIME
|
||||
EPD_1IN54_SendData(0x08); // 2us per line
|
||||
|
||||
EPD_1IN54_SendCommand(0x11);
|
||||
EPD_1IN54_SendData(0x03);
|
||||
|
||||
//set the look-up table register
|
||||
EPD_1IN54_SendCommand(0x32);
|
||||
if(Mode == EPD_1IN54_FULL){
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_1IN54_SendData(EPD_1IN54_lut_full_update[i]);
|
||||
}
|
||||
}else if(Mode == EPD_1IN54_PART){
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_1IN54_SendData(EPD_1IN54_lut_partial_update[i]);
|
||||
}
|
||||
}else{
|
||||
Debug("error, the Mode is EPD_1IN54_FULL or EPD_1IN54_PART");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_WIDTH % 8 == 0)? (EPD_1IN54_WIDTH / 8 ): (EPD_1IN54_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_HEIGHT;
|
||||
EPD_1IN54_SetWindow(0, 0, EPD_1IN54_WIDTH, EPD_1IN54_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_1IN54_SetCursor(0, j);
|
||||
EPD_1IN54_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_WIDTH % 8 == 0)? (EPD_1IN54_WIDTH / 8 ): (EPD_1IN54_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
// UDOUBLE Offset = ImageName;
|
||||
EPD_1IN54_SetWindow(0, 0, EPD_1IN54_WIDTH, EPD_1IN54_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_1IN54_SetCursor(0, j);
|
||||
EPD_1IN54_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_1IN54_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_Sleep(void)
|
||||
{
|
||||
EPD_1IN54_SendCommand(0x10);
|
||||
EPD_1IN54_SendData(0x01);
|
||||
}
|
||||
104
Raspberry Pi/c/lib/e-Paper/EPD_1in54.h
Normal file
104
Raspberry Pi/c/lib/e-Paper/EPD_1in54.h
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.1
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.1(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_full_update[] => EPD_1IN54_lut_full_update[]
|
||||
* lut_partial_update[] => EPD_1IN54_lut_partial_update[]
|
||||
* EPD_Reset() => EPD_1IN54_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54_ReadBusy()
|
||||
* EPD_SetLut() => EPD_1IN54_SetLut()
|
||||
* EPD_SetWindow() => EPD_1IN54_SetWindow()
|
||||
* EPD_SetCursor() => EPD_1IN54_SetCursor()
|
||||
* EPD_TurnOnDisplay() => EPD_1IN54_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_1IN54_Init()
|
||||
* EPD_Clear() => EPD_1IN54_Clear()
|
||||
* EPD_Display() => EPD_1IN54_Display()
|
||||
* EPD_Sleep() => EPD_1IN54_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54_HEIGHT * EPD_1IN54_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_1IN54_H_
|
||||
#define __EPD_1IN54_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_1IN54_WIDTH 200
|
||||
#define EPD_1IN54_HEIGHT 200
|
||||
|
||||
#define EPD_1IN54_FULL 0
|
||||
#define EPD_1IN54_PART 1
|
||||
|
||||
void EPD_1IN54_Init(UBYTE Mode);
|
||||
void EPD_1IN54_Clear(void);
|
||||
void EPD_1IN54_Display(UBYTE *Image);
|
||||
void EPD_1IN54_Sleep(void);
|
||||
|
||||
#endif
|
||||
263
Raspberry Pi/c/lib/e-Paper/EPD_1in54_V2.c
Normal file
263
Raspberry Pi/c/lib/e-Paper/EPD_1in54_V2.c
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54_V2.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper V2
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V1.0
|
||||
* | Date : 2019-06-11
|
||||
* | Info :
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_1in54_V2.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
// UBYTE busy;
|
||||
// do {
|
||||
// EPD_1IN54_V2_SendCommand(0x71);
|
||||
// busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
// busy =!(busy & 0x01);
|
||||
// } while(busy);
|
||||
// DEV_Delay_ms(200);
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display full
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_1IN54_V2_SendCommand(0x22);
|
||||
EPD_1IN54_V2_SendData(0xF7);
|
||||
EPD_1IN54_V2_SendCommand(0x20);
|
||||
EPD_1IN54_V2_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display part
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54_V2_TurnOnDisplayPart(void)
|
||||
{
|
||||
EPD_1IN54_V2_SendCommand(0x22);
|
||||
EPD_1IN54_V2_SendData(0xFF);
|
||||
EPD_1IN54_V2_SendCommand(0x20);
|
||||
EPD_1IN54_V2_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_Init(void)
|
||||
{
|
||||
EPD_1IN54_V2_Reset();
|
||||
|
||||
EPD_1IN54_V2_ReadBusy();
|
||||
EPD_1IN54_V2_SendCommand(0x12); //SWRESET
|
||||
EPD_1IN54_V2_ReadBusy();
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x01); //Driver output control
|
||||
EPD_1IN54_V2_SendData(0xC7);
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_SendData(0x01);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x11); //data entry mode
|
||||
EPD_1IN54_V2_SendData(0x01);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x44); //set Ram-X address start/end position
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_SendData(0x18); //0x0C-->(18+1)*8=200
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x45); //set Ram-Y address start/end position
|
||||
EPD_1IN54_V2_SendData(0xC7); //0xC7-->(199+1)=200
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x3C); //BorderWavefrom
|
||||
EPD_1IN54_V2_SendData(0x01);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x18);
|
||||
EPD_1IN54_V2_SendData(0x80);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x22); // //Load Temperature and waveform setting.
|
||||
EPD_1IN54_V2_SendData(0XB1);
|
||||
EPD_1IN54_V2_SendCommand(0x20);
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x4E); // set RAM x address count to 0;
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_SendCommand(0x4F); // set RAM y address count to 0X199;
|
||||
EPD_1IN54_V2_SendData(0xC7);
|
||||
EPD_1IN54_V2_SendData(0x00);
|
||||
EPD_1IN54_V2_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_V2_WIDTH % 8 == 0)? (EPD_1IN54_V2_WIDTH / 8 ): (EPD_1IN54_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_V2_HEIGHT;
|
||||
|
||||
EPD_1IN54_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54_V2_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_V2_WIDTH % 8 == 0)? (EPD_1IN54_V2_WIDTH / 8 ): (EPD_1IN54_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_V2_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
EPD_1IN54_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_1IN54_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : The image of the previous frame must be uploaded, otherwise the
|
||||
first few seconds will display an exception.
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_DisplayPartBaseImage(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_V2_WIDTH % 8 == 0)? (EPD_1IN54_V2_WIDTH / 8 ): (EPD_1IN54_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_V2_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
EPD_1IN54_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_1IN54_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_V2_SendCommand(0x26);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_1IN54_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_V2_TurnOnDisplayPart();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_DisplayPart(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54_V2_WIDTH % 8 == 0)? (EPD_1IN54_V2_WIDTH / 8 ): (EPD_1IN54_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54_V2_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
EPD_1IN54_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_1IN54_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_1IN54_V2_TurnOnDisplayPart();
|
||||
}
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54_V2_Sleep(void)
|
||||
{
|
||||
EPD_1IN54_V2_SendCommand(0x10); //enter deep sleep
|
||||
EPD_1IN54_V2_SendData(0x01);
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
46
Raspberry Pi/c/lib/e-Paper/EPD_1in54_V2.h
Normal file
46
Raspberry Pi/c/lib/e-Paper/EPD_1in54_V2.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54_V2.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper V2
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V1.0
|
||||
* | Date : 2019-06-11
|
||||
* | Info :
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_1IN54_V2_H_
|
||||
#define __EPD_1IN54_V2_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_1IN54_V2_WIDTH 200
|
||||
#define EPD_1IN54_V2_HEIGHT 200
|
||||
|
||||
void EPD_1IN54_V2_Init(void);
|
||||
void EPD_1IN54_V2_Clear(void);
|
||||
void EPD_1IN54_V2_Display(UBYTE *Image);
|
||||
void EPD_1IN54_V2_DisplayPartBaseImage(UBYTE *Image);
|
||||
void EPD_1IN54_V2_DisplayPart(UBYTE *Image);
|
||||
void EPD_1IN54_V2_Sleep(void);
|
||||
|
||||
#endif
|
||||
348
Raspberry Pi/c/lib/e-Paper/EPD_1in54b.c
Normal file
348
Raspberry Pi/c/lib/e-Paper/EPD_1in54b.c
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54b.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper b
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.1
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.1(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcom0[] => EPD_1IN54_lut_vcom0[]
|
||||
* lut_w[] => EPD_1IN54_lut_w[]
|
||||
* lut_b[] => EPD_1IN54B_lut_b[]
|
||||
* lut_g1[] => EPD_1IN54B_lut_g1[]
|
||||
* lut_g2[] => EPD_1IN54B_lut_g2[]
|
||||
* lut_vcom1[] => EPD_1IN54B_lut_vcom1[]
|
||||
* lut_red0[] => EPD_1IN54B_lut_red0[]
|
||||
* lut_red1[] => EPD_1IN54B_lut_red1[]
|
||||
* EPD_Reset() => EPD_1IN54B_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54B_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54B_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54B_ReadBusy()
|
||||
* EPD_SetLutBw() => EPD_1IN54B_SetLutBw()
|
||||
* EPD_SetLutBw => EPD_1IN54B_SetLutBw()
|
||||
* EPD_Init() => EPD_1IN54B_Init()
|
||||
* EPD_Clear() => EPD_1IN54B_Clear()
|
||||
* EPD_Display() => EPD_1IN54B_Display()
|
||||
* EPD_Sleep() => EPD_1IN54B_Sleep()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-04-24):
|
||||
* 1.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54B_HEIGHT * EPD_1IN54B_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_1in54b.h"
|
||||
#include "Debug.h"
|
||||
|
||||
const unsigned char EPD_1IN54B_lut_vcom0[] = {0x0E, 0x14, 0x01, 0x0A, 0x06, 0x04, 0x0A, 0x0A, 0x0F, 0x03, 0x03, 0x0C, 0x06, 0x0A, 0x00};
|
||||
const unsigned char EPD_1IN54B_lut_w[] = {0x0E, 0x14, 0x01, 0x0A, 0x46, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x86, 0x0A, 0x04};
|
||||
const unsigned char EPD_1IN54B_lut_b[] = {0x0E, 0x14, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x4A, 0x04};
|
||||
const unsigned char EPD_1IN54B_lut_g1[] = {0x8E, 0x94, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x0A, 0x04};
|
||||
const unsigned char EPD_1IN54B_lut_g2[] = {0x8E, 0x94, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x0A, 0x04};
|
||||
const unsigned char EPD_1IN54B_lut_vcom1[] = {0x03, 0x1D, 0x01, 0x01, 0x08, 0x23, 0x37, 0x37, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
const unsigned char EPD_1IN54B_lut_red0[] = {0x83, 0x5D, 0x01, 0x81, 0x48, 0x23, 0x77, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
const unsigned char EPD_1IN54B_lut_red1[] = {0x03, 0x1D, 0x01, 0x01, 0x08, 0x23, 0x37, 0x37, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(100);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(1) {
|
||||
if(DEV_Digital_Read(EPD_BUSY_PIN) == 1)
|
||||
break;
|
||||
}
|
||||
DEV_Delay_ms(200);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Set the look-up black and white tables
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_SetLutBw(void)
|
||||
{
|
||||
UWORD count;
|
||||
EPD_1IN54B_SendCommand(0x20);// g vcom
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_vcom0[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x21);// g ww --
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_w[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x22);// g bw r
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_b[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x23);// g wb w
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_g1[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x24);// g bb b
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_g2[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Set the look-up red tables
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54B_SetLutRed(void)
|
||||
{
|
||||
UWORD count;
|
||||
EPD_1IN54B_SendCommand(0x25);
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_vcom1[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x26);
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_red0[count]);
|
||||
}
|
||||
EPD_1IN54B_SendCommand(0x27);
|
||||
for(count = 0; count < 15; count++) {
|
||||
EPD_1IN54B_SendData(EPD_1IN54B_lut_red1[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54B_Init(void)
|
||||
{
|
||||
EPD_1IN54B_Reset();
|
||||
|
||||
EPD_1IN54B_SendCommand(0x01);// POWER_SETTING
|
||||
EPD_1IN54B_SendData(0x07);
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_SendData(0x08);
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_SendCommand(0x06);// BOOSTER_SOFT_START
|
||||
EPD_1IN54B_SendData(0x07);
|
||||
EPD_1IN54B_SendData(0x07);
|
||||
EPD_1IN54B_SendData(0x07);
|
||||
EPD_1IN54B_SendCommand(0x04);// POWER_ON
|
||||
|
||||
EPD_1IN54B_ReadBusy();
|
||||
|
||||
EPD_1IN54B_SendCommand(0X00);// PANEL_SETTING
|
||||
EPD_1IN54B_SendData(0xcf);
|
||||
EPD_1IN54B_SendCommand(0X50);// VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_1IN54B_SendData(0x37);// 0xF0
|
||||
EPD_1IN54B_SendCommand(0x30);// PLL_CONTROL
|
||||
EPD_1IN54B_SendData(0x39);
|
||||
EPD_1IN54B_SendCommand(0x61);// TCON_RESOLUTION set x and y
|
||||
EPD_1IN54B_SendData(0xC8);// 200
|
||||
EPD_1IN54B_SendData(0x00);// y High eight: 0
|
||||
EPD_1IN54B_SendData(0xC8);// y Low eight: 200
|
||||
EPD_1IN54B_SendCommand(0x82);// VCM_DC_SETTING_REGISTER
|
||||
EPD_1IN54B_SendData(0x0E);
|
||||
|
||||
EPD_1IN54B_SetLutBw();
|
||||
EPD_1IN54B_SetLutRed();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54B_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54B_WIDTH % 8 == 0)? (EPD_1IN54B_WIDTH / 8 ): (EPD_1IN54B_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54B_HEIGHT;
|
||||
|
||||
//send black data
|
||||
EPD_1IN54B_SendCommand(0x10);// DATA_START_TRANSMISSION_1
|
||||
DEV_Delay_ms(2);
|
||||
for(UWORD i = 0; i < Height; i++) {
|
||||
for(UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54B_SendData(0xFF);
|
||||
EPD_1IN54B_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
DEV_Delay_ms(2);
|
||||
|
||||
//send red data
|
||||
EPD_1IN54B_SendCommand(0x13);// DATA_START_TRANSMISSION_2
|
||||
DEV_Delay_ms(2);
|
||||
for(UWORD i = 0; i < Height; i++) {
|
||||
for(UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54B_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
DEV_Delay_ms(2);
|
||||
|
||||
EPD_1IN54B_SendCommand(0x12);// DISPLAY_REFRESH
|
||||
EPD_1IN54B_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54B_Display(const UBYTE *blackimage, const UBYTE *redimage)
|
||||
{
|
||||
UBYTE Temp = 0x00;
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54B_WIDTH % 8 == 0)? (EPD_1IN54B_WIDTH / 8 ): (EPD_1IN54B_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54B_HEIGHT;
|
||||
|
||||
EPD_1IN54B_SendCommand(0x10);// DATA_START_TRANSMISSION_1
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Temp = 0x00;
|
||||
for (int bit = 0; bit < 4; bit++) {
|
||||
if ((blackimage[i + j * Width] & (0x80 >> bit)) != 0) {
|
||||
Temp |= 0xC0 >> (bit * 2);
|
||||
}
|
||||
}
|
||||
EPD_1IN54B_SendData(Temp);
|
||||
Temp = 0x00;
|
||||
for (int bit = 4; bit < 8; bit++) {
|
||||
if ((blackimage[i + j * Width] & (0x80 >> bit)) != 0) {
|
||||
Temp |= 0xC0 >> ((bit - 4) * 2);
|
||||
}
|
||||
}
|
||||
EPD_1IN54B_SendData(Temp);
|
||||
}
|
||||
}
|
||||
DEV_Delay_ms(2);
|
||||
|
||||
EPD_1IN54B_SendCommand(0x13);// DATA_START_TRANSMISSION_2
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54B_SendData(redimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
DEV_Delay_ms(2);
|
||||
|
||||
//Display refresh
|
||||
EPD_1IN54B_SendCommand(0x12);// DISPLAY_REFRESH
|
||||
EPD_1IN54B_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54B_Sleep(void)
|
||||
{
|
||||
EPD_1IN54B_SendCommand(0x50);// VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_1IN54B_SendData(0x17);
|
||||
EPD_1IN54B_SendCommand(0x82);// VCM_DC_SETTING_REGISTER
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_SendCommand(0x01);// POWER_SETTING
|
||||
EPD_1IN54B_SendData(0x02);
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_SendData(0x00);
|
||||
EPD_1IN54B_ReadBusy();
|
||||
DEV_Delay_ms(1000);
|
||||
|
||||
EPD_1IN54B_SendCommand(0x02);// POWER_OFF
|
||||
}
|
||||
108
Raspberry Pi/c/lib/e-Paper/EPD_1in54b.h
Normal file
108
Raspberry Pi/c/lib/e-Paper/EPD_1in54b.h
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54b.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper b
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.1
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.1(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcom0[] => EPD_1IN54_lut_vcom0[]
|
||||
* lut_w[] => EPD_1IN54_lut_w[]
|
||||
* lut_b[] => EPD_1IN54B_lut_b[]
|
||||
* lut_g1[] => EPD_1IN54B_lut_g1[]
|
||||
* lut_g2[] => EPD_1IN54B_lut_g2[]
|
||||
* lut_vcom1[] => EPD_1IN54B_lut_vcom1[]
|
||||
* lut_red0[] => EPD_1IN54B_lut_red0[]
|
||||
* lut_red1[] => EPD_1IN54B_lut_red1[]
|
||||
* EPD_Reset() => EPD_1IN54B_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54B_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54B_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54B_ReadBusy()
|
||||
* EPD_SetLutBw() => EPD_1IN54B_SetLutBw()
|
||||
* EPD_SetLutBw => EPD_1IN54B_SetLutBw()
|
||||
* EPD_Init() => EPD_1IN54B_Init()
|
||||
* EPD_Clear() => EPD_1IN54B_Clear()
|
||||
* EPD_Display() => EPD_1IN54B_Display()
|
||||
* EPD_Sleep() => EPD_1IN54B_Sleep()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-04-24):
|
||||
* 1.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54B_HEIGHT * EPD_1IN54B_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_1IN54B_H_
|
||||
#define __EPD_1IN54B_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_1IN54B_WIDTH 200
|
||||
#define EPD_1IN54B_HEIGHT 200
|
||||
|
||||
void EPD_1IN54B_Init(void);
|
||||
void EPD_1IN54B_Clear(void);
|
||||
void EPD_1IN54B_Display(const UBYTE *blackimage, const UBYTE *redimage);
|
||||
void EPD_1IN54B_Sleep(void);
|
||||
|
||||
#endif
|
||||
240
Raspberry Pi/c/lib/e-Paper/EPD_1in54c.c
Normal file
240
Raspberry Pi/c/lib/e-Paper/EPD_1in54c.c
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54c.C
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.1
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.1(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_1IN54C_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54C_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54C_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54C_ReadBusy()
|
||||
* EPD_Init() => EPD_1IN54C_Init()
|
||||
* EPD_Clear() => EPD_1IN54C_Clear()
|
||||
* EPD_Display() => EPD_1IN54C_Display()
|
||||
* EPD_Sleep() => EPD_1IN54C_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-14):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54C_HEIGHT * EPD_1IN54C_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_1in54c.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54C_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);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54C_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54C_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_1IN54C_ReadBusy(void)
|
||||
{
|
||||
unsigned char busy;
|
||||
do {
|
||||
EPD_1IN54C_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54C_Init(void)
|
||||
{
|
||||
EPD_1IN54C_Reset();
|
||||
|
||||
EPD_1IN54C_SendCommand(0x06); //boost soft start
|
||||
EPD_1IN54C_SendData(0x17);
|
||||
EPD_1IN54C_SendData(0x17);
|
||||
EPD_1IN54C_SendData(0x17);
|
||||
EPD_1IN54C_SendCommand(0x04);
|
||||
|
||||
EPD_1IN54C_ReadBusy();
|
||||
|
||||
EPD_1IN54C_SendCommand(0x00); //panel setting
|
||||
EPD_1IN54C_SendData(0x0f); //LUT from OTP£¬160x296
|
||||
EPD_1IN54C_SendData(0x0d); //VCOM to 0V fast
|
||||
|
||||
EPD_1IN54C_SendCommand(0x61); //resolution setting
|
||||
EPD_1IN54C_SendData(0x98); //152
|
||||
EPD_1IN54C_SendData(0x00); //152
|
||||
EPD_1IN54C_SendData(0x98);
|
||||
|
||||
EPD_1IN54C_SendCommand(0X50); //VCOM AND DATA INTERVAL SETTING
|
||||
EPD_1IN54C_SendData(0x77); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57 WBRmode:VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54C_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54C_WIDTH % 8 == 0)? (EPD_1IN54C_WIDTH / 8 ): (EPD_1IN54C_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54C_HEIGHT;
|
||||
|
||||
//send black data
|
||||
EPD_1IN54C_SendCommand(0x10);
|
||||
for(UWORD i = 0; i < Height; i++) {
|
||||
for(UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54C_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
//send red data
|
||||
EPD_1IN54C_SendCommand(0x13);
|
||||
for(UWORD i = 0; i < Height; i++) {
|
||||
for(UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54C_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
//Display refresh
|
||||
EPD_1IN54C_SendCommand(0x12);
|
||||
EPD_1IN54C_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54C_Display(const UBYTE *blackimage, const UBYTE *redimage)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_1IN54C_WIDTH % 8 == 0)? (EPD_1IN54C_WIDTH / 8 ): (EPD_1IN54C_WIDTH / 8 + 1);
|
||||
Height = EPD_1IN54C_HEIGHT;
|
||||
|
||||
//send black data
|
||||
EPD_1IN54C_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54C_SendData(blackimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
//send red data
|
||||
EPD_1IN54C_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_1IN54C_SendData(redimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
//Display refresh
|
||||
EPD_1IN54C_SendCommand(0x12);
|
||||
EPD_1IN54C_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_1IN54C_Sleep(void)
|
||||
{
|
||||
EPD_1IN54C_SendCommand(0X02); //power off
|
||||
EPD_1IN54C_ReadBusy();
|
||||
EPD_1IN54C_SendCommand(0X07); //deep sleep
|
||||
EPD_1IN54C_SendData(0xA5);
|
||||
}
|
||||
95
Raspberry Pi/c/lib/e-Paper/EPD_1in54c.h
Normal file
95
Raspberry Pi/c/lib/e-Paper/EPD_1in54c.h
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_1in54c.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 1.54inch e-paper c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.1
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.1(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_1IN54C_Reset()
|
||||
* EPD_SendCommand() => EPD_1IN54C_SendCommand()
|
||||
* EPD_SendData() => EPD_1IN54C_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_1IN54C_ReadBusy()
|
||||
* EPD_Init() => EPD_1IN54C_Init()
|
||||
* EPD_Clear() => EPD_1IN54C_Clear()
|
||||
* EPD_Display() => EPD_1IN54C_Display()
|
||||
* EPD_Sleep() => EPD_1IN54C_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-14):
|
||||
* 1.Remove:ImageBuff[EPD_1IN54C_HEIGHT * EPD_1IN54C_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_1IN54C_H_
|
||||
#define __EPD_1IN54C_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_1IN54C_WIDTH 152
|
||||
#define EPD_1IN54C_HEIGHT 152
|
||||
|
||||
void EPD_1IN54C_Init(void);
|
||||
void EPD_1IN54C_Clear(void);
|
||||
void EPD_1IN54C_Display(const UBYTE *blackimage, const UBYTE *redimage);
|
||||
void EPD_1IN54C_Sleep(void);
|
||||
|
||||
#endif
|
||||
255
Raspberry Pi/c/lib/e-Paper/EPD_2in13.c
Normal file
255
Raspberry Pi/c/lib/e-Paper/EPD_2in13.c
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2IN13.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN13_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13_Init()
|
||||
* EPD_Clear() => EPD_2IN13_Clear()
|
||||
* EPD_Display() => EPD_2IN13_Display()
|
||||
* EPD_Sleep() => EPD_2IN13_Sleep()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2019-01-03):
|
||||
* 1.Remove:ImageBuff[EPD_2IN13_HEIGHT * EPD_2IN13_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in13.h"
|
||||
#include "Debug.h"
|
||||
|
||||
const unsigned char EPD_2IN13_lut_full_update[] = {
|
||||
0x22, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x11,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
const unsigned char EPD_2IN13_lut_partial_update[] = {
|
||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN13_SendCommand(0x22); // DISPLAY_UPDATE_CONTROL_2
|
||||
EPD_2IN13_SendData(0xC4);
|
||||
EPD_2IN13_SendCommand(0X20); // MASTER_ACTIVATION
|
||||
EPD_2IN13_SendCommand(0xFF); // TERMINATE_FRAME_READ_WRITE
|
||||
|
||||
EPD_2IN13_ReadBusy();
|
||||
}
|
||||
|
||||
static void EPD_2IN13_SetWindows(int x_start, int y_start, int x_end, int y_end)
|
||||
{
|
||||
EPD_2IN13_SendCommand(0x44);
|
||||
/* x point must be the multiple of 8 or the last 3 bits will be ignored */
|
||||
EPD_2IN13_SendData((x_start >> 3) & 0xFF);
|
||||
EPD_2IN13_SendData((x_end >> 3) & 0xFF);
|
||||
EPD_2IN13_SendCommand(0x45);
|
||||
EPD_2IN13_SendData(y_start & 0xFF);
|
||||
EPD_2IN13_SendData((y_start >> 8) & 0xFF);
|
||||
EPD_2IN13_SendData(y_end & 0xFF);
|
||||
EPD_2IN13_SendData((y_end >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
static void EPD_2IN13_SetCursor(int x, int y)
|
||||
{
|
||||
EPD_2IN13_SendCommand(0x4E);
|
||||
/* x point must be the multiple of 8 or the last 3 bits will be ignored */
|
||||
EPD_2IN13_SendData((x >> 3) & 0xFF);
|
||||
EPD_2IN13_SendCommand(0x4F);
|
||||
EPD_2IN13_SendData(y & 0xFF);
|
||||
EPD_2IN13_SendData((y >> 8) & 0xFF);
|
||||
// EPD_2IN13_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_Init(UBYTE Mode)
|
||||
{
|
||||
EPD_2IN13_Reset();
|
||||
|
||||
EPD_2IN13_SendCommand(0x01); // DRIVER_OUTPUT_CONTROL
|
||||
EPD_2IN13_SendData((EPD_2IN13_HEIGHT - 1) & 0xFF);
|
||||
EPD_2IN13_SendData(((EPD_2IN13_HEIGHT - 1) >> 8) & 0xFF);
|
||||
EPD_2IN13_SendData(0x00); // GD = 0; SM = 0; TB = 0;
|
||||
|
||||
EPD_2IN13_SendCommand(0x0C); // BOOSTER_SOFT_START_CONTROL
|
||||
EPD_2IN13_SendData(0xD7);
|
||||
EPD_2IN13_SendData(0xD6);
|
||||
EPD_2IN13_SendData(0x9D);
|
||||
|
||||
EPD_2IN13_SendCommand(0x2C); // WRITE_VCOM_REGISTER
|
||||
EPD_2IN13_SendData(0xA8); // VCOM 7C
|
||||
|
||||
EPD_2IN13_SendCommand(0x3A); // SET_DUMMY_LINE_PERIOD
|
||||
EPD_2IN13_SendData(0x1A); // 4 dummy lines per gate
|
||||
|
||||
EPD_2IN13_SendCommand(0x3B); // SET_GATE_TIME
|
||||
EPD_2IN13_SendData(0x08); // 2us per line
|
||||
|
||||
EPD_2IN13_SendCommand(0X3C); // BORDER_WAVEFORM_CONTROL
|
||||
EPD_2IN13_SendData(0x63);
|
||||
|
||||
EPD_2IN13_SendCommand(0X11); // DATA_ENTRY_MODE_SETTING
|
||||
EPD_2IN13_SendData(0x03); // X increment; Y increment
|
||||
|
||||
//set the look-up table register
|
||||
EPD_2IN13_SendCommand(0x32);
|
||||
if(Mode == EPD_2IN13_FULL) {
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_2IN13_SendData(EPD_2IN13_lut_full_update[i]);
|
||||
}
|
||||
} else if(Mode == EPD_2IN13_PART) {
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_2IN13_SendData(EPD_2IN13_lut_partial_update[i]);
|
||||
}
|
||||
} else {
|
||||
Debug("error, the Mode is EPD_2IN13_FULL or EPD_2IN13_PART");
|
||||
}
|
||||
}
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_WIDTH % 8 == 0)? (EPD_2IN13_WIDTH / 8 ): (EPD_2IN13_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_HEIGHT;
|
||||
|
||||
EPD_2IN13_SetWindows(0, 0, EPD_2IN13_WIDTH, EPD_2IN13_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_2IN13_SetCursor(0, j);
|
||||
EPD_2IN13_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_SendData(0Xff);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_WIDTH % 8 == 0)? (EPD_2IN13_WIDTH / 8 ): (EPD_2IN13_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_HEIGHT;
|
||||
|
||||
EPD_2IN13_SetWindows(0, 0, EPD_2IN13_WIDTH, EPD_2IN13_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_2IN13_SetCursor(0, j);
|
||||
EPD_2IN13_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_Sleep(void)
|
||||
{
|
||||
EPD_2IN13_SendCommand(0x10); //DEEP_SLEEP_MODE
|
||||
EPD_2IN13_SendData(0x01);
|
||||
}
|
||||
68
Raspberry Pi/c/lib/e-Paper/EPD_2in13.h
Normal file
68
Raspberry Pi/c/lib/e-Paper/EPD_2in13.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2IN13.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN13_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13_Init()
|
||||
* EPD_Clear() => EPD_2IN13_Clear()
|
||||
* EPD_Display() => EPD_2IN13_Display()
|
||||
* EPD_Sleep() => EPD_2IN13_Sleep()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2019-01-03):
|
||||
* 1.Remove:ImageBuff[EPD_2IN13_HEIGHT * EPD_2IN13_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef _EPD2IN13_H
|
||||
#define _EPD2IN13_H
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN13_WIDTH 122
|
||||
#define EPD_2IN13_HEIGHT 250
|
||||
|
||||
#define EPD_2IN13_FULL 0
|
||||
#define EPD_2IN13_PART 1
|
||||
|
||||
void EPD_2IN13_Init(UBYTE Mode);
|
||||
void EPD_2IN13_Clear(void);
|
||||
void EPD_2IN13_Display(UBYTE *Image);
|
||||
void EPD_2IN13_Sleep(void);
|
||||
|
||||
#endif
|
||||
364
Raspberry Pi/c/lib/e-Paper/EPD_2in13_V2.c
Normal file
364
Raspberry Pi/c/lib/e-Paper/EPD_2in13_V2.c
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13_V2.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper V2
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change name:
|
||||
* EPD_Reset() => EPD_2IN13_V2_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13_V2_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13_V2_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13_V2_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13_V2_Init()
|
||||
* EPD_Clear() => EPD_2IN13_V2_Clear()
|
||||
* EPD_Display() => EPD_2IN13_V2_Display()
|
||||
* EPD_Sleep() => EPD_2IN13_V2_Sleep()
|
||||
* 2.add:
|
||||
* EPD_2IN13_V2_DisplayPartBaseImage()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-14):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_2IN13_V2_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in13_V2.h"
|
||||
#include "Debug.h"
|
||||
|
||||
const unsigned char EPD_2IN13_V2_lut_full_update[]= {
|
||||
0x80,0x60,0x40,0x00,0x00,0x00,0x00, //LUT0: BB: VS 0 ~7
|
||||
0x10,0x60,0x20,0x00,0x00,0x00,0x00, //LUT1: BW: VS 0 ~7
|
||||
0x80,0x60,0x40,0x00,0x00,0x00,0x00, //LUT2: WB: VS 0 ~7
|
||||
0x10,0x60,0x20,0x00,0x00,0x00,0x00, //LUT3: WW: VS 0 ~7
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LUT4: VCOM: VS 0 ~7
|
||||
|
||||
0x03,0x03,0x00,0x00,0x02, // TP0 A~D RP0
|
||||
0x09,0x09,0x00,0x00,0x02, // TP1 A~D RP1
|
||||
0x03,0x03,0x00,0x00,0x02, // TP2 A~D RP2
|
||||
0x00,0x00,0x00,0x00,0x00, // TP3 A~D RP3
|
||||
0x00,0x00,0x00,0x00,0x00, // TP4 A~D RP4
|
||||
0x00,0x00,0x00,0x00,0x00, // TP5 A~D RP5
|
||||
0x00,0x00,0x00,0x00,0x00, // TP6 A~D RP6
|
||||
|
||||
0x15,0x41,0xA8,0x32,0x30,0x0A,
|
||||
};
|
||||
|
||||
const unsigned char EPD_2IN13_V2_lut_partial_update[]= { //20 bytes
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LUT0: BB: VS 0 ~7
|
||||
0x80,0x00,0x00,0x00,0x00,0x00,0x00, //LUT1: BW: VS 0 ~7
|
||||
0x40,0x00,0x00,0x00,0x00,0x00,0x00, //LUT2: WB: VS 0 ~7
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LUT3: WW: VS 0 ~7
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LUT4: VCOM: VS 0 ~7
|
||||
|
||||
0x0A,0x00,0x00,0x00,0x00, // TP0 A~D RP0
|
||||
0x00,0x00,0x00,0x00,0x00, // TP1 A~D RP1
|
||||
0x00,0x00,0x00,0x00,0x00, // TP2 A~D RP2
|
||||
0x00,0x00,0x00,0x00,0x00, // TP3 A~D RP3
|
||||
0x00,0x00,0x00,0x00,0x00, // TP4 A~D RP4
|
||||
0x00,0x00,0x00,0x00,0x00, // TP5 A~D RP5
|
||||
0x00,0x00,0x00,0x00,0x00, // TP6 A~D RP6
|
||||
|
||||
0x15,0x41,0xA8,0x32,0x30,0x0A,
|
||||
};
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN13_V2_SendCommand(0x22);
|
||||
EPD_2IN13_V2_SendData(0xC7);
|
||||
EPD_2IN13_V2_SendCommand(0x20);
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_TurnOnDisplayPart(void)
|
||||
{
|
||||
EPD_2IN13_V2_SendCommand(0x22);
|
||||
EPD_2IN13_V2_SendData(0x0C);
|
||||
EPD_2IN13_V2_SendCommand(0x20);
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
}
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_Init(UBYTE Mode)
|
||||
{
|
||||
UBYTE count;
|
||||
EPD_2IN13_V2_Reset();
|
||||
|
||||
if(Mode == EPD_2IN13_V2_FULL) {
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
EPD_2IN13_V2_SendCommand(0x12); // soft reset
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x74); //set analog block control
|
||||
EPD_2IN13_V2_SendData(0x54);
|
||||
EPD_2IN13_V2_SendCommand(0x7E); //set digital block control
|
||||
EPD_2IN13_V2_SendData(0x3B);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x01); //Driver output control
|
||||
EPD_2IN13_V2_SendData(0xF9);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x11); //data entry mode
|
||||
EPD_2IN13_V2_SendData(0x01);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x44); //set Ram-X address start/end position
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x0F); //0x0C-->(15+1)*8=128
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x45); //set Ram-Y address start/end position
|
||||
EPD_2IN13_V2_SendData(0xF9); //0xF9-->(249+1)=250
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x3C); //BorderWavefrom
|
||||
EPD_2IN13_V2_SendData(0x03);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x2C); //VCOM Voltage
|
||||
EPD_2IN13_V2_SendData(0x55); //
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x03);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[70]);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x04); //
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[71]);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[72]);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[73]);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x3A); //Dummy Line
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[74]);
|
||||
EPD_2IN13_V2_SendCommand(0x3B); //Gate time
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[75]);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x32);
|
||||
for(count = 0; count < 70; count++) {
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x4E); // set RAM x address count to 0;
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendCommand(0x4F); // set RAM y address count to 0X127;
|
||||
EPD_2IN13_V2_SendData(0xF9);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
} else if(Mode == EPD_2IN13_V2_PART) {
|
||||
EPD_2IN13_V2_SendCommand(0x2C); //VCOM Voltage
|
||||
EPD_2IN13_V2_SendData(0x26);
|
||||
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x32);
|
||||
for(count = 0; count < 70; count++) {
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_partial_update[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x37);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x40);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x22);
|
||||
EPD_2IN13_V2_SendData(0xC0);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x20);
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x3C); //BorderWavefrom
|
||||
EPD_2IN13_V2_SendData(0x01);
|
||||
} else {
|
||||
Debug("error, the Mode is EPD_2IN13_FULL or EPD_2IN13_PART");
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : The image of the previous frame must be uploaded, otherwise the
|
||||
first few seconds will display an exception.
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_2IN13_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_SendCommand(0x26);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_2IN13_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
|
||||
void EPD_2IN13_V2_DisplayPart(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_TurnOnDisplayPart();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13_V2_Sleep(void)
|
||||
{
|
||||
EPD_2IN13_V2_SendCommand(0x22); //POWER OFF
|
||||
EPD_2IN13_V2_SendData(0xC3);
|
||||
EPD_2IN13_V2_SendCommand(0x20);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x10); //enter deep sleep
|
||||
EPD_2IN13_V2_SendData(0x01);
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
72
Raspberry Pi/c/lib/e-Paper/EPD_2in13_V2.h
Normal file
72
Raspberry Pi/c/lib/e-Paper/EPD_2in13_V2.h
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13_V2.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper V2
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change name:
|
||||
* EPD_Reset() => EPD_2IN13_V2_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13_V2_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13_V2_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13_V2_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13_V2_Init()
|
||||
* EPD_Clear() => EPD_2IN13_V2_Clear()
|
||||
* EPD_Display() => EPD_2IN13_V2_Display()
|
||||
* EPD_Sleep() => EPD_2IN13_V2_Sleep()
|
||||
* 2.add:
|
||||
* EPD_2IN13_V2_DisplayPartBaseImage()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-14):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_2IN13_V2_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef _EPD_2IN13_V2_H_
|
||||
#define _EPD_2IN13_V2_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN13_V2_WIDTH 122
|
||||
#define EPD_2IN13_V2_HEIGHT 250
|
||||
|
||||
#define EPD_2IN13_V2_FULL 0
|
||||
#define EPD_2IN13_V2_PART 1
|
||||
|
||||
void EPD_2IN13_V2_Init(UBYTE Mode);
|
||||
void EPD_2IN13_V2_Clear(void);
|
||||
void EPD_2IN13_V2_Display(UBYTE *Image);
|
||||
void EPD_2IN13_V2_DisplayPart(UBYTE *Image);
|
||||
void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image);
|
||||
void EPD_2IN13_V2_Sleep(void);
|
||||
|
||||
#endif
|
||||
247
Raspberry Pi/c/lib/e-Paper/EPD_2in13bc.c
Normal file
247
Raspberry Pi/c/lib/e-Paper/EPD_2in13bc.c
Normal file
|
|
@ -0,0 +1,247 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13bc.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN13BC_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13BC_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13BC_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13BC_Init()
|
||||
* EPD_Clear() => EPD_2IN13BC_Clear()
|
||||
* EPD_Display() => EPD_2IN13BC_Display()
|
||||
* EPD_Sleep() => EPD_2IN13BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* V2.0(2018-11-13):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in13bc.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13BC_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13BC_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13BC_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13BC_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) {
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13BC_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN13BC_SendCommand(0x12); //DISPLAY REFRESH
|
||||
DEV_Delay_ms(10);
|
||||
|
||||
EPD_2IN13BC_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13BC_Init(void)
|
||||
{
|
||||
EPD_2IN13BC_Reset();
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_2IN13BC_SendData(0x17);
|
||||
EPD_2IN13BC_SendData(0x17);
|
||||
EPD_2IN13BC_SendData(0x17);
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x04); // POWER_ON
|
||||
EPD_2IN13BC_ReadBusy();
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_2IN13BC_SendData(0x8F);
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x50); // VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_2IN13BC_SendData(0xF0);
|
||||
EPD_2IN13BC_SendCommand(0x61); // RESOLUTION_SETTING
|
||||
EPD_2IN13BC_SendData(EPD_2IN13BC_WIDTH); // width: 104
|
||||
EPD_2IN13BC_SendData(EPD_2IN13BC_HEIGHT >> 8); // height: 212
|
||||
EPD_2IN13BC_SendData(EPD_2IN13BC_HEIGHT & 0xFF);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13BC_Clear(void)
|
||||
{
|
||||
UWORD Width = (EPD_2IN13BC_WIDTH % 8 == 0)? (EPD_2IN13BC_WIDTH / 8 ): (EPD_2IN13BC_WIDTH / 8 + 1);
|
||||
UWORD Height = EPD_2IN13BC_HEIGHT;
|
||||
|
||||
//send black data
|
||||
EPD_2IN13BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
EPD_2IN13BC_SendCommand(0x92);
|
||||
|
||||
//send red data
|
||||
EPD_2IN13BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
EPD_2IN13BC_SendCommand(0x92);
|
||||
|
||||
EPD_2IN13BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13BC_Display(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13BC_WIDTH % 8 == 0)? (EPD_2IN13BC_WIDTH / 8 ): (EPD_2IN13BC_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13BC_HEIGHT;
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13BC_SendData(blackimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13BC_SendCommand(0x92);
|
||||
|
||||
EPD_2IN13BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13BC_SendData(ryimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13BC_SendCommand(0x92);
|
||||
|
||||
EPD_2IN13BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13BC_Sleep(void)
|
||||
{
|
||||
EPD_2IN13BC_SendCommand(0x02); // POWER_OFF
|
||||
EPD_2IN13BC_ReadBusy();
|
||||
EPD_2IN13BC_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_2IN13BC_SendData(0xA5); // check code
|
||||
}
|
||||
97
Raspberry Pi/c/lib/e-Paper/EPD_2in13bc.h
Normal file
97
Raspberry Pi/c/lib/e-Paper/EPD_2in13bc.h
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13bc.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN13BC_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13BC_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13BC_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN13BC_Init()
|
||||
* EPD_Clear() => EPD_2IN13BC_Clear()
|
||||
* EPD_Display() => EPD_2IN13BC_Display()
|
||||
* EPD_Sleep() => EPD_2IN13BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* V2.0(2018-11-13):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN13BC_H_
|
||||
#define __EPD_2IN13BC_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN13BC_WIDTH 104
|
||||
#define EPD_2IN13BC_HEIGHT 212
|
||||
|
||||
void EPD_2IN13BC_Init(void);
|
||||
void EPD_2IN13BC_Clear(void);
|
||||
void EPD_2IN13BC_Display(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_2IN13BC_Sleep(void);
|
||||
|
||||
#endif
|
||||
461
Raspberry Pi/c/lib/e-Paper/EPD_2in13d.c
Normal file
461
Raspberry Pi/c/lib/e-Paper/EPD_2in13d.c
Normal file
|
|
@ -0,0 +1,461 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13d.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper d
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_2IN13D_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_2IN13D_lut_ww[]
|
||||
* lut_bw[] => EPD_2IN13D_lut_bw[]
|
||||
* lut_wb[] => EPD_2IN13D_lut_wb[]
|
||||
* lut_bb[] => EPD_2IN13D_lut_bb[]
|
||||
* lut_vcom1[] => EPD_2IN13D_lut_vcom1[]
|
||||
* lut_ww1[] => EPD_2IN13D_lut_ww1[]
|
||||
* lut_bw1[] => EPD_2IN13D_lut_bw1[]
|
||||
* lut_wb1[] => EPD_2IN13D_lut_wb1[]
|
||||
* lut_bb1[] => EPD_2IN13D_lut_bb1[]
|
||||
* EPD_Reset() => EPD_2IN13D_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13D_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13D_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13D_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_2IN13D_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_2IN13D_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN13D_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN13D_Init()
|
||||
* EPD_Clear() => EPD_2IN13D_Clear()
|
||||
* EPD_Display() => EPD_2IN13D_Display()
|
||||
* EPD_Sleep() => EPD_2IN13D_Sleep()
|
||||
* V2.0(2018-11-13):
|
||||
* 1.Remove:ImageBuff[EPD_2IN13D_HEIGHT * EPD_2IN13D_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in13d.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/**
|
||||
* full screen update LUT
|
||||
**/
|
||||
static const unsigned char EPD_2IN13D_lut_vcomDC[] = {
|
||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
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_2IN13D_lut_ww[] = {
|
||||
0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_bw[] = {
|
||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x03,
|
||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_wb[] = {
|
||||
0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_bb[] = {
|
||||
0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* partial screen update LUT
|
||||
**/
|
||||
static const unsigned char EPD_2IN13D_lut_vcom1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
,0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_ww1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_bw1[] = {
|
||||
0x80, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_wb1[] = {
|
||||
0x40, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
static const unsigned char EPD_2IN13D_lut_bb1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
UBYTE busy;
|
||||
do {
|
||||
EPD_2IN13D_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
DEV_Delay_ms(200);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : LUT download
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_SetFullReg(void)
|
||||
{
|
||||
EPD_2IN13D_SendCommand(0X50); //VCOM AND DATA INTERVAL SETTING
|
||||
EPD_2IN13D_SendData(0xb7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57 WBRmode:VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||
|
||||
unsigned int count;
|
||||
EPD_2IN13D_SendCommand(0x20);
|
||||
for(count=0; count<44; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_vcomDC[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x21);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_ww[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x22);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_bw[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x23);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_wb[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x24);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_bb[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : LUT download
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_SetPartReg(void)
|
||||
{
|
||||
EPD_2IN13D_SendCommand(0x82); //vcom_DC setting
|
||||
EPD_2IN13D_SendData(0x00);
|
||||
EPD_2IN13D_SendCommand(0X50);
|
||||
EPD_2IN13D_SendData(0xb7);
|
||||
|
||||
unsigned int count;
|
||||
EPD_2IN13D_SendCommand(0x20);
|
||||
for(count=0; count<44; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_vcom1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x21);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_ww1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x22);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_bw1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x23);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_wb1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x24);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_lut_bb1[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13D_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN13D_SendCommand(0x12); //DISPLAY REFRESH
|
||||
DEV_Delay_ms(10); //!!!The delay here is necessary, 200uS at least!!!
|
||||
|
||||
EPD_2IN13D_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13D_Init()
|
||||
{
|
||||
EPD_2IN13D_Reset();
|
||||
|
||||
EPD_2IN13D_SendCommand(0x01); //POWER SETTING
|
||||
EPD_2IN13D_SendData(0x03);
|
||||
EPD_2IN13D_SendData(0x00);
|
||||
EPD_2IN13D_SendData(0x2b);
|
||||
EPD_2IN13D_SendData(0x2b);
|
||||
EPD_2IN13D_SendData(0x03);
|
||||
|
||||
EPD_2IN13D_SendCommand(0x06); //boost soft start
|
||||
EPD_2IN13D_SendData(0x17); //A
|
||||
EPD_2IN13D_SendData(0x17); //B
|
||||
EPD_2IN13D_SendData(0x17); //C
|
||||
|
||||
EPD_2IN13D_SendCommand(0x04);
|
||||
EPD_2IN13D_ReadBusy();
|
||||
|
||||
EPD_2IN13D_SendCommand(0x00); //panel setting
|
||||
EPD_2IN13D_SendData(0xbf); //LUT from OTP,128x296
|
||||
EPD_2IN13D_SendData(0x0e); //VCOM to 0V fast
|
||||
|
||||
EPD_2IN13D_SendCommand(0x30); //PLL setting
|
||||
EPD_2IN13D_SendData(0x3a); // 3a 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||
|
||||
EPD_2IN13D_SendCommand(0x61); //resolution setting
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_WIDTH);
|
||||
EPD_2IN13D_SendData((EPD_2IN13D_HEIGHT >> 8) & 0xff);
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_HEIGHT& 0xff);
|
||||
|
||||
EPD_2IN13D_SendCommand(0x82); //vcom_DC setting
|
||||
EPD_2IN13D_SendData(0x28);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13D_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13D_WIDTH % 8 == 0)? (EPD_2IN13D_WIDTH / 8 ): (EPD_2IN13D_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13D_HEIGHT;
|
||||
|
||||
EPD_2IN13D_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(0x00);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13D_SetFullReg();
|
||||
EPD_2IN13D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13D_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13D_WIDTH % 8 == 0)? (EPD_2IN13D_WIDTH / 8 ): (EPD_2IN13D_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13D_HEIGHT;
|
||||
|
||||
EPD_2IN13D_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(0x00);
|
||||
}
|
||||
}
|
||||
// Dev_Delay_ms(10);
|
||||
|
||||
EPD_2IN13D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
// Dev_Delay_ms(10);
|
||||
|
||||
EPD_2IN13D_SetFullReg();
|
||||
EPD_2IN13D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13D_DisplayPart(UBYTE *Image)
|
||||
{
|
||||
/* Set partial Windows */
|
||||
EPD_2IN13D_SetPartReg();
|
||||
EPD_2IN13D_SendCommand(0x91); //This command makes the display enter partial mode
|
||||
EPD_2IN13D_SendCommand(0x90); //resolution setting
|
||||
EPD_2IN13D_SendData(0); //x-start
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_WIDTH - 1); //x-end
|
||||
|
||||
EPD_2IN13D_SendData(0);
|
||||
EPD_2IN13D_SendData(0); //y-start
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_HEIGHT / 256);
|
||||
EPD_2IN13D_SendData(EPD_2IN13D_HEIGHT % 256 - 1); //y-end
|
||||
EPD_2IN13D_SendData(0x28);
|
||||
|
||||
UWORD Width;
|
||||
Width = (EPD_2IN13D_WIDTH % 8 == 0)? (EPD_2IN13D_WIDTH / 8 ): (EPD_2IN13D_WIDTH / 8 + 1);
|
||||
|
||||
/* send data */
|
||||
EPD_2IN13D_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < EPD_2IN13D_HEIGHT; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(~Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < EPD_2IN13D_HEIGHT; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13D_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set partial refresh */
|
||||
EPD_2IN13D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN13D_Sleep(void)
|
||||
{
|
||||
EPD_2IN13D_SendCommand(0X50);
|
||||
EPD_2IN13D_SendData(0xf7);
|
||||
EPD_2IN13D_SendCommand(0X02); //power off
|
||||
EPD_2IN13D_SendCommand(0X07); //deep sleep
|
||||
EPD_2IN13D_SendData(0xA5);
|
||||
}
|
||||
78
Raspberry Pi/c/lib/e-Paper/EPD_2in13d.h
Normal file
78
Raspberry Pi/c/lib/e-Paper/EPD_2in13d.h
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in13d.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.13inch e-paper d
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_2IN13D_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_2IN13D_lut_ww[]
|
||||
* lut_bw[] => EPD_2IN13D_lut_bw[]
|
||||
* lut_wb[] => EPD_2IN13D_lut_wb[]
|
||||
* lut_bb[] => EPD_2IN13D_lut_bb[]
|
||||
* lut_vcom1[] => EPD_2IN13D_lut_vcom1[]
|
||||
* lut_ww1[] => EPD_2IN13D_lut_ww1[]
|
||||
* lut_bw1[] => EPD_2IN13D_lut_bw1[]
|
||||
* lut_wb1[] => EPD_2IN13D_lut_wb1[]
|
||||
* lut_bb1[] => EPD_2IN13D_lut_bb1[]
|
||||
* EPD_Reset() => EPD_2IN13D_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN13D_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN13D_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN13D_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_2IN13D_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_2IN13D_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN13D_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN13D_Init()
|
||||
* EPD_Clear() => EPD_2IN13D_Clear()
|
||||
* EPD_Display() => EPD_2IN13D_Display()
|
||||
* EPD_Sleep() => EPD_2IN13D_Sleep()
|
||||
* V2.0(2018-11-13):
|
||||
* 1.Remove:ImageBuff[EPD_2IN13D_HEIGHT * EPD_2IN13D_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN13D_H_
|
||||
#define __EPD_2IN13D_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN13D_WIDTH 104
|
||||
#define EPD_2IN13D_HEIGHT 212
|
||||
|
||||
void EPD_2IN13D_Init(void);
|
||||
void EPD_2IN13D_Clear(void);
|
||||
void EPD_2IN13D_Display(UBYTE *Image);
|
||||
void EPD_2IN13D_DisplayPart(UBYTE *Image);
|
||||
void EPD_2IN13D_Sleep(void);
|
||||
|
||||
#endif
|
||||
359
Raspberry Pi/c/lib/e-Paper/EPD_2in7.c
Normal file
359
Raspberry Pi/c/lib/e-Paper/EPD_2in7.c
Normal file
|
|
@ -0,0 +1,359 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in7.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.7inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcom_dc[] => EPD_2in7_lut_vcom_dc[]
|
||||
* lut_ww[] => EPD_2in7_lut_ww[]
|
||||
* lut_bw[] => EPD_2in7_lut_bw[]
|
||||
* lut_bb[] => EPD_2in7_lut_bb[]
|
||||
* lut_wb[] => EPD_2in7_lut_wb[]
|
||||
* EPD_Reset() => EPD_2in7_Reset()
|
||||
* EPD_SendCommand() => EPD_2in7_SendCommand()
|
||||
* EPD_SendData() => EPD_2in7_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2in7_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2in7_SetLut()
|
||||
* EPD_Init() => EPD_2in7_Init()
|
||||
* EPD_Clear() => EPD_2in7_Clear()
|
||||
* EPD_Display() => EPD_2in7_Display()
|
||||
* EPD_Sleep() => EPD_2in7_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in7.h"
|
||||
#include "Debug.h"
|
||||
|
||||
static const unsigned char EPD_2in7_lut_vcom_dc[] = {
|
||||
0x00 ,0x00,
|
||||
0x00 ,0x08 ,0x00 ,0x00 ,0x00 ,0x02,
|
||||
0x60 ,0x28 ,0x28 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x12 ,0x12 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00
|
||||
};
|
||||
static const unsigned char EPD_2in7_lut_ww[] = {
|
||||
0x40 ,0x08 ,0x00 ,0x00 ,0x00 ,0x02,
|
||||
0x90 ,0x28 ,0x28 ,0x00 ,0x00 ,0x01,
|
||||
0x40 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||
0xA0 ,0x12 ,0x12 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
};
|
||||
static const unsigned char EPD_2in7_lut_bw[] = {
|
||||
0x40 ,0x08 ,0x00 ,0x00 ,0x00 ,0x02,
|
||||
0x90 ,0x28 ,0x28 ,0x00 ,0x00 ,0x01,
|
||||
0x40 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||
0xA0 ,0x12 ,0x12 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
};
|
||||
static const unsigned char EPD_2in7_lut_bb[] = {
|
||||
0x80 ,0x08 ,0x00 ,0x00 ,0x00 ,0x02,
|
||||
0x90 ,0x28 ,0x28 ,0x00 ,0x00 ,0x01,
|
||||
0x80 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||
0x50 ,0x12 ,0x12 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
};
|
||||
static const unsigned char EPD_2in7_lut_wb[] = {
|
||||
0x80 ,0x08 ,0x00 ,0x00 ,0x00 ,0x02,
|
||||
0x90 ,0x28 ,0x28 ,0x00 ,0x00 ,0x01,
|
||||
0x80 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||
0x50 ,0x12 ,0x12 ,0x00 ,0x00 ,0x01,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2in7_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2in7_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2in7_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2in7_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
UBYTE busy;
|
||||
do {
|
||||
EPD_2in7_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
DEV_Delay_ms(200);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : set the look-up tables
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2in7_SetLut(void)
|
||||
{
|
||||
unsigned int count;
|
||||
EPD_2in7_SendCommand(0x20); //vcom
|
||||
for(count = 0; count < 44; count++) {
|
||||
EPD_2in7_SendData(EPD_2in7_lut_vcom_dc[count]);
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x21); //ww --
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2in7_SendData(EPD_2in7_lut_ww[count]);
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x22); //bw r
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2in7_SendData(EPD_2in7_lut_bw[count]);
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x23); //wb w
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2in7_SendData(EPD_2in7_lut_bb[count]);
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x24); //bb b
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2in7_SendData(EPD_2in7_lut_wb[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7_Init(void)
|
||||
{
|
||||
EPD_2in7_Reset();
|
||||
|
||||
EPD_2in7_SendCommand(0x01); // POWER_SETTING
|
||||
EPD_2in7_SendData(0x03); // VDS_EN, VDG_EN
|
||||
EPD_2in7_SendData(0x00); // VCOM_HV, VGHL_LV[1], VGHL_LV[0]
|
||||
EPD_2in7_SendData(0x2b); // VDH
|
||||
EPD_2in7_SendData(0x2b); // VDL
|
||||
EPD_2in7_SendData(0x09); // VDHR
|
||||
|
||||
EPD_2in7_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_2in7_SendData(0x07);
|
||||
EPD_2in7_SendData(0x07);
|
||||
EPD_2in7_SendData(0x17);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0x60);
|
||||
EPD_2in7_SendData(0xA5);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0x89);
|
||||
EPD_2in7_SendData(0xA5);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0x90);
|
||||
EPD_2in7_SendData(0x00);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0x93);
|
||||
EPD_2in7_SendData(0x2A);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0xA0);
|
||||
EPD_2in7_SendData(0xA5);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0xA1);
|
||||
EPD_2in7_SendData(0x00);
|
||||
|
||||
// Power optimization
|
||||
EPD_2in7_SendCommand(0xF8);
|
||||
EPD_2in7_SendData(0x73);
|
||||
EPD_2in7_SendData(0x41);
|
||||
|
||||
EPD_2in7_SendCommand(0x16); // PARTIAL_DISPLAY_REFRESH
|
||||
EPD_2in7_SendData(0x00);
|
||||
|
||||
EPD_2in7_SendCommand(0x04); // POWER_ON
|
||||
EPD_2in7_ReadBusy();
|
||||
|
||||
EPD_2in7_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_2in7_SendData(0xAF); // KW-BF KWR-AF BWROTP 0f
|
||||
EPD_2in7_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_2in7_SendData(0x3A); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||
EPD_2in7_SendCommand(0x82); // VCM_DC_SETTING_REGISTER
|
||||
EPD_2in7_SendData(0x12);
|
||||
|
||||
EPD_2in7_SetLut();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN7_WIDTH % 8 == 0)? (EPD_2IN7_WIDTH / 8 ): (EPD_2IN7_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN7_HEIGHT;
|
||||
|
||||
EPD_2in7_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2in7_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2in7_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x12);
|
||||
EPD_2in7_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN7_WIDTH % 8 == 0)? (EPD_2IN7_WIDTH / 8 ): (EPD_2IN7_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN7_HEIGHT;
|
||||
|
||||
EPD_2in7_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2in7_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2in7_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2in7_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2in7_SendCommand(0x12);
|
||||
EPD_2in7_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7_Sleep(void)
|
||||
{
|
||||
EPD_2in7_SendCommand(0X50);
|
||||
EPD_2in7_SendData(0xf7);
|
||||
EPD_2in7_SendCommand(0X02); //power off
|
||||
EPD_2in7_SendCommand(0X07); //deep sleep
|
||||
EPD_2in7_SendData(0xA5);
|
||||
}
|
||||
96
Raspberry Pi/c/lib/e-Paper/EPD_2in7.h
Normal file
96
Raspberry Pi/c/lib/e-Paper/EPD_2in7.h
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in7.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.7inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcom_dc[] => EPD_2in7_lut_vcom_dc[]
|
||||
* lut_ww[] => EPD_2in7_lut_ww[]
|
||||
* lut_bw[] => EPD_2in7_lut_bw[]
|
||||
* lut_bb[] => EPD_2in7_lut_bb[]
|
||||
* lut_wb[] => EPD_2in7_lut_wb[]
|
||||
* EPD_Reset() => EPD_2in7_Reset()
|
||||
* EPD_SendCommand() => EPD_2in7_SendCommand()
|
||||
* EPD_SendData() => EPD_2in7_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2in7_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2in7_SetLut()
|
||||
* EPD_Init() => EPD_2in7_Init()
|
||||
* EPD_Clear() => EPD_2in7_Clear()
|
||||
* EPD_Display() => EPD_2in7_Display()
|
||||
* EPD_Sleep() => EPD_2in7_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN7_H_
|
||||
#define __EPD_2IN7_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN7_WIDTH 176
|
||||
#define EPD_2IN7_HEIGHT 264
|
||||
|
||||
void EPD_2IN7_Init(void);
|
||||
void EPD_2IN7_Clear(void);
|
||||
void EPD_2IN7_Display(UBYTE *Image);
|
||||
void EPD_2IN7_Sleep(void);
|
||||
|
||||
#endif
|
||||
369
Raspberry Pi/c/lib/e-Paper/EPD_2in7b.c
Normal file
369
Raspberry Pi/c/lib/e-Paper/EPD_2in7b.c
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in7b.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.7inch e-paper b
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* lut_vcom_dc[] => EPD_2in7B_lut_vcom_dc[]
|
||||
* lut_ww[] => EPD_2in7B_lut_ww[]
|
||||
* lut_bw[] => EPD_2in7B_lut_bw[]
|
||||
* lut_bb[] => EPD_2in7B_lut_bb[]
|
||||
* lut_wb[] => EPD_2in7B_lut_wb[]
|
||||
* EPD_Reset() => EPD_2in7B_Reset()
|
||||
* EPD_SendCommand() => EPD_2in7B_SendCommand()
|
||||
* EPD_SendData() => EPD_2in7B_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2in7B_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2in7B_SetLut()
|
||||
* EPD_Init() => EPD_2in7B_Init()
|
||||
* EPD_Clear() => EPD_2in7B_Clear()
|
||||
* EPD_Display() => EPD_2in7B_Display()
|
||||
* EPD_Sleep() => EPD_2in7B_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PARTIAL_DATA_START_TRANSMISSION_1 0x14
|
||||
* #define PARTIAL_DATA_START_TRANSMISSION_2 0x15
|
||||
* #define PARTIAL_DISPLAY_REFRESH 0x16
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_WHITE_TO_WHITE 0x21
|
||||
* #define LUT_BLACK_TO_WHITE 0x22
|
||||
* #define LUT_WHITE_TO_BLACK 0x23
|
||||
* #define LUT_BLACK_TO_BLACK 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_2IN7B_HEIGHT * EPD_2IN7B_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in7b.h"
|
||||
#include "Debug.h"
|
||||
|
||||
static const unsigned char EPD_2IN7B_lut_vcom_dc[] = {
|
||||
0x00, 0x00,
|
||||
0x00, 0x1A, 0x1A, 0x00, 0x00, 0x01,
|
||||
0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x00, 0x0E, 0x01, 0x0E, 0x01, 0x10,
|
||||
0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x00, 0x04, 0x10, 0x00, 0x00, 0x05,
|
||||
0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A,
|
||||
0x00, 0x23, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
|
||||
//R21H
|
||||
static const unsigned char EPD_2IN7B_lut_ww[] = {
|
||||
0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01,
|
||||
0x40, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10,
|
||||
0x80, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x00, 0x04, 0x10, 0x00, 0x00, 0x05,
|
||||
0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A,
|
||||
0x00, 0x23, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
|
||||
//R22H r
|
||||
static const unsigned char EPD_2IN7B_lut_bw[] = {
|
||||
0xA0, 0x1A, 0x1A, 0x00, 0x00, 0x01,
|
||||
0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10,
|
||||
0x90, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0xB0, 0x04, 0x10, 0x00, 0x00, 0x05,
|
||||
0xB0, 0x03, 0x0E, 0x00, 0x00, 0x0A,
|
||||
0xC0, 0x23, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
|
||||
//R23H w
|
||||
static const unsigned char EPD_2IN7B_lut_bb[] = {
|
||||
0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01,
|
||||
0x40, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10,
|
||||
0x80, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x00, 0x04, 0x10, 0x00, 0x00, 0x05,
|
||||
0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A,
|
||||
0x00, 0x23, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
|
||||
//R24H b
|
||||
static const unsigned char EPD_2IN7B_lut_wb[] = {
|
||||
0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01,
|
||||
0x20, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10,
|
||||
0x10, 0x0A, 0x0A, 0x00, 0x00, 0x08,
|
||||
0x00, 0x04, 0x10, 0x00, 0x00, 0x05,
|
||||
0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A,
|
||||
0x00, 0x23, 0x00, 0x00, 0x00, 0x01
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN7B_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN7B_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN7B_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN7B_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //0: busy, 1: idle
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : set the look-up tables
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN7B_SetLut(void)
|
||||
{
|
||||
unsigned int count;
|
||||
EPD_2IN7B_SendCommand(0x20); //vcom
|
||||
for(count = 0; count < 44; count++) {
|
||||
EPD_2IN7B_SendData(EPD_2IN7B_lut_vcom_dc[count]);
|
||||
}
|
||||
|
||||
EPD_2IN7B_SendCommand(0x21); //ww --
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2IN7B_SendData(EPD_2IN7B_lut_ww[count]);
|
||||
}
|
||||
|
||||
EPD_2IN7B_SendCommand(0x22); //bw r
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2IN7B_SendData(EPD_2IN7B_lut_bw[count]);
|
||||
}
|
||||
|
||||
EPD_2IN7B_SendCommand(0x23); //wb w
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2IN7B_SendData(EPD_2IN7B_lut_bb[count]);
|
||||
}
|
||||
|
||||
EPD_2IN7B_SendCommand(0x24); //bb b
|
||||
for(count = 0; count < 42; count++) {
|
||||
EPD_2IN7B_SendData(EPD_2IN7B_lut_wb[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7B_Init(void)
|
||||
{
|
||||
EPD_2IN7B_Reset();
|
||||
|
||||
EPD_2IN7B_SendCommand(0x04); // POWER_ON
|
||||
EPD_2IN7B_ReadBusy();
|
||||
|
||||
EPD_2IN7B_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_2IN7B_SendData(0xaf); // KW-BF KWR-AF BWROTP 0f
|
||||
|
||||
EPD_2IN7B_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_2IN7B_SendData(0x3a); //3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||
|
||||
EPD_2IN7B_SendCommand(0x01); // PANEL_SETTING
|
||||
EPD_2IN7B_SendData(0x03); // VDS_EN, VDG_EN
|
||||
EPD_2IN7B_SendData(0x00); // VCOM_HV, VGHL_LV[1], VGHL_LV[0]
|
||||
EPD_2IN7B_SendData(0x2b); // VDH
|
||||
EPD_2IN7B_SendData(0x2b); // VDL
|
||||
EPD_2IN7B_SendData(0x09); // VDHR
|
||||
|
||||
EPD_2IN7B_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_2IN7B_SendData(0x07);
|
||||
EPD_2IN7B_SendData(0x07);
|
||||
EPD_2IN7B_SendData(0x17);
|
||||
|
||||
// Power optimization
|
||||
EPD_2IN7B_SendCommand(0xF8);
|
||||
EPD_2IN7B_SendData(0x60);
|
||||
EPD_2IN7B_SendData(0xA5);
|
||||
|
||||
// Power optimization
|
||||
EPD_2IN7B_SendCommand(0xF8);
|
||||
EPD_2IN7B_SendData(0x89);
|
||||
EPD_2IN7B_SendData(0xA5);
|
||||
|
||||
// Power optimization
|
||||
EPD_2IN7B_SendCommand(0xF8);
|
||||
EPD_2IN7B_SendData(0x90);
|
||||
EPD_2IN7B_SendData(0x00);
|
||||
|
||||
// Power optimization
|
||||
EPD_2IN7B_SendCommand(0xF8);
|
||||
EPD_2IN7B_SendData(0x93);
|
||||
EPD_2IN7B_SendData(0x2A);
|
||||
|
||||
// Power optimization
|
||||
EPD_2IN7B_SendCommand(0xF8);
|
||||
EPD_2IN7B_SendData(0x73);
|
||||
EPD_2IN7B_SendData(0x41);
|
||||
|
||||
EPD_2IN7B_SendCommand(0x82); // VCM_DC_SETTING_REGISTER
|
||||
EPD_2IN7B_SendData(0x12);
|
||||
EPD_2IN7B_SendCommand(0x50); // VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_2IN7B_SendData(0x87); // define by OTP
|
||||
|
||||
EPD_2IN7B_SetLut();
|
||||
|
||||
EPD_2IN7B_SendCommand(0x16); // PARTIAL_DISPLAY_REFRESH
|
||||
EPD_2IN7B_SendData(0x00);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7B_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN7B_WIDTH % 8 == 0)? (EPD_2IN7B_WIDTH / 8 ): (EPD_2IN7B_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN7B_HEIGHT;
|
||||
|
||||
EPD_2IN7B_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN7B_SendData(0X00);
|
||||
}
|
||||
}
|
||||
EPD_2IN7B_SendCommand(0x11); // DATA_STOP
|
||||
|
||||
EPD_2IN7B_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN7B_SendData(0X00);
|
||||
}
|
||||
}
|
||||
EPD_2IN7B_SendCommand(0x11); // DATA_STOP
|
||||
|
||||
EPD_2IN7B_SendCommand(0x12);
|
||||
EPD_2IN7B_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7B_Display(UBYTE *Imageblack, UBYTE *Imagered)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN7B_WIDTH % 8 == 0)? (EPD_2IN7B_WIDTH / 8 ): (EPD_2IN7B_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN7B_HEIGHT;
|
||||
|
||||
EPD_2IN7B_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN7B_SendData(~Imageblack[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN7B_SendCommand(0x11); // DATA_STOP
|
||||
|
||||
EPD_2IN7B_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN7B_SendData(~Imagered[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN7B_SendCommand(0x11); // DATA_STOP
|
||||
|
||||
EPD_2IN7B_SendCommand(0x12);
|
||||
EPD_2IN7B_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN7B_Sleep(void)
|
||||
{
|
||||
EPD_2IN7B_SendCommand(0X50);
|
||||
EPD_2IN7B_SendData(0xf7);
|
||||
EPD_2IN7B_SendCommand(0X02); //power off
|
||||
EPD_2IN7B_SendCommand(0X07); //deep sleep
|
||||
EPD_2IN7B_SendData(0xA5);
|
||||
}
|
||||
103
Raspberry Pi/c/lib/e-Paper/EPD_2in7b.h
Normal file
103
Raspberry Pi/c/lib/e-Paper/EPD_2in7b.h
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in7b.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.7inch e-paper b
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* lut_vcom_dc[] => EPD_2in7B_lut_vcom_dc[]
|
||||
* lut_ww[] => EPD_2in7B_lut_ww[]
|
||||
* lut_bw[] => EPD_2in7B_lut_bw[]
|
||||
* lut_bb[] => EPD_2in7B_lut_bb[]
|
||||
* lut_wb[] => EPD_2in7B_lut_wb[]
|
||||
* EPD_Reset() => EPD_2in7B_Reset()
|
||||
* EPD_SendCommand() => EPD_2in7B_SendCommand()
|
||||
* EPD_SendData() => EPD_2in7B_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2in7B_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2in7B_SetLut()
|
||||
* EPD_Init() => EPD_2in7B_Init()
|
||||
* EPD_Clear() => EPD_2in7B_Clear()
|
||||
* EPD_Display() => EPD_2in7B_Display()
|
||||
* EPD_Sleep() => EPD_2in7B_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PARTIAL_DATA_START_TRANSMISSION_1 0x14
|
||||
* #define PARTIAL_DATA_START_TRANSMISSION_2 0x15
|
||||
* #define PARTIAL_DISPLAY_REFRESH 0x16
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_WHITE_TO_WHITE 0x21
|
||||
* #define LUT_BLACK_TO_WHITE 0x22
|
||||
* #define LUT_WHITE_TO_BLACK 0x23
|
||||
* #define LUT_BLACK_TO_BLACK 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SOURCE_AND_GATE_START_SETTING 0x62
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN7B_H_
|
||||
#define __EPD_2IN7B_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN7B_WIDTH 176
|
||||
#define EPD_2IN7B_HEIGHT 264
|
||||
|
||||
void EPD_2IN7B_Init(void);
|
||||
void EPD_2IN7B_Clear(void);
|
||||
void EPD_2IN7B_Display(UBYTE *Imageblack, UBYTE *Imagered);
|
||||
void EPD_2IN7B_Sleep(void);
|
||||
|
||||
#endif
|
||||
294
Raspberry Pi/c/lib/e-Paper/EPD_2in9.c
Normal file
294
Raspberry Pi/c/lib/e-Paper/EPD_2in9.c
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_full_update[] => EPD_2IN9_lut_full_update[]
|
||||
* lut_partial_update[] => EPD_2IN9_lut_partial_update[]
|
||||
* EPD_Reset() => EPD_2IN9_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2IN9_SetLut()
|
||||
* EPD_SetWindow() => EPD_2IN9_SetWindow()
|
||||
* EPD_SetCursor() => EPD_2IN9_SetCursor()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN9_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN9_Init()
|
||||
* EPD_Clear() => EPD_2IN9_Clear()
|
||||
* EPD_Display() => EPD_2IN9_Display()
|
||||
* EPD_Sleep() => EPD_2IN9_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define DRIVER_OUTPUT_CONTROL 0x01
|
||||
* #define BOOSTER_SOFT_START_CONTROL 0x0C
|
||||
* #define GATE_SCAN_START_POSITION 0x0F
|
||||
* #define DEEP_SLEEP_MODE 0x10
|
||||
* #define DATA_ENTRY_MODE_SETTING 0x11
|
||||
* #define SW_RESET 0x12
|
||||
* #define TEMPERATURE_SENSOR_CONTROL 0x1A
|
||||
* #define MASTER_ACTIVATION 0x20
|
||||
* #define DISPLAY_UPDATE_CONTROL_1 0x21
|
||||
* #define DISPLAY_UPDATE_CONTROL_2 0x22
|
||||
* #define WRITE_RAM 0x24
|
||||
* #define WRITE_VCOM_REGISTER 0x2C
|
||||
* #define WRITE_LUT_REGISTER 0x32
|
||||
* #define SET_DUMMY_LINE_PERIOD 0x3A
|
||||
* #define SET_GATE_TIME 0x3B
|
||||
* #define BORDER_WAVEFORM_CONTROL 0x3C
|
||||
* #define SET_RAM_X_ADDRESS_START_END_POSITION 0x44
|
||||
* #define SET_RAM_Y_ADDRESS_START_END_POSITION 0x45
|
||||
* #define SET_RAM_X_ADDRESS_COUNTER 0x4E
|
||||
* #define SET_RAM_Y_ADDRESS_COUNTER 0x4F
|
||||
* #define TERMINATE_FRAME_READ_WRITE 0xFF
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_2IN9_HEIGHT * EPD_2IN9_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in9.h"
|
||||
#include "Debug.h"
|
||||
|
||||
const unsigned char EPD_2IN9_lut_full_update[] = {
|
||||
0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22,
|
||||
0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51,
|
||||
0x35, 0x51, 0x51, 0x19, 0x01, 0x00
|
||||
};
|
||||
|
||||
const unsigned char EPD_2IN9_lut_partial_update[] = {
|
||||
0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 1) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Setting the display window
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
|
||||
{
|
||||
EPD_2IN9_SendCommand(0x44); // SET_RAM_X_ADDRESS_START_END_POSITION
|
||||
EPD_2IN9_SendData((Xstart >> 3) & 0xFF);
|
||||
EPD_2IN9_SendData((Xend >> 3) & 0xFF);
|
||||
|
||||
EPD_2IN9_SendCommand(0x45); // SET_RAM_Y_ADDRESS_START_END_POSITION
|
||||
EPD_2IN9_SendData(Ystart & 0xFF);
|
||||
EPD_2IN9_SendData((Ystart >> 8) & 0xFF);
|
||||
EPD_2IN9_SendData(Yend & 0xFF);
|
||||
EPD_2IN9_SendData((Yend >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Set Cursor
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_SetCursor(UWORD Xstart, UWORD Ystart)
|
||||
{
|
||||
EPD_2IN9_SendCommand(0x4E); // SET_RAM_X_ADDRESS_COUNTER
|
||||
EPD_2IN9_SendData((Xstart >> 3) & 0xFF);
|
||||
|
||||
EPD_2IN9_SendCommand(0x4F); // SET_RAM_Y_ADDRESS_COUNTER
|
||||
EPD_2IN9_SendData(Ystart & 0xFF);
|
||||
EPD_2IN9_SendData((Ystart >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN9_SendCommand(0x22); // DISPLAY_UPDATE_CONTROL_2
|
||||
EPD_2IN9_SendData(0xC4);
|
||||
EPD_2IN9_SendCommand(0x20); // MASTER_ACTIVATION
|
||||
EPD_2IN9_SendCommand(0xFF); // TERMINATE_FRAME_READ_WRITE
|
||||
|
||||
EPD_2IN9_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9_Init(UBYTE Mode)
|
||||
{
|
||||
EPD_2IN9_Reset();
|
||||
|
||||
EPD_2IN9_SendCommand(0x01); // DRIVER_OUTPUT_CONTROL
|
||||
EPD_2IN9_SendData((EPD_2IN9_HEIGHT - 1) & 0xFF);
|
||||
EPD_2IN9_SendData(((EPD_2IN9_HEIGHT - 1) >> 8) & 0xFF);
|
||||
EPD_2IN9_SendData(0x00); // GD = 0; SM = 0; TB = 0;
|
||||
|
||||
EPD_2IN9_SendCommand(0x0C); // BOOSTER_SOFT_START_CONTROL
|
||||
EPD_2IN9_SendData(0xD7);
|
||||
EPD_2IN9_SendData(0xD6);
|
||||
EPD_2IN9_SendData(0x9D);
|
||||
|
||||
EPD_2IN9_SendCommand(0x2C); // WRITE_VCOM_REGISTER
|
||||
EPD_2IN9_SendData(0xA8); // VCOM 7C
|
||||
|
||||
EPD_2IN9_SendCommand(0x3A); // SET_DUMMY_LINE_PERIOD
|
||||
EPD_2IN9_SendData(0x1A); // 4 dummy lines per gate
|
||||
|
||||
EPD_2IN9_SendCommand(0x3B); // SET_GATE_TIME
|
||||
EPD_2IN9_SendData(0x08); // 2us per line
|
||||
|
||||
EPD_2IN9_SendCommand(0x3C); // BORDER_WAVEFORM_CONTROL
|
||||
EPD_2IN9_SendData(0x03);
|
||||
EPD_2IN9_SendCommand(0x11); // DATA_ENTRY_MODE_SETTING
|
||||
EPD_2IN9_SendData(0x03);
|
||||
|
||||
//set the look-up table register
|
||||
EPD_2IN9_SendCommand(0x32); // WRITE_LUT_REGISTER
|
||||
if(Mode == EPD_2IN9_FULL){
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_2IN9_SendData(EPD_2IN9_lut_full_update[i]);
|
||||
}
|
||||
}else if(Mode == EPD_2IN9_PART){
|
||||
for (UWORD i = 0; i < 30; i++) {
|
||||
EPD_2IN9_SendData(EPD_2IN9_lut_partial_update[i]);
|
||||
}
|
||||
}else{
|
||||
Debug("error, the Mode is EPD_2IN9_FULL or EPD_2IN9_PART");
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN9_WIDTH % 8 == 0)? (EPD_2IN9_WIDTH / 8 ): (EPD_2IN9_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN9_HEIGHT;
|
||||
EPD_2IN9_SetWindows(0, 0, EPD_2IN9_WIDTH, EPD_2IN9_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_2IN9_SetCursor(0, j);
|
||||
EPD_2IN9_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
EPD_2IN9_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN9_WIDTH % 8 == 0)? (EPD_2IN9_WIDTH / 8 ): (EPD_2IN9_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN9_HEIGHT;
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
// UDOUBLE Offset = ImageName;
|
||||
EPD_2IN9_SetWindows(0, 0, EPD_2IN9_WIDTH, EPD_2IN9_HEIGHT);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
EPD_2IN9_SetCursor(0, j);
|
||||
EPD_2IN9_SendCommand(0x24);
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_2IN9_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_2IN9_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9_Sleep(void)
|
||||
{
|
||||
EPD_2IN9_SendCommand(0x10);
|
||||
EPD_2IN9_SendData(0x01);
|
||||
// EPD_2IN9_ReadBusy();
|
||||
}
|
||||
96
Raspberry Pi/c/lib/e-Paper/EPD_2in9.h
Normal file
96
Raspberry Pi/c/lib/e-Paper/EPD_2in9.h
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_full_update[] => EPD_2IN9_lut_full_update[]
|
||||
* lut_partial_update[] => EPD_2IN9_lut_partial_update[]
|
||||
* EPD_Reset() => EPD_2IN9_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9_ReadBusy()
|
||||
* EPD_SetLut() => EPD_2IN9_SetLut()
|
||||
* EPD_SetWindow() => EPD_2IN9_SetWindow()
|
||||
* EPD_SetCursor() => EPD_2IN9_SetCursor()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN9_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN9_Init()
|
||||
* EPD_Clear() => EPD_2IN9_Clear()
|
||||
* EPD_Display() => EPD_2IN9_Display()
|
||||
* EPD_Sleep() => EPD_2IN9_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define DRIVER_OUTPUT_CONTROL 0x01
|
||||
* #define BOOSTER_SOFT_START_CONTROL 0x0C
|
||||
* #define GATE_SCAN_START_POSITION 0x0F
|
||||
* #define DEEP_SLEEP_MODE 0x10
|
||||
* #define DATA_ENTRY_MODE_SETTING 0x11
|
||||
* #define SW_RESET 0x12
|
||||
* #define TEMPERATURE_SENSOR_CONTROL 0x1A
|
||||
* #define MASTER_ACTIVATION 0x20
|
||||
* #define DISPLAY_UPDATE_CONTROL_1 0x21
|
||||
* #define DISPLAY_UPDATE_CONTROL_2 0x22
|
||||
* #define WRITE_RAM 0x24
|
||||
* #define WRITE_VCOM_REGISTER 0x2C
|
||||
* #define WRITE_LUT_REGISTER 0x32
|
||||
* #define SET_DUMMY_LINE_PERIOD 0x3A
|
||||
* #define SET_GATE_TIME 0x3B
|
||||
* #define BORDER_WAVEFORM_CONTROL 0x3C
|
||||
* #define SET_RAM_X_ADDRESS_START_END_POSITION 0x44
|
||||
* #define SET_RAM_Y_ADDRESS_START_END_POSITION 0x45
|
||||
* #define SET_RAM_X_ADDRESS_COUNTER 0x4E
|
||||
* #define SET_RAM_Y_ADDRESS_COUNTER 0x4F
|
||||
* #define TERMINATE_FRAME_READ_WRITE 0xFF
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_2IN9_HEIGHT * EPD_2IN9_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN9_H_
|
||||
#define __EPD_2IN9_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN9_WIDTH 128
|
||||
#define EPD_2IN9_HEIGHT 296
|
||||
|
||||
#define EPD_2IN9_FULL 0
|
||||
#define EPD_2IN9_PART 1
|
||||
|
||||
void EPD_2IN9_Init(UBYTE Mode);
|
||||
void EPD_2IN9_Clear(void);
|
||||
void EPD_2IN9_Display(UBYTE *Image);
|
||||
void EPD_2IN9_Sleep(void);
|
||||
|
||||
#endif
|
||||
240
Raspberry Pi/c/lib/e-Paper/EPD_2in9bc.c
Normal file
240
Raspberry Pi/c/lib/e-Paper/EPD_2in9bc.c
Normal file
|
|
@ -0,0 +1,240 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9bc.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN9BC_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9BC_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9BC_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN9BC_Init()
|
||||
* EPD_Clear() => EPD_2IN9BC_Clear()
|
||||
* EPD_Display() => EPD_2IN9BC_Display()
|
||||
* EPD_Sleep() => EPD_2IN9BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in9bc.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9BC_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9BC_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9BC_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9BC_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9BC_Init(void)
|
||||
{
|
||||
EPD_2IN9BC_Reset();
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_2IN9BC_SendData(0x17);
|
||||
EPD_2IN9BC_SendData(0x17);
|
||||
EPD_2IN9BC_SendData(0x17);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x04); // POWER_ON
|
||||
EPD_2IN9BC_ReadBusy();
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_2IN9BC_SendData(0x8F);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x50); // VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_2IN9BC_SendData(0x77);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x61); // TCON_RESOLUTION
|
||||
EPD_2IN9BC_SendData(0x80);
|
||||
EPD_2IN9BC_SendData(0x01);
|
||||
EPD_2IN9BC_SendData(0x28);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x82); // VCM_DC_SETTING_REGISTER
|
||||
EPD_2IN9BC_SendData(0X0A);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9BC_Clear(void)
|
||||
{
|
||||
UWORD Width = (EPD_2IN9BC_WIDTH % 8 == 0)? (EPD_2IN9BC_WIDTH / 8 ): (EPD_2IN9BC_WIDTH / 8 + 1);
|
||||
UWORD Height = EPD_2IN9BC_HEIGHT;
|
||||
|
||||
//send black data
|
||||
EPD_2IN9BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
//send red data
|
||||
EPD_2IN9BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x12);
|
||||
EPD_2IN9BC_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9BC_Display(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN9BC_WIDTH % 8 == 0)? (EPD_2IN9BC_WIDTH / 8 ): (EPD_2IN9BC_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN9BC_HEIGHT;
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9BC_SendData(blackimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN9BC_SendCommand(0x92);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9BC_SendData(ryimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
EPD_2IN9BC_SendCommand(0x92);
|
||||
|
||||
EPD_2IN9BC_SendCommand(0x12);
|
||||
EPD_2IN9BC_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9BC_Sleep(void)
|
||||
{
|
||||
EPD_2IN9BC_SendCommand(0x02); // POWER_OFF
|
||||
EPD_2IN9BC_ReadBusy();
|
||||
EPD_2IN9BC_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_2IN9BC_SendData(0xA5); // check code
|
||||
}
|
||||
98
Raspberry Pi/c/lib/e-Paper/EPD_2in9bc.h
Normal file
98
Raspberry Pi/c/lib/e-Paper/EPD_2in9bc.h
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9bc.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_2IN9BC_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9BC_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9BC_ReadBusy()
|
||||
* EPD_Init() => EPD_2IN9BC_Init()
|
||||
* EPD_Clear() => EPD_2IN9BC_Clear()
|
||||
* EPD_Display() => EPD_2IN9BC_Display()
|
||||
* EPD_Sleep() => EPD_2IN9BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING_REGISTER 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-06):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
* 3.Change:
|
||||
* EPD_RST -> EPD_RST_PIN
|
||||
* EPD_DC -> EPD_DC_PIN
|
||||
* EPD_CS -> EPD_CS_PIN
|
||||
* EPD_BUSY -> EPD_BUSY_PIN
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN9BC_H_
|
||||
#define __EPD_2IN9BC_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN9BC_WIDTH 128
|
||||
#define EPD_2IN9BC_HEIGHT 296
|
||||
|
||||
void EPD_2IN9BC_Init(void);
|
||||
void EPD_2IN9BC_Clear(void);
|
||||
void EPD_2IN9BC_Display(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_2IN9BC_Sleep(void);
|
||||
|
||||
#endif
|
||||
446
Raspberry Pi/c/lib/e-Paper/EPD_2in9d.c
Normal file
446
Raspberry Pi/c/lib/e-Paper/EPD_2in9d.c
Normal file
|
|
@ -0,0 +1,446 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9d.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper d
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V2.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_2IN9D_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_2IN9D_lut_ww[]
|
||||
* lut_bw[] => EPD_2IN9D_lut_bw[]
|
||||
* lut_wb[] => EPD_2IN9D_lut_wb[]
|
||||
* lut_bb[] => EPD_2IN9D_lut_bb[]
|
||||
* lut_vcom1[] => EPD_2IN9D_lut_vcom1[]
|
||||
* lut_ww1[] => EPD_2IN9D_lut_ww1[]
|
||||
* lut_bw1[] => EPD_2IN9D_lut_bw1[]
|
||||
* lut_wb1[] => EPD_2IN9D_lut_wb1[]
|
||||
* lut_bb1[] => EPD_2IN9D_lut_bb1[]
|
||||
* EPD_Reset() => EPD_2IN9D_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9D_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9D_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9D_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_2IN9D_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_2IN9D_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN9D_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN9D_Init()
|
||||
* EPD_Clear() => EPD_2IN9D_Clear()
|
||||
* EPD_Display() => EPD_2IN9D_Display()
|
||||
* EPD_Sleep() => EPD_2IN9D_Sleep()
|
||||
*
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_2in9d.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/**
|
||||
* full screen update LUT
|
||||
**/
|
||||
const unsigned char EPD_2IN9D_lut_vcomDC[] = {
|
||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_ww[] = {
|
||||
0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_bw[] = {
|
||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x03,
|
||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_wb[] = {
|
||||
0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_bb[] = {
|
||||
0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
|
||||
0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
|
||||
0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* partial screen update LUT
|
||||
**/
|
||||
const unsigned char EPD_2IN9D_lut_vcom1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
,0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_ww1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_bw1[] = {
|
||||
0x80, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_wb1[] = {
|
||||
0x40, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char EPD_2IN9D_lut_bb1[] = {
|
||||
0x00, 0x19, 0x01, 0x00, 0x00, 0x01,
|
||||
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, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9D_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9D_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9D_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
UBYTE busy;
|
||||
do {
|
||||
EPD_2IN9D_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
DEV_Delay_ms(200);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : LUT download
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_SetFullReg(void)
|
||||
{
|
||||
EPD_2IN9D_SendCommand(0X50); //VCOM AND DATA INTERVAL SETTING
|
||||
EPD_2IN9D_SendData(0xb7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57 WBRmode:VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||
|
||||
unsigned int count;
|
||||
EPD_2IN9D_SendCommand(0x20);
|
||||
for(count=0; count<44; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_vcomDC[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x21);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_ww[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x22);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_bw[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x23);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_wb[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x24);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_bb[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : LUT download
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9D_SetPartReg(void)
|
||||
{
|
||||
EPD_2IN9D_SendCommand(0x82); //vcom_DC setting
|
||||
EPD_2IN9D_SendData(0x00);
|
||||
EPD_2IN9D_SendCommand(0X50);
|
||||
EPD_2IN9D_SendData(0xb7);
|
||||
|
||||
unsigned int count;
|
||||
EPD_2IN9D_SendCommand(0x20);
|
||||
for(count=0; count<44; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_vcom1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x21);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_ww1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x22);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_bw1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x23);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_wb1[count]);
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x24);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_lut_bb1[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_2IN9D_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_2IN9D_SendCommand(0x12); //DISPLAY REFRESH
|
||||
DEV_Delay_ms(10); //!!!The delay here is necessary, 200uS at least!!!
|
||||
|
||||
EPD_2IN9D_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_Init(void)
|
||||
{
|
||||
EPD_2IN9D_Reset();
|
||||
|
||||
EPD_2IN9D_SendCommand(0x01); //POWER SETTING
|
||||
EPD_2IN9D_SendData(0x03);
|
||||
EPD_2IN9D_SendData(0x00);
|
||||
EPD_2IN9D_SendData(0x2b);
|
||||
EPD_2IN9D_SendData(0x2b);
|
||||
EPD_2IN9D_SendData(0x03);
|
||||
|
||||
EPD_2IN9D_SendCommand(0x06); //boost soft start
|
||||
EPD_2IN9D_SendData(0x17); //A
|
||||
EPD_2IN9D_SendData(0x17); //B
|
||||
EPD_2IN9D_SendData(0x17); //C
|
||||
|
||||
EPD_2IN9D_SendCommand(0x04);
|
||||
EPD_2IN9D_ReadBusy();
|
||||
|
||||
EPD_2IN9D_SendCommand(0x00); //panel setting
|
||||
EPD_2IN9D_SendData(0xbf); //LUT from OTP,128x296
|
||||
EPD_2IN9D_SendData(0x0e); //VCOM to 0V fast
|
||||
|
||||
EPD_2IN9D_SendCommand(0x30); //PLL setting
|
||||
EPD_2IN9D_SendData(0x3a); // 3a 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||
|
||||
EPD_2IN9D_SendCommand(0x61); //resolution setting
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_WIDTH);
|
||||
EPD_2IN9D_SendData((EPD_2IN9D_HEIGHT >> 8) & 0xff);
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_HEIGHT & 0xff);
|
||||
|
||||
EPD_2IN9D_SendCommand(0x82); //vcom_DC setting
|
||||
EPD_2IN9D_SendData(0x28);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN9D_WIDTH % 8 == 0)? (EPD_2IN9D_WIDTH / 8 ): (EPD_2IN9D_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN9D_HEIGHT;
|
||||
|
||||
EPD_2IN9D_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9D_SendData(0x00);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN9D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9D_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_SetFullReg();
|
||||
EPD_2IN9D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_2IN9D_WIDTH % 8 == 0)? (EPD_2IN9D_WIDTH / 8 ): (EPD_2IN9D_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN9D_HEIGHT;
|
||||
|
||||
EPD_2IN9D_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9D_SendData(0x00);
|
||||
}
|
||||
}
|
||||
// Dev_Delay_ms(10);
|
||||
|
||||
EPD_2IN9D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9D_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
// Dev_Delay_ms(10);
|
||||
|
||||
EPD_SetFullReg();
|
||||
EPD_2IN9D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_DisplayPart(UBYTE *Image)
|
||||
{
|
||||
/* Set partial Windows */
|
||||
EPD_2IN9D_SetPartReg();
|
||||
EPD_2IN9D_SendCommand(0x91); //This command makes the display enter partial mode
|
||||
EPD_2IN9D_SendCommand(0x90); //resolution setting
|
||||
EPD_2IN9D_SendData(0); //x-start
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_WIDTH - 1); //x-end
|
||||
|
||||
EPD_2IN9D_SendData(0);
|
||||
EPD_2IN9D_SendData(0); //y-start
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_HEIGHT / 256);
|
||||
EPD_2IN9D_SendData(EPD_2IN9D_HEIGHT % 256 - 1); //y-end
|
||||
EPD_2IN9D_SendData(0x28);
|
||||
|
||||
UWORD Width;
|
||||
Width = (EPD_2IN9D_WIDTH % 8 == 0)? (EPD_2IN9D_WIDTH / 8 ): (EPD_2IN9D_WIDTH / 8 + 1);
|
||||
|
||||
/* send data */
|
||||
EPD_2IN9D_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < EPD_2IN9D_HEIGHT; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN9D_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set partial refresh */
|
||||
EPD_2IN9D_TurnOnDisplay();
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_2IN9D_Sleep(void)
|
||||
{
|
||||
EPD_2IN9D_SendCommand(0X50);
|
||||
EPD_2IN9D_SendData(0xf7);
|
||||
EPD_2IN9D_SendCommand(0X02); //power off
|
||||
EPD_2IN9D_ReadBusy();
|
||||
EPD_2IN9D_SendCommand(0X07); //deep sleep
|
||||
EPD_2IN9D_SendData(0xA5);
|
||||
}
|
||||
69
Raspberry Pi/c/lib/e-Paper/EPD_2in9d.h
Normal file
69
Raspberry Pi/c/lib/e-Paper/EPD_2in9d.h
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_2in9d.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 2.9inch e-paper d
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V2.0
|
||||
* | Date : 2019-06-12
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-12):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_2IN9D_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_2IN9D_lut_ww[]
|
||||
* lut_bw[] => EPD_2IN9D_lut_bw[]
|
||||
* lut_wb[] => EPD_2IN9D_lut_wb[]
|
||||
* lut_bb[] => EPD_2IN9D_lut_bb[]
|
||||
* lut_vcom1[] => EPD_2IN9D_lut_vcom1[]
|
||||
* lut_ww1[] => EPD_2IN9D_lut_ww1[]
|
||||
* lut_bw1[] => EPD_2IN9D_lut_bw1[]
|
||||
* lut_wb1[] => EPD_2IN9D_lut_wb1[]
|
||||
* lut_bb1[] => EPD_2IN9D_lut_bb1[]
|
||||
* EPD_Reset() => EPD_2IN9D_Reset()
|
||||
* EPD_SendCommand() => EPD_2IN9D_SendCommand()
|
||||
* EPD_SendData() => EPD_2IN9D_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_2IN9D_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_2IN9D_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_2IN9D_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_2IN9D_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_2IN9D_Init()
|
||||
* EPD_Clear() => EPD_2IN9D_Clear()
|
||||
* EPD_Display() => EPD_2IN9D_Display()
|
||||
* EPD_Sleep() => EPD_2IN9D_Sleep()
|
||||
*
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_2IN9D_H_
|
||||
#define __EPD_2IN9D_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_2IN9D_WIDTH 128
|
||||
#define EPD_2IN9D_HEIGHT 296
|
||||
|
||||
void EPD_2IN9D_Init(void);
|
||||
void EPD_2IN9D_Clear(void);
|
||||
void EPD_2IN9D_Display(UBYTE *Image);
|
||||
void EPD_2IN9D_DisplayPart(UBYTE *Image);
|
||||
void EPD_2IN9D_Sleep(void);
|
||||
|
||||
#endif
|
||||
338
Raspberry Pi/c/lib/e-Paper/EPD_4in2.c
Normal file
338
Raspberry Pi/c/lib/e-Paper/EPD_4in2.c
Normal file
|
|
@ -0,0 +1,338 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_4in2.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 4.2inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_4IN2_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_4IN2_lut_ww[]
|
||||
* lut_bw[] => EPD_4IN2_lut_bw[]
|
||||
* lut_wb[] => EPD_4IN2_lut_wb[]
|
||||
* lut_bb[] => EPD_4IN2_lut_bb[]
|
||||
* EPD_Reset() => EPD_4IN2_Reset()
|
||||
* EPD_SendCommand() => EPD_4IN2_SendCommand()
|
||||
* EPD_SendData() => EPD_4IN2_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_4IN2_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_4IN2_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_4IN2_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_4IN2_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_4IN2_Init()
|
||||
* EPD_Clear() => EPD_4IN2_Clear()
|
||||
* EPD_Display() => EPD_4IN2_Display()
|
||||
* EPD_Sleep() => EPD_4IN2_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_4in2.h"
|
||||
#include "Debug.h"
|
||||
|
||||
static const unsigned char EPD_4IN2_lut_vcom0[] = {
|
||||
0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
|
||||
0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
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[] = {
|
||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
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[] = {
|
||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
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[] = {
|
||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
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[] = {
|
||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_4IN2_SendCommand(0x12);
|
||||
DEV_Delay_ms(100);
|
||||
EPD_4IN2_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : set the look-up tables
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2_SetLut(void)
|
||||
{
|
||||
UWORD count;
|
||||
EPD_4IN2_SendCommand(0x20); //g vcom
|
||||
for(count=0; count<44; count++) {
|
||||
EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);
|
||||
}
|
||||
|
||||
EPD_4IN2_SendCommand(0x21);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);
|
||||
}
|
||||
|
||||
EPD_4IN2_SendCommand(0x22);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);
|
||||
}
|
||||
|
||||
EPD_4IN2_SendCommand(0x23);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);
|
||||
}
|
||||
|
||||
EPD_4IN2_SendCommand(0x24);
|
||||
for(count=0; count<42; count++) {
|
||||
EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2_Init(void)
|
||||
{
|
||||
EPD_4IN2_Reset();
|
||||
|
||||
EPD_4IN2_SendCommand(0x01); // POWER SETTING
|
||||
EPD_4IN2_SendData(0x03);
|
||||
EPD_4IN2_SendData(0x00);
|
||||
EPD_4IN2_SendData(0x2b);
|
||||
EPD_4IN2_SendData(0x2b);
|
||||
|
||||
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(0xbf); // KW-BF KWR-AF BWROTP 0f BWOTP 1f
|
||||
EPD_4IN2_SendData(0x0d);
|
||||
|
||||
EPD_4IN2_SendCommand(0x30); // PLL setting
|
||||
EPD_4IN2_SendData(0x3C); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||
|
||||
EPD_4IN2_SendCommand(0x61); // resolution setting
|
||||
EPD_4IN2_SendData(0x01);
|
||||
EPD_4IN2_SendData(0x90); //128
|
||||
EPD_4IN2_SendData(0x01); //
|
||||
EPD_4IN2_SendData(0x2c);
|
||||
|
||||
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
|
||||
EPD_4IN2_SendData(0x28);
|
||||
|
||||
EPD_4IN2_SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
||||
EPD_4IN2_SendData(0x97); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||
|
||||
EPD_4IN2_SetLut();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||
Height = EPD_4IN2_HEIGHT;
|
||||
|
||||
EPD_4IN2_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2_Display(UBYTE *Image)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||
Height = EPD_4IN2_HEIGHT;
|
||||
|
||||
EPD_4IN2_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2_SendData(Image[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2_Sleep(void)
|
||||
{
|
||||
EPD_4IN2_SendCommand(0x02); // POWER_OFF
|
||||
EPD_4IN2_ReadBusy();
|
||||
EPD_4IN2_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_4IN2_SendData(0XA5);
|
||||
}
|
||||
105
Raspberry Pi/c/lib/e-Paper/EPD_4in2.h
Normal file
105
Raspberry Pi/c/lib/e-Paper/EPD_4in2.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_4in2.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 4.2inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* lut_vcomDC[] => EPD_4IN2_lut_vcomDC[]
|
||||
* lut_ww[] => EPD_4IN2_lut_ww[]
|
||||
* lut_bw[] => EPD_4IN2_lut_bw[]
|
||||
* lut_wb[] => EPD_4IN2_lut_wb[]
|
||||
* lut_bb[] => EPD_4IN2_lut_bb[]
|
||||
* EPD_Reset() => EPD_4IN2_Reset()
|
||||
* EPD_SendCommand() => EPD_4IN2_SendCommand()
|
||||
* EPD_SendData() => EPD_4IN2_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_4IN2_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_4IN2_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_4IN2_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_4IN2_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_4IN2_Init()
|
||||
* EPD_Clear() => EPD_4IN2_Clear()
|
||||
* EPD_Display() => EPD_4IN2_Display()
|
||||
* EPD_Sleep() => EPD_4IN2_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* V2.0(2018-10-30):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef _EPD_4IN2_H_
|
||||
#define _EPD_4IN2_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_4IN2_WIDTH 400
|
||||
#define EPD_4IN2_HEIGHT 300
|
||||
|
||||
void EPD_4IN2_Init(void);
|
||||
void EPD_4IN2_Clear(void);
|
||||
void EPD_4IN2_Display(UBYTE *Image);
|
||||
void EPD_4IN2_Sleep(void);
|
||||
|
||||
#endif
|
||||
233
Raspberry Pi/c/lib/e-Paper/EPD_4in2bc.c
Normal file
233
Raspberry Pi/c/lib/e-Paper/EPD_4in2bc.c
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_4in2b.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 4.2inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_4IN2BC_Reset()
|
||||
* EPD_SendCommand() => EPD_4IN2BC_SendCommand()
|
||||
* EPD_SendData() => EPD_4IN2BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_4IN2BC_ReadBusy()
|
||||
* EPD_Init() => EPD_4IN2BC_Init()
|
||||
* EPD_Clear() => EPD_4IN2BC_Clear()
|
||||
* EPD_Display() => EPD_4IN2BC_Display()
|
||||
* EPD_Sleep() => EPD_4IN2BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_4in2bc.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2BC_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2BC_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2BC_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2BC_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //0: busy, 1: idle
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_4IN2BC_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_4IN2BC_SendCommand(0x12); // DISPLAY_REFRESH
|
||||
DEV_Delay_ms(100);
|
||||
EPD_4IN2BC_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2BC_Init(void)
|
||||
{
|
||||
EPD_4IN2BC_Reset();
|
||||
|
||||
EPD_4IN2BC_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_4IN2BC_SendData(0x17);
|
||||
EPD_4IN2BC_SendData(0x17);
|
||||
EPD_4IN2BC_SendData(0x17); // 07 0f 17 1f 27 2F 37 2f
|
||||
EPD_4IN2BC_SendCommand(0x04); // POWER_ON
|
||||
EPD_4IN2BC_ReadBusy();
|
||||
EPD_4IN2BC_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_4IN2BC_SendData(0x0F); // LUT from OTP
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2BC_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_4IN2BC_WIDTH % 8 == 0)? (EPD_4IN2BC_WIDTH / 8 ): (EPD_4IN2BC_WIDTH / 8 + 1);
|
||||
Height = EPD_4IN2BC_HEIGHT;
|
||||
|
||||
EPD_4IN2BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2BC_SendData(0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2BC_Display(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_4IN2BC_WIDTH % 8 == 0)? (EPD_4IN2BC_WIDTH / 8 ): (EPD_4IN2BC_WIDTH / 8 + 1);
|
||||
Height = EPD_4IN2BC_HEIGHT;
|
||||
|
||||
EPD_4IN2BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2BC_SendData(blackimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2BC_SendCommand(0x13);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_4IN2BC_SendData(ryimage[i + j * Width]);
|
||||
}
|
||||
}
|
||||
|
||||
EPD_4IN2BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_4IN2BC_Sleep(void)
|
||||
{
|
||||
EPD_4IN2BC_SendCommand(0x02); // POWER_OFF
|
||||
EPD_4IN2BC_ReadBusy();
|
||||
EPD_4IN2BC_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_4IN2BC_SendData(0XA5);
|
||||
}
|
||||
98
Raspberry Pi/c/lib/e-Paper/EPD_4in2bc.h
Normal file
98
Raspberry Pi/c/lib/e-Paper/EPD_4in2bc.h
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_4in2b.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 4.2inch e-paper b&c
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_4IN2BC_Reset()
|
||||
* EPD_SendCommand() => EPD_4IN2BC_SendCommand()
|
||||
* EPD_SendData() => EPD_4IN2BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_4IN2BC_ReadBusy()
|
||||
* EPD_Init() => EPD_4IN2BC_Init()
|
||||
* EPD_Clear() => EPD_4IN2BC_Clear()
|
||||
* EPD_Display() => EPD_4IN2BC_Display()
|
||||
* EPD_Sleep() => EPD_4IN2BC_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_4IN2BC_H_
|
||||
#define __EPD_4IN2BC_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_4IN2BC_WIDTH 400
|
||||
#define EPD_4IN2BC_HEIGHT 300
|
||||
|
||||
void EPD_4IN2BC_Init(void);
|
||||
void EPD_4IN2BC_Clear(void);
|
||||
void EPD_4IN2BC_Display(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_4IN2BC_Sleep(void);
|
||||
|
||||
#endif
|
||||
270
Raspberry Pi/c/lib/e-Paper/EPD_5in83.c
Normal file
270
Raspberry Pi/c/lib/e-Paper/EPD_5in83.c
Normal file
|
|
@ -0,0 +1,270 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_5in83.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 5.83inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_5IN83_Reset()
|
||||
* EPD_SendCommand() => EPD_5IN83_SendCommand()
|
||||
* EPD_SendData() => EPD_5IN83_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_5IN83_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_5IN83_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_5IN83_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_5IN83_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_5IN83_Init()
|
||||
* EPD_Clear() => EPD_5IN83_Clear()
|
||||
* EPD_Display() => EPD_5IN83_Display()
|
||||
* EPD_Sleep() => EPD_5IN83_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_5in83.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_5IN83_SendCommand(0x12); // DISPLAY_REFRESH
|
||||
DEV_Delay_ms(100);
|
||||
EPD_5IN83_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83_Init(void)
|
||||
{
|
||||
EPD_5IN83_Reset();
|
||||
|
||||
EPD_5IN83_SendCommand(0x01); // POWER_SETTING
|
||||
EPD_5IN83_SendData(0x37);
|
||||
EPD_5IN83_SendData(0x00);
|
||||
|
||||
EPD_5IN83_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_5IN83_SendData(0xCF);
|
||||
EPD_5IN83_SendData(0x08);
|
||||
|
||||
EPD_5IN83_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_5IN83_SendData(0xc7);
|
||||
EPD_5IN83_SendData(0xcc);
|
||||
EPD_5IN83_SendData(0x28);
|
||||
|
||||
EPD_5IN83_SendCommand(0x04); // POWER_ON
|
||||
EPD_5IN83_ReadBusy();
|
||||
|
||||
EPD_5IN83_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_5IN83_SendData(0x3c);
|
||||
|
||||
EPD_5IN83_SendCommand(0x41); // TEMPERATURE_CALIBRATION
|
||||
EPD_5IN83_SendData(0x00);
|
||||
|
||||
EPD_5IN83_SendCommand(0x50); // VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_5IN83_SendData(0x77);
|
||||
|
||||
EPD_5IN83_SendCommand(0x60); // TCON_SETTING
|
||||
EPD_5IN83_SendData(0x22);
|
||||
|
||||
EPD_5IN83_SendCommand(0x61); // TCON_RESOLUTION
|
||||
EPD_5IN83_SendData(EPD_5IN83_WIDTH >> 8); // source 600
|
||||
EPD_5IN83_SendData(EPD_5IN83_WIDTH & 0xff);
|
||||
EPD_5IN83_SendData(EPD_5IN83_HEIGHT >> 8); // gate 448
|
||||
EPD_5IN83_SendData(EPD_5IN83_HEIGHT & 0xff);
|
||||
|
||||
EPD_5IN83_SendCommand(0x82); // VCM_DC_SETTING
|
||||
EPD_5IN83_SendData(0x1E); // decide by LUT file
|
||||
|
||||
EPD_5IN83_SendCommand(0xe5); // FLASH MODE
|
||||
EPD_5IN83_SendData(0x03);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_5IN83_WIDTH % 8 == 0)? (EPD_5IN83_WIDTH / 8 ): (EPD_5IN83_WIDTH / 8 + 1);
|
||||
Height = EPD_5IN83_HEIGHT;
|
||||
|
||||
EPD_5IN83_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_5IN83_SendData(0x33);
|
||||
}
|
||||
}
|
||||
}
|
||||
EPD_5IN83_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83_Display(UBYTE *Image)
|
||||
{
|
||||
UBYTE Data_Black, Data;
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_5IN83_WIDTH % 8 == 0)? (EPD_5IN83_WIDTH / 8 ): (EPD_5IN83_WIDTH / 8 + 1);
|
||||
Height = EPD_5IN83_HEIGHT;
|
||||
|
||||
EPD_5IN83_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Data_Black = ~Image[i + j * Width];
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if(Data_Black & 0x80)
|
||||
Data = 0x00;
|
||||
else
|
||||
Data = 0x03;
|
||||
Data <<= 4;
|
||||
Data_Black <<= 1;
|
||||
k++;
|
||||
if(Data_Black & 0x80)
|
||||
Data |= 0x00;
|
||||
else
|
||||
Data |= 0x03;
|
||||
Data_Black <<= 1;
|
||||
EPD_5IN83_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
EPD_5IN83_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83_Sleep(void)
|
||||
{
|
||||
EPD_5IN83_SendCommand(0x02); // POWER_OFF
|
||||
EPD_5IN83_ReadBusy();
|
||||
EPD_5IN83_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_5IN83_SendData(0XA5);
|
||||
}
|
||||
|
||||
101
Raspberry Pi/c/lib/e-Paper/EPD_5in83.h
Normal file
101
Raspberry Pi/c/lib/e-Paper/EPD_5in83.h
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_5in83.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 5.83inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_5IN83_Reset()
|
||||
* EPD_SendCommand() => EPD_5IN83_SendCommand()
|
||||
* EPD_SendData() => EPD_5IN83_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_5IN83_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_5IN83_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_5IN83_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_5IN83_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_5IN83_Init()
|
||||
* EPD_Clear() => EPD_5IN83_Clear()
|
||||
* EPD_Display() => EPD_5IN83_Display()
|
||||
* EPD_Sleep() => EPD_5IN83_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_5IN83_H_
|
||||
#define __EPD_5IN83_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_5IN83_WIDTH 600
|
||||
#define EPD_5IN83_HEIGHT 448
|
||||
|
||||
void EPD_5IN83_Init(void);
|
||||
void EPD_5IN83_Clear(void);
|
||||
void EPD_5IN83_Display(UBYTE *Image);
|
||||
void EPD_5IN83_Sleep(void);
|
||||
|
||||
#endif
|
||||
337
Raspberry Pi/c/lib/e-Paper/EPD_5in83bc.c
Normal file
337
Raspberry Pi/c/lib/e-Paper/EPD_5in83bc.c
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_5IN83BC.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 5.83inch e-paper b&c
|
||||
* | Info :
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_5IN83BC_Reset()
|
||||
* EPD_SendCommand() => EPD_5IN83BC_SendCommand()
|
||||
* EPD_SendData() => EPD_5IN83BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_5IN83BC_ReadBusy()
|
||||
* EPD_Init() => EPD_5IN83BC_Init()
|
||||
* EPD_Clear() => EPD_5IN83BC_Clear()
|
||||
* EPD_Display() => EPD_5IN83BC_Display()
|
||||
* EPD_Sleep() => EPD_5IN83BC_Sleep()
|
||||
* 2.Remove:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define IMAGE_PROCESS 0x13
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_BLUE 0x21
|
||||
* #define LUT_WHITE 0x22
|
||||
* #define LUT_GRAY_1 0x23
|
||||
* #define LUT_GRAY_2 0x24
|
||||
* #define LUT_RED_0 0x25
|
||||
* #define LUT_RED_1 0x26
|
||||
* #define LUT_RED_2 0x27
|
||||
* #define LUT_RED_3 0x28
|
||||
* #define LUT_XON 0x29
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SPI_FLASH_CONTROL 0x65
|
||||
* #define REVISION 0x70
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASUREMENT_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* 3.add:
|
||||
* EPD_5IN83BC_DisplayHalfScreen()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_5in83bc.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83BC_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83BC_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83BC_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_ReadBusy(void)
|
||||
{
|
||||
UBYTE busy;
|
||||
Debug("e-Paper busy\r\n");
|
||||
do {
|
||||
EPD_5IN83BC_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_5IN83BC_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_5IN83BC_SendCommand(0x04); // POWER ON
|
||||
EPD_5IN83BC_ReadBusy();
|
||||
EPD_5IN83BC_SendCommand(0x12); // display refresh
|
||||
DEV_Delay_ms(100);
|
||||
EPD_5IN83BC_ReadBusy();
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_Init(void)
|
||||
{
|
||||
EPD_5IN83BC_Reset();
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x01); // POWER_SETTING
|
||||
EPD_5IN83BC_SendData(0x37);
|
||||
EPD_5IN83BC_SendData(0x00);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_5IN83BC_SendData(0xCF);
|
||||
EPD_5IN83BC_SendData(0x08);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_5IN83BC_SendData(0x3A); //PLL: 0-15:0x3C, 15+:0x3A
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x82); // VCM_DC_SETTING
|
||||
EPD_5IN83BC_SendData(0x28); //all temperature range
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_5IN83BC_SendData (0xc7);
|
||||
EPD_5IN83BC_SendData (0xcc);
|
||||
EPD_5IN83BC_SendData (0x15);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x50); // VCOM AND DATA INTERVAL SETTING
|
||||
EPD_5IN83BC_SendData(0x77);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x60); // TCON_SETTING
|
||||
EPD_5IN83BC_SendData(0x22);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x65); // FLASH CONTROL
|
||||
EPD_5IN83BC_SendData(0x00);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x61); // TCON_RESOLUTION
|
||||
EPD_5IN83BC_SendData (0x02); // source 600
|
||||
EPD_5IN83BC_SendData (0x58);
|
||||
EPD_5IN83BC_SendData (0x01); // gate 448
|
||||
EPD_5IN83BC_SendData (0xc0);
|
||||
|
||||
EPD_5IN83BC_SendCommand(0xe5); // FLASH MODE
|
||||
EPD_5IN83BC_SendData(0x03);
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_5IN83BC_WIDTH % 8 == 0)? (EPD_5IN83BC_WIDTH / 8): (EPD_5IN83BC_WIDTH / 8 + 1);
|
||||
Height = EPD_5IN83BC_HEIGHT;
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_5IN83BC_SendData(0x33);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_5IN83BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_Display(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UBYTE Data_Black, Data_RY, Data;
|
||||
UDOUBLE i, j, Width, Height;
|
||||
Width = (EPD_5IN83BC_WIDTH % 8 == 0)? (EPD_5IN83BC_WIDTH / 8 ): (EPD_5IN83BC_WIDTH / 8 + 1);
|
||||
Height = EPD_5IN83BC_HEIGHT;
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x10);
|
||||
for (j = 0; j < Height; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
Data_Black = blackimage[i + j * Width];
|
||||
Data_RY = ryimage[i + j * Width]; // red or yellow
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if ((Data_RY & 0x80) == 0x00) {
|
||||
Data = 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data = 0x00; //black
|
||||
} else {
|
||||
Data = 0x03; //white
|
||||
}
|
||||
Data = (Data << 4) & 0xFF;
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
k += 1;
|
||||
|
||||
if((Data_RY & 0x80) == 0x00) {
|
||||
Data |= 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data |= 0x00; //black
|
||||
} else {
|
||||
Data |= 0x03; //white
|
||||
}
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
EPD_5IN83BC_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_5IN83BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UBYTE Data_Black, Data_RY, Data;
|
||||
UDOUBLE i, j, Width, Height;
|
||||
Width = (EPD_5IN83BC_WIDTH % 8 == 0)? (EPD_5IN83BC_WIDTH / 8 ): (EPD_5IN83BC_WIDTH / 8 + 1);
|
||||
Height = EPD_5IN83BC_HEIGHT;
|
||||
|
||||
EPD_5IN83BC_SendCommand(0x10);
|
||||
for (j = 0; j < Height / 2; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
Data_Black = blackimage[i + j * Width];
|
||||
Data_RY = ryimage[i + j * Width]; // red or yellow
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if ((Data_RY & 0x80) == 0x00) {
|
||||
Data = 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data = 0x00; //black
|
||||
} else {
|
||||
Data = 0x03; //white
|
||||
}
|
||||
Data = (Data << 4) & 0xFF;
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
k += 1;
|
||||
|
||||
if((Data_RY & 0x80) == 0x00) {
|
||||
Data |= 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data |= 0x00; //black
|
||||
} else {
|
||||
Data |= 0x03; //white
|
||||
}
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
EPD_5IN83BC_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < Height / 2; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_5IN83BC_SendData(0x33);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_5IN83BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_5IN83BC_Sleep(void)
|
||||
{
|
||||
EPD_5IN83BC_SendCommand(0x02); // POWER_OFF
|
||||
EPD_5IN83BC_ReadBusy();
|
||||
EPD_5IN83BC_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_5IN83BC_SendData(0XA5);
|
||||
}
|
||||
100
Raspberry Pi/c/lib/e-Paper/EPD_5in83bc.h
Normal file
100
Raspberry Pi/c/lib/e-Paper/EPD_5in83bc.h
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_5IN83BC.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 5.83inch e-paper b&c
|
||||
* | Info :
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_5IN83BC_Reset()
|
||||
* EPD_SendCommand() => EPD_5IN83BC_SendCommand()
|
||||
* EPD_SendData() => EPD_5IN83BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_5IN83BC_ReadBusy()
|
||||
* EPD_Init() => EPD_5IN83BC_Init()
|
||||
* EPD_Clear() => EPD_5IN83BC_Clear()
|
||||
* EPD_Display() => EPD_5IN83BC_Display()
|
||||
* EPD_Sleep() => EPD_5IN83BC_Sleep()
|
||||
* 2.Remove:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define IMAGE_PROCESS 0x13
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_BLUE 0x21
|
||||
* #define LUT_WHITE 0x22
|
||||
* #define LUT_GRAY_1 0x23
|
||||
* #define LUT_GRAY_2 0x24
|
||||
* #define LUT_RED_0 0x25
|
||||
* #define LUT_RED_1 0x26
|
||||
* #define LUT_RED_2 0x27
|
||||
* #define LUT_RED_3 0x28
|
||||
* #define LUT_XON 0x29
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SPI_FLASH_CONTROL 0x65
|
||||
* #define REVISION 0x70
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASUREMENT_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* 3.add:
|
||||
* EPD_5IN83BC_DisplayHalfScreen()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_5IN83BC_H_
|
||||
#define __EPD_5IN83BC_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_5IN83BC_WIDTH 600
|
||||
#define EPD_5IN83BC_HEIGHT 448
|
||||
|
||||
void EPD_5IN83BC_Init(void);
|
||||
void EPD_5IN83BC_Clear(void);
|
||||
void EPD_5IN83BC_Display(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_5IN83BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_5IN83BC_Sleep(void);
|
||||
|
||||
#endif
|
||||
271
Raspberry Pi/c/lib/e-Paper/EPD_7in5.c
Normal file
271
Raspberry Pi/c/lib/e-Paper/EPD_7in5.c
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_7IN5.c
|
||||
* | Author : Waveshare team
|
||||
* | Function : 7.5inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_7IN5_Reset()
|
||||
* EPD_SendCommand() => EPD_7IN5_SendCommand()
|
||||
* EPD_SendData() => EPD_7IN5_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_7IN5_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_7IN5_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_7IN5_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_7IN5_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_7IN5_Init()
|
||||
* EPD_Clear() => EPD_7IN5_Clear()
|
||||
* EPD_Display() => EPD_7IN5_Display()
|
||||
* EPD_Sleep() => EPD_7IN5_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_7in5.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5_ReadBusy(void)
|
||||
{
|
||||
Debug("e-Paper busy\r\n");
|
||||
while(DEV_Digital_Read(EPD_BUSY_PIN) == 0) { //LOW: idle, HIGH: busy
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_7IN5_SendCommand(0x12); // DISPLAY_REFRESH
|
||||
DEV_Delay_ms(100);
|
||||
EPD_7IN5_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5_Init(void)
|
||||
{
|
||||
EPD_7IN5_Reset();
|
||||
|
||||
EPD_7IN5_SendCommand(0x01); // POWER_SETTING
|
||||
EPD_7IN5_SendData(0x37);
|
||||
EPD_7IN5_SendData(0x00);
|
||||
|
||||
EPD_7IN5_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_7IN5_SendData(0xCF);
|
||||
EPD_7IN5_SendData(0x08);
|
||||
|
||||
EPD_7IN5_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_7IN5_SendData(0xc7);
|
||||
EPD_7IN5_SendData(0xcc);
|
||||
EPD_7IN5_SendData(0x28);
|
||||
|
||||
EPD_7IN5_SendCommand(0x04); // POWER_ON
|
||||
EPD_7IN5_ReadBusy();
|
||||
|
||||
EPD_7IN5_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_7IN5_SendData(0x3c);
|
||||
|
||||
EPD_7IN5_SendCommand(0x41); // TEMPERATURE_CALIBRATION
|
||||
EPD_7IN5_SendData(0x00);
|
||||
|
||||
EPD_7IN5_SendCommand(0x50); // VCOM_AND_DATA_INTERVAL_SETTING
|
||||
EPD_7IN5_SendData(0x77);
|
||||
|
||||
EPD_7IN5_SendCommand(0x60); // TCON_SETTING
|
||||
EPD_7IN5_SendData(0x22);
|
||||
|
||||
EPD_7IN5_SendCommand(0x61); // TCON_RESOLUTION
|
||||
EPD_7IN5_SendData(EPD_7IN5_WIDTH >> 8); // source 640
|
||||
EPD_7IN5_SendData(EPD_7IN5_WIDTH & 0xff);
|
||||
EPD_7IN5_SendData(EPD_7IN5_HEIGHT >> 8); // gate 384
|
||||
EPD_7IN5_SendData(EPD_7IN5_HEIGHT & 0xff);
|
||||
|
||||
EPD_7IN5_SendCommand(0x82); // VCM_DC_SETTING
|
||||
EPD_7IN5_SendData(0x1E); // decide by LUT file
|
||||
|
||||
EPD_7IN5_SendCommand(0xe5); // FLASH MODE
|
||||
EPD_7IN5_SendData(0x03);
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_7IN5_WIDTH % 8 == 0)? (EPD_7IN5_WIDTH / 8 ): (EPD_7IN5_WIDTH / 8 + 1);
|
||||
Height = EPD_7IN5_HEIGHT;
|
||||
|
||||
EPD_7IN5_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_7IN5_SendData(0x33);
|
||||
}
|
||||
}
|
||||
}
|
||||
EPD_7IN5_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5_Display(UBYTE *Image)
|
||||
{
|
||||
UBYTE Data_Black, Data;
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_7IN5_WIDTH % 8 == 0)? (EPD_7IN5_WIDTH / 8 ): (EPD_7IN5_WIDTH / 8 + 1);
|
||||
Height = EPD_7IN5_HEIGHT;
|
||||
|
||||
EPD_7IN5_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Data_Black = ~Image[i + j * Width];
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if(Data_Black & 0x80)
|
||||
Data = 0x00;
|
||||
else
|
||||
Data = 0x03;
|
||||
Data <<= 4;
|
||||
Data_Black <<= 1;
|
||||
k++;
|
||||
if(Data_Black & 0x80)
|
||||
Data |= 0x00;
|
||||
else
|
||||
Data |= 0x03;
|
||||
Data_Black <<= 1;
|
||||
EPD_7IN5_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
EPD_7IN5_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5_Sleep(void)
|
||||
{
|
||||
EPD_7IN5_SendCommand(0x02); // POWER_OFF
|
||||
EPD_7IN5_ReadBusy();
|
||||
EPD_7IN5_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_7IN5_SendData(0XA5);;
|
||||
}
|
||||
101
Raspberry Pi/c/lib/e-Paper/EPD_7in5.h
Normal file
101
Raspberry Pi/c/lib/e-Paper/EPD_7in5.h
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_7IN5.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 7.5inch e-paper
|
||||
* | Info :
|
||||
*----------------
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_7IN5_Reset()
|
||||
* EPD_SendCommand() => EPD_7IN5_SendCommand()
|
||||
* EPD_SendData() => EPD_7IN5_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_7IN5_ReadBusy()
|
||||
* EPD_SetFullReg() => EPD_7IN5_SetFullReg()
|
||||
* EPD_SetPartReg() => EPD_7IN5_SetPartReg()
|
||||
* EPD_TurnOnDisplay() => EPD_7IN5_TurnOnDisplay()
|
||||
* EPD_Init() => EPD_7IN5_Init()
|
||||
* EPD_Clear() => EPD_7IN5_Clear()
|
||||
* EPD_Display() => EPD_7IN5_Display()
|
||||
* EPD_Sleep() => EPD_7IN5_Sleep()
|
||||
* 2.remove commands define:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define DATA_START_TRANSMISSION_2 0x13
|
||||
* #define VCOM_LUT 0x20
|
||||
* #define W2W_LUT 0x21
|
||||
* #define B2W_LUT 0x22
|
||||
* #define W2B_LUT 0x23
|
||||
* #define B2B_LUT 0x24
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_CALIBRATION 0x40
|
||||
* #define TEMPERATURE_SENSOR_SELECTION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define RESOLUTION_SETTING 0x61
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASURE_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* #define PARTIAL_WINDOW 0x90
|
||||
* #define PARTIAL_IN 0x91
|
||||
* #define PARTIAL_OUT 0x92
|
||||
* #define PROGRAM_MODE 0xA0
|
||||
* #define ACTIVE_PROGRAM 0xA1
|
||||
* #define READ_OTP_DATA 0xA2
|
||||
* #define POWER_SAVING 0xE3
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_7IN5_H_
|
||||
#define __EPD_7IN5_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_7IN5_WIDTH 640
|
||||
#define EPD_7IN5_HEIGHT 384
|
||||
|
||||
void EPD_7IN5_Init(void);
|
||||
void EPD_7IN5_Clear(void);
|
||||
void EPD_7IN5_Display(UBYTE *Image);
|
||||
void EPD_7IN5_Sleep(void);
|
||||
|
||||
#endif
|
||||
331
Raspberry Pi/c/lib/e-Paper/EPD_7in5bc.c
Normal file
331
Raspberry Pi/c/lib/e-Paper/EPD_7in5bc.c
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_7IN5BC.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 7.5inch e-paper b&c
|
||||
* | Info :
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_7IN5BC_Reset()
|
||||
* EPD_SendCommand() => EPD_7IN5BC_SendCommand()
|
||||
* EPD_SendData() => EPD_7IN5BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_7IN5BC_ReadBusy()
|
||||
* EPD_Init() => EPD_7IN5BC_Init()
|
||||
* EPD_Clear() => EPD_7IN5BC_Clear()
|
||||
* EPD_Display() => EPD_7IN5BC_Display()
|
||||
* EPD_Sleep() => EPD_7IN5BC_Sleep()
|
||||
* 2.Remove:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define IMAGE_PROCESS 0x13
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_BLUE 0x21
|
||||
* #define LUT_WHITE 0x22
|
||||
* #define LUT_GRAY_1 0x23
|
||||
* #define LUT_GRAY_2 0x24
|
||||
* #define LUT_RED_0 0x25
|
||||
* #define LUT_RED_1 0x26
|
||||
* #define LUT_RED_2 0x27
|
||||
* #define LUT_RED_3 0x28
|
||||
* #define LUT_XON 0x29
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SPI_FLASH_CONTROL 0x65
|
||||
* #define REVISION 0x70
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASUREMENT_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* 3.add:
|
||||
* EPD_7IN5BC_DisplayHalfScreen()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#include "EPD_7in5bc.h"
|
||||
#include "Debug.h"
|
||||
|
||||
/******************************************************************************
|
||||
function : Software reset
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5BC_Reset(void)
|
||||
{
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||
DEV_Delay_ms(10);
|
||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||
DEV_Delay_ms(200);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send command
|
||||
parameter:
|
||||
Reg : Command register
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5BC_SendCommand(UBYTE Reg)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 0);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Reg);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5BC_SendData(UBYTE Data)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_WriteByte(Data);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5BC_ReadBusy(void)
|
||||
{
|
||||
UBYTE busy;
|
||||
Debug("e-Paper busy\r\n");
|
||||
do {
|
||||
EPD_7IN5BC_SendCommand(0x71);
|
||||
busy = DEV_Digital_Read(EPD_BUSY_PIN);
|
||||
busy =!(busy & 0x01);
|
||||
} while(busy);
|
||||
Debug("e-Paper busy release\r\n");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Turn On Display
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
static void EPD_7IN5BC_TurnOnDisplay(void)
|
||||
{
|
||||
EPD_7IN5BC_SendCommand(0x04); // POWER ON
|
||||
EPD_7IN5BC_ReadBusy();
|
||||
EPD_7IN5BC_SendCommand(0x12); // display refresh
|
||||
DEV_Delay_ms(100);
|
||||
EPD_7IN5BC_ReadBusy();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Initialize the e-Paper register
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5BC_Init(void)
|
||||
{
|
||||
EPD_7IN5BC_Reset();
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x01); // POWER_SETTING
|
||||
EPD_7IN5BC_SendData(0x37);
|
||||
EPD_7IN5BC_SendData(0x00);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x00); // PANEL_SETTING
|
||||
EPD_7IN5BC_SendData(0xCF);
|
||||
EPD_7IN5BC_SendData(0x08);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x30); // PLL_CONTROL
|
||||
EPD_7IN5BC_SendData(0x3A); // PLL: 0-15:0x3C, 15+:0x3A
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x82); // VCM_DC_SETTING
|
||||
EPD_7IN5BC_SendData(0x28); //all temperature range
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x06); // BOOSTER_SOFT_START
|
||||
EPD_7IN5BC_SendData (0xc7);
|
||||
EPD_7IN5BC_SendData (0xcc);
|
||||
EPD_7IN5BC_SendData (0x15);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x50); // VCOM AND DATA INTERVAL SETTING
|
||||
EPD_7IN5BC_SendData(0x77);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x60); // TCON_SETTING
|
||||
EPD_7IN5BC_SendData(0x22);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x65); // FLASH CONTROL
|
||||
EPD_7IN5BC_SendData(0x00);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x61); // TCON_RESOLUTION
|
||||
EPD_7IN5BC_SendData(EPD_7IN5BC_WIDTH >> 8); // source 640
|
||||
EPD_7IN5BC_SendData(EPD_7IN5BC_WIDTH & 0xff);
|
||||
EPD_7IN5BC_SendData(EPD_7IN5BC_HEIGHT >> 8); // gate 384
|
||||
EPD_7IN5BC_SendData(EPD_7IN5BC_HEIGHT & 0xff);
|
||||
|
||||
EPD_7IN5BC_SendCommand(0xe5); // FLASH MODE
|
||||
EPD_7IN5BC_SendData(0x03);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Clear screen
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5BC_Clear(void)
|
||||
{
|
||||
UWORD Width, Height;
|
||||
Width = (EPD_7IN5BC_WIDTH % 8 == 0)? (EPD_7IN5BC_WIDTH / 8): (EPD_7IN5BC_WIDTH / 8 + 1);
|
||||
Height = EPD_7IN5BC_HEIGHT;
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x10);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_7IN5BC_SendData(0x33);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_7IN5BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Sends the image buffer in RAM to e-Paper and displays
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5BC_Display(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UBYTE Data_Black, Data_RY, Data;
|
||||
UDOUBLE i, j, Width, Height;
|
||||
Width = (EPD_7IN5BC_WIDTH % 8 == 0)? (EPD_7IN5BC_WIDTH / 8 ): (EPD_7IN5BC_WIDTH / 8 + 1);
|
||||
Height = EPD_7IN5BC_HEIGHT;
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x10);
|
||||
for (j = 0; j < Height; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
Data_Black = blackimage[i + j * Width];
|
||||
Data_RY = ryimage[i + j * Width]; // red or yellow
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if ((Data_RY & 0x80) == 0x00) {
|
||||
Data = 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data = 0x00; //black
|
||||
} else {
|
||||
Data = 0x03; //white
|
||||
}
|
||||
Data = (Data << 4) & 0xFF;
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
k += 1;
|
||||
|
||||
if((Data_RY & 0x80) == 0x00) {
|
||||
Data |= 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data |= 0x00; //black
|
||||
} else {
|
||||
Data |= 0x03; //white
|
||||
}
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
EPD_7IN5BC_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_7IN5BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
void EPD_7IN5BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage)
|
||||
{
|
||||
UBYTE Data_Black, Data_RY, Data;
|
||||
UDOUBLE i, j, Width, Height;
|
||||
Width = (EPD_7IN5BC_WIDTH % 8 == 0)? (EPD_7IN5BC_WIDTH / 8 ): (EPD_7IN5BC_WIDTH / 8 + 1);
|
||||
Height = EPD_7IN5BC_HEIGHT;
|
||||
|
||||
EPD_7IN5BC_SendCommand(0x10);
|
||||
for (j = 0; j < Height / 2; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
Data_Black = blackimage[i + j * Width];
|
||||
Data_RY = ryimage[i + j * Width]; // red or yellow
|
||||
for(UBYTE k = 0; k < 8; k++) {
|
||||
if ((Data_RY & 0x80) == 0x00) {
|
||||
Data = 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data = 0x00; //black
|
||||
} else {
|
||||
Data = 0x03; //white
|
||||
}
|
||||
Data = (Data << 4) & 0xFF;
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
k += 1;
|
||||
|
||||
if((Data_RY & 0x80) == 0x00) {
|
||||
Data |= 0x04; //red
|
||||
} else if ((Data_Black & 0x80) == 0x00) {
|
||||
Data |= 0x00; //black
|
||||
} else {
|
||||
Data |= 0x03; //white
|
||||
}
|
||||
Data_Black = (Data_Black << 1) & 0xFF;
|
||||
Data_RY = (Data_RY << 1) & 0xFF;
|
||||
EPD_7IN5BC_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < Height / 2; j++) {
|
||||
for (i = 0; i < Width; i++) {
|
||||
for(UBYTE k = 0; k < 4; k++) {
|
||||
EPD_7IN5BC_SendData(Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EPD_7IN5BC_TurnOnDisplay();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Enter sleep mode
|
||||
parameter:
|
||||
******************************************************************************/
|
||||
void EPD_7IN5BC_Sleep(void)
|
||||
{
|
||||
EPD_7IN5BC_SendCommand(0x02); // POWER_OFF
|
||||
EPD_7IN5BC_ReadBusy();
|
||||
EPD_7IN5BC_SendCommand(0x07); // DEEP_SLEEP
|
||||
EPD_7IN5BC_SendData(0XA5);
|
||||
}
|
||||
100
Raspberry Pi/c/lib/e-Paper/EPD_7in5bc.h
Normal file
100
Raspberry Pi/c/lib/e-Paper/EPD_7in5bc.h
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/*****************************************************************************
|
||||
* | File : EPD_7IN5BC.h
|
||||
* | Author : Waveshare team
|
||||
* | Function : 7.5inch e-paper b&c
|
||||
* | Info :
|
||||
* | This version: V3.0
|
||||
* | Date : 2019-06-13
|
||||
* | Info :
|
||||
* -----------------------------------------------------------------------------
|
||||
* V3.0(2019-06-13):
|
||||
* 1.Change:
|
||||
* EPD_Reset() => EPD_7IN5BC_Reset()
|
||||
* EPD_SendCommand() => EPD_7IN5BC_SendCommand()
|
||||
* EPD_SendData() => EPD_7IN5BC_SendData()
|
||||
* EPD_WaitUntilIdle() => EPD_7IN5BC_ReadBusy()
|
||||
* EPD_Init() => EPD_7IN5BC_Init()
|
||||
* EPD_Clear() => EPD_7IN5BC_Clear()
|
||||
* EPD_Display() => EPD_7IN5BC_Display()
|
||||
* EPD_Sleep() => EPD_7IN5BC_Sleep()
|
||||
* 2.Remove:
|
||||
* #define PANEL_SETTING 0x00
|
||||
* #define POWER_SETTING 0x01
|
||||
* #define POWER_OFF 0x02
|
||||
* #define POWER_OFF_SEQUENCE_SETTING 0x03
|
||||
* #define POWER_ON 0x04
|
||||
* #define POWER_ON_MEASURE 0x05
|
||||
* #define BOOSTER_SOFT_START 0x06
|
||||
* #define DEEP_SLEEP 0x07
|
||||
* #define DATA_START_TRANSMISSION_1 0x10
|
||||
* #define DATA_STOP 0x11
|
||||
* #define DISPLAY_REFRESH 0x12
|
||||
* #define IMAGE_PROCESS 0x13
|
||||
* #define LUT_FOR_VCOM 0x20
|
||||
* #define LUT_BLUE 0x21
|
||||
* #define LUT_WHITE 0x22
|
||||
* #define LUT_GRAY_1 0x23
|
||||
* #define LUT_GRAY_2 0x24
|
||||
* #define LUT_RED_0 0x25
|
||||
* #define LUT_RED_1 0x26
|
||||
* #define LUT_RED_2 0x27
|
||||
* #define LUT_RED_3 0x28
|
||||
* #define LUT_XON 0x29
|
||||
* #define PLL_CONTROL 0x30
|
||||
* #define TEMPERATURE_SENSOR_COMMAND 0x40
|
||||
* #define TEMPERATURE_CALIBRATION 0x41
|
||||
* #define TEMPERATURE_SENSOR_WRITE 0x42
|
||||
* #define TEMPERATURE_SENSOR_READ 0x43
|
||||
* #define VCOM_AND_DATA_INTERVAL_SETTING 0x50
|
||||
* #define LOW_POWER_DETECTION 0x51
|
||||
* #define TCON_SETTING 0x60
|
||||
* #define TCON_RESOLUTION 0x61
|
||||
* #define SPI_FLASH_CONTROL 0x65
|
||||
* #define REVISION 0x70
|
||||
* #define GET_STATUS 0x71
|
||||
* #define AUTO_MEASUREMENT_VCOM 0x80
|
||||
* #define READ_VCOM_VALUE 0x81
|
||||
* #define VCM_DC_SETTING 0x82
|
||||
* 3.add:
|
||||
* EPD_7IN5BC_DisplayHalfScreen()
|
||||
* -----------------------------------------------------------------------------
|
||||
* V2.0(2018-11-09):
|
||||
* 1.Remove:ImageBuff[EPD_HEIGHT * EPD_WIDTH / 8]
|
||||
* 2.Change:EPD_Display(UBYTE *Image)
|
||||
* Need to pass parameters: pointer to cached data
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documnetation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
******************************************************************************/
|
||||
#ifndef __EPD_7IN5BC_H_
|
||||
#define __EPD_7IN5BC_H_
|
||||
|
||||
#include "DEV_Config.h"
|
||||
|
||||
// Display resolution
|
||||
#define EPD_7IN5BC_WIDTH 640
|
||||
#define EPD_7IN5BC_HEIGHT 384
|
||||
|
||||
void EPD_7IN5BC_Init(void);
|
||||
void EPD_7IN5BC_Clear(void);
|
||||
void EPD_7IN5BC_Display(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_7IN5BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage);
|
||||
void EPD_7IN5BC_Sleep(void);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue