Настройка дисплея MKS 12864OLED
Я купил MKS 12864 и подключил его к своему 3D-принтеру DIY с комбинацией Mega/RAMPS. В конфигурации Марлина.файл 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 // Использует контроллер SH1106 (по умолчанию)
//#define MKS_12864OLED_SSD1306 // Использует контроллер SSD1306
Я не уверен, что выберу между "SH1106" или "SSD1306"... в любом случае ЖК-модуль не работает.
@2012User, 👍4
Обсуждение1 ответ
Лучший ответ:
Прежде всего позвольте мне заявить, что модуль мне не принадлежит! Приведенный ниже анализ основан на старых исправлениях, которые работали в версии Marlin в 2015 году и были переведены в последнюю версию Marlin ветки 1.1.x. Это 1.1.9; это последняя версия ветви 1.1.x, все новые разработки происходят в исправлении ошибок в ветви-2.0.x (датировано маем 2019 года).
Указанные исправления совместимы с более ранней версией прошивки Marlin (версия 2015 года). Очевидно, что это больше не работает, но это не должно быть проблемой, если это сработало, то должно работать и сейчас, при условии, что мы настроим его правильно. Для вашего дисплея требуется U8GLIB_SSD1306, поэтому в вашей среде разработки Arduino необходимо установить библиотеку U8GLIB!
Давайте рассмотрим это руководство по установке для более старой версии в качестве примера.
Во-первых, из исправления 1 становится ясно, что вам нужно будет определить, что вы используете дисплей, который идентифицируется по его имени/типу, вы должны раскомментировать следующую строку в своей конфигурации.h в разделе:
//============================================================================= //======================== Выбор ЖК-дисплея / Контроллера ========================= //======================== (Символьные ЖК-дисплеи) ========================= //=============================================================================
//#define MKS_12864OLED_SSD1306 // Использует контроллер SSD1306
Для:
#define MKS_12864OLED_SSD1306 // Использует контроллер SSD1306
поскольку вы используете контроллер SSD1306 в соответствии с этой ссылкой.
Это примерно единственное, что вы добавляете в файл конфигурации.h
! Вы активируете только имя типа контроллера (как при определении константы), чтобы оно было включено в другие исходные или заголовочные файлы для выполнения/запуска чего-либо.
С помощью этого изменения вы автоматически активировали остальную часть исправления, как это реализовано в Conditionals_LCD.h!
Далее нам нужно обратиться к патчу 2. Это рассматривается в ultralcd_impl_DOGM.h; здесь вы найдете:
#ВКЛЮЧЕН elif(MKS_12864OLED_SSD1306) // MKS 128x64 (SSD1306) OLED I2C ЖК-дисплей 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 // Потяните низко в течение 1 секунды, чтобы инициализировать // Поддержка ЖК-дисплея DOGM SPI #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 полос
Мы переходим к патчу 3. Этот патч касается сброса/инициализации OLED-дисплея. Об этом также уже позаботились в ultralcd_impl_DOGM.h:
#если PIN_ СУЩЕСТВУЕТ(LCD_RESET) OUT_WRITE(LCD_RESET_PIN, НИЗКИЙ); // выполнить чистый аппаратный сброс _делай_мс(5); OUT_WRITE(LCD_RESET_PIN, ВЫСОКИЙ); _delay_ms(5); // задержка для инициализации дисплея #эндиф
Рядом с патчем 4 в pins_RAMPS.h вы видите, что контакты 25 и 27 определены правильно (кроме имени LCD_PINS_RST, теперь без T, но это нормально!):
#if ENABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306)
#define LCD_PINS_DC 25 // Установить в качестве вывода при инициализации
#define LCD_PINS_RS 27 // Потяните низко в течение 1 секунды, чтобы инициализировать
Разница лишь в том, что вывода
#define LCD_PINS_D5
#define LCD_PINS_D6
не установлены в значение -1, поэтому для согласованности вам следует изменить pins_RAMPS.h на:
#если ВКЛЮЧЕНО(MKS_12864OLED) || ВКЛЮЧЕНО(MKS_12864OLED_SSD1306) #define LCD_PINS_DC 25 // Установить в качестве вывода при инициализации #define LCD_PINS_RS 27 // Потяните низко в течение 1 секунды, чтобы инициализировать // Поддержка ЖК-дисплея DOGM SPI #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 #эндиф
Вывод из приведенного выше анализа состоит в том, что вы включаете отображение в своем файле конфигурации и добавляете 2 значения -1 для D5 и D6, но я не думаю, что они вызывают проблемы, если они не инициализированы до -1. Убедитесь, что кабели подсоединены правильно. Некоторые модули сообщили о перевернутых разъемах.
Спасибо, спасибо, спасибо, это сработало. :), @2012User
@2012пользователь, добро пожаловать!, @0scar
- Шаговый двигатель нагревается через некоторое время
- Ошибка: Printer halted. kill() called!
- Проблема датчика температуры Marlin
- Как определить размеры стола в Marlin для произвольного привода / хотэнда?
- Ender 3 V2 пустой экран и жидкокристаллический непрерывный звуковой сигнал с щелчками
- Как переключить выходы двигателя и использовать E1 как X в прошивке Marlin?
- Hotend не достигает заданной температуры
- Как использовать обозначения MEGA pin number вместо номеров RAMPS pin в marlin
Может быть, вам нужно установить больше констант? Например: #define U8GLIB_SSD1306? Также разместите фотографию вашего модуля спереди и сзади, например, он точно такой же?, @0scar
если я раскомментирую и это,там будет написано: #ошибка "Пожалуйста, выберите не более одного варианта ЖК-контроллера"., @2012User
Вы знаете, что ваш модуль отличается от MKS от RepRap.org? У вас дисплей 0,96 дюйма, MKS-1,3 дюйма., @0scar
АФАИКТ, у него есть https://www.reprap.me/mks-12864-oled-0-96in.html, @Trish