2014年5月25日日曜日

TFTLCD

秋月で売っている3000円TFTLCDを試してみました
ちなみに秋月には3000円TFTLCDが2種類あります
今回使ったのは単色の横400縦240のモノです
3色480x272とかSTM32F1じゃ扱えないので(少なくとも内部メモリでは)



現状
・1ピクセルのSet/Reset/Write
・8ピクセルのWrite(Mask有)
・線(1ピクセルWriteのラッパー)
・円(1ピクセルWriteのラッパー)
・文字(8ピクセルWriteのラッパー)
を実装しています

フォントはWindowsでC#を使ってバイナリに変換しています
変換時に左右に空白が数ピクセル作られるため、かなり幅の空いた文字列になってしまいます
この辺りは今後の改善点


液晶への転送の実装ですが、ちょっと効率の悪い方法を使っています
普通400x240で1ピクセル1bitの表示の場合 バッファーは12000バイトで足ります
(横400*縦240*(1ピクセルのバイト数0.125))
しかし今回は12482バイトのバッファを作りました
こうすることによりハードウェア(DMA)を使った転送が容易になります

次にハードウェアレベルですが
今回はSTM32F1のSPI2を使いました
SPIは上位ビットファーストですが、このLCDモジュールは下位ビットファーストです
幸いにしてSTM32F1のSPIは下位ビットファーストで転送を行うモードが有るため、これを利用しています
SPIは16分周で初期化しています システムは72MHzなので、SPIクロックは2.25MHzと、MAXの2MHzを超えていますが、現状では正常に動作しているようです
ちゃんとモノを作るときは32分周にして1.125MHzにするか、システムを64MHzにして2MHzにするなどの対策をするべきです

それとCOM信号ですが、今回はソフトウェアで送っています
そのため定期的に何らかのデータを送りつける必要があります
今回はフレームバッファを内蔵しているので、ソフトウェアループの中でCOMを反転した後、フレームを転送しています

本来であればタイマ割り込み等を使用してハードウェアで転送を… というのが一番いいのですが、そういう実装にするとSPIポートを選べなくなるので迷うところです


参考までにSPIのキャプチャを置いておきます

上の画像はSCSの立ち上がりから数バイト分を 下の画像は1フレーム分の転送を示しています
DMAを使用して転送しているため、非常に高速に転送できていることがわかります
(ソフトウェアで転送した場合このように綺麗にクロックが連続することはありません)

また1フレームの転送時間は44.381mSecとなっています
これは12482バイトを2.25MHzで転送する場合の理論値(44.38044msec)と同じです
DMAを使うことにより非常に高速に転送できていると言えます



0 件のコメント:

コメントを投稿