オラ、ドラゴンレーダーを作るぞ(10)

*** 10.1 画像も表示できたよ

前回の記事からさらに一ヶ月経ってしまいました。
その間何をしていたかと言いますと、来る10月31日にサービス終了してしまうBloglinesの代替サービスを作っていました。
それについてはまた後ほどアナウンスするとして、ようやくその代替サービスの開発が一段落したので、まだドラゴンレーダー作りを再開です。

前回、ようやくLCDとArduinoがつながったところまで進めていたので、もう少しLCDの使い込みをすることにします。
ここから先はソフトウェアの領域なので、ハンダゴテを握らなくて済むのが楽だー。

画像出力のサンプルコードを以前拾っていたので、それを動かしてみました。

楽勝楽勝♪
これまでのハードウェアで難儀したのが嘘のように、あっさり動作しました。

*** 10.2 描画速度が3倍に!

画像の出力は出来ましたが、何だか描画が遅いかなあ・・・
テケテケ~と表示されるのは、作った本人は楽しいものですが、人が見たら遅いと思うだろうなあ。

サンプルコードとは別のライブラリコードを見ていたところ、何だか電子工作室 – 2.4/2.8インチ QVGA液晶表示器の制御で公開されているライブラリコードのほうがすっきり書かれていることに気がつきました。

ということで、電子工作室のライブラリを頑張って移植してみました!

例えば↓これ。

変更前
void LCD_Writ_Bus(char VH,char VL)  
{  
  unsigned char i,temp,data;
  data=VH;
  for(i=0;i<8;i++)   {     temp=(data&0x01);     if(temp)       digitalWrite(i,HIGH);     else       digitalWrite(i,LOW);     data=data>>1;
  }
  digitalWrite(LCD_WR,LOW);
  digitalWrite(LCD_WR,HIGH);
  data=VL;
  for(i=0;i<8;i++)   {     temp=(data&0x01);     if(temp)       digitalWrite(i,HIGH);     else       digitalWrite(i,LOW);     data=data>>1;
  }
  digitalWrite(LCD_WR,LOW);
  digitalWrite(LCD_WR,HIGH);
}

変更後。こんなにすっきり
void LCD_Write_Bus(char VH,char VL)
{
    // 上位バイト出力
    PORTD = (VH & 0xFF);
    digitalWrite(LCD_WR,LOW);
    digitalWrite(LCD_WR,HIGH);

    // 下位バイト出力
    PORTD = (VL & 0xFF);
    digitalWrite(LCD_WR,LOW);
    digitalWrite(LCD_WR,HIGH);
}

データの出力を行うD0~D7の8ピンに対して、元のソースでは何度もdigitalWrite関数を呼び出していたのですが、新コードではPORTD(Arduinoのポート操作用のキーワード)を使ってすっきり簡潔になりました。

この変更により、ものすごく描画速度が早くなった!
これぞ8bitアクセスの醍醐味!(?)

この移植作業を行ったおかげで、Arduinoのコーディング方法がだいぶ理解できてきた~。

*** 10.3 文字も表示できた!

移植した電子工作室のライブラリには文字表示の関数も用意されていたので、それを使って文字表示できることを確認しました。

↑ちょっと見えづらいですが、カタカナや一部の漢字もきれいに表示出来ています。
ありがたや~

それと、改めてLCD(ILI9325)のリファレンスを読み直していると、縦表示と横表示の切り替えができることがわかりました。
今回作るドラゴンレーダーでは横表示の方が都合が良いので、横表示に変えてみました。

変更したのはLCD_Init関数の中の下記の箇所です。

LCD_Out(0x0003, 0x1028); → LCD_Out(0x0003, 0x1018);

リファレンスに詳しく(英語で)書かれていますので、必要な方はリファレンスのp.55~56(8.2.5. LCD Driving Wave Control (R02h)をご参照ください。

*** 10.4 ケース発見!

そして、今日一番の出来事ですが、ドラゴンレーダーを収めるのにぴったりなケースをGeogesで見つけてしまいました!

ドラゴンレーダー用のケース。本当は写真入れです。
ドラゴンレーダー用のケース。本当は写真入れです。

以前から「惜しい」ケースをGeogesで見つけていたのですが、こんなにぴったりのが売られているなんて・・・・
写真ケースにはむしろ微妙なデザインですが(おい)、ドラゴンレーダーを収めるには本当にサイズぴったりで、見つけたときは自分のために作ってくれたとしか思えませんでした。
ありがとうGeoges!!

周りがチャックになっていて、ぱかっと開く。しかも中はふわふわ。
周りがチャックになっていて、ぱかっと開く。しかも中はふわふわ。
丸い穴部分が少し大きいので、ボール紙でマスキング。改良の余地あり。
丸い穴部分が少し大きいので、ボール紙でマスキング。改良の余地あり。
後ろにも窓が付いていて、これがなんとILI9325と超ぴったり!もはやILI9325のために作ったとしか思えない。
後ろにも窓が付いていて、これがなんとILI9325と超ぴったり!もはやILI9325のために作ったとしか思えない。

今は配線をブレッドボードで行っているのでごちゃごちゃしていますが、ユニバーサル基盤できれいに作り直したら早速はめてみます。
楽しみだ~

*** 10.5 本日までの報告書

本日版の最終ソースです
移植した電子工作室のライブラリも含まれていますので、良かったら使ってください。

あと、PORTDを使うために少し配線も見直しました。

|~LCD側|~Arduino側|
|DB10|D0|
|DB11|D1|
|DB12|D2|
|DB13|D3|
|DB14|D4|
|DB15|D5|
|DB16|D6|
|DB17|D7|
|RS|D8|
|WR|D9|
|CS|D10|
|RESET|D11|
|LEDA、VCC(3箇所)、RD|3V3|
|DB0~DB7、LEDK1~LEDK4、GND(2箇所)|GND(1kΩの抵抗を一つ入れて)|


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です