ユーザ用ツール

サイト用ツール


ja-jp_guide:character_lcd

キャラクタLCDガイド

キャラクタLCDは、文字と数字を行単位で表示する表示装置です。このガイドでは、PCF8574 I²C変換モジュールを接続したHD44780互換のキャラクタLCDを、ILOGICS産業用Arduinoの内蔵Iclcd…()関数で使用する方法を説明します。ILIB.h、CLCD.h、Wire.hやLCDオブジェクトをスケッチに追加する必要はありません。

下の順序で接続を確認し、実際のLCDのI²Cアドレスと列数・行数を入力してから例を書き込んでください。アドレス0x27とサイズ20 × 4はこのページの例の値であり、すべてのLCDに共通の値ではありません。16 × 4のLCDは、3行目と4行目が内蔵関数の位置計算と合わないため、このガイドの対象外です。

1. 準備と接続

  1. Arduino IDEで始めるに従ってILOGICS Arduino SDKをインストールし、使用する製品のボードとポートを選択してください。
  2. 電源を切った状態で、製品のI²C端子とLCD変換モジュールを接続してください。端子の位置と電源出力の仕様は、使用するMPINOまたはMPAINOの製品ページで確認してください。
LCD変換モジュールに表示された信号 製品のI²C端子 確認事項
SDA SDA データ信号どうしを接続してください。
SCL SCL クロック信号どうしを接続してください。
VCCまたは+5V +5V LCD変換モジュールが5 V電源の場合にのみ接続してください。先に、使用する製品の+5V端子とモジュールの電源仕様を確認してください。
GND GND 両方のGNDを接続してください。

MPINO-16A8Rでは、+5VとGNDをPOWER端子から取ってください。この+5V出力は最大100 mAのため、バックライトを含むLCDの消費電流を先に確認してください。

下の図は、MPAINO CPUモジュールのI²C配線図からLCDの接続に必要な部分を示したものです。図と端子情報の出典はMPAINO-16A16Rの製品ページです。

MPAINO CPUモジュールのI²C端子と機器のSDA・SCL・+5V・GNDを同じ名前どうしで接続する図

MPAINO CPUモジュールのSDAはD20、SCLはD21です。MPINOの数字のピン番号はモデルによって異なるため、この値をMPINOに適用しないでください。実際の製品のSDA・SCL端子と製品ページに従ってください。I²Cの使用中は、同じSDA・SCLを外部割り込みやエンコーダ入力として同時に使用しないでください。

2. 内蔵関数

IclcdBegin(address, columns, rows)でLCDを初期化してから出力関数を使用します。addressはLCD変換モジュールの7ビットI²Cアドレス、columnsは1行の文字数、rowsは行数です。引数の許容範囲は列1~40、行1~4です。この範囲は、すべてのLCDサイズの行アドレスに対応するという意味ではありません。現在のコアでは3行目と4行目の開始アドレスが0x14・0x54に固定されているため、16 × 4のLCDの3行目と4行目には合いません。 アドレス、サイズ、装置番号が不正な場合や、必要なI²C転送に応答がない場合、IclcdBegin()はfalseを返します。

すべての関数は成否をbool値で返します。最大4台のLCDを区別するには、装置番号deviceに0~3を使用します。省略すると0になります。各装置は、先に異なるアドレスでIclcdBegin(address, columns, rows, backlight, device)を呼び出す必要があります。backlightの既定値はtrueです。

関数 機能
IclcdBegin(address, columns, rows, backlight, device) LCDのアドレス、サイズ、初期バックライト状態を設定し、接続の応答を確認します。
IclcdSetCursor(column, row, device) 次の文字を書く位置を指定します。列と行は0から始まり、設定した画面の範囲を超えるとfalseを返します。
IclcdPrint(value, ...) 文字列、文字、整数、実数を出力します。例:IclcdPrint(F(“RUN”))、IclcdPrint(12.34, 2)。
IclcdClear(device) · IclcdHome(device) IclcdClear()は画面を消去してカーソルを先頭に移動し、IclcdHome()は文字を保持したままカーソルだけを先頭に移動します。
IclcdBacklight(on, device) · IclcdDisplay(on, device) バックライトまたは画面表示をオン・オフします。
IclcdCursor(on, device) · IclcdBlink(on, device) 下線カーソルと点滅カーソルを制御します。
IclcdScrollLeft(device) · IclcdScrollRight(device) 表示を1文字分、左または右に移動します。
IclcdTextDirection(leftToRight, device) · IclcdAutoscroll(on, device) 文字の入力方向と、入力時の自動スクロールを設定します。
IclcdCreateChar(location, charmap, device) · IclcdWrite(value, device) 0~7の位置に8バイトのユーザー文字を登録し、文字コード1バイトを出力します。
IclcdCommand(command, device) HD44780のコマンドバイトを直接送信する上級者向けの機能です。

IclcdPrint()では、文字列の第2引数は装置番号です。整数の第2引数は基数(BIN、OCT、DEC、HEXまたは2~36)、実数の第2引数は小数点以下の桁数(0~10)で、この二つの形式では装置番号が第3引数になります。たとえばIclcdPrint(“SUB”, 1)は装置1に文字列を書き、IclcdPrint(255, HEX, 1)は装置1にFFを書きます。

3. 使用例:1行目と2行目に文字を表示する

I²Cアドレスが0x27で20列 × 4行のLCDの例です。実際のLCDのアドレスが異なる場合は、0x27を確認したアドレスに変更してください。他の画面サイズでは、上の行アドレスの制限とLCDの資料を先に確認してから列と行の値を変更してください。16 × 4のLCDにはこの例を使用しないでください。 Arduino IDEのファイル → 新しいスケッチにコード全体を貼り付けて保存し、検証(✓)と書き込み(→)を順に実行してください。

void setup() {
  Serial.begin(115200);
 
  // 実際のLCD変換モジュールのI²Cアドレス、列数、行数に変更してください。
  if (!IclcdBegin(0x27, 20, 4)) {  // LCDを初期化し、I²Cの応答を確認します。
    Serial.println(F("LCD connection failed"));
    return;
  }
 
  IclcdSetCursor(0, 0);       // 1行目の先頭に移動します。
  IclcdPrint(F("ILOGICS"));   // 1行目に文字を書きます。
  IclcdSetCursor(0, 1);       // 2行目の先頭に移動します。
  IclcdPrint(F("LCD READY")); // 2行目に文字を書きます。
}
 
void loop() {
}

書き込み後、1行目にILOGICS、2行目にLCD READYが表示されることを確認してください。表示されない場合は、Arduino IDEのシリアルモニタを115200 bpsで開き、LCD connection failedが出力されるか確認してください。このメッセージは、アドレス、配線、電源、I²Cの応答を確認する必要があるという意味です。IclcdBegin()のtrueはI²C転送に応答があったという意味で、文字が実際に画面に見えることまでは確認しません。

4. I²Cアドレスがわからないとき

このスケッチは、PCF8574モジュールのアドレス範囲をIclcdBegin()で試し、応答したアドレスを出力します。LCDを接続した状態で書き込み、シリアルモニタを115200 bpsで開いてください。出力されたアドレスを上の例に入力してください。Doneだけが出力された場合は応答したモジュールがないため、配線と電源を確認してください。Doneも表示されない場合は、シリアルモニタを開いたまま製品を再起動してください。

void setup() {
  Serial.begin(115200);
  delay(1000);
 
  for (uint8_t address = 0x20; address <= 0x3F; address++) {
    if (address == 0x28) address = 0x38;  // PCF8574モジュールが使わない範囲を飛ばします。
    if (IclcdBegin(address, 20, 4)) {
      Serial.print(F("Response at 0x"));
      Serial.println(address, HEX);
    }
  }
  Serial.println(F("Done"));
}
 
void loop() {
}

5. 動作しないとき

症状 確認の順序
検証時にIclcdBeginが見つからない ILOGICS Arduino SDKのインストールと、Arduino IDEで実際の製品に合ったILOGICSボードを選択しているかを確認してください。この例に別途LCDライブラリは必要ありません。
シリアルモニタにLCD connection failedと表示される 電源を切り、SDA・SCL・+5V・GNDの接続とLCDモジュールの電源仕様をもう一度確認してください。0x27は例のアドレスなので、実際のモジュールのアドレスを確認して修正してください。
初期化エラーは出ないが文字が見えない LCDのコントラスト調整、バックライトの状態、実際の列数と行数を確認してください。PCF8574変換モジュールのLCD側の接続が、この関数の対応と同じかどうかも確認してください。
IclcdSetCursor()などがfalseを返す その装置のIclcdBegin()が成功しているか、deviceが0~3か、カーソルの列と行が設定した画面の範囲内かを確認してください。
他のI²C機器と併用するとエラーになる アドレスの重複を確認してください。また、Iclcd…()の実行中に他のWire転送やI²Cスレーブのコールバックを同時に実行しないでください。

この関数は、PCF8574のP0=RS、P1=R/W、P2=Enable、P3=バックライト、P4~P7=LCD D4~D7の接続を使用します。変換モジュールの対応が異なると、I²Cアドレスが合っていても正しく表示されないことがあります。IclcdCommand()は画面の状態を直接変更するため、HD44780のコマンドを理解している場合にのみ使用してください。

関数ごとの引数と例は、上の表の関数名を選択すると確認できます。製品の端子と電源仕様は、使用するMPINOまたはMPAINOの製品ページを優先してください。

ja-jp_guide/character_lcd.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki