SC1602BS LCDモジュールをつけよう

該当製品: Armadillo-210
| 最終更新: 2009/01/23

SC1602BS

Armadillo-210は、表示装置をもっていません。
簡単な文字列を表示できれば、様々な場面で活躍が期待されます。
例えば、

  • Network家電の簡易ディスプレイ
  • バーコードリーダなどの入力装置からのデータを表示
  • ネットワークのトラフィック情報の表示

等、挙げると限りがありません。

ここでは「LCD キャラクターディスプレイ SC1602BS」をArmadillo-210にとりつけ、動作させてみましょう。
今回使用するLCDは、「16文字×2行」の表示が行なえます。
LCDの他にボタンを取り付けることで、メニュー表示なども行なえると思います。

1. ハードを作る

SC1602BSは、以下のようなピンアサインとなっています。

Pin No Symbol Function
1 Vdd Power Supply 5V
2 Vss 0V(GND)
3 Vo for LCD Drive
4 RS Register select signal
5 R/W Data read/write select signal
6 E Enable signal
7 DB0 Data bus line
Pin No Symbol Function
8 DB1 Data bus line
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7

データバスが8本となっていますが、SC1602BSはデータバスを4本で動かすことができるモードがあります。
今回はその機能を使用したいと思います。

Armadillo-210のパラレルポートと接続しなければならないのは、”RS,E,DB4-DB7”となります。
※ R/Wは”L”固定で使用します。

サンプルの回路図です。
この回路図では、Armadillo-210のCON9の1pinの外部出力電源からシリーズレギュレータで5Vを生成しています。

実際に作成した基板です。

基板(表) 基板(裏)
※ ソフト屋さんが作成したのであまりキレイではありません。

2. ドライバを作る

Armadillo-210用のドライバを作成します。
今回は、Baseイメージでそのまま動作させることができるように、
デバイスノードはGPIOと同じにしておきます。

パッチです。
特に注意する箇所は無いと思います。


[PC ~]$ ls
atmark-dist driver_sc1602bs.patch
[PC ~]$ cd atmark-dist
[PC atmark-dist]$ patch -p1 < ../driver_sc1602bs.patch

3. カーネルイメージを作成する

ユーザーランドは、ベースイメージそのものを使うので、ここではカーネルイメージのみを作成することとします。
まずは、コンフィグレーションです。


[PC ~]$ cd atmark-dist
[PC atmark-dist]$ make menuconfig
※デフォルト設定からの差分だけ以下に記載します。
Device Driver -->
  Character devices -->
    <*> SC1602BS LCD Character Display driver

    < > Armadillo-210 GPIO driver
※先にGPIO driverを無効にしなければ、LCD Driverは表示されません。

あとは、ビルドしてArmadillo-210のカーネルを書き換えます。

5. 動作確認

Armadillo-210を起動すると、LCDに「Hello World!」と表示されると思います。
されない場合は、回路または、カーネルコンフィグレーションを再度見直してみてください。
表示メッセージの入力は、デバイスノードにWriteするだけです。


●メッセージの表示
[armadillo ~]$ printf "message" > /dev/gpio

●2行メッセージ例
[armadillo ~]$ printf "1st line\n2nd line" > /dev/gpio

●メッセージのクリア
[armadillo ~]$ printf " " > /dev/gpio

4. ドライバの仕様

今回使用したドライバについて簡単に説明します。

  仕様 備考
ボタン ボタンの入力(通常/長押し)を検出します。
割込みは使用せず、100ms間隔でポーリングしています。
GPIO_0:選択ボタン
GPIO_1:決定ボタン
カーソルがOFF状態のときは選択ボタンの通常押しは無視されます。
カーソルがONのときは選択ボタンの通常押しでカーソルが移動します。
WRITELCDに文字を出力します。
また、制御コマンドを送ることもできます。
制御コマンド
  ”@C”:カーソルOFF
  ”@c”:カーソルON
  ”@A”:有効行数の変更(”@A3”だと有効行数を3に変更)
READ ボタンの入力を待ち、その状態を返します。 選択ボタンが長押しされた場合は”S”が。
決定ボタンが長押しされた場合は”E”が。
決定ボタンが通常押しされた場合は、カーソル行の行番号が返ります。

6. サンプルスクリプト

ドライバの仕様で大体使い方が理解できると思います。
色々な機能を使ったスクリプトを作ってみました。

※注意※

  1. バックグラウンドで実行している子プロセスを停止させる処理が、
    スクリプトでは望んだようにうまくいっていません(停止させるまでに時間がかかる)。
    バックグラウンドプロセスの起動/停止をする場合は、
    C言語とかで作成してみてください。

2.IPアドレスを表示したり、時刻を表示したりした後、
Enterボタンを押したらメインメニューに戻るようにしています。

カテゴリ:
コンテンツの配信