From d7e024638382db02c5b618cf3e07d64ada8b8d99 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 26 Oct 2020 18:13:30 -0700 Subject: [PATCH 1/3] Add grayscale support Requires CircuitPython at least 6.1.x --- adafruit_il0373.py | 80 +++++++++++++++++++++++++++++-- examples/display-ruler.bmp | Bin 360122 -> 360138 bytes examples/il0373_2.9_grayscale.py | 46 ++++++++++++++++++ 3 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 examples/il0373_2.9_grayscale.py diff --git a/adafruit_il0373.py b/adafruit_il0373.py index 964c18f..16e0428 100644 --- a/adafruit_il0373.py +++ b/adafruit_il0373.py @@ -55,13 +55,65 @@ b"\x01\x05\x03\x00\x2b\x2b\x09" # power setting b"\x06\x03\x17\x17\x17" # booster soft start b"\x04\x80\xc8" # power on and wait 200 ms - b"\x00\x01\xcf" # panel setting + b"\x00\x01\x0f" # panel setting. Further filled in below. b"\x50\x01\x37" # CDI setting - b"\x30\x01\x29" # PLL + b"\x30\x01\x29" # PLL set to 150 Hz b"\x61\x03\x00\x00\x00" # Resolution b"\x82\x81\x32\x0a" # VCM DC and delay 50ms ) +_GRAYSCALE_LUT = ( + # Common voltage + b"\x20\x2a" + b"\x00\x0A\x00\x00\x00\x01" + b"\x60\x14\x14\x00\x00\x01" + b"\x00\x14\x00\x00\x00\x01" + b"\x00\x13\x0A\x01\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + + # White to White + b"\x21\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x10\x14\x0A\x00\x00\x01" + b"\xA0\x13\x01\x00\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + + # Black to White + b"\x22\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x00\x14\x0A\x00\x00\x01" + b"\x99\x0C\x01\x03\x04\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + + # White to Black + b"\x23\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x00\x14\x0A\x00\x00\x01" + b"\x99\x0B\x04\x04\x01\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + + # Black to Black + b"\x24\x2a" + b"\x80\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x20\x14\x0A\x00\x00\x01" + b"\x50\x13\x01\x00\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" +) + _STOP_SEQUENCE = ( b"\x50\x01\x17" # CDI setting b"\x82\x01\x00" # VCM DC and delay 50ms @@ -90,7 +142,12 @@ class IL0373(displayio.EPaperDisplay): """ def __init__(self, bus, swap_rams=False, **kwargs): - start_sequence = bytearray(_START_SEQUENCE) + if kwargs.get("grayscale", False): + start_sequence = bytearray(len(_START_SEQUENCE) + len(_GRAYSCALE_LUT)) + start_sequence[:len(_START_SEQUENCE)] = _START_SEQUENCE + start_sequence[len(_START_SEQUENCE):] = _GRAYSCALE_LUT + else: + start_sequence = bytearray(_START_SEQUENCE) width = kwargs["width"] height = kwargs["height"] @@ -109,6 +166,23 @@ def __init__(self, bus, swap_rams=False, **kwargs): write_color_ram_command = 0x13 color_bits_inverted = kwargs.pop("color_bits_inverted", True) black_bits_inverted = kwargs.pop("black_bits_inverted", False) + if "highlight_color" not in kwargs: + start_sequence[17] |= 1 << 4 # Set BWR to only do black and white. + if kwargs.get("grayscale", False): + start_sequence[17] |= 1 << 5 # Set REG_EN to use the LUT sequence from the registers. + start_sequence[6] = 0x13 # Boost the voltage + start_sequence[23] = 0x3C # PLL set to 50 Hz (M = 7, N = 4) + + # Set the resolution to scan + if width > 128: + start_sequence[17] |= 0b11 << 5 # 160x296 + elif height > 252 or width > 96: + start_sequence[17] |= 0b10 << 5 # 128x296 + elif height > 230: + start_sequence[17] |= 0b01 << 5 # 96x252 + else: + pass # 0b00 is 96x230 + super().__init__( bus, start_sequence, diff --git a/examples/display-ruler.bmp b/examples/display-ruler.bmp index 726b5e026fd30b7e5baf5c23323d159b0eb5f65d..563a38f96a72cafb4b1177490520a512e5c8ee88 100644 GIT binary patch literal 360138 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 literal 360122 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 T`pMSbh(J1r2r{u6#p?e9C4JK7 diff --git a/examples/il0373_2.9_grayscale.py b/examples/il0373_2.9_grayscale.py new file mode 100644 index 0000000..ed1d975 --- /dev/null +++ b/examples/il0373_2.9_grayscale.py @@ -0,0 +1,46 @@ +"""Simple test script for 2.9" 296x128 grayscale display. + +Supported products: + * Adafruit Flexible 2.9" Monochrome + * https://www.adafruit.com/product/4777 + """ + +import time +import busio +import board +import displayio +import adafruit_il0373 + +displayio.release_displays() + +# This pinout works on a Feather M4 and may need to be altered for other boards. +spi = busio.SPI(board.SCK, board.MOSI) # Uses SCK and MOSI +epd_cs = board.D9 +epd_dc = board.D10 + +display_bus = displayio.FourWire( + spi, command=epd_dc, chip_select=epd_cs, baudrate=1000000 +) +time.sleep(1) + +display = adafruit_il0373.IL0373( + display_bus, width=296, height=128, rotation=270, + black_bits_inverted=False, color_bits_inverted=False, grayscale=True, + refresh_time=1 +) + +g = displayio.Group() + +f = open("/display-ruler.bmp", "rb") + +pic = displayio.OnDiskBitmap(f) +t = displayio.TileGrid(pic, pixel_shader=displayio.ColorConverter()) +g.append(t) + +display.show(g) + +display.refresh() + +print("refreshed") + +time.sleep(120) From 6bede3473a9310242512da3f0d4c22195ed294a2 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 26 Oct 2020 18:16:07 -0700 Subject: [PATCH 2/3] Update comment --- examples/il0373_2.9_grayscale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/il0373_2.9_grayscale.py b/examples/il0373_2.9_grayscale.py index ed1d975..d7e36e1 100644 --- a/examples/il0373_2.9_grayscale.py +++ b/examples/il0373_2.9_grayscale.py @@ -1,7 +1,7 @@ """Simple test script for 2.9" 296x128 grayscale display. Supported products: - * Adafruit Flexible 2.9" Monochrome + * Adafruit 2.9" Grayscale * https://www.adafruit.com/product/4777 """ From d3597b3c67ac1fae3a1017109e8841d7046bfb30 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 26 Oct 2020 18:19:33 -0700 Subject: [PATCH 3/3] Black --- adafruit_il0373.py | 116 +++++++++++++++---------------- examples/il0373_2.9_grayscale.py | 11 ++- 2 files changed, 65 insertions(+), 62 deletions(-) diff --git a/adafruit_il0373.py b/adafruit_il0373.py index 16e0428..6508a54 100644 --- a/adafruit_il0373.py +++ b/adafruit_il0373.py @@ -63,55 +63,51 @@ ) _GRAYSCALE_LUT = ( - # Common voltage - b"\x20\x2a" - b"\x00\x0A\x00\x00\x00\x01" - b"\x60\x14\x14\x00\x00\x01" - b"\x00\x14\x00\x00\x00\x01" - b"\x00\x13\x0A\x01\x00\x01" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - - # White to White - b"\x21\x2a" - b"\x40\x0A\x00\x00\x00\x01" - b"\x90\x14\x14\x00\x00\x01" - b"\x10\x14\x0A\x00\x00\x01" - b"\xA0\x13\x01\x00\x00\x01" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - - # Black to White - b"\x22\x2a" - b"\x40\x0A\x00\x00\x00\x01" - b"\x90\x14\x14\x00\x00\x01" - b"\x00\x14\x0A\x00\x00\x01" - b"\x99\x0C\x01\x03\x04\x01" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - - # White to Black - b"\x23\x2a" - b"\x40\x0A\x00\x00\x00\x01" - b"\x90\x14\x14\x00\x00\x01" - b"\x00\x14\x0A\x00\x00\x01" - b"\x99\x0B\x04\x04\x01\x01" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - - # Black to Black - b"\x24\x2a" - b"\x80\x0A\x00\x00\x00\x01" - b"\x90\x14\x14\x00\x00\x01" - b"\x20\x14\x0A\x00\x00\x01" - b"\x50\x13\x01\x00\x00\x01" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00" + # Common voltage + b"\x20\x2a" + b"\x00\x0A\x00\x00\x00\x01" + b"\x60\x14\x14\x00\x00\x01" + b"\x00\x14\x00\x00\x00\x01" + b"\x00\x13\x0A\x01\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + # White to White + b"\x21\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x10\x14\x0A\x00\x00\x01" + b"\xA0\x13\x01\x00\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + # Black to White + b"\x22\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x00\x14\x0A\x00\x00\x01" + b"\x99\x0C\x01\x03\x04\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + # White to Black + b"\x23\x2a" + b"\x40\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x00\x14\x0A\x00\x00\x01" + b"\x99\x0B\x04\x04\x01\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + # Black to Black + b"\x24\x2a" + b"\x80\x0A\x00\x00\x00\x01" + b"\x90\x14\x14\x00\x00\x01" + b"\x20\x14\x0A\x00\x00\x01" + b"\x50\x13\x01\x00\x00\x01" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00" ) _STOP_SEQUENCE = ( @@ -144,8 +140,8 @@ class IL0373(displayio.EPaperDisplay): def __init__(self, bus, swap_rams=False, **kwargs): if kwargs.get("grayscale", False): start_sequence = bytearray(len(_START_SEQUENCE) + len(_GRAYSCALE_LUT)) - start_sequence[:len(_START_SEQUENCE)] = _START_SEQUENCE - start_sequence[len(_START_SEQUENCE):] = _GRAYSCALE_LUT + start_sequence[: len(_START_SEQUENCE)] = _START_SEQUENCE + start_sequence[len(_START_SEQUENCE) :] = _GRAYSCALE_LUT else: start_sequence = bytearray(_START_SEQUENCE) @@ -167,21 +163,23 @@ def __init__(self, bus, swap_rams=False, **kwargs): color_bits_inverted = kwargs.pop("color_bits_inverted", True) black_bits_inverted = kwargs.pop("black_bits_inverted", False) if "highlight_color" not in kwargs: - start_sequence[17] |= 1 << 4 # Set BWR to only do black and white. + start_sequence[17] |= 1 << 4 # Set BWR to only do black and white. if kwargs.get("grayscale", False): - start_sequence[17] |= 1 << 5 # Set REG_EN to use the LUT sequence from the registers. - start_sequence[6] = 0x13 # Boost the voltage - start_sequence[23] = 0x3C # PLL set to 50 Hz (M = 7, N = 4) + start_sequence[17] |= ( + 1 << 5 + ) # Set REG_EN to use the LUT sequence from the registers. + start_sequence[6] = 0x13 # Boost the voltage + start_sequence[23] = 0x3C # PLL set to 50 Hz (M = 7, N = 4) # Set the resolution to scan if width > 128: - start_sequence[17] |= 0b11 << 5 # 160x296 + start_sequence[17] |= 0b11 << 5 # 160x296 elif height > 252 or width > 96: - start_sequence[17] |= 0b10 << 5 # 128x296 + start_sequence[17] |= 0b10 << 5 # 128x296 elif height > 230: - start_sequence[17] |= 0b01 << 5 # 96x252 + start_sequence[17] |= 0b01 << 5 # 96x252 else: - pass # 0b00 is 96x230 + pass # 0b00 is 96x230 super().__init__( bus, diff --git a/examples/il0373_2.9_grayscale.py b/examples/il0373_2.9_grayscale.py index d7e36e1..0bffc61 100644 --- a/examples/il0373_2.9_grayscale.py +++ b/examples/il0373_2.9_grayscale.py @@ -24,9 +24,14 @@ time.sleep(1) display = adafruit_il0373.IL0373( - display_bus, width=296, height=128, rotation=270, - black_bits_inverted=False, color_bits_inverted=False, grayscale=True, - refresh_time=1 + display_bus, + width=296, + height=128, + rotation=270, + black_bits_inverted=False, + color_bits_inverted=False, + grayscale=True, + refresh_time=1, ) g = displayio.Group()