I2C LCD Serial Interface Board tidak menampilkan teks (pin salah?)


9

Saya memiliki layar LCD 1602 yang berfungsi dengan baik sendiri. Namun saya ingin membebaskan beberapa pin dengan menggunakan I2C / IIC LCD controller yang saya beli secara terpisah.

Sementara controller tampaknya berkomunikasi dengan Arduino UNO saya di alamat yang benar, saya tidak bisa mendapatkan teks untuk ditampilkan. Secara default (tanpa kode) tampaknya LCD akan memiliki 1 baris 16 "kotak" padat. Saat menggunakan alamat 27 dalam kode saya, LCD akan berubah menjadi 2 baris 16 kotak (lihat foto di bawah). Kode juga meminta lampu latar untuk berkedip 3 kali, yang berfungsi. Namun saya tidak bisa mendapatkan apa pun kecuali 2 baris kotak. (Kode lengkap ada di bagian bawah pertanyaan ini).

Saya menggunakan perpustakaan LiquidCrystal_I2C oleh F Malpartida, yang sepertinya biasa digunakan.
Apakah ada perpustakaan yang lebih baik yang harus saya gunakan?

Saya bertanya-tanya apakah itu hanya pin yang salah yang digunakan dalam kode. Semua sketsa yang saya lihat online menggunakan pin berikut:

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

Tetapi semua 1602 LCD yang saya lihat online memiliki pin yang sama dengan milik saya, seperti yang Anda lihat di foto saya di bawah ini:

I2C LCD Controller

Pin ini tampaknya standar:
1602 Pinout LCD

Untuk lebih membingungkan saya, pin pada papan LCD mulai dengan 1 di sebelah kiri, namun pin kode default tampaknya dimulai dengan 0! Jadi saya mencoba mengubah pin kode ke angka di papan LCD. LCD tidak lagi berubah menjadi 2 baris kotak dan tidak lagi mengedipkan lampu latar. Saya kemudian mencoba mengurangi 1 dari setiap pin (mulai dari 0), hasil yang sama. Saya kemudian mencoba menggunakan pin default minus 1, hasil yang sama. Jadi pin default entah bagaimana lebih benar ?! Apa yang saya lakukan salah?

Adakah orang lain yang mendapatkan salah satu pengendali I2C ini untuk bekerja untuk mereka, dan jika demikian, bagaimana?

Kode lengkap:

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

Apakah Anda ingat untuk menambahkan pullup?
Ignacio Vazquez-Abrams


1
Mungkin bukan masalahnya, tetapi apakah Anda sudah mencoba menyesuaikan kontras menggunakan potensiometer? Angka-angka dalam kode mengacu pada pin mana pada chip PCF8574 yang terhubung ke pin mana pada papan lcd. P3 pada papan I2C jelas terhubung ke pin lampu latar pada LCD. Tapi saya pikir pin yang lain entah bagaimana salah. Coba gunakan multimeter untuk melihat ke mana pin P0-P7 dari PCF8574 pergi ke pin mana pada header lcd.
Gerben

2
Meskipun mungkin bukan masalahnya, Anda harus memperhatikan pin header yang disolder pada LCD, dari gambar yang tampaknya tidak sepenuhnya menutupi tembaga di sekitar lubang; Saya akan mencoba untuk meningkatkan poin solder ini terlebih dahulu.
jfpoilpret

1
@Gerben, derp. Saya menguji chip dengan multimeter, namun saya masih benar-benar bingung. Pin 9-12 pada chip sesuai dengan D4-D7 pada lCD. Pin 6 = E, 5 = RW, dan 4 = RS. Saya tidak tahu apa pin 7 sebenarnya. Menggunakan nilai-nilai itu tidak memberi saya respons dari LCD lagi. Juga, apakah saya harus mengurangi 1 dari pin itu? Karena sekali lagi, semua kode default di luar sana memiliki pin 0 = RS. Tapi itu tidak mungkin, karena pin pertama pada chip adalah A0 (alamat). Pada dasarnya, mengubah pin apa pun akan mematikan respons lampu latar atau menghentikan baris ke-2 dari menampilkan karakter blok.
Bort

Jawaban:


3

Pertama-tama, sepertinya kabel ini tidak terhubung dengan benar:

masukkan deskripsi gambar di sini

Saya belum pernah membongkar jumper wanita sebelumnya, jadi itu mungkin bukan masalahnya. Namun, sepertinya ini bisa menjadi penyebab.

Juga, Anda perlu menyesuaikan kontras dengan memutar pemangkas itu (benda biru yang terlihat seperti memiliki sekrup di dalamnya). LCD akan menampilkan apa-apa, versi teks yang sudah dicuci, atau kotak biru jika kontras tidak diatur dengan benar. Ini mungkin penyebabnya.


Jumper seperti itu hanya karena saya memindahkan papan untuk foto. Saya juga sudah menyesuaikan pemangkas dan itu penuh atau tidak sama sekali.
Bort

3

Saya membeli SainSmart 20x04 dan saya juga harus mengubah alamatnya 0x3F. Jumper lampu latar saya tidak ada, tajuk kecil di sebelah kanan papan I2C menyediakan daya lampu latar. Beberapa kode yang saya temukan termasuk ini:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

Saya memiliki masalah yang sama dan saya memperbaikinya hanya dengan mengubah alamat untuk LCD 1602A, yang ada di tutorial 0x27 tetapi di perangkat saya 0x3F.

Semoga berhasil!


Sama dalam kasus saya, bekerja ketika mengubah baris ini: LiquidCrystal_I2C lcd(0x3F,16,2);. Terima kasih banyak!
Stefan

0

Sejauh yang saya tahu, resistor pull-up harus terintegrasi dengan layar.

Apakah Anda mencoba alamat yang berbeda? Saya memiliki yang serupa, yang berfungsi pada alamat 0x3F. Mungkin ini bisa membantu.


Papan dijual sebagai "alamat 27", dan 27 adalah satu-satunya alamat yang merespons sama sekali. Ini sebenarnya dapat disesuaikan dengan menyolder pin A1 A2 dan A3 tepat di atas pot pemangkasan yang terlihat di foto.
Bort

0

Ubah kode ini:

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

Untuk ini:

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

(Argumen sebelum "POSITIF" diubah dari 3 ke 8)


1
Adakah penjelasan mengapa? Tidak ada P8 pada PCF8574.
tcurdt


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

Modul I2C D6-> P5 adalah D5-> P6 (terbalik).


1
Bisakah Anda menjelaskan lebih lanjut?
Bort

2
Harap edit posting Anda dan format kode menggunakan markdown pemformatan kode (empat spasi utama). Untuk bantuan, lihat bantuan Penurunan Harga . Anda harus dapat melakukan ini dengan memilih kode dan menekan Ctrl+Kagar browser Anda melakukan ini untuk Anda. Jawaban Anda akan lebih membantu jika Anda menjelaskan lebih detail.
Nick Gammon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.