2011/01/30

MVA-TFT液晶モジュールのテスト

題名の通り、aitendoで購入した液晶モジュールS95517-A035のテストを行いました。

下の写真にある通り、テストにはPSoC3テストボードを使用しています。
テストの様子。右下に見えるのがコントロールを担うPSoC3
この液晶モジュールを動かすこと自体は、aitendoで配布されているAVR用のサンプルコードをPSoC3に移植すればよいだけなので、それほど難しくありませんでした。
(と、書いていますが、Readピンの初期レベルをHにするのを忘れていたため1発では動いていません)

初期の実験では、PSoC3の8051コアを限界に近い67MHzで動かしていたにもかかわらず、1画面を描画するのに1秒程度かかってしまい、計測データの表示に使うにはちょっと遅すぎました。
単に高速なマイコンを使ってしまうのが最も簡単な解決策ですが、それほど複雑な画面表示をするわけではないのに、高性能なマイコンを使うのはもったいない、ということで、機能をある程度限定し、PSoC3のモジュールを使うことで、表示の高速化を試みました。


2色限定で高速表示を行うためのPSoC3のモジュール群。右半分は色を指定するための、左半分はデータを書き込むためのモジュール 
この液晶モジュールは、16bitの色情報を解像度の320*480回送り込むことで1画面の表示を行います。しかし、今回の目的は計器の表示パネルなので、ある背景色の上に特定の色で文字や図形を描画できれば十分で、16bitカラーをフルに使うことはないと考えられます。

そこで、上のモジュール群の右半分を使い、色情報をレジスタに書き込む値で固定してしまい、ある点を表示する場合(AND群に1入力)にはその色がポートに出力され、表示しない場合(AND群に0入力)には黒が出力されるようにしています。
(ANDを他の論理演算に置き換えれば任意の2色の切り替えができると思います)

また、このような方法をとると、点ひとつを色情報なしの1bitで表すことができるため、プログラム上では8点を1バイトに割り当てています。
そのため、1バイトの各ビット情報を順次右側に送り込む必要があるのですが、これはまさしくシフトレジスタの仕事です。
上のモジュール群の左半分では、シフトレジスタが含まれるSPIモジュールを使い、プログラムから送り込まれる1バイトの値をビットに分解し、右側のモジュールに送り込んでいます。
それと同時に、SPIモジュールのクロック出力で液晶モジュールのWriteピンも制御しているので、プログラム側が行うことは、単に表示データをROMから送り込むことだけです。
(まだ実装していませんが、ROMからSPIモジュールへのデータ転送はDMAを使ってCPUを介さずに行えるので、さらにCPUの仕事を減らすこともできます。)


このモジュール群を使うことで、1画面を表示するのにかかる時間は0.1秒以下にまで短縮することができました。これならば、データ計測やSDカード書き込みなど、表示以外の機能にも十分なリソースを割くことができます。

今後は、この液晶モジュールのサイズに合わせて、実機に搭載する計測ボードの設計を行うつもりです。