From c38b40a52a84f42065afc1891c978cfc860ee522 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann Date: Fri, 10 Dec 2021 23:29:47 +0100 Subject: [PATCH] waveshare213v2: Document more values Introduce named constants where possible (based on the data sheet) and compute values instead of using hardcoded ones. Signed-off-by: Michael Hanselmann --- waveshare2in13v2/waveshare213v2.go | 87 ++++++++++++++++-------------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/waveshare2in13v2/waveshare213v2.go b/waveshare2in13v2/waveshare213v2.go index 628ec9a..2b4f5ba 100644 --- a/waveshare2in13v2/waveshare213v2.go +++ b/waveshare2in13v2/waveshare213v2.go @@ -46,6 +46,15 @@ const ( setDigitalBlockControl byte = 0x7E ) +// Register values +const ( + gateDrivingVoltage19V = 0x15 + + sourceDrivingVoltageVSH1_15V = 0x41 + sourceDrivingVoltageVSH2_5V = 0xA8 + sourceDrivingVoltageVSL_neg15V = 0x32 +) + // Dev defines the handler which is used to access the display. type Dev struct { c conn.Conn @@ -90,38 +99,34 @@ var EPD2in13v2 = Opts{ Width: 122, Height: 250, FullUpdate: LUT{ - 0x80, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x03, 0x03, 0x00, 0x00, 0x02, - 0x09, 0x09, 0x00, 0x00, 0x02, - 0x03, 0x03, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x15, 0x41, 0xA8, 0x32, 0x30, 0x0A, + 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 }, PartialUpdate: LUT{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x0A, 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, - - 0x15, 0x41, 0xA8, 0x32, 0x30, 0x0A, + 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 }, } @@ -221,9 +226,7 @@ func (d *Dev) Init(partialUpdate PartialUpdate) error { d.waitUntilIdle() eh.sendCommand([]byte{writeLutRegister}) - for i := range [70]int{} { - eh.sendData([]byte{d.opts.PartialUpdate[i]}) - } + eh.sendData(d.opts.PartialUpdate[:70]) eh.sendCommand([]byte{0x37}) eh.sendData([]byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00}) @@ -257,7 +260,11 @@ func (d *Dev) Init(partialUpdate PartialUpdate) error { // Driver output control eh.sendCommand([]byte{driverOutputControl}) - eh.sendData([]byte{0xF9, 0x00, 0x00}) + eh.sendData([]byte{ + byte((d.opts.Height - 1) % 0xFF), + byte((d.opts.Height - 1) / 0xFF), + 0x00, + }) // Data entry mode eh.sendCommand([]byte{dataEntryModeSetting}) @@ -280,23 +287,21 @@ func (d *Dev) Init(partialUpdate PartialUpdate) error { eh.sendData([]byte{0x55}) eh.sendCommand([]byte{gateDrivingVoltageControl}) - eh.sendData([]byte{d.opts.FullUpdate[70]}) + eh.sendData([]byte{gateDrivingVoltage19V}) eh.sendCommand([]byte{sourceDrivingVoltageControl}) - eh.sendData([]byte{d.opts.FullUpdate[71], d.opts.FullUpdate[72], d.opts.FullUpdate[73]}) + eh.sendData([]byte{sourceDrivingVoltageVSH1_15V, sourceDrivingVoltageVSH2_5V, sourceDrivingVoltageVSL_neg15V}) // Dummy Line eh.sendCommand([]byte{setDummyLinePeriod}) - eh.sendData([]byte{d.opts.FullUpdate[74]}) + eh.sendData([]byte{0x30}) // Gate Time eh.sendCommand([]byte{setGateTime}) - eh.sendData([]byte{d.opts.FullUpdate[75]}) + eh.sendData([]byte{0x0A}) eh.sendCommand([]byte{writeLutRegister}) - for i := range [70]int{} { - eh.sendData([]byte{d.opts.FullUpdate[i]}) - } + eh.sendData(d.opts.FullUpdate[:70]) // Set RAM x address count to 0 eh.sendCommand([]byte{setRAMXAddressCounter})