公開日:2026/07/11
title.png

40th Season


#40-1 SPI-TFTをアップグレイド(柔)

 オリジナル16ビットCPUコアMoscoviumで使用しているSPI-TFT表示器は、ドライバチップにST7735Rを搭載して、128×160[ドット]で約26万色表示(18ビットカラー)が特長です。前回、新しくSPI-TFT表示器(ドライバチップはST7789V)を購入してアップグレイドして見ました。今回はソフトウェアの対応を進めたいと思います。

ソフトウェアの改定

 ソフトウェアに話を移すと、ST7735RとST7789Vは同シリーズのドライバチップ🏌️なので、従来のSPI-TFT(ST7735R)で作成して来たソフトウェアの小改定で対応可能なはずです。

  ST7789Vのデータシートを検索(別ウインドウが開きます)

 SPI-TFT(ST7735R)は、Blockly for Moscoviumのサポートがあります。SPI-TFT(ST7789V)に対応させるため、ランタイムライブラリを改定しました(以下リンク)。

  改定後ランタイムライブラリ:blky2mcvm_libstft.incl


 改定した内容をまとめておきます。

  改定内容:

デモプログラム

 SPI-TFT(ST7735R)をBlockly for Moscoviumへ適応した時に作成したデモプログラム(以下リンク)を使って、新しいSPI-TFT(ST7789V)を評価しようと思います。

  デモプログラム:blky_spi_tft.bxml

 ざっと見直して見たところ、SPI-TFT制御ブロック(従ってランタイムライブラリ)によって隠蔽されているので、上のプログラム自体は変更なしで使えそうです。

 ただし、SPI-TFT表示器の自動判別には対応していないため、使用するSPI-TFT表示器に従って変換オプションの設定が必要です。

  変換オプション:

 上でリンクしたプログラムは、元々SPI-TFT(ST7735R)用なので、SPI-TFT(ST7789V)を使う場合は変換オプション「@STFT_ST7789V@」を追加してからコンパイル(変換・アセンブル)してください。

高精細な実験

 以下接続表に従って、Cmod A7ボードと、SPI-TFTアダプタ、SPI-TFT(ST7789V)を接続します。

Cmod A7ボード 接続 SPI-TFTアダプタ 接続 SPI-TFT(ST7789V)
PMODコネクタ ピンヘッダ  
  ピンソケット ピンヘッダ

 Cmod A7ボードには、MSOC115TF3208など、STFT61ユニットを搭載したマイコンを書き込んでください。


 以下図は実験中の様子です。

a401_expr.jpg


 実験サンプルに従って実験を進めましょう。

  実験サンプル:【 】内はシリアルモニタからの送信データ
  【demo,0】
  OK+ demo,1
  OK+ pix(32,32)=0xffff (0x041f=orange)
  OK+ demo,2
  OK+ pix(64,64)=0xffff (0x8410=gray)
  OK+ demo,3
  OK+ pix(0x89,0xab,0xcd)=0xcd51 (0xcd51)
  OK+ chars N=10275
  OK+ demo,4
  OK+ pix(0x80,0x40,0x20)=0x2210 (0x2210)
  OK+ dots N=0x7bca
  OK+ demo,5
  OK+ pix(0x12,0x34,0x56)=0x51a2 (0x51a2)
  OK+ boxes N=82
  OK+ demo,6
  OK+ pix(0x3f,0xff,0x7f)=0x7fe7 (0x7fe7)
  OK+ lines N=1134
  OK+ demo,7
  OK+ demo,8
  OK+ demo,9
  OK: demo

 一通りデモを実行してみました。SPI-TFT(ST7789V)の画面描画状況等、概ね期待通りの動作を確認しました。

a401_stftdpi.jpg

 解像度が×4倍近く異なるので、同じフォントサイズで描画すると、上図の様な感じです。一番上の大きめな文字は、縦・横×2倍に拡大した倍角文字(16×16[ドット])です。普通の文字(8×8[ドット])は小さすぎて読み難いです。SPI-TFT(ST7789V)では倍角文字が基本でしょう。
 描画面積(ドット数)も×4倍に増加しているため、全画面消去や面積の大きな塗りつぶし矩形を描画するのには相応の時間を要しています。端的に表現すると、「遅く」なりました。

 また、「概ね期待通り」と記した通り、実は二点ほど期待と異なる動作を観測しました。以下、期待と異なる動作について報告します。

SPI-TFT(ST7789V)からのデータ読み出し

 期待と異なる一点目は、シリアルモニタに送信されてきたログの中で、SPI-TFTのグラフィックRAMからデータを読み出した以下の部分です。

  該当箇所の抜粋:
  OK+ pix(32,32)=0xffff (0x041f=orange)
  OK+ pix(64,64)=0xffff (0x8410=gray)

 丸カッコ内に期待値が表示されているのですが、読み出した値はいずれも0xffffであり、期待と異なります。

  「ああ、そう来たか……」

 何が起きているのかは、一瞬で理解できました。

 ST7789VはST7735Rと同様、SPI通信のMISO信号がMOSI信号と多重化されていて双方向信号線と言う仕様です。通信プロトコルの中で入力と出力が切り替わり、半二重通信しています。
 SPI-TFT(ST7735R)では、ちゃんと双方向信号線として機能していたので、グラフィックRAMからの読み出しができたのですが、SPI-TFT(ST7789V)では、基板上の何らかの回路によって単方向(入力専用、MOSI信号)と言う扱いになっている模様です。だから、データの読み出しができず、期待値が不一致する原因となっています。

 グラフィックRAMは、18ビットピクセル×(240×320[ドット])=172,800バイト=168.75Kバイトもの大容量なので、描画したデータを読み出せる事には大きな利点がありました。
 例えばマンデルブロ集合などを計算させて描画終了後、「グラフィックRAMからデータを読み出してセーブする」等の応用を期待していたので、筆者にとってグラフィックRAMの読み出し機能は「必須」に近い機能でした。それが使えないのは、すこぶる「痛い」です。致命的と言っても良いくらいです。

バックライトの制御コマンド

 期待と異なる二点目は、バックライトの輝度を変化させる【demo,8】コマンドが機能しなかった事です。

  // SPI-TFT (ST7789V) 初期化コマンド抜粋
  // WRCTRLD (write control display)
  datb 2,0x53,0x24,0  // バックライト制御有効
  :
  : (中略)
  :
  // ST7789V WRDISBV (write display brightness)
  ldvar r2,_stft_spi_buf
  ldbiu r1,0x51
  stb [r2],r1
  addi r2,1
  stb [r2],r0  // r0=バックライト輝度0〜255
  // spi
  ldbiu r1,2
  subi r2,1
  jal$(z)r7 _stft_send_r1_r2


 上のコードで抜けは無いと思いますが……。結果としてバックライトの輝度制御は機能しませんでした。

 ドライバチップST7789Vにはバックライト制御が機能として備わっているのですが、基板上の回路またはTFTパネルの何れかが対応していない模様です。SPI-TFT(ST7735R)と異なり、バックライト制御用の端子が引き出されていないため、SPI-TFT(ST7789V)ではバックライトの明るさを調整する事はできません。
 こちらは、それほど重要な機能では無いので、普通に「残念」と言ったところです。

デグレイドしていないか?

 気を取り直して、一旦、実験を閉じておきましょう。
 今回のアダプタボード改造は、新たにSPI-TFT(ST7789V)を使用可能にすると同時に、従来から使っていたSPI-TFT(ST7735R)でも継続使用可能な事を目標仕様としていました。

 改造によるデグレイドが起きていないかどうか、SPI-TFT(ST7735R)を装着して従来通りの動作となる事を確認しました(以下動画参照)。



※上の動画自体は過去に作成した物ですが、同等の実行結果となる事を確認しました。

 アダプタボードの改造後も、従来のSPI-TFT(ST7735R)がそのまま使用可能な事を確認できました。ソフトウェアの方も、ST7735RとST7789Vの制御コード切り替えが正常に行われた事を示しています。

 何しろ、新しいSPI-TFT(ST7789V)は解像度が約×4倍で、ドット密度も約×2倍なので、兎に角、文字が小さくて老眼には致命的です。描画面積が約×4倍に拡大した事に起因する描画速度の低下も欠点となり得るでしょう。一方、マンデルブロ集合などのグラフィック描画等の用途に於いては、高精細な事が大きな優位となります。
 つまり、SPI-TFT(ST7735R)とSPI-TFT(ST7789V)は、用途によってうまく使い分けた方が賢いという事です。アダプタボード並びに開発環境(Blockly for Moscovium)の品質劣化なく、両方に共通使用できる事が確認できたのは成果です。


 SPI-TFT表示器の解像度を一気に×4倍へアップグレイドしたつもりが、残念な事に、筆者にとって必須に近い「グラフィックRAMの読み出し機能」が使用不能なモジュールになっていることが判明し、お蔵入り確定です。


btn_arduino.png

btn_prev.png btn_next.png

home