Настройка дисплея 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"... в любом случае ЖК-модуль не работает.

, 👍4

Обсуждение

Может быть, вам нужно установить больше констант? Например: #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


1 ответ


Лучший ответ:

3

Прежде всего позвольте мне заявить, что модуль мне не принадлежит! Приведенный ниже анализ основан на старых исправлениях, которые работали в версии 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