I2C LCD Serial Interface Board ไม่แสดงข้อความ (มีพินผิดหรือเปล่า?)


9

ฉันมีหน้าจอ LCD 1602 ที่ทำงานได้ดีในตัวของมันเอง อย่างไรก็ตามฉันต้องการทำให้บางพินฟรีโดยใช้คอนโทรลเลอร์ I2C / IIC LCD ที่ฉันซื้อแยกต่างหาก

ในขณะที่คอนโทรลเลอร์ดูเหมือนว่าจะสื่อสารกับ Arduino UNO ของฉันตามที่อยู่ที่ถูกต้อง แต่ฉันไม่สามารถรับข้อความที่จะแสดง ตามค่าเริ่มต้น (ไม่มีรหัส) ดูเหมือนว่า LCD จะมี 1 เส้น 16 "สี่เหลี่ยม" ทึบ เมื่อใช้ที่อยู่ 27 ในรหัสของฉันจอ LCD จะเปลี่ยนเป็น 16 บรรทัด 2 เส้น (ดูรูปด้านล่าง) รหัสยังต้องการให้ไฟแบ็คไลท์กะพริบ 3 ครั้งซึ่งใช้งานได้ อย่างไรก็ตามฉันไม่สามารถรับอะไรได้นอกจากสี่เหลี่ยมสองเส้น (รหัสเต็มอยู่ที่ด้านล่างของคำถามนี้)

ฉันใช้ไลบรารี่ 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 Controller

หมุดเหล่านี้ดูเหมือนจะเป็นมาตรฐาน:
1602 LCD Pinout

เพื่อสร้างความสับสนให้ฉันมากขึ้นหมุดบนแผง LCD เริ่มต้นด้วย 1 ทางซ้าย แต่หมุดของรหัสเริ่มต้นดูเหมือนจะเริ่มต้นด้วย 0! ดังนั้นฉันจึงลองเปลี่ยนพินของรหัสเป็นตัวเลขบนกระดาน LCD จอ LCD จะไม่เปลี่ยนเป็นสี่เหลี่ยมสองเส้นและไม่กะพริบแสงไฟอีกต่อไป จากนั้นฉันลองลบ 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 )-- */

คุณจำได้หรือไม่ว่าต้องเพิ่มพูลอัพ
Ignacio Vazquez-Abrams


1
อาจไม่ใช่ปัญหา แต่คุณลองปรับความเปรียบต่างโดยใช้โพเทนชิออมิเตอร์หรือไม่ หมายเลขในรหัสอ้างอิงว่าพินบนชิปPCF8574เชื่อมต่อกับพินใดบนจอแอลซีดี P3 บนบอร์ด I2C เชื่อมต่ออย่างชัดเจนกับพินแบ็คไลท์บน LCD แต่ฉันคิดว่าหมุดอื่นผิด ลองใช้มัลติมิเตอร์เพื่อดูว่าหมุด P0-P7 ของ PCF8574 ไปที่หมุดไหนบนส่วนหัวของจอแอลซีดี
Gerben

2
แม้ว่ามันอาจจะไม่เป็นปัญหา แต่คุณควรให้ความสนใจกับส่วนหัวพินบัดกรีบนจอแอลซีดีจากภาพที่ดูเหมือนจะไม่ครอบคลุมทองแดงรอบ ๆ รูอย่างสมบูรณ์ ฉันจะพยายามปรับปรุงจุดประสานเหล่านี้ก่อน
jfpoilpret

1
@ Gerben, derp ฉันทดสอบชิปด้วยมัลติมิเตอร์ แต่ฉันก็ยังสับสนอยู่ พิน 9-12 บนชิปตรงกับ D4-D7 บน lCD Pin 6 = E, 5 = RW และ 4 = RS ฉันไม่สามารถรู้ได้ว่าพิน 7 คืออะไร การใช้ค่าเหล่านั้นทำให้ฉันไม่ตอบสนองจาก LCD อีกครั้ง นอกจากนี้ฉันควรลบ 1 จากพินเหล่านั้นด้วยหรือไม่ เพราะอีกครั้งรหัสเริ่มต้นทั้งหมดที่นั่นมี pin 0 = RS แต่นั่นไม่สามารถทำได้เพราะพินแรกบนชิปคือ A0 (ที่อยู่) โดยพื้นฐานแล้วการเปลี่ยนพินใด ๆ จะเป็นการฆ่าการตอบสนองของแบ็คไลท์หรือหยุดแถวที่ 2 ไม่ให้แสดงอักขระบล็อก
Bort

คำตอบ:


3

ก่อนอื่นดูเหมือนว่าสายเหล่านี้เชื่อมต่อไม่ถูกต้อง:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่ได้ถอดจัมเปอร์หญิงออกก่อนเพื่อที่จะไม่เป็นปัญหา อย่างไรก็ตามดูเหมือนว่าอาจเป็นสาเหตุ

นอกจากนี้คุณต้องปรับความคมชัดด้วยการหมุนทริมเมอร์นั้น (สิ่งที่สีน้ำเงินที่ดูเหมือนจะมีสกรูอยู่) LCDs จะไม่แสดงอะไรเลยข้อความในรุ่นล้างออกหรือกล่องสีน้ำเงินหากตั้งค่าความคมชัดไม่ถูกต้อง นี่อาจเป็นสาเหตุ


จัมเปอร์เป็นเช่นนั้นเพียงเพราะฉันย้ายกระดานเพื่อถ่ายรูป นอกจากนี้ฉันได้ปรับที่กันจอนแล้วและมันเป็นทั้งบล็อคเต็มหรือไม่มีอะไรเลย
Bort

3

ฉันซื้อ SainSmart 20x04 0x3Fและฉันยังมีการเปลี่ยนที่อยู่ไป จัมเปอร์แบ็คไลท์ของฉันหายไปส่วนหัวเล็ก ๆ ทางด้านขวาของบอร์ด I2C ให้พลังงานแบ็คไลท์ ฉันพบรหัสบางอย่างรวมถึงสิ่งนี้:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

ฉันมีปัญหาเดียวกันและฉันแก้ไขได้โดยเพียงแค่เปลี่ยนที่อยู่สำหรับ LCD 1602A ซึ่งอยู่ในแบบฝึกหัด 0x27 แต่ในอุปกรณ์ของฉันคือ 0x3F

โชคดี!


LiquidCrystal_I2C lcd(0x3F,16,2);เดียวกันในกรณีของฉันทำงานเมื่อมีการเปลี่ยนแปลงบรรทัดนี้ ขอบคุณมาก!
สเตฟาน

0

เท่าที่ฉันรู้ตัวต้านทานแบบดึงขึ้นควรรวมเข้ากับจอแสดงผล

คุณลองใช้ที่อยู่อื่นหรือไม่ ฉันมีสิ่งที่คล้ายกันซึ่งใช้งานได้กับที่อยู่ 0x3F บางทีนี่อาจช่วยได้


กระดานขายเป็น "ที่อยู่ 27" และ 27 เป็นเพียงที่อยู่เดียวที่ตอบสนองเลย จริงๆแล้วมันสามารถปรับแต่งได้โดยการบัดกรีหมุด A1 A2 และ A3 เหนือหม้อตัดแต่งที่เห็นในภาพ
Bort

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
คำอธิบายใด ๆ ทำไม? ไม่มี P8 บน PCF8574
tcurdt

-1

ฉันแน่ใจว่าลิงค์นี้จะเป็นประโยชน์สำหรับคุณฉันมีจอแอลซีดีเดียวกันและฉันได้ทำงานกับ 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
คุณอธิบายเพิ่มเติมได้ไหม
Bort

2
โปรดแก้ไขโพสต์ของคุณและจัดรูปแบบรหัสโดยใช้การจัดรูปแบบโค้ด (สี่ช่องว่างนำหน้า) สำหรับความช่วยเหลือดูMarkdown ช่วยเหลือ คุณควรจะสามารถทำได้โดยเลือกรหัสและกดCtrl+Kเพื่อให้เบราว์เซอร์ของคุณทำสิ่งนี้เพื่อคุณ คำตอบของคุณจะเป็นประโยชน์มากขึ้นถ้าคุณเข้าไปดูรายละเอียดเพิ่มเติม
Nick Gammon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.