MKS 12864OLED 显示器设置

3D打印 马林鱼 故障排除 翻唱 全图形智能控制器
2021-05-08 00:00:39

我购买了MKS 12864OLED并通过 Mega/RAMPS 组合连接到我的 DIY 3d 打印机。在 Marlin 的 configuration.h 文件中,有这些行需要取消注释:

// MKS OLED 1.3" 128 × 64 FULL GRAPHICS CONTROLLER
// http://reprap.org/wiki/MKS_12864OLED
//
// Tiny, but very sharp OLED display
//
//#define MKS_12864OLED          // Uses the SH1106 controller (default)
//#define MKS_12864OLED_SSD1306  // Uses the SSD1306 controller

我不确定在“SH1106”或“SSD1306”之间进行选择……无论哪种方式,LCD 模块都无法正常工作。

在此处输入图片说明 在此处输入图片说明

1个回答

首先让我声明我不拥有该模块!下面的分析基于2015年在Marlin版本中工作的旧补丁,并翻译到1.1.x分支的最新版本的Marlin。这是 1.1.9;这是 1.1.x 分支的最后一个版本,所有新开发都在分支 bugfix-2.0.x(日期为 2019 年 5 月)中进行。


报告的补丁与早期版本的 Marlin 固件(2015 年的版本)兼容。显然这不再起作用,但这应该不是问题,如果它起作用了,那么它现在应该起作用,只要我们正确配置它。您拥有的显示器需要 U8GLIB_SSD1306,因此需要在您的 Arduino IDE 中安装 U8GLIB 库!

让我们以旧版本的安装指南为例。

首先,从补丁 1 开始,很明显您需要定义您正在使用由名称/类型标识的显示,您应该取消注释configuration.h部分中的以下行

//================================================ ==============================
//======================== LCD / 控制器选择 ==================== ======
//========================(基于字符的 LCD) ================== ========
//================================================ ==============================

//#define MKS_12864OLED_SSD1306 // 使用SSD1306控制器

到:

#define MKS_12864OLED_SSD1306 // 使用SSD1306控制器

当您根据此参考使用 SSD1306 控制器时

这是您在configuration.h文件中添加的唯一内容您只需激活控制器类型的名称(如定义常量),以便在其他源文件或头文件中捕获它以执行/触发某些操作。

通过此更改,您将自动激活在Conditionals_LCD.h 中实现的其余补丁

接下来,我们需要解决补丁 2。这在ultralcd_impl_DOGM.h解决在这里你会发现:

#elif 启用(MKS_12864OLED_SSD1306)
  // MKS 128x64 (SSD1306) OLED I2C LCD
  U8GLIB_SSD1306_128X64 u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0); // 8 条
  //U8GLIB_SSD1306_128X64_2X u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0); // 4条

这与补丁明显不同:

U8GLIB_SSD1306_128X64 u8g(23, 17, 16, 25); // SW SPI Com:SCK = 23,MOSI = 17,CS = 16,A0 = 25

因此它使用数字而不是常量。所以我们需要先定义这些常量。这些常量由您使用的电路板定义,更具体地说是引脚布局。

查看 RAMPS 板引脚布局

      #如果启用(MKS_12864OLED)|| 启用(MKS_12864OLED_SSD1306)
        #define LCD_PINS_DC 25 // 在初始化时设置为输出
        #define LCD_PINS_RS 27 //拉低1s初始化
        // DOGM SPI LCD 支持
        #define DOGLCD_CS 16
        #define DOGLCD_MOSI 17
        #define DOGLCD_SCK 23
        #define DOGLCD_A0 LCD_PINS_DC

您会发现引脚已正确配置为前面提到的:

U8GLIB_SSD1306_128X64 u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0);      // 8 stripes

我们继续补丁 3。这个补丁处理 OLED 显示器的重置/初始化。这也已经在ultralcd_impl_DOGM.h 中处理了

  #if PIN_EXISTS(LCD_RESET)
    OUT_WRITE(LCD_RESET_PIN,低);// 执行干净的硬件重置
    _delay_ms(5);
    OUT_WRITE(LCD_RESET_PIN,高);
    _delay_ms(5); // 延迟以允许显示初始化
  #万一

在补丁 4 旁边,在pin_RAMPS.h 中,您会看到引脚 25 和 27 已正确定义(除了名称 LCD_PINS_RS T,现在没有T,但这很好!):

  #if ENABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306)
    #define LCD_PINS_DC     25   // Set as output on init
    #define LCD_PINS_RS     27   // Pull low for 1s to init

唯一的区别是引脚

    #define LCD_PINS_D5
    #define LCD_PINS_D6

未设置为 -1,因此为了保持一致,您应该将pin_RAMPS.h更改为:

      #如果启用(MKS_12864OLED)|| 启用(MKS_12864OLED_SSD1306)
        #define LCD_PINS_DC 25 // 在初始化时设置为输出
        #define LCD_PINS_RS 27 //拉低1s初始化
        // DOGM SPI LCD 支持
        #define DOGLCD_CS 16
        #define DOGLCD_MOSI 17
        #define DOGLCD_SCK 23
        #define DOGLCD_A0 LCD_PINS_DC
        #define LCD_PINS_D5 -1
        #define LCD_PINS_D6 -1
      #别的
        #define LCD_PINS_RS 16
        #define LCD_PINS_ENABLE 17
        #define LCD_PINS_D4 23
        #define LCD_PINS_D5 25
        #define LCD_PINS_D6 27
      #万一

从上面的分析得出的结论是,您在配置文件中启用了显示,并为 D5 和 D6 添加了 -1 的 2 个值,但我认为如果它们没有初始化为 -1,它们不会导致问题。确保电缆连接正确。一些模块报告了颠倒的连接器。