ST7920 и u8g2 используют только часть дисплея 128x64.

Я пытаюсь использовать библиотеку u8g2 и Arduino Mega для управления ЖК-дисплеем. Адаптируя HelloWorld из примеров, включенных в библиотеку, для использования портов SPI Mega (50-52), я привел код ниже.

Это немного разочаровывающее приветствие, как на картинке ниже. Похоже, что Arduino не имеет доступа ко всем пикселям и может изменять состояния только трех блоков (верхнего с надписью «Hello V» и двух темных областей внизу).

Здесь должно быть написано

Подключено

Дисплей представляет собой 128X64ZW-10, извлеченный из 3D-принтера, который работал при подключении к материнской плате принтера. Распиновка выведена какими-то добрыми людьми здесь и здесь (перевод). Пока я переключал провода, я ненадолго увидел, как случайные символы пиньинь мигают по всему дисплею. Эти два факта, а также тот факт, что рабочие области пикселей расположены не случайным образом, заставляют меня подозревать, что это проблема проводки или кодирования, и что пиксели не мертвы.

Вот код:

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

int LCD_CLK_PIN = 52; //Часы (белые)
int LCD_RW_PIN = 50; //Чтение-Запись (синий)
int LCD_RS_PIN = 51;  //Выбор регистра (зеленый)
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, LCD_CLK_PIN, LCD_RW_PIN, LCD_RS_PIN,U8X8_PIN_NONE);

void setup(void) {

  /* U8g2 Project: SSD1306 Test Board */
  //pinMode(10, ВЫХОД);
  //pinMode(9, ВЫХОД);
  //цифровая запись(10, 0);
  //цифровая запись(9, 0);

  /* U8g2 Project: T6963 Test Board */
  //pinMode(18, ВЫХОД);
  //digitalWrite(18, 1);

  /* U8g2 Project: KS0108 Test Board */
  //pinMode(16, ВЫХОД);
  //digitalWrite(16, 0);

  /* U8g2 Project: LC7981 Test Board, connect RW to GND */
  //pinMode(17, ВЫХОД);
  //digitalWrite(17, 0);

  /* U8g2 Project: Pax Instruments Shield: Enable Backlight */
  //pinMode(6, ВЫХОД);
  //цифровая запись(6, 0);

  u8g2.begin();  
}

void loop(void) {
  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_ncenB10_tr);
    u8g2.drawStr(1,18,"Hello World!");
  } while ( u8g2.nextPage() );
  //задержка(1000);
}

Я потратил на это пару дней, но безуспешно. Есть идеи?

, 👍2


1 ответ


1

Большое спасибо за ваши фотографии.

Тест проводился на материнской плате Ender3 V1.1.3

Конфигурация PIN-кода: библиотека U8g2lib

#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

int LCD_CLK_PIN = 30; //Часы (белые)
int LCD_RW_PIN = 17; //Чтение-Запись (синий)
int LCD_RS_PIN = 28;  //Выбор регистра (зеленый)
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, LCD_CLK_PIN, LCD_RW_PIN, LCD_RS_PIN,U8X8_PIN_NONE);

Конфигурация: библиотека U8glib

#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(30, 17, 28);  // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17

Ваша программа работает правильно.

,

Добро пожаловать в Arduino Stack Exchange. В будущем, пожалуйста, публикуйте ответы на английском языке. Я перевел для вас ваш пост. Также, пожалуйста, отформатируйте свой код в будущем, выделив его и нажав Ctrl+K., @Nick Gammon