グラフィック・ディスプレイ表示の高速化

Arduinoでグラフィック・ディスプレイを使用するで紹介したGLCD(SG12864A)の表示高速化を行いました。

高速化の手法

前回記載した手法を採用ししました。内容を再掲します。

現状描画時の書き込みは、VRAMを更新すると同時にチップへの書き込みを行っています。チップへはランダムアクセスとなるため、データーを書き込む毎にコントロールレジスタにアドレスを設定しており、その点がオーバーヘッド要因と思われます。そのため、描画の際は一旦VRAMを更新した後、一定周期毎に1ライン分のVRAMデーターをブロック転送します。ブロック転送の際は、GLCD側でアドレスを自動インクリメントしてくれるためアドレス設定のオーバーヘッドがなくなる分高速化が期待できます。

一方で、前回の処理は変更が発生した箇所のみGLCDにデーターを送っているのに対して、今回のブロック転送方式では画面全体を更新するためデーター転送量が増加し、こちらが別のオーバーヘッド要因になってしまう可能性があります。

結果は最後に示しますが、微妙なところでした。

コードの概要

WriteData()関数で、vlanに画面データーを保存すると同時にデバイスへの書き込み(青字の部分)を行っていましたが、デバイスへの書き込みを削除。

void ks0108::WriteData(uint8_t data) {
  uint8_t displayData, yOffset;

  GotoXY(this->Coord.x, this->Coord.y);

  yOffset = this->Coord.y%8;

  if(yOffset != 0) {
    // first page
    displayData = this->ReadData();
    displayData |= data << yOffset;
    if(this->Inverted)
      displayData = ~displayData;

(1/7) 次»

Arduino
2009/06/20




コメント(0)|コメントを書く

カテゴリー一覧
最近のコメント

このブログを友達に教える

コミュニティ | 有名人・芸能人ブログ | ケータイ占い | ケータイ小説 | 掲示板


画面TOP↑


powered by cocolog