diff --git a/config/example-extras.cfg b/config/example-extras.cfg index 6adf0592..f4033e5c 100644 --- a/config/example-extras.cfg +++ b/config/example-extras.cfg @@ -1221,9 +1221,14 @@ #a0_pin: # The pins connected to an uc1701 type lcd. These parameters must be # provided when using an uc1701 display. -#contrast: 40 -# The contrast to set when using a uc1701 type display. The value may -# range from 0 to 63. Default is 40. +#rs_pin: +#cs_pin: +#a0_pin: +# The pins connected to an st7567 type lcd. These parameters must be +# provided when using an st7567 display. +#contrast: +# The contrast to set when using a uc1701/st7567 type displays. The value +# may range from 0 to 63. Default is 40 for uc1701 and 60 for st7567. #cs_pin: #dc_pin: #spi_bus: diff --git a/klippy/extras/display/display.py b/klippy/extras/display/display.py index ce34a6bb..c8954595 100644 --- a/klippy/extras/display/display.py +++ b/klippy/extras/display/display.py @@ -11,7 +11,8 @@ import menu LCD_chips = { 'st7920': st7920.ST7920, 'hd44780': hd44780.HD44780, - 'uc1701' : uc1701.UC1701, 'ssd1306': uc1701.SSD1306, + 'uc1701': uc1701.UC1701, 'ssd1306': uc1701.SSD1306, + 'st7567': uc1701.ST7567, } M73_TIMEOUT = 5. diff --git a/klippy/extras/display/uc1701.py b/klippy/extras/display/uc1701.py index 5870bba2..ff7d595e 100644 --- a/klippy/extras/display/uc1701.py +++ b/klippy/extras/display/uc1701.py @@ -2,6 +2,7 @@ # # Copyright (C) 2018 Kevin O'Connor # Copyright (C) 2018 Eric Callahan +# Copyright (C) 2019 Dmitry Budaev # # This file may be distributed under the terms of the GNU GPLv3 license. import logging @@ -178,6 +179,39 @@ class UC1701(DisplayBase): self.flush() logging.info("uc1701 initialized") +# The ST7567 is a "4-wire" SPI display device +class ST7567(DisplayBase): + def __init__(self, config): + DisplayBase.__init__(self, SPI4wire(config, "a0_pin")) + self.contrast = config.getint('contrast', 60, minval=0, maxval=63) + ppins = config.get_printer().lookup_object('pins') + rs_pin = config.get('rs_pin') + self.reset_pin = ppins.setup_pin('digital_out', rs_pin) + self.reset_pin.setup_start_value(start_value=1., shutdown_value=0., + is_static=False) + def init(self): + # Send init commands + init_cmds = [0xE2, # System reset + 0x40, # Set display to start at line 0 + 0xA0, # Set SEG direction + 0xC8, # Set COM Direction + 0xA2, # Set Bias = 1/9 + 0x2F, # Boost, regulator, follower on + 0xF8, # Set booster ratio + 0x00, # Booster ratio value (4x) + 0x23, # Set regulation ratio (3) + 0x81, # Set Electronic Volume + self.contrast, # Electronic Volume value + # 0xAC, # Set static indicator off + # 0x00, # NOP + 0xA6, # Disable Inverse + 0xAF] # Set display enable + self.send(init_cmds) + self.send([0xA5]) # display all + self.send([0xA4]) # normal display + self.flush() + logging.info("st7567 initialized") + # The SSD1306 supports both i2c and "4-wire" spi class SSD1306(DisplayBase): def __init__(self, config):