● 実験テーマ133

「aitendo_TFT2P0327表示実験-その1」
(MachiKania type M Boardにてaitendoの、1.77inch color LCD「TFT2P0327-E」の表示実験をしてみました。)

■ 2022.7.8
  ・MachiKania type M Boardにてaitendoの、1.77inch color LCD「TFT2P0327-E」の表示実験を計画した。
   KEN KENさんの、tuitterを見てたら、これの実験をしている記事を発見。
   コードは、githubに公開されている。

  ・aitendoの、当該製品ページにも、avr系のCで書かれたdemo_codeが公開されていた。
   少し整理がてら眺めたが、今回は、KEN KENさんの「KM-BASIC」を参照することにした。

  ・ハード的には、バックライト駆動で色々と問題がありそうなのだが、以下でよさそうである。
    @ LCD-39pin:LEDA2はオープン
    A バックライト電圧:Vbak= 6〜 7V必要なので、Vbak= 6.5Vにする。
       これは以前、OLEDの実験で使った秋月販売の「AE-LMR62421」を使用。入力は、5Vに接続。
       現在、16.00V出力になっているので、ポテンショにて、6.5Vにアジャストする。
       またバックライトLEDの電流制限抵抗:Rの値は、Vf= 3.2V, IF= 30mAより、R= (6.5-3.2)/0.03= 110Ω
       なので手持ちの、100Ωにしてみる。
       LCD-40pin:LEDA2側に、電流制限抵抗= 100Ωを接続し、LCD-38pin:LEDK側 をGNDに落とす。
       (これについては、最初の考えで、後日LEDはシリアル接続ということが判明し、10Ωに変更している。)

  ・TFT2P0327-Eのキャリー基板をどうするか思案中。


■ 2022.7.11
  ・昨日、aitendoのhpを閲覧していたらtopページ「新着・再入荷」に特価品の「液晶withキャリー基板 [IFB-TFT2P0327ES]」
   追加されていることを知る。液晶付きで、税込み:385円は格安。
   早速手配した。

  ・以前作成したバックライト電源治具には、バックライトon/off回路も搭載されているので、スライドswでon/offできるように
   改造して、出力電圧を、16.00Vから、6.5Vに出来るかの実験をしてみた。
   未だ負荷試験してないが、無負荷にて、ポテンショで、6.5Vにすることが出来た。


■ 2022.7.12
  ・aitendoから液晶+キャリー基板キットが届いた。


■ 2022.7.13
  ・久々に「MachiKania type M Board」を起動してみる。 
   現在「XEVIOUS.hex」がフラッシュメモリーに書込まれているので、普通に、P_ONすると
   XEVIOUSのオープニング画面が液晶に表示される。
   他のプログラムをロードするには、端末(キーボードと、ディスプレイ)を接続する必要がある。(液晶は実装したまま) 
   この状態から、ブートローダ画面を表示するには、MachiKania本体の6個のボタンのどれかを押しながら電源オンする。 
   → 液晶は白い画面になり、ディスプレイには「ブート画面」(プログラム選択画面)が表示された。OK

  ・この画面からのHEXファイルのロードは、基板上の方向キーを押して希望のHEXを選択し、[FIRE]ボタンを押すとまず、
   ディスプレイ表示が消える。
   ここからが注意が必要で、液晶にオープニング画面が表示されるまで約15秒待つ必要がある。
   最初これが分からなく何故白いまま表示しないんだろうと考えこんでしまった。
   後注意としては、液晶を挿入実装する時だが、下にある、PIC32MXとのクリアランスが十分でないので
   特に、UL024TFを挿入する時は、最後まで押し込まない方がベター。

  ・BASICプログラムのロードと実行は以下の手順
   @ MachiKania type M上の4方向ボタンを使って「MACHIKAM」を選択する。
   A FIREボタンを押すと、BASICシステムのPICマイコンへの書き込みが開始される。
      書き込み中は画面表示が停止されるが、数秒後に表示再開し、MachiKania type MのBASICシステムが起動する。
   B [F1]キーを押すと、BASプログラムリストが表示されるので選択([ENTER])してエディタ起動し、[F4]キーを押すとRUNする。


■ 2022.7.14
  ・これで「MachiKania type M Board」の使い方を思い起こせたので、今日は、KEN KENさん作成のgithubに公開されている
   以下の2つのBASICコード:RAYTRSPI.bas, SPILCD.basを、SDカードにロードし、現在SDカードに格納されているMachiKaniaのBASICシステム:KM-1300
   (MACHIKAM.HEX・2018年12月ロード)で実行可能か調査してみる。

  → 以前ダウンロードした「KM-1300.pdf」(マニュアル:2018年8月公開版)を開いて、インストラクションの一覧を見てみた。
     ハード制御に関する命令文は以下

    <入出力命令・関数>
     @ ANALOG(x):
        PORTBの下位からxビット目のアナログ入力値(10ビット値;0-1023の値)を返す。
        但し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。
     A IN(x):
        PORTBの下位からxビット目の入力値(1ビット値;1か0)を返す。但し、x=16, 17,18の場合は、PORTE5, 6, 7がそれぞれ指定される。
     B IN8H():
        ORTBの上位8ビットの入力値(8ビット値)を返す。
     C IN8L():
        PORTBの下位8ビットの入力値(8ビット値)を返す。
     D IN16():
        PORTBの入力値(16ビット値)を返す。
     E PWM x[,y[,z]]:
        PWM出力を行なう。z=1の場合PORTD10に、z=2の場合PORTD11に出力される。zを省略した場合は、PORTD10。
        xにはデューティー比を、0-1000の値で指定する。yはパルスの周波数を、Hzで指定する(省略した場合は、1000;有効値は6-95454)。
     F SERIAL x[,y[,z]]:
        シリアル通信を開始する。xにはボーレートを指定する(シリアル通信の使用を終了する場合は、x=0を指定)。
        y=0の場合パリティ無し、
        y=1の場合偶数パリティ、
        y=2の場合奇数パリティ、
        y=3の場合9ビットパリティ無し。yを省略した場合は、y=0と同じ。
        zには受信バッファーの文字数を指定する。zを省略した場合、1/60秒の連続受信が保証される大きさのバッファーを確保する。
     G SERIALIN([x]):
        シリアル通信で、一文字受信する。受信が無い場合は、-1を返す。
        x=1を指定すると、受信バッファーの文字数を返す。
        パリティ有り8ビットの受信の場合は、パリティエラーが起きた場合、0x100以上の値を返す。
     ➈ SERIALOUT x:
        シリアル通信で、一文字送信する。
     I OUT x,y:
        PORTBの下位からxビット目に、yで示された値(1ビット値;1か0)を出力する。
        但し、x=16, 17, 18の場合は、PORTE5, 6, 7がそれぞれ指定される。PORTE5, 6, 7は、オープンドレイン出力であることに注意。
     J OUT8H x:
        PORTBの上位8ビットに、xで示された値(8ビット値)を出力する。
     K OUT8L x:
        PORTBの下位8ビットに、xで示された値(8ビット値)を出力する。
     L OUT16 x:
        PORTBに、xで示された値(16ビット値)を出力する。

  → ※ 入出力文と、RS232C通信文・PWM制御文は用意されているが、今回のシリアル通信である「SPI通信」はサポートされてない。
       従って、KM-1300でなく、KM-130xにバージョンアップする必要がある。

  ・現在のKEN KEN HPにアップされている「KM-1300.pdf」をダウンロードしてみた。
   最後のページに「バージョン履歴」が掲載されていた。
   <バージョン履歴>
    ・KM-1303 2019年5月公開。
     ・タイマー機能(USETIMER,TIMER, CORETIMERステートメントとTIMER(), CORETIMER()関数)を追加。
     ・割り込み機能(INTERRUPTステートメント)を追加。
     ・オプション機能(OPTIONステートメント)を追加。
     ・アイドル機能(IDLEステートメント)を追加。
     ・READKEY()関数を追加。
     ・EXEC()関数を追加。
     ・変数名などで、英数字に加えてアンダースコアーが使用可能に。
     ・PRINTでカンマを使った時の表示不具合を修正。

    ・KM-1302 2019年3月公開。
     ・オブジェクト指向プログラミングに対応
     ・args(0)で引数の数を取得できるようにした
     ・POKE16, POKE32, PEEK16(), PEEK32()を追加
     ・&演算子を追加
     ・GETDIR$()関数とSETDIRステートメントを追加

    ・KM-1301 2018年12月公開。
     ・I2C機能を搭載
     ・SPI機能を搭載
     ・PUTBMPの第5引数に長い名前の変数が使えなかったバグの修正

    ・KM-1300 2018年8月公開。

  → ※ 最新の、KM-1303に更新しないと駄目そう。

  ・最新のダウンロードファイル:machikania-m.zip(2020.3.29)をダウンロードして解凍すると以下のファイルが展開される。
    @ bootloader.hex:ブートローダ本体。PICkit3等を用いてPICマイコンに書き込む
    A MACHIKAM.HEX:MachiKania type M BASICシステム。SDカードに入れてブートローダから書き込みと実行
    B MACHIKAM.INI:MachiKania type M BASICシステムの設定ファイル
    C その他ファイル:「.BAS」ファイルはBASICサンプルプログラム。
      「.HEX」ファイルはブートローダで起動可能な実行ファイル(C言語で作成したサンプルゲームなど)

   ※ 動作に必要なファイルとサンプルファイル一式(bootloader.hex以外はSDカードにコピーする)
   → Cはコピーする必要ないと思われる。現状格納されているファイルでok。AとBのみコピーで良さそう。
      更新前のシステムファイルの容量
       ・MACHIKAM.HEX:634kB
       ・MACHIKAM.INI:1kB

      更新後のシステムファイルの容量
       ・MACHIKAM.HEX:722kB
       ・MACHIKAM.INI:1kB

   ※ システムバージョンアップの適用方法
      @ 上記から展開したMACHIKAM.HEXをSDカードのルートディレクトリに上書きコピー
      A SDカードをMachiKania type Mに挿し、本体上のいずれかのボタンを押しながら電源を入れる
      B ブートローダが起動するので、MACHIKAMを選択してFIREボタンを押す

   → 適用したので、KM-1303になったか起動画面にて確認した。OK



   ※ bootloader.hexだが「bootloader.hexをRaspberry Pi + pickleでも書き込みできるように修正しました。」
      というコメントがあった。
         PicKit3で書込むのでこれは無視(今迄のそれを使う)してよさそう。

      ※ ↑- これらの条件で、BASICシステムのバージョンアップ:KM-1300→ KM-1303が無事済んだ。
            また、SDカードに今回の表示実験で使う.BASファイル2個をコピーした。
            @ RAYTRSPI.bas:レイトレーシング(光線追跡法)3D描画テスト
            A SPILCD.bas :円描画テスト


■ 2022.7.15
  ・既に届いているaitendoの、液晶withキャリー基板 [IFB-TFT2P0327ES]キットを組立てた。
   ネックの、0.5mm pitch FFCコネクタの半田付けも何とか無事に済んだ。(・・・とこの時は思ったが・・・)


■ 2022.7.16
  ・
動作チェックの為に、各ユニットを接続する、cable assyを作成した。



  ・<動作チェック開始>
    (1) バックライトの単体チェック
      @ LEDA1pinに、6.5Vを供給し、LEDKpinは、GNDに落とす。
        あらかじめ無負荷時、Vbak= 6.5Vにアジャストしてある。
        負荷(LCD)を接続すると、Vbak= 6.0Vにダウンし、LCDのバックライトは、やや暗めに点灯した。
      A この状態で、6.5Vにアジャスト。適度に明るくなった。OK
        ちなみに電流制限抵抗の両端電圧= 0.25Vなので、IF= 25mA(データシートのテスト条件では30mA)でOK
        このことから、シリーズ接続されているLEDの、VF= 6.5 - 0.25= 6.25V(データシートでは1個の、VF=3.2V)でOK 



    (2) 電源関係のショートチェック
      @ +5V ⇔ GND:OK
        +3.3V ⇔ GND:OK
        +6.5V ⇔ GND:OK

    (3) MachiKania type M Boardと各治具を接続し表示テスト開始
      @ まず「SPILCD.BAS」:円描画テストをロードしてRUNさせたが「compaile done hit any key」とはなるものの
        その後もバックライトが白く光っているだけ。
        本来なら、プログラム頭で液晶の初期化+表示クリアを実行しているので、画面が黒くなって、それから
        円描画になるはずだが・・・
      A 治具とのコネクタ類の配線を目視確認するが問題無し。
        ・ MachiKania-P11-5:SCLK → キャリー基板-CN-7:WR OK
        ・ MachiKania-P11-7:MOSI → キャリー基板-CN-6:SDI OK
        ・ MachiKania-P11-8:CS/ → キャリー基板-CN-8:CS OK
        ・ MachiKania-P11-10:RST/ → キャリー基板-CN-5:RST OK
      B RSTピンが起動時、Hiになっているかテスターで確認 → OK
        他ピンはテスターでは確認出来ないので後回し。
      C キャリー基板の、FFCコネクタとLCDからのFFCケーブル接栓との勘合状態を確認
        一度外して見たが、LCDからのFFCケーブル接栓が半田付けの際のフラックスで一部薄っすら汚れていたので
        接点復活剤でクリーニングして再勘合し試すが症状変わらず。
      D キャリー基板上の、FFCコネクタの実装状態(半田付け状態)を拡大鏡で拡大し目視チェックしたところ
        1pin:GNDと、5pin:RSが、padから若干浮いているようだったので、半田を持って補正したが
        症状変わらず。(他ピンの半田付け状態は良さそうなので、そのまま)
        尚、テスターにて導通確認もしてみたが、padのところまでは導通があるのだが、pinの所では
        導通が無い感触。細ピンのプローブでpinを触っているのだが、接触が良くないのか・・・
        明日、テスターの導通テストではなくrunさせた状態でオシロで確認してみる予定。

       ※ 5pin:RSは、gndに落としてある。ここはテスターで電圧確認すれば判断出来る。これも明日試してみる。
          このpinは、hi or lo固定にすると、バスモードでなくspiモードになる設定ピンなので重要。

    <KM-1303:SPI関連インストラクション・メモ>
     SPI x[,y[,z1[,z2]]]
     SPI利用をマスターモードで開始する。xは、クロック数をkHz単位で指定(有効値は、93-47727)。
     yは、1ワードのビット数を8/16/32で指定(省略した場合は、8)。
     z1は、SPIクロックの取り扱い方を指定(省略した場合は、0)。詳細は、下記に。
     z2は、CSラインにどのポートを使用するかを指定する。省略した場合は、0x39(PORTD9)。他のポートを使う場合、
     例えばPORTB5なら0x15、PORTB3なら0x13とする。
     z1=0:アイドル時にL、データー変更はLに変化する時(CKP=0,CKE=1)
     z1=1:アイドル時にL、データー変更はHに変化する時(CKP=0,CKE=0)
     z1=2:アイドル時にH、データー変更はHに変化する時(CKP=1,CKE=1)
     z1=3:アイドル時にH、データー変更はLに変化する時(CKP=1,CKE=0)

     SPIWRITE x[,y[,z[, ... ]]
     SPI固定長送信を行なう。x, y, z等は送信コード。

     SPIREAD([x[,y[,z[, ... ]]])
     SPI固定長送信(オプション)の後、1ワードの受信を行ない、返す。x,y,z等は、受信前に送信するコード。

     SPIWRITEDATA x,y[,z1[,z2[,z3...]]]
     SPI複数ワード送信を行なう。xは送信する内容を含むバッファーへのポインター。
     yはバッファーのワード数。
     z1,z2,z3等はオプションの送信コードで、これらがまず送信され、続けてバッファーxの内容がyワードに渡って送信される。

     SPIREADDATA x,y[,z1[,z2[,z3...]]]
     SPI複数ワード受信を行なう。xは受信する内容を格納するバッファーへのポインター。
     yは受信するワード数。z1,z2,z3等はオプションの送信コードで、これらがまず送信され、続けてyワードのデーターを受信してバッファーxに格納する。

     SPISWAPDATA x,y[,z1[,z2[,z3...]]]
     SPI複数ワード送受信を行なう。
     xは送受信する内容を格納するバッファーへのポインター。
     yは送受信するワード数。z1,z2,z3等はオプションの送信コードで、これらがまず送信される。
     続けて、バッファーxの内容を送信した後にデーターを受信してバッファーxに格納しなおす動作を、yワードに渡って繰り返す。


■ 2022.7.17
  ・相変わらずRUNさせても液晶が白いまま。
   まずはキャリーボードのピンヘッダの所までSPIの4信号が来ているか自作ロジアナで確認した。
   オリジナルソースは転送速度=8MHzとなっていて自作ロジアナでは追従しないので、
   100kHzまで落として(SPI 8000→ SPI 100に一時的に変更)RUN
   この状態で、4信号(RESET/・CS/・SCLK・SDI)のタイミングを確認→ 良さそうである。ここまでは正常。



  ・次に液晶のFFCコネクタピン(フレキ接栓部)に、4線SPI信号が来ているか自作ロジックアナライザで確認した。
   ただこの箇所は狭いのでプローブを繋ぐのが困難なので、自作の細ピンプローブを持って触るしかない。
   片手が塞がってしまうので、ソースを変更して、円描画の所を繰返すようにした。
   この時は、トリガ信号1CH:CS/として、2CH:SCLK・3CH:SDIの3チャンネルで確認した。→ これも正常だった。
   しかし液晶は白いまま。


■ 2022.7.18
  ・レベル固定しているピンを目視及び、テスターにてチェックしてたら、
   5pin:RS(GND固定:SPI MODE)がPADからやや浮き気味であることを発見。
   ここを半田修正したいのだが・・・
   なにせ今回のこのFFCコネクタピンの半田付け状態は目視で見ても付いている様にしか見えない。
   特にGNDに固定しているピンはGNDベタの広い島に接続されているために熱が伝わりにくい。
   普通の小手先しか無いのでそれで複数ピンをスライドさせながら半田付けしたが厳しそうである。
   そこで、昔の先が細々と、くたびれた小手先があったので、それをナイフ状の小手先にヤスリで整形して、それで前記のRSpinを修正した。



   しかしここを修正半田するも症状変わらず。

  ・こうなったら他のレベル固定しているピンもテスターで導通チェックしてみた。
   以下が接触不良pinと発覚
  → 1pin:GND:7pin:RD・ 9pin:DOTCLK・ 10pin:HS・ 11pin:VS(ここまでGND固定)・ 34pin:IM2(VCC固定)
     これじゃ、SPI MODEになってないので動かないのはあたりまえ。


■ 2022.7.19
  ・昨日の接触不良ピンの半田付けを修正した。
   修正後、テスターによる導通チェックもOK。
   下写真では、2pin:VCI, 3pin:VDD3が半田ブリッジしているように見えますが、これはパターンが
   そう出来ているだけでブリッジではありません。(
2pin:VCI, 3pin:VDD3は共に、VCC接続)



   この状態で再び表示テスト。
   やっとのことで以下2つの描画テストプログラムが動き、表示した。
    @ SPILCD.bas :円描画テスト
    A RAYTRSPI.bas:レイトレーシング(光線追跡法)3D描画テスト

  ・動いたので、液晶裏面に両面テープを貼り、キャリーボードから動かないように固定した。
   また保護フィルムも剥がした。



  ・いくつか波形取りをしてみた。
    @ RST/のパルス幅と、RST解除からSCLK立上りまでの時間を、自作2CHオシロにて確認した。
      <結果>
       ・RST/のパルス幅:33mS
       ・RST解除からSCLK立上りまでの時間:18mS



       注:SPI転送速度= 8MHz(0.125uS)オリジナルだが、自作オシロが追従しないので、100kHz(10uS)に変更して観測した。
         それでも、10mS/Dレンジでは、サンプリング周期が遅いので、SCLKの波形はまともに再現されてない。

    A SPI 主要3信号:CS/(トリガ信号)・SCLK・SDIのタイミングを、自作ロジアナで確認してみた。
      <結果>
       ・SINGLEトリガモードにて観測したが、この自作ロジアナの問題で、なかなかRUNして最初のCS/の立下りに同期が
        取れず、実際に取った波形は、途中の立下りからのタイミングになっている。
        明日取直してみる。


■ 2022.7.20
  ・再び、SPI 主要3信号:CS/(トリガ信号)・SCLK・SDIのタイミングを確認してみた。
   <結果>
    ・今度は、ちゃんとRUNから最初の立下りからのタイミングが取れた。
     液晶内蔵コントローラチップ:S6D0151の、SPI転送仕様は以下の通リ。
      @ まず、スタートバイトを送信(ID+RS+RWの、1バイト)
         コマンド書込み(レジスタ番号指定)の場合:70h(RS='0', RW='0')8bit書込み
         データ書込み(レジスタに書込み)の場合 :72H(RS='1', RW='0')16bit書込みなので、上位・下位8bitの順に転送。
      A 最初のデータ書込みは、0x0007:REG7= DISOLAY CONTROL REGISTERを指定
      B 次に、このレジスタに、0x0020(ノーマルドライブ)を転送書込み

    ・液晶イニシャライズ関数の上記を含め最初から3つまでの、SPI転送タイミングを取得した。KM-BASICでの記述は以下
      GOSUB LCDWRT,$0007,$0020 REM DISOLAY CONTROL REGISTER <- 0x0020
      GOSUB LCDWRT,$00B6,$013F REM POWER ON SEQUENCE CONTOROL OF SETUP CIRCUIT REGISTER <- 0x013F
      GOSUB LCDWRT,$00B4,$0010 REM MTP CONTOROL REGISTER <- 0x0010



  ・自分でも、BASICプログラム考えてみた。
   と言っても、斜め線を描画するだけのプログラムだが・・・
   これは、後閑氏が、QVGA液晶の表示テスト用に作成したテストメニューの内の一つに有るので、それを
   KM-BASICに適合するように書直してみた。
   これは意外に一発OKになる。
   「LINESPI.BAS」とした。


<回路図>
 ・こちらからどうぞ
 「TFT2P2037-E表示実験」

<最終ソース>
  ・こちらからどうぞ
 「LINESPI.BAS」

<参考サイト>
 「サイクルきゃぁ」さん


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ134へ →