Bảng giao diện nối tiếp LCD I2C không hiển thị văn bản (chân sai?)


9

Tôi có một màn hình LCD 1602 tự hoạt động tốt. Tuy nhiên, tôi muốn giải phóng một số chân bằng cách sử dụng bộ điều khiển LCD I2C / IIC mà tôi đã mua riêng.

Trong khi bộ điều khiển dường như đang giao tiếp với Arduino UNO của tôi ở đúng địa chỉ, tôi không thể nhận được văn bản để hiển thị. Theo mặc định (không có mã) có vẻ như LCD sẽ có 1 dòng gồm 16 "hình vuông" rắn. Khi sử dụng địa chỉ 27 trong mã của tôi, màn hình LCD sẽ thay đổi thành 2 dòng 16 ô vuông (xem ảnh bên dưới). Mã cũng gọi cho đèn nền nhấp nháy 3 lần, hoạt động. Tuy nhiên tôi không thể có được gì ngoài 2 dòng hình vuông. (Mã đầy đủ nằm ở cuối câu hỏi này).

Tôi đang sử dụng thư viện LiquidCstall_I2C của F Malpartida, dường như thường được sử dụng.
Có một thư viện tốt hơn tôi nên sử dụng?

Tôi tự hỏi liệu đó chỉ là các chân sai được sử dụng trong mã. Tất cả các bản phác thảo tôi thấy trực tuyến sử dụng các chân sau:

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

Nhưng tất cả 1602 LCD tôi thấy trực tuyến đều có các chân giống như của tôi, như bạn có thể thấy trong ảnh của tôi dưới đây:

Bộ điều khiển LCD I2C

Các chân này có vẻ là tiêu chuẩn:
1602 Pinout LCD

Để làm tôi bối rối hơn, các chân trên bảng LCD bắt đầu bằng 1 ở bên trái, nhưng các chân của mã mặc định dường như bắt đầu bằng 0! Vì vậy, tôi đã thử thay đổi các chân của mã thành các số trên bảng LCD. Màn hình LCD không còn thay đổi thành 2 dòng hình vuông và không còn nhấp nháy đèn nền. Sau đó, tôi đã thử trừ 1 từ mỗi pin (để bắt đầu từ 0), kết quả tương tự. Sau đó tôi đã thử sử dụng các chân mặc định trừ 1, kết quả tương tự. Do đó, các chân mặc định bằng cách nào đó đúng hơn?! Tôi đang làm gì sai?

Có ai khác nhận được một trong những bộ điều khiển I2C này để làm việc cho họ không, và nếu có thì bằng cách nào?

Mã đầy đủ:

/* 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 )-- */

Bạn có nhớ để thêm pullups?
Ignacio Vazquez-Abrams


1
Có lẽ không phải là vấn đề, nhưng bạn đã thử điều chỉnh độ tương phản bằng chiết áp chưa? Các số trong mã đề cập đến chân nào trên chip PCF8574 được kết nối với chân nào trên bảng LCD. P3 trên bảng I2C được kết nối rõ ràng với chân đèn nền trên màn hình LCD. Nhưng tôi nghĩ rằng các chân khác là sai bằng cách nào đó. Hãy thử sử dụng đồng hồ vạn năng để xem các chân P0-P7 của PCF8574 đi đến chân nào trên tiêu đề LCD.
Gerben

2
Mặc dù nó có thể không phải là vấn đề, bạn nên chú ý đến các tiêu đề pin được hàn trên màn hình LCD, từ hình ảnh chúng xuất hiện để không bao phủ hoàn toàn đồng xung quanh lỗ; Tôi sẽ cố gắng cải thiện các điểm hàn đầu tiên.
jfpoilpret

1
@Gerben, derp. Tôi đã thử nghiệm chip với đồng hồ vạn năng, tuy nhiên tôi vẫn hoàn toàn bối rối. Các chân 9-12 trên chip tương ứng với D4 - D7 trên lCD. Chân 6 = E, 5 = RW và 4 = RS. Tôi không thể tìm ra pin 7 thực sự là gì. Sử dụng các giá trị đó cho tôi không có phản hồi từ LCD nữa. Ngoài ra, tôi có nên trừ 1 từ các chân đó không? Bởi vì một lần nữa, tất cả các mã mặc định ngoài đó có pin 0 = RS. Nhưng điều đó là không thể, bởi vì pin đầu tiên trên chip là A0 (địa chỉ). Về cơ bản, việc thay đổi bất kỳ pin đơn lẻ nào sẽ giết phản ứng đèn nền hoặc ngăn hàng thứ 2 hiển thị các ký tự khối.
Bort

Câu trả lời:


3

Trước hết, có vẻ như các dây này không được kết nối đúng cách:

nhập mô tả hình ảnh ở đây

Tôi đã không tháo rời một người nhảy nữ trước đây, vì vậy đó có thể không phải là vấn đề. Tuy nhiên, dường như điều này có thể là một nguyên nhân.

Ngoài ra, bạn cần điều chỉnh độ tương phản bằng cách xoay tông đơ đó (thứ màu xanh trông giống như nó có một ốc vít trong đó). LCD sẽ không hiển thị gì, phiên bản văn bản bị xóa hoặc hộp màu xanh nếu độ tương phản không được đặt chính xác. Đây có lẽ là nguyên nhân.


Những người nhảy như vậy chỉ vì tôi di chuyển bảng cho bức ảnh. Ngoài ra tôi đã điều chỉnh tông đơ rồi và nó là khối đầy đủ hoặc không có gì cả.
Bort

3

Tôi đã mua SainSmart 20x04 và tôi cũng phải đổi địa chỉ 0x3F. Bộ nhảy đèn nền của tôi bị thiếu, tiêu đề nhỏ ở bên phải bảng I2C cung cấp năng lượng đèn nền. Một số mã tôi tìm thấy bao gồm điều này:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

Tôi có cùng một vấn đề và tôi đã khắc phục nó chỉ bằng cách thay đổi địa chỉ cho LCD 1602A, trong hướng dẫn 0x27 nhưng trong thiết bị của tôi là 0x3F.

Chúc may mắn!


Tương tự trong trường hợp của tôi, đã làm việc khi thay đổi dòng này : LiquidCrystal_I2C lcd(0x3F,16,2);. Cảm ơn rất nhiều!
Stefan

0

Theo tôi biết, các điện trở kéo lên nên được tích hợp với màn hình.

Bạn đã thử các địa chỉ khác nhau? Tôi có một cái tương tự, hoạt động trên địa chỉ 0x3F. Có lẽ điều này giúp.


Bảng đã được bán dưới dạng "địa chỉ 27" và 27 là địa chỉ duy nhất đáp ứng tất cả. Nó thực sự có thể tùy chỉnh bằng cách hàn các chân A1 A2 và A3 ngay phía trên nồi cắt tỉa nhìn thấy trong ảnh.
Bort

0

Thay đổi mã này:

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

Về điều này:

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

(Đối số trước "TÍCH CỰC" được thay đổi từ 3 thành 8)


1
Bất kỳ lời giải thích tại sao? Không có P8 trên PCF8574.
tcurdt

-1

Tôi chắc chắn liên kết này sẽ hữu ích cho bạn, tôi có cùng màn hình LCD và tôi đã làm cho nó hoạt động với I2C theo các bước trong liên kết này http://forum.arduino.cc/index.php?topic=128635.0


1
Giống như trong câu trả lời khác của bạn, hãy đăng một bản tóm tắt của hướng dẫn ở đây trong trường hợp liên kết của bạn đi 404.
LoganBlades

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

Mô-đun I2C D6-> P5 là D5-> P6 (đảo ngược).


1
Bạn có thể giải thích thêm?
Bort

2
Vui lòng chỉnh sửa bài đăng của bạn và định dạng mã bằng cách sử dụng đánh dấu định dạng mã (bốn khoảng trắng hàng đầu). Để được giúp đỡ xem Markdown giúp đỡ . Bạn sẽ có thể làm điều này bằng cách chọn mã và nhấn Ctrl+Kđể trình duyệt của bạn làm điều này cho bạn. Câu trả lời của bạn sẽ hữu ích hơn nếu bạn đi vào chi tiết hơn.
Nick Gammon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.