From 6fc08b1a40bb2f54fd734f0a760b299ee40da231 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sun, 26 May 2024 17:16:56 +0100 Subject: [PATCH] Fix bug in gca9a01_8_bit.py. --- DRIVERS.md | 22 ++++++++++++++++++++++ drivers/gc9a01/gc9a01.py | 11 +++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/DRIVERS.md b/DRIVERS.md index ab123fa..b277e2f 100644 --- a/DRIVERS.md +++ b/DRIVERS.md @@ -823,6 +823,15 @@ Clock rates up to 100MHz are supported according to the chip datasheet section 7.3.4, but high speeds are sensitive to electrical issues such as lead lengths, PCB layout and grounding. I have run 33MHz without issue. +Two versions are provided: +* `gc9a01.py` 4-bit driver, frame buffer requires 28,800 bytes of RAM. +* `gc9a01_8_bit.py` 8-bit driver, requires 57,600 bytes. + +For use with the three GUI options the 4-bit version is normally preferred. The +8-bit version allows more colors to be displayed on any given screen. It also +offers a mode in which 8-bit greyscale full-screen bitmap images can be +displayed. Both have identical constructor args. + #### GC9A01 Constructor args: * `spi` An initialised SPI bus instance. @@ -836,6 +845,19 @@ PCB layout and grounding. I have run 33MHz without issue. * `mirror=False` If `True` a mirror-image is displayed * `init_spi=False` For shared SPI bus applications. See note below. + #### Method (8-bit version only) + + * `greyscale(gs=None)` By default the frame buffer contents are interpreted as + `rrrgggbb` color values. If `True` is passed, the contents will be treated as + 8-bit greyscale values. This mode will persist until the method is called with + `False`. Returns the current greyscale state. It is possible to superimpose + widgets on an image, but the mapping of colors onto the greyscale may yield + unexpected grey values. `WHITE` and `BLACK` work well. In + [micro-gui](https://github.com/peterhinch/micropython-micro-gui) and + [micropython-touch](https://github.com/peterhinch/micropython-touch) the + `after_open` method should be used to render the image to the framebuf and to + overlay any widgets. + #### Shared SPI bus This optional arg enables flexible options in configuring the SPI bus. The diff --git a/drivers/gc9a01/gc9a01.py b/drivers/gc9a01/gc9a01.py index dbb4b09..83f44c6 100644 --- a/drivers/gc9a01/gc9a01.py +++ b/drivers/gc9a01/gc9a01.py @@ -89,10 +89,9 @@ class GC9A01(framebuf.FrameBuffer): # Default page address start == 0 end == 0xEF (239) self._wcd(b"\x2b", int.to_bytes(height - 1, 4, "big")) # SET_PAGE ht # **** Start of opaque chip setup **** - self._wcmd(b"\xEF") # Inter register enable 2 - self._wcd(b"\xEB", b"\x14") # ? self._wcmd(b"\xFE") # Inter register enable 1 - self._wcmd(b"\xEF") # Inter register enable 2 + self._wcmd(b"\xEF") # Inter register enable 2. Sequence is necessary + # to enable access to other registers. self._wcd(b"\xEB", b"\x14") # ? self._wcd(b"\x84", b"\x40") # ? self._wcd(b"\x85", b"\xFF") # ? @@ -134,9 +133,9 @@ class GC9A01(framebuf.FrameBuffer): self._wcd(b"\x67", b"\x00\x3C\x00\x00\x00\x01\x54\x10\x32\x98") # Undoc but needed self._wcd(b"\x74", b"\x10\x85\x80\x00\x00\x4E\x00") # ? self._wcd(b"\x98", b"\x3e\x07") # ? - self._wcmd(b"\x35") # Tearing effect line on - self._wcmd(b"\x21") # Display inversion on ??? - self._wcmd(b"\x11") + # self._wcmd(b"\x35") # Tearing effect line on. This pin is unused. + self._wcmd(b"\x21") # Display inversion on + self._wcmd(b"\x11") # Sleep out sleep_ms(120) # *************************