Skip to content

PWM auto-brightness for displays does not work #5476

@deshipu

Description

@deshipu

CircuitPython version

Adafruit CircuitPython 7.0.0 on 2021-09-20; Adafruit PyGamer with samd51j19

Code/REPL

import board
import displayio
import busio

_TFT_INIT = (
    b"\x01\x80\x96" # SWRESET and Delay 150ms
    b"\x11\x80\xff" # SLPOUT and Delay
    b"\xb1\x03\x01\x2C\x2D" # _FRMCTR1
    b"\xb2\x03\x01\x2C\x2D" # _FRMCTR2
    b"\xb3\x06\x01\x2C\x2D\x01\x2C\x2D" # _FRMCTR3
    b"\xb4\x01\x07" # _INVCTR line inversion
    b"\xc0\x03\xa2\x02\x84" # _PWCTR1 GVDD = 4.7V, 1.0uA
    b"\xc1\x01\xc5" # _PWCTR2 VGH=14.7V, VGL=-7.35V
    b"\xc2\x02\x0a\x00" # _PWCTR3 Opamp current small, Boost frequency
    b"\xc3\x02\x8a\x2a"
    b"\xc4\x02\x8a\xee"
    b"\xc5\x01\x0e" # _VMCTR1 VCOMH = 4V, VOML = -1.1V
    b"\x20\x00" # _INVOFF
    b"\x36\x01\xa0" # _MADCTL
    # 1 clk cycle nonoverlap, 2 cycle gate rise, 3 sycle osc equalie,
    # fix on VTL
    b"\x3a\x01\x05" # COLMOD - 16bit color
    b"\xe0\x10\x02\x1c\x07\x12\x37\x32\x29\x2d\x29\x25\x2B\x39\x00\x01\x03\x10" # _GMCTRP1 Gamma
    b"\xe1\x10\x03\x1d\x07\x06\x2E\x2C\x29\x2D\x2E\x2E\x37\x3F\x00\x00\x02\x10" # _GMCTRN1
    b"\x13\x80\x0a" # _NORON
    b"\x29\x80\x64" # _DISPON
)

displayio.release_displays()
_tft_spi = busio.SPI(clock=board.TFT_SCK, MOSI=board.TFT_MOSI)
_fourwire = displayio.FourWire(_tft_spi, command=board.TFT_DC,
                               chip_select=board.TFT_CS, reset=board.TFT_RST)
display = displayio.Display(_fourwire, _TFT_INIT, width=160, height=128,
                            rotation=0, backlight_pin=board.TFT_LITE,
                            auto_refresh=False, auto_brightness=True)

print("great success")

Behavior

Hard crash at the line

display = displayio.Display(_fourwire, _TFT_INIT, width=160, height=128,
                            rotation=0, backlight_pin=board.TFT_LITE,
                            auto_refresh=False, auto_brightness=True)

Description

This bug prevents the use of the Stage library on PyGamer and PyBadge, because on those boards I have to re-initialize the displays with the correct MADCTL for the display's physical rotation (the default initialization has wrong MADCTL and does the rotation in software in displayio, which doesn't work for Stage).

Additional information

As far as I can tell, the board becomes completely unresponsive. There is no output on the serial console, and the USB drive, while still visible, can't be interacted with.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions