警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

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

対象製品: Armadillo-210

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のカーネルを書き換えます。

4. 動作確認

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


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

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

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

5. ドライバの仕様

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

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

6. サンプルスクリプト

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

※注意※

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

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

カテゴリ: