Послідовна інтерфейсна плата РК-дисплея I2C не відображає текст (неправильні штифти?)


9

У мене є РК-екран 1602, який прекрасно працює сам по собі. Однак я хотів звільнити кілька шпильок за допомогою ЖК-контролера I2C / IIC, який я придбав окремо.

Хоча контролер, здається, спілкується з моєю 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

Ці шпильки здаються стандартними:
1602 РК-розвід

Щоб ще більше заплутати мене, штифти на РК-платі починаються з 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 підключений до якого контакту на платі lcd. P3 на платі I2C, очевидно, підключений до контакту підсвічування на РК-екрані. Але я думаю, що інші шпильки якось помиляються. Спробуйте скористатися мультиметром, щоб побачити, куди йдуть штифти P0-P7 PCF8574, до яких штифтів у заголовку lcd.
Гербен

2
Хоча це може і не бути проблемою, вам слід звернути увагу на паяні заголовки штифтів на РК-екрані, оскільки на малюнку вони, здається, не повністю покривають мідь навколо отвору; Я б спробував насамперед покращити ці точки пайки.
jfpoilpret

1
@Gerben, дерп. Я тестував мікросхем з мультиметром, проте я все ще повністю розгублений. Штифти 9-12 на мікросхемі відповідають D4-D7 на lCD. Контакт 6 = E, 5 = RW і 4 = RS. Я не можу зрозуміти, що насправді є шпилькою 7. Використання цих значень більше не дає відповіді з РК-екрана. Також я повинен відняти 1 з цих штифтів? Тому що знову ж таки, всі коди за замовчуванням там мають контакт 0 = RS. Але цього не може бути, тому що перший штифт на чіпі - A0 (адреса). В основному, зміна будь-якого одного штифта або призведе до вбивства відповіді підсвітки або зупинить показ 2-го ряду на символі блоку.
Борт

Відповіді:


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);

(Аргумент перед "POSITIVE" змінено з 3 на 8)


1
Будь-яке пояснення чому? На PCF8574 немає P8.
tcurdt

-1

Я впевнений, що це посилання буде корисним для вас, у мене є той же lcd, і я змусив його працювати з I2C, виконуючи кроки в цьому посиланні http://forum.arduino.cc/index.php?topic=128635.0


1
Як і у вашій іншій відповіді, розмістіть тут короткий посібник, якщо ваше посилання переходить на 404.
LoganBlades

-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.