首先让我声明我不拥有该模块!下面的分析基于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,它们不会导致问题。确保电缆连接正确。一些模块报告了颠倒的连接器。