Плата последовательного интерфейса I2C LCD не отображает текст (неправильные контакты?)


9

У меня 1602 ЖК-экран, который отлично работает сам по себе. Однако я хотел освободить некоторые контакты с помощью контроллера I2C / IIC LCD, который я купил отдельно.

Хотя контроллер, кажется, связывается с моим Arduino UNO по правильному адресу, я не могу получить текст для отображения. По умолчанию (без кода) кажется, что на ЖК-дисплее будет 1 строка из 16 сплошных «квадратов». При использовании адреса 27 в моем коде ЖК-дисплей изменится на 2 строки по 16 квадратов (см. Фото ниже). Код также призывает к подсветке 3 раза, что работает. Однако я не могу получить ничего, кроме 2 линий квадратов. (Полный код находится внизу этого вопроса).

Я использую библиотеку LiquidCrystal_I2C от F Malpartida, которая, кажется, широко используется.
Есть ли лучшая библиотека, которую я должен использовать?

Мне интересно, используются ли в коде неправильные выводы. Все эскизы, которые я вижу онлайн, используют следующие контакты:

//                    addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address

Но все 1602 ЖК-дисплея, которые я вижу в Интернете, имеют те же контакты, что и мой, как вы можете видеть на моей фотографии ниже:

I2C LCD контроллер

Эти контакты кажутся стандартными:
Распиновка 1602 LCD

Чтобы еще больше сбить меня с толку, выводы на ЖК-панели начинаются с 1 слева, а выводы кода по умолчанию, кажется, начинаются с 0! Поэтому я попытался изменить выводы кода на цифры на ЖК-дисплее. ЖК-дисплей больше не меняется на 2 строки квадратов и больше не мигает подсветкой. Затем я попытался вычесть 1 из каждого пина (чтобы начать с 0), тот же результат. Затем я попытался использовать булавки по умолчанию минус 1, тот же результат. Таким образом, булавки по умолчанию как-то правильнее ?! Что я делаю неправильно?

Кто-нибудь еще заставил один из этих контроллеров I2C работать на них, и если да, то как?

Полный код:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */

Вы помните, чтобы добавить подтягивания?
Игнасио Васкес-Абрамс


1
Вероятно, не проблема, но вы пытались отрегулировать контрастность с помощью потенциометра? Числа в коде обозначают, какой вывод микросхемы PCF8574 подключен к какому выводу на ЖК-плате. P3 на плате I2C, очевидно, подключен к выводу подсветки на ЖК-дисплее. Но я думаю, что другие контакты как-то не так. Попробуйте использовать мультиметр, чтобы увидеть, куда пины P0-P7 PCF8574 идут, к каким пинам на жк-заголовке.
Гербен

2
Хотя это может и не быть проблемой, вам следует обратить внимание на паяные разъемы на ЖК-дисплее, поскольку они выглядят не полностью покрывающими медь вокруг отверстия; Я бы попытался улучшить эти точки пайки в первую очередь.
jfpoilpret

1
@ Гербен, сумасшедший. Я тестировал чип с помощью мультиметра, но я все еще в замешательстве. Контакты 9-12 на чипе соответствуют D4-D7 на ЖК-дисплее. Контакт 6 = E, 5 = RW и 4 = RS. Я не могу понять, какой на самом деле контакт 7. Использование этих значений не дает мне ответа от ЖК-дисплея снова. Кроме того, я должен вычесть 1 из этих пинов? Потому что, опять же, все коды по умолчанию имеют вывод 0 = RS. Но этого не может быть, потому что первый контакт на чипе - это A0 (адрес). По сути, изменение любого отдельного штырька либо убьет отклик подсветки, либо остановит показ во втором ряду символов блока.
Борт

Ответы:


3

Прежде всего, похоже, что эти провода не подключены правильно:

введите описание изображения здесь

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

Кроме того, вам нужно отрегулировать контрастность, повернув этот триммер (синяя вещь, которая выглядит как будто в ней есть винт). На ЖК-дисплее ничего не будет отображаться, размытый текст или синие поля, если контрастность не установлена ​​правильно. Это, вероятно, причина.


Перемычки такие только потому, что я переместил доску для фото. Также я уже настроил триммер, и он либо полон блоков, либо вообще ничего.
Борт

3

Я купил SainSmart 20x04, и мне также пришлось сменить адрес на 0x3F. Моя перемычка подсветки отсутствовала, этот маленький заголовок справа от платы I2C обеспечивает питание подсветки. Некоторый код, который я нашел, включал это:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

У меня та же проблема, и я исправляю ее, просто изменив адрес для ЖК-дисплея 1602A, который находится в руководствах 0x27, но в моем устройстве это 0x3F.

Удачи!


То же самое в моем случае, работал при изменении данной строки: LiquidCrystal_I2C lcd(0x3F,16,2);. Большое спасибо!
Стефан

0

Насколько я знаю, подтягивающие резисторы должны быть интегрированы с дисплеем.

Вы пробовали разные адреса? У меня есть аналогичный, который работает по адресу 0x3F. Может быть, это помогает.


Доска была продана как «адрес 27», и 27 является единственным адресом, который отвечает вообще. Это на самом деле настраивается путем пайки штифтов A1 A2 и A3 чуть выше обрезки, как показано на фотографии.
Борт

0

Изменить этот код:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

К этому:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

(Аргумент перед «ПОЗИТИВНО» изменен с 3 на 8)


1
Любое объяснение почему? На PCF8574 нет P8.
tcurdt


-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

Модуль I2C D6-> P5 - это D5-> P6 (инвертированный).


1
Можете ли вы объяснить больше?
Борт

2
Пожалуйста, отредактируйте свой пост и отформатируйте код, используя разметку для форматирования кода (четыре пробела). Для получения справки см. Справку Markdown . Вы должны быть в состоянии сделать это, выбрав код и нажав, Ctrl+Kчтобы ваш браузер сделал это за вас. Ваш ответ будет более полезен, если вы углубитесь в детали.
Ник Гэммон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.