
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
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のときは選択ボタンの通常押しでカーソルが移動します。 |
| WRITE | LCDに文字を出力します。 また、制御コマンドを送ることもできます。 |
制御コマンド ”@C”:カーソルOFF ”@c”:カーソルON ”@A”:有効行数の変更(”@A3”だと有効行数を3に変更) |
| READ | ボタンの入力を待ち、その状態を返します。 | 選択ボタンが長押しされた場合は”S”が。 決定ボタンが長押しされた場合は”E”が。 決定ボタンが通常押しされた場合は、カーソル行の行番号が返ります。 |
6. サンプルスクリプト
ドライバの仕様で大体使い方が理解できると思います。
色々な機能を使ったスクリプトを作ってみました。
※注意※
- バックグラウンドで実行している子プロセスを停止させる処理が、
スクリプトでは望んだようにうまくいっていません(停止させるまでに時間がかかる)。
バックグラウンドプロセスの起動/停止をする場合は、
C言語とかで作成してみてください。
2.IPアドレスを表示したり、時刻を表示したりした後、
Enterボタンを押したらメインメニューに戻るようにしています。



