Armadillo-210は、表示装置をもっていません。 簡単な文字列を表示できれば、様々な場面で活躍が期待されます。 例えば、
- Network家電の簡易ディスプレイ
- バーコードリーダなどの入力装置からのデータを表示
- ネットワークのトラフィック情報の表示
等、挙げると限りがありません。
ここでは「LCD キャラクターディスプレイ SC1602BS」をArmadillo-210にとりつけ、動作させてみましょう。 今回使用するLCDは、「16文字×2行」の表示が行なえます。 LCDの他にボタンを取り付けることで、メニュー表示なども行なえると思います。
1. ハードを作る
SC1602BSは、以下のようなピンアサインとなっています。
|
|
データバスが8本となっていますが、SC1602BSはデータバスを4本で動かすことができるモードがあります。 今回はその機能を使用したいと思います。
Armadillo-210のパラレルポートと接続しなければならないのは、"RS,E,DB4-DB7"となります。
※ R/Wは"L"固定で使用します。
サンプルの回路図です。 この回路図では、Armadillo-210のCON9の1pinの外部出力電源からシリーズレギュレータで5Vを生成しています。
実際に作成した基板です。
※ ソフト屋さんが作成したのであまりキレイではありません。 |
2. ドライバを作る
Armadillo-210用のドライバを作成します。 今回は、Baseイメージでそのまま動作させることができるように、 デバイスノードはGPIOと同じにしておきます。
パッチです。 特に注意する箇所は無いと思います。
[PC ~]$ ls
<span class="input">atmark-dist driver_sc1602bs.patch</span>
[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 -->
<span class="input"> <*> SC1602BS LCD Character Display driver</span>
<span class="input"> < > Armadillo-210 GPIO driver</span>
※先にGPIO driverを無効にしなければ、LCD Driverは表示されません。
あとは、ビルドしてArmadillo-210のカーネルを書き換えます。
4. 動作確認
Armadillo-210を起動すると、LCDに「Hello World!」と表示されると思います。 されない場合は、回路または、カーネルコンフィグレーションを再度見直してみてください。 表示メッセージの入力は、デバイスノードにWriteするだけです。
●メッセージの表示
[armadillo ~]$ <span class="input">printf "message" > /dev/gpio</span>
●2行メッセージ例
[armadillo ~]$ <span class="input">printf "1st line\n2nd line" > /dev/gpio</span>
●メッセージのクリア
[armadillo ~]$ <span class="input">printf " " > /dev/gpio</span>
5. ドライバの仕様
今回使用したドライバについて簡単に説明します。
仕様 | 備考 | |
---|---|---|
ボタン | ボタンの入力(通常/長押し)を検出します。 割込みは使用せず、100ms間隔でポーリングしています。 |
GPIO_0:選択ボタン GPIO_1:決定ボタン カーソルがOFF状態のときは選択ボタンの通常押しは無視されます。 カーソルがONのときは選択ボタンの通常押しでカーソルが移動します。 |
WRITE | LCDに文字を出力します。 また、制御コマンドを送ることもできます。 |
制御コマンド "@C":カーソルOFF "@c":カーソルON "@A":有効行数の変更("@A3"だと有効行数を3に変更) |
READ | ボタンの入力を待ち、その状態を返します。 | 選択ボタンが長押しされた場合は"S"が。 決定ボタンが長押しされた場合は"E"が。 決定ボタンが通常押しされた場合は、カーソル行の行番号が返ります。 |
6. サンプルスクリプト
ドライバの仕様で大体使い方が理解できると思います。 色々な機能を使ったスクリプトを作ってみました。
※注意※
- バックグラウンドで実行している子プロセスを停止させる処理が、 スクリプトでは望んだようにうまくいっていません(停止させるまでに時間がかかる)。 バックグラウンドプロセスの起動/停止をする場合は、 C言語とかで作成してみてください。
2.IPアドレスを表示したり、時刻を表示したりした後、 Enterボタンを押したらメインメニューに戻るようにしています。