I2C LCD Seri Arabirim Kartı metin göstermiyor (yanlış pimler?)


9

Kendi başına iyi çalışan bir 1602 LCD ekranım var. Ancak, ayrıca satın aldığım I2C / IIC LCD denetleyicisini kullanarak bazı pinleri serbest bırakmak istedim.

Denetleyici Arduino UNO ile doğru adreste iletişim kuruyor gibi görünse de, görüntülenecek metni alamıyorum. Varsayılan olarak (kod yok) LCD'de 1 satırda 16 katı "kare" olacak gibi görünüyor. Kodumda 27 adresi kullanıldığında, LCD 16 satırlık 2 satıra dönüşecektir (aşağıdaki fotoğrafa bakın). Kod ayrıca arka ışığın 3 kez yanıp sönmesini gerektirir, bu da çalışır. Ancak 2 satır kareden başka bir şey alamıyorum. (Tam kod bu sorunun altındadır).

Yaygın olarak kullanılan F Malpartida tarafından LiquidCrystal_I2C kütüphanesini kullanıyorum .
Kullanmam gereken daha iyi bir kütüphane var mı?

Kodda sadece yanlış pimlerin kullanılıp kullanılmadığını merak ediyorum. Çevrimiçi gördüğüm tüm çizimler aşağıdaki pinleri kullanır:

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

Ancak çevrimiçi gördüğüm 1602 LCD'nin tamamı, aşağıdaki fotoğrafımda gördüğünüz gibi benimkiyle aynı iğnelere sahip:

I2C LCD Denetleyici

Bu pimler standart gibi görünüyor:
1602 LCD Çıkışı

Beni daha da karıştırmak için, LCD kartındaki pimler solda 1 ile başlar, ancak varsayılan kodun pimleri 0 ile başlar! Bu yüzden kodun pinlerini LCD kartındaki numaralara değiştirmeyi denedim. LCD artık 2 satır kareye dönüşmüyor ve arka ışığı artık yanıp sönmüyor. Daha sonra her pimden 1 çıkarmayı denedim (0'dan başlamak için), aynı sonuç. Daha sonra varsayılan pimleri eksi 1, aynı sonucu kullandım. Böylece varsayılan pimler bir şekilde daha doğru mu ?! Neyi yanlış yapıyorum?

Bu I2C denetleyicilerinden biri onlar için çalışmaya başladı ve eğer öyleyse, nasıl?

Tam kod:

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

Pullup'ları eklemeyi hatırladınız mı?
Ignacio Vazquez-Abrams


1
Muhtemelen sorun değil, ancak potansiyometreyi kullanarak kontrastı ayarlamayı denediniz mi? Koddaki sayılar , PCF8574 çipindeki hangi pimin lcd kartındaki hangi pime bağlı olduğunu gösterir. I2C kartındaki P3, LCD'deki arka ışık pimine açıkça bağlı. Ama diğer pimlerin bir şekilde yanlış olduğunu düşünüyorum. PCF8574'ün P0-P7 pinlerinin lcd başlığındaki pinlere nereye gittiğini görmek için bir multimetre kullanmayı deneyin.
Gerben

2
Sorun olmasa da, LCD üzerindeki lehimli pim başlıklarına dikkat etmelisiniz, resimden delik etrafındaki bakırı tamamen kaplamamış gibi görünüyorlar; Önce bu lehim noktalarını geliştirmeye çalışırdım.
jfpoilpret

1
@Gerben, derp. Çipi bir multimetre ile test ettim, ancak hala tamamen kafam karıştı. Çip üzerindeki 9-12 pimleri, lCD'deki D4-D7'ye karşılık gelir. Pin 6 = E, 5 = RW ve 4 = RS. Pin 7'nin gerçekte ne olduğunu anlayamıyorum. Bu değerleri kullanmak bana LCD'den tekrar yanıt vermiyor. Ayrıca, bu iğnelerden 1 çıkarmam gerekir mi? Çünkü yine, tüm varsayılan kodlarda pin 0 = RS var. Ama bu olamaz, çünkü çip üzerindeki ilk pim A0 (adres). Temel olarak, herhangi bir iğneyi değiştirmek arka ışık yanıtını öldürür veya 2. satırın blok karakterleri göstermesini durdurur.
Bort

Yanıtlar:


3

Her şeyden önce, bu kablolar düzgün bağlanmamış gibi görünüyor:

resim açıklamasını buraya girin

Daha önce bir dişi jumper'ı sökmedim, bu yüzden sorun olmayabilir. Ancak, bunun bir neden olabileceği düşünülmektedir.

Ayrıca, bu düzelticiyi çevirerek kontrastı ayarlamanız gerekir (biraz vida gibi görünen mavi şey). LCD'ler, kontrast doğru ayarlanmadığında hiçbir şey, metnin soluk bir sürümünü veya mavi kutuları göstermez. Muhtemelen nedeni budur.


Jumperlar sadece fotoğraf için tahtayı hareket ettirdiğim için böyle. Ayrıca düzelticiyi zaten ayarladım ve tam bloklar ya da hiçbir şey yok.
Bort

3

SainSmart 20x04'ü satın aldım ve adresi de değiştirmek zorunda kaldım 0x3F. Arka ışık atlama telim eksikti, I2C kartının sağındaki küçük başlık arka ışık gücünü sağlıyor. Bulduğum bazı kodlar şunları içeriyordu:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

Ben de aynı sorun var ve ben sadece 0x27 öğreticiler LCD ekranın 1602A adresini değiştirerek düzeltmek ama benim cihazda 0x3F olduğunu.

İyi şanslar!


Bu hattı değiştirirken benim durumumda aynı çalıştı: LiquidCrystal_I2C lcd(0x3F,16,2);. Çok teşekkürler!
Stefan

0

Bildiğim kadarıyla, çekme dirençleri ekranla entegre edilmelidir.

Farklı adresler denediniz mi? Ben 0x3F adresinde çalışan benzer bir var. Belki bu yardımcı olur.


Kart "27 adresi" olarak satıldı ve 27 yanıt veren tek adres. Aslında A1 A2 ve A3 pimlerini fotoğrafta görülen düzeltme kabının hemen üzerine lehimleyerek özelleştirilebilir.
Bort

0

Bu kodu değiştirin:

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

Buna:

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

("POZİTİF" öncesi argüman 3'ten 8'e değiştirildi)


1
Neden herhangi bir açıklama? PCF8574'te P8 yoktur.
tcurdt


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

I2C modülü D6-> P5, D5-> P6'dır (ters).


1
Biraz daha fazla açıklayabilir misin?
Bort

2
Lütfen yayınınızı düzenleyin ve kod biçimlendirme işaretini (dört önde gelen boşluk) kullanarak kodu biçimlendirin. Yardım için Markdown yardımına bakın . Bunu, kodu Ctrl+Kseçip tarayıcınızın sizin için yapmasını sağlamak için tuşuna basarak yapabilmeniz gerekir. Daha fazla ayrıntıya girerseniz cevabınız daha yararlı olacaktır.
Nick Gammon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.