I2C LCDシリアルインターフェースボードがテキストを表示しない(ピンが間違っていますか?)


9

1602のLCD画面があり、それだけで問題なく動作します。しかし、私が別に購入したI2C / IIC LCDコントローラーを使用していくつかのピンを解放したかったのです。

コントローラーが正しいアドレスでArduino UNOと通信しているようですが、テキストを表示できません。デフォルトでは(コードなし)、LCDには16の実線の「正方形」が1行あるようです。私のコードでアドレス27を使用すると、LCDは16マスの2行に変わります(下の写真を参照)。このコードでは、バックライトを3回点滅させることもできます。しかし、私は2行の正方形以外は何も得ることができません。(完全なコードはこの質問の最後にあります)。

F MalpartidaによるLiquidCrystal_I2Cライブラリを使用していますが、これは一般的に使用されているようです。
私が使用すべきより良いライブラリはありますか?

私はそれがコードで使用されている間違ったピンであるかどうか疑問に思っています。オンラインで見るすべてのスケッチは、次のピンを使用しています。

//                    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 LCDはすべて、私の写真と同じように、私のピンと同じです。

I2C LCDコントローラー

これらのピンは標準のようです:
1602 LCDピン配列

さらに混乱を招くように、LCDボードのピンは左側の1から始まりますが、デフォルトのコードのピンは0から始まるようです!そこで、コードのピンをLCDボードの番号に変更してみました。LCDが2行の正方形に変化しなくなり、バックライトが点滅しなくなりました。次に、各ピンから1を引いて(0から開始する)、同じ結果を得ました。次に、デフォルトのピンマイナス1を使用してみましたが、同じ結果が得られました。したがって、デフォルトのピンはどういうわけかより正確ですか?何が悪いのですか?

他の誰かがこれらのI2Cコントローラーの1つをそれらのために動作させるようにしましたか?

完全なコード:

/* 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チップのどのピンが液晶ボードのどのピンに接続されているかを示しています。I2CボードのP3は明らかにLCDのバックライトピンに接続されています。しかし、他のピンはどういうわけか間違っていると思います。マルチメーターを使用して、PCF8574のP0〜P7ピンがlcdヘッダーのどのピンに接続されているかを確認します。
Gerben 2014

2
問題ではないかもしれませんが、LCDのはんだ付けされたピンヘッダーに注意を払う必要があります。写真から、穴の周りの銅を完全には覆っていないように見えます。最初にこれらのはんだ付けポイントを改善しようと思います。
jfpoilpret 2015年

1
@ Gerben、derp。マルチメーターでチップをテストしましたが、それでも完全に混乱しています。チップのピン9〜12は、ICDのD4〜D7に対応しています。ピン6 = E、5 = RW、および4 = RS。私はピン7が実際に何であるか理解できません。これらの値を使用しても、LCDから再び応答がありません。また、これらのピンから1を減算する必要がありますか?繰り返しますが、そこにあるすべてのデフォルトコードにはピン0 = RSがあります。しかし、チップの最初のピンがA0(アドレス)であるため、それは不可能です。基本的に、単一のピンを変更すると、バックライトの応答が停止するか、2行目にブロック文字が表示されなくなります。
2015年

回答:


3

まず、これらのワイヤーが正しく接続されていないようです:

ここに画像の説明を入力してください

私は以前に女性のジャンパーを分解したことがないので、それは問題ではないかもしれません。ただし、これが原因である可能性があります。

また、そのトリマーを回してコントラストを調整する必要があります(ねじが入っているように見える青いもの)。コントラストが正しく設定されていない場合、LCDには何も表示されないか、テキストが白っぽく表示されるか、青いボックスが表示されます。これが原因だと思われます。


写真のボードを移動しただけで、ジャンパーはそのようなものです。また、私はすでにトリマーを調整しました、そしてそれは完全なブロックであるか、まったくありません。
2014

3

SainSmart 20x04を購入しましたが、アドレスもに変更する必要がありました0x3F。バックライトジャンパーがありませんでした。I2Cボードの右側にある小さなヘッダーは、バックライト電源を提供します。私が見つけたいくつかのコードはこれを含んでいました:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

私はまったく同じ問題を抱えており、チュートリアル0x27にあるが、私のデバイスでは0x3FであるLCD 1602Aのアドレスを変更するだけでそれを修正します。

幸運を!


私の場合も同じで、この行を変更したときに動作しました:LiquidCrystal_I2C lcd(0x3F,16,2);。どうもありがとう!
ステファン

0

私の知る限り、プルアップ抵抗はディスプレイに統合する必要があります。

別のアドレスを試しましたか?私はアドレス0x3Fで動作する同様のものを持っています。多分これは役立ちます。


ボードは「アドレス27」として販売され、27が応答する唯一のアドレスです。写真にあるトリミングポットの真上にA1 A2およびA3ピンをはんだ付けすることで、実際にカスタマイズできます。
2014

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 2015年


-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
投稿を編集し、コードフォーマットマークダウン(4つの先行スペース)を使用してコードをフォーマットしてください。ヘルプについては、Markdownヘルプを参照してください。これを行うには、コードを選択し、を押しCtrl+Kて、ブラウザーでこれを実行する必要があります。あなたがより詳細に行った場合、あなたの答えはより役に立ちます。
Nick Gammon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.