LCD дисплей не отображает текст

Я работаю с Arduino и в настоящее время использую библиотеку жидких кристаллов Arduino для отображения данных на ЖК-экране (mc42004A6wk-bnmlw), который использует контроллер Hitachi HD44780. ЖК-дисплей обновлен до версии 2, и теперь он использует контроллер Sitronix ST7066U.

Судя по тому, что я прочитал, эти два контроллера совместимы, и библиотека жидких кристаллов должна работать для обоих. Я использую ту же настройку программного и аппаратного обеспечения, что и раньше, но на экране ничего не отображается.

Программное обеспечение, которое я использую, довольно сложное, поэтому для тестирования я перешел к простой программе hello world (ниже), и у меня все еще есть те же проблемы. Будем очень признательны за любые советы.

#include <LiquidCrystal.h>
#include <Arduino.h>

LiquidCrystal lcd(30, 31, 32, 33, 46, 47);

void setup() 
{

  pinMode(36,OUTPUT);

  digitalWrite(36, LOW);

  delay(5000);

  // устанавливаем количество столбцов и строк ЖК-дисплея:
  lcd.begin(20, 4);

  lcd.clear();

  // Выводим сообщение на ЖК-дисплей.
  lcd.print("hello, world!");
}

void loop() 
{

  delay(5000);
  // устанавливаем курсор в столбец 0, строку 1
  // (примечание: строка 1 — это вторая строка, поскольку отсчет начинается с 0):
  lcd.setCursor(0, 1);
  // распечатываем количество секунд с момента сброса:
  lcd.print(millis() / 1000);
}

, 👍0

Обсуждение

Контраст настраивали?, @gre_gor

Я действительно так и сделал, не повезло. Я думаю, что проблема в том, как библиотека жидких кристаллов инициализирует экран. Просто не могу определить причину., @user1649972


2 ответа


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

0

Итак, после дальнейшего изучения IDE, библиотек, диспетчера плат, оборудования и т. д. я обнаружил причину проблемы.

При первоначальном проектировании аппаратного обеспечения инженер по аппаратному обеспечению поместил конденсатор на ножку включения между ЖК-экраном и микроконтроллером. Я понятия не имею, почему, поскольку я не видел этого ни на одной электрической схеме, но удаление помогло. Плата V2 теперь работает со всем исходным кодом и библиотеками.

,

0

Попробуйте использовать этот код, я отредактировал некоторые части вашего кода, так что все должно работать.

#include <LiquidCrystal.h>

const int rs = 30, en = 31, d4 = 32, d5 = 33, d6 = 46, d7 = 47;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{

  pinMode(36, OUTPUT);
  digitalWrite(36, LOW);
  delay(5000);    //Здесь можно использовать задержку, поскольку она находится в функции setup() и запускается только один раз

  // устанавливаем количество столбцов и строк ЖК-дисплея:
  lcd.begin(20, 4);

  // Выводим сообщение на ЖК-дисплей.
  lcd.print("hello, world!");
}

void loop()
{
  // устанавливаем курсор в столбец 0, строку 1
  // (примечание: строка 1 — это вторая строка, поскольку отсчет начинается с 0):
  lcd.setCursor(0, 1);
  // распечатываем количество секунд с момента сброса:
  lcd.print(millis() / 1000);
}

Для этого эскиза Hello World избегайте использования оператора delay(); в void цикле(), поскольку его нецелесообразно использовать, если у вас есть millis(); используется.

Если вышеуказанное не работает, проверьте проводку ЖК-дисплея, многие проблемы обычно возникают из-за неправильного подключения. Также я могу посоветовать вам использовать несколько дешевых рюкзаков I2C с ЖК-дисплеем, поскольку это облегчит кодирование и позволит использовать меньше проводов и контактов на вашем Arduino. Вот пример

Если вы собираетесь использовать рюкзак с ЖК-дисплеем I2C, вот рабочий пример кода.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Устанавливаем адрес I2C ЖК-дисплея

// Создаем набор новых символов
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }

};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Включаем подсветку
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );

  //lcd.begin(16,2);
  lcd.begin(20,4); // инициализируем ЖК-дисплей

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // иди домой
  lcd.print("LCD TESTER - BY:");  
  lcd.setCursor ( 0, 1 );        // переходим на следующую строку
  lcd.print ("ABBAS (PRJCT.ME)");
  delay ( 3000 );
}

void loop()
{
   lcd.home ();
   // Делаем небольшую анимацию, записывая в то же место
   //for (int i = 0; i < 2; i++)
    for ( int i = 0; i < 4; i++ )
   {
      //for (int j = 0; j < 16; j++)
      for ( int j = 0; j < 20; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
       for ( int j = 0; j < 20; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 2 );
       for ( int j = 0; j < 20; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 3 );

   }
   delay (200);
}
,

Привет, ЭнгрАббас, большое спасибо за ответ и код. Устранение задержки принесло мне некоторый прогресс. Экран печатается неправильно, но теперь на экране печатаются случайные символы, такие как «?/?/ooo|||» и т. д. Я правда начинаю думать, что библиотека жидких кристаллов несовместима с экраном. При использовании предыдущей версии у меня не было проблем, даже при использовании задержек и милли., @user1649972

Я заметил, что контроллеры имеют разное время инициализации. Как вы думаете, это может быть причиной проблемы? Инициализация по команде — время ожидания после включения питания ST7066U = Время ожидания > 40 мс, Hitachi HD44780 = Время ожидания > 15 мс . Инициализация по команде – время ожидания после первой установки функции ST7066U = Время ожидания > 37 мкс, Hitachi HD44780 = Время ожидания > 4,1 мс, @user1649972

У меня было так много проблем с ЖК-дисплеем 20x4, который требовал большого количества линий передачи данных. Это сработало один раз, затем я выключил и снова включил его, но он не работал - вместо этого ничего не показывалось. Я проверил всю проводку и попробовал еще раз, а затем получил тот же результат, что и @user1649972, с появлением случайных символов. Я думал, что поджарил ЖК-дисплей. Я заказал версию I2C (https://amzn.to/2MAOAjL). Это намного проще. Но я все еще хотел проверить, есть ли мой оригинал. ЖК работал. Я подключил линию каждой линии данных от нового ЖК-дисплея I2C к старому, и о чудо, все заработало! Если какая-либо строка данных не равна 100%, она терпит неудачу., @raddevus