● 実験テーマ149

「MachiKania type P BASICシステムの試用実験」
(Raspberry Pi Pico基板の実験は既に済んでいるので、これを使用したBASICシステムの試用実験に移行しました)

■ 2023.3.31
  
オレンジピコショップより部材到着


■ 2023.4.7
  
部品実装済+接続ケーブル作成済


■ 2023.4.8
  ・SDカードに必要ファイルをコピー [済]
   空のSDカードに以下のファイルをパソコンからコピー。
    @ LIBディレクトリ:BASICプログラムから利用可能なクラスライブラリ集
    A MACHIKAP.INI  :起動時の設定を行うファイル
    B その他実行したいBASICソースプログラム
       およびサンプル画像ファイル


■ 2023.4.11
  ・Raspberry Pi Picoにシステムプログラムの書き込み〜 プログラム実行・エディトまで
    @ Raspberry Pi Pico基板上の白いボタンを押しながら、
       パソコンのUSB端子とRaspberry Pi PicoのマイクロUSB端子をケーブルで接続 OK
    A 液晶画面が白く光ればボタンから手を離す。 OK



    B PC画面上にリムーバブルメモリのウィンドウがRPI-RP2ドライブとして表示されるので、
       ダウンロードしたphyllosoma_kb.uf2ファイルをドラッグアンドドロップでコピーする。
       最初はキーボードが接続されていないため "Open directory Error. FRESULT:3"という
       エラーメッセージが表示される。(未だSDカード未挿入)

    C 一旦電源を切り、Pico ⇔ PC間のUSBケーブルを外して、PCのUSB口に「USB-microUSB変換ケーブル」を介し、
       USBキーボードを接続し、PicoのVBUSpin(CN6-2pin ⇔ CN6-6pin:GND)から外部電源により
       5Vを給電すると、USB初期化・USBキーボード認識のメッセージ画面の後、どれかキーを押すと、エディタ画面が表示される。 (未だSDカード未挿入) OK

 
                                                                         
    D 一旦電源を切り、SDカードを挿入して再度電源を入れと、
       エディタ画面(プリセットされた「INVADE.BAS:SPASE AILEN GAME」のBASICリスト」)が表示される。

    E [F1]キー(LOAD)を押すとプログラム選択画面が表示される。
       例えば矢印キーで「PHOTO.BAS」を選択し、[ENT]キーを押すと、そのBASICリストが表示され、

       [F4]キー(RUN)で実行。
       COSMOS.BMP(コスモスの花のビットマップ)画像が表示される。   OK



    F [START]キーを押すと、実行中の画面にオーバーラップして「Hit Any Key」と表示されるので



       スペースキーを押すとソフトウエアリセットが掛かり、USB初期化画面で[SPACE]キーで、エディタ画面に戻れる。
       追加した、Pico-30pin:RUNピンに、RESET SWを追加すれば、ハードリセットでもエディタ画面に戻れる。OK
       USBキーボードに[Pause]キー(通常はファンクションキーによる拡張機能で、例えばdell製のキーボードであれば[fn]+[B]キー)
       があればそれで可能だが、私の使用している、SANWA製の「SKB-SL36BK」には無いようで確認出来なかった。

       → 強制終了する場合、[Ctrl]+[Break]キーを押します。
          終了しない場合は、基板上の[UP][DOWN][START][FIRE]ボタンを同時に押します。
         これを試してみる。 230414

       → 何かキーを押すと実行中の画面上に、"HIT ANY KEY"と表示されるので、もう一度何かキーを押すと
         エディタ画面に戻れることを確認したが、プログラムに依存するようだ。
         末尾の記述が、

WHILE INKEY()=0
WEND

         になっていれば永久ループを抜け出せる。

         <NOTE:INKEY()についてKM-BASICガイドより抜粋>
          ・INKEY(x)
           x で指定したキーが押されているかを返します。x はキーコードを表します。
           押されている場合は 1、
           押されていない場合は 0 を返します。

           x を省略した場合、現在押されているキーのキーコードを返します。
           何も押されていない場合は 0 を返します。
           <使用例>
            WHILE INKEY(13)=0:WEND  Enter キーが押されるまで待つ
            WHILE INKEY()=0:WEND   何かキーが押されるまで待つ


■ 2023.4.12
  KENKENさんのHPからダウンロードした「machikania-p.zip」を解凍した中の、samplesフォルダ内には以下のディレクトリとファイルがある。
    @ LIBディレクトリ 
    A machicania設定ファイル
    B サンプルソースファイル各種

  <サンプルソースを一通リ動かしてみて内容を確認した。:尚、概要はreadme.txtに書かれている。>
    @ 3DWAVE.BAS
      ・波紋の3Dグラフィックス(3D SINE WAVE) OK



  ■ typeZの時の、4.3インチ液晶モニター:NTSCコンポジットビデオに出力した時のソースとの比較
    ・QVGAの解像度との違いから、LINE文のX座標の増分の数値を替えているだけのようだ。
     ちなみにtypeZの時の、ソースは以下。

REM 3D SINE WAVE
USEGRAPHIC 9:A#=15:U=192:W=150:D=2:E=5:P#=25
DIM M#(U*2):FOR I=0 TO U*2:M#(I)=1000:NEXT
K#=PI#*2/50:S#=SIN#(P#*PI#/180):T#=COS#(P#*PI#/180)
FOR Z=-W TO W STEP E
 FOR X=-U TO U STEP D
  R#=SQRT#(FLOAT#(X*X+Z*Z))
  Y#=A#*SIN#(K#*R#)
  Y#=-FLOAT#(Z)*S#+Y#*T#+110
  IF X>-U THEN
   IF Y#<M#(X+U) AND B#<=M#(X+U-D) THEN
    LINE X+192,INT(Y#),X+192-D,INT(B#),4 → ※ ここのX座標の増分の数値が、QVGAの場合、192から160に変更されている。
   ENDIF
  ENDIF
  IF Y#<M#(X+U) THEN M#(X+U)=Y#
  B#=Y#
 NEXT
NEXT
WHILE INKEY()=0:WEND

    A BLOCK.BAS
      ・ブロック崩しゲーム(初代machicaniaと同等) OK



    B INVADE.BAS   OK
      ・インベーダーゲーム(typeZと同等)



    C LCHIKA.BAS
      ・Pico-1pin:GP0ポートに接続したLEDを、PWMを使ってDUTYを変化させながら、Lチカを行う。  OK
      ・BASICプログラムをRUNさせると、コンパイラ画面になりコンパイル後、実行する。


REM LED blink sample
REM bit0 -- LED -- R -- GND
WHILE 1
FOR J=1 TO 10
 OUT 0,J AND 1
 DELAYMS 500
NEXT
FOR J=1 TO 5
 FOR I=0 TO 49
  PWM I*20,1000,3
  DELAYMS 10
 NEXT
 FOR I=50 TO 1 STEP -1
  PWM I*20,1000,3
  DELAYMS 10
 NEXT
NEXT
WEND

     ・Lチカのビデオファイルです。
      こちらからどうぞ→ video001.mp4(627KB)


■ 2023.4.13
  ・続き
    D MANDELBR.BAS
      ・テキストでマンデルブロを出力するプログラム
      ・マンデルブロ集合は単純な関数の繰り返しから導かれる魅力的なフラクタル  OK



    E MAZE3D.BAS
      ・立体迷路脱出ゲーム    OK



    F MUSIC.BAS                   OK
      ・MUSIC命令使用のサンプル



    G PCG.BAS             OK
      ・PCG(ユーザー定義フォント)を利用したサンプルプログラム
      ・プログラマブル・キャラクタ・ジェネレータで、果物キャラクタを作成し表示



    ➈ PEGSOL-G.BAS             OK
      ・ペグソリテアゲームプログラム



    I PHOTO.BAS                  OK
      ・COSMOS.BMP(コスモスの花のビットマップ)画像が表示される。



    J RAYTRACE.BAS             OK
      ・レイトレーシング・デモ



    K STARTREK.BAS             OK
      ・スタートレックゲームプログラム



    L SOUND.BAS                  OK
      ・SOUND命令使用のサンプル



    M TIME-INT.BAS               OK
      ・タイマー割り込みのサンプルプログラム
      ・1秒毎に、変数Tの値をインクリメントし都度液晶に表示



REM Timer Interrupt Demo
USETIMER 1000000:REM 1sec(1,000,000us)
INTERRUPT TIMER,TISR

T=0

REM Wait for timer interrupt
DO
IDLE
LOOP

REM Timer Interrupt Service Routine
LABEL TISR
T=T+1
CURSOR 0,10
PRINT T
RETURN

    N WFRAME.BAS             OK
      ・ワイヤフレームグラフィック・デモ(typeZと同等)



  ・以前、typeM,typeZの時、作成した自作のプログラム(単に、そのまま打ち込んだだけのも含む)を、
   PC上でサブディレクトリ・フォルダ「N_ISHII」に保存したのをフォルダごと、SDカードにコピーした。 


■ 2023.4.14
  
「N_ISHII」ディレクトリ内の、自作プログラムを動かしてみた。
   そのまま動くのと、動かないのがあるはずなので確認したい。

    @ RND_CIR → このまま動いた。
      ・ケンケンHP掲載のサンプルを打ち込んだもの:ランダム・サークル描画



    A BLK_&_WH → このまま動いた。
      ・「BLACK & WHITE」
      ハートキャラクタによる一松模様の表示デモです。
      表示倍率を、x1〜x10まで変化させながら、一松模様を表示します。

     ・「BLACK & WHITE」のビデオファイルです。
      こちらからどうぞ→ video002.mp4(2.66MB)


    B CALENDER → このままでは、動かなかった。
      ・西暦の年と月を入力すると、その月のカレンダー表が表示されるプログラムです。
      下段に表示されている、"NEXT MONTH ONCE.1 REPEAT.2"ですが、
      KEYボードから、'1'を入力すると、次の月のカレンダーが表示され、
      '2'を入力すると、月毎のカレンダーを、次々に繰返し表示します。

     <デバッグ調査開始>
      ・Line75でエラー発生
       「Syntax error in line 75 at 24」
       IF A=2 THEN GOTO MONCHK REM Y:2 OR 3 OR 4-12

       どうも、MONCHK REMの間のスペースが文法違反のようだ。
       BASICマニュアルを調べたら、以前の、typeMと、typePとでは、命令文の行に続けて
       コメントを書く場合の規則に違いがあるようだ。
       typeMの「KM-1300」では、命令文の行に続けて、スペースを空けて、REMと記述しても問題無いが、
       typePの「KM-1500」では、REMの前にコロンが必要。つまり :REMと記述しないとエラーになる。
       ※ REMも他の命令語と同じ扱いで、マルチステートメントのコロンが必要のようだ。

       → 入れたら(同じ個所は他も直した)エラー出なくなったが・・・まだ他のエラー発生

      ・Line153でエラー発生
       「Reserved word in line 153 at 6」
       LABEL LOOP

       どうもtypePの「KM-1500」では、LOOPは予約語なので使えないようである。
       LPにしてみる。これでこのエラーは無くなった。しかし・・・まだ他のエラー発生

      ・Line172
       「Syntax error in line 172 at 12」
       PRINT:PRINT:

  ※ <本日気が付いた事>
     ・時々USBキーボードが認識しなくなることがあった。
      RESETしてもUSB認識初期化画面にならず、白画面のままになる現象が何度か起きた。
      KENKENさんの次の記事によると、こういうものらしいと思うしか無いようだ。(USBキーボードとの相性?)様子見にする。

      <KENKENの記事>
       ・SBキーボード接続版でキーボードを接続せずに起動すると、
        ボタンによるファイル選択画面が起動します。
        また、キーボードの種類によっては電源オン時やリセット時にUSBキーボードが認識されない場合があり、
        この場合もボタンによるファイル選択画面が起動しますが、
        何度か電源オンやリセットを繰り返すことでキーボードが認識されることがあります。
        ただし、キーボードの種類によっては全く認識されないものもありますので、
        その場合は別のキーボードをご用意ください。


■ 2023.4.15
  ・続き
    C CALENDER
      ・Line172
       「Syntax error in line 172 at 12」
       PRINT:PRINT:

      → ここは、次の行:line 173と合わさって次のように、2行で記述されている。
        PRINT:PRINT:
        PRINT " *****************************":PRINT

        PRINTの後に何も書かないと改行動作になるので、3回改行後に、下段の区切り線を描画
        することになる。
        しかし2行に分けているのが問題になっているようだ、コロンはマルチステートメントのために記述
        しているので、最初の行のPRINT:PRINT:は、コロンの先に次の命令語が無いという事で違反判断
        していると考える。
        以下の様に一行で書けば良いはず。

        修正案:PRINT:PRINT:PRINT " *****************************":PRINT

      → これで上手く行く。

      ・「CALENDER」のビデオファイルです。
       こちらからどうぞ→ video003.mp4(488KB)


        また、カレンダー表示後、[ESC]で抜け出し、画面上に、"Hit Any Key"と表示した。
        この後、何かのキーを押すとエディタ画面に戻れた。

      ・この状態で[F2]キーでSAVEモードへ。次のメッセージが表示される。

       「Save To SD Card
        Current Directory is
        /N_ISHII
        Input File Name + [Enter]
        [ESC] Select File/Dir or Quit」
        CALENDER.BAS■         ← ここまで表示されている。このまま[Enter]すると以下メッセージ表示

        CALENDER.BAS: File Exists
        Overwrite:[Enter] / Stop:[ESC] ← 今回は上書きで良いので、[ENTER]でSAVEされる。OK
        Writing OK......

        エディタ画面に戻る。

    D JPN_DISP → このまま動いた。
      ・日本語フォント表示テスト
       "音楽シュミレーター"を表示。
       PCGで漢字フォントデータを定義し、それを呼び出して表示。
       [ESC]でエディタ画面に戻る。


■ 2023.4.16
  ・朝9:20頃、これからFLレッスンに出かける前だったのだが、ラズパイ・Pico基板を壊した。
   誤って、VBUS= 5Vのところ、12VのACアダプタ出力(ポータブルDVDプレーヤ用)をぶっこんでしまった。orz
   接続状態で、VBUS=3Vまでダウンしていた。

   レッスンからの帰宅後、他の負荷も壊れてないか確認してみたところ、
    ・SDカードは生きていた。
    ・USBキーボードも生きていた。PCに接続してみたが認識した。デバイスマネージャーでも確認した。
    ・QVGA液晶も下記のように動いているようである。
 
   アクシデントから少し時間が経ったので、もしかしたら復帰してないかという期待を込めて
   電源を入れたら、一時は、USBキーボードを認識し、[LOAD]でプログラム選択画面まで表示したが、
   直ぐに液晶が真っ白になり、しまいにはPicoから白煙が・・・・
   それでも完全に破壊されてないようで、再度resetを掛けたり、電源を入れ直すと、USBキーボードを認識して
   白煙を出すことはなくなったが、認識状態が不安定になっている。

   ※ ちょっと拡大鏡で基板上を見てみたら、USBコネクタ近くの、U2(03の印字が見えた)の表面中央付近が
     熱で膨らんだ跡が確認できた。
     ここから白煙が出ていた模様。
     回路図を調べると、U2は5V入力のDC/DCコンバータIC:RT6150B-33GQWのようだ。3.3Vを生成。
     データシートには「Current Mode Buck-Boost Converter」と書いてあった。致命的ダメージ!!



   → 13:00頃、SWITCH-SCIENCEにて「Raspberry Pi Pico」基板を注文した。税・送料込みで910円の出費なり・・orz


■ 2023.4.17
  ・という訳で部材が届くまで時間が空いたので、他の以前自作したbasプログラムの中から「音楽シュミレータ」
   をチョイスして、これをtypePの「KM-1500」BASICシステムで動くように改版作業を進めることにした。
   元BASICソースの最終版は「MUS_SUM5.BAS」:音符データ呼出し追加版(実験テーマ113を参照してください。)

   今迄のデバッグ経緯で、どこでエラーになるか数点は判っているので、そこから予め修正しておく。[済]
   <修正点>
    @ 命令文の行に続けて、スペースを空けて、REMと記述すると「Syntax error」になる。
       REMの前にコロンが必要。つまり :REMと記述。

    A LABEL LOOP
       これは、LOOPは予約語なので「Reserved word in line」エラーになる。
       LP等に修正。

    B PRINT:PRINT:
       PRINT " *****************************":PRINT

       PRINTの後に何も書かないと改行動作になるので、3回改行後に、下段の区切り線を描画することになる。
       しかし2行に分けているのが問題になっているようだ、コロンはマルチステートメントのために記述
       しているので、最初の行のPRINT:PRINT:は、コロンの先に次の命令語が無いという事で違反判断になる。
       以下の様に一行で書けば良い。

       PRINT:PRINT:PRINT " *****************************":PRINT


■ 2023.4.18
  ・「Raspberry Pi Pico」基板届く。
   ピンヘッダを半田付けした。


■ 2023.4.20
  ・新たに届いた「Raspberry Pi Pico」基板の、システムプログラムの書き込み〜 プログラム実行確認まで
    @ Raspberry Pi Pico基板上の白いボタンを押しながら、
       パソコンのUSB端子とRaspberry Pi PicoのマイクロUSB端子をケーブルで接続 OK
    A 液晶画面が白く光ればボタンから手を離す。 OK
    B PC画面上にリムーバブルメモリのウィンドウがRPI-RP2ドライブとして表示されるので、
       ダウンロードしたphyllosoma_kb.uf2ファイルをドラッグアンドドロップでコピーする。
       最初はキーボードが接続されていないため "Open directory Error. FRESULT:3"という
       エラーメッセージが表示される。(未だSDカード未挿入)              OK

    C 一旦電源を切り、Pico ⇔ PC間のUSBケーブルを外して、PCのUSB口に「USB-microUSB変換ケーブル」を介し、
       USBキーボードを接続し、PicoのVBUSpin(CN6-2pin ⇔ CN6-6pin:GND)から外部電源により
       5Vを給電すると、エディタ画面が表示される。 OK 
                                                                         
    D 一旦電源を切り、SDカードを挿入して再度電源を入れると、まずエディタ画面が表示される。OK
    E [F1]キー(LOAD)を押すとプログラム選択画面が表示される。 OK
       例えば矢印キーで「PHOTO.BAS」を選択し、[ENT]キーを押すと、そのBASICリストが表示され、
       [F4]キー(RUN)で実行。
       COSMOS.BMP(コスモスの花のビットマップ)画像が表示される。   OK
------------------------------------------------------------------------------------------------------------

  ・「音楽シュミレータ」:MUS_SUM5.BAS デバッグ開始
  ・Line291
   「Syntax error in line 291 at 12」
    POINT XI,YI,4

  → ※ typePの「KM-1500」では、ピクセル描画命令は、POINTでなく、PSET。
       PSET x,y,cになる。
       (POINTもあるが、座標位置の指定のみで、引数に色の指定は無い。)
       なので、PSET XI,YI,4 に修正

  ・Line325
   「Syntax error in line 325 at 39」
    A=STRNCMP("b",T$,1):IF A=0 THEN Y1=30 N=1

  → ※ THEN Y1=30 N=1→ THEN Y1=30:N=1(コロンが抜けてた)

  ・Line599
   「Not class or object in line 599 at 14」

A=STRNCMP("C",K$,1)

IF A != 0 THEN: REM K$ != "C"-> A=1
GOTO KyKeyI: REM Invalid Input Goto Loop
ENDIF

   以下の様に修正

REM K$ != "C"-> A=1
A=STRNCMP("C",K$,1)
IF A != 0 THEN
GOTO KyKeyI: REM Invalid Input Goto Loop
ENDIF

  ・Line648
   「Syntax error in line 648 at 12」
    IF A=0 THEN: REM "y" Then

<修正前> 
LABEL KEYIN 
CURSOR 0,17:PRINT "Is this airight ?"
CURSOR 19,17:YN$=INPUT$()
A=STRNCMP("y",YN$,1)
IF A=0 THEN: REM "y" Then
GOTO NEXT
ENDIF


<修正後>
LABEL KEYIN 
CURSOR 0,17:PRINT "Is this airight ?"
CURSOR 19,17:YN$=INPUT$()

REM YN$="y" Then GOTO NEXT
A=STRNCMP("y",YN$,1)
IF A=0 THEN
GOTO NEXT
ENDIF

  ・Line651
   「Reserved word in line 651 at 7」
    GOTO NEXT

<修正前> 
GOTO NEXT

<修正後>
GOTO NXT

   これに伴い、飛び先のラベル:Line661 の、LABEL NEXTも、LABEL NXTに修正

   ※ 一応ここまでの修正で、やっとイニシャルメニュー画面が表示され,



      メニュー1:音符入力・メニュー2:音符データ読出しの動作がOKになった。
      と思ったが、メニュー2:音符データ読出しが未だ完全ではない。

      ALPE_120
      ALPEG_60
      は、OKだが、



      SCALE_Cと、ALPEGGIO
      は、NG

  ・Line514
   「Music/sound error in line 514」
    MUSIC BGMabc$

   このエラーについては、ちょっとだけ追ったが、明日以降続行の予定。


■ 2023.4.21
  
昨日の「Music/sound error in line 514」デバッグ作業途中に、昨日出たエラー
   「Reserved word in line 651 at 7」
    GOTO NEXT

   が他の以下の行にもあったので修正した。

   → 648行
      ただこれはREM文なので問題無かったが直した。
      REM YN$="y" Then GOTO NXT

  ・後、入力を促すPRINT文の英語スペルにミスがあった。
   → 645行
      CURSOR 0,17:PRINT "Is this airight ?"
                         ↑------- allrightだが、わかったか?の意味で意図と合わないので "OK"に修正した。
                                つまり「これでよろしいですか?」になる。
     ※ 文字数が減ったので、入力のカーソル位置を次のように修正:646行
        CURSOR 19,17:YN$=INPUT$()→ CURSOR 14,17:YN$=INPUT$()

  ・「Music/sound error in line 514」デバッグ作業に戻った。
   以前セーブされた音符データそのものがngな可能性もあるので、再度打ち込んで、saveしてみた。
   save自体は何の問題も無くノーエラーで出来た。
   save名は「SCALE_C」(同じ名前)にした。

  → 読出して再生してみた。
     今度は問題無く再生出来た。



-------------------------------------------------------------------------------------------------------------

  ・音符データ「ALPEGGIO」もメニュー:1で再打ち込みし、saveし、メニュー:2で、ALPEGGIO(音符データ)の読出しを試したら、
   Music/sound error in line 514 エラー発生
   514:MUSIC BGMabc$


■ 2023.4.22
  ・一昨日から起きている「デバッグ作業途中に、何度も動作途中で、usb認識が途絶えるようで、液晶が真っ白になる」は、
   電源onし直すか、reset sw onで復帰はするが、その後も何度か起こった。

   USBキーボードは "SANWA"製のメーカー物だし問題無いと考える。
   ちょっと懸念しているのは、電源供給用のコネクタとSWの配線を空中配線でラフに配線しているので
   ここと、RESET SW部を含め、一枚の両面スルー基板に部材を置き配線してまとめた。


 
   これが原因だったかどうかは定かでないが、
   この状態で、再度音符データ「ALPEGGIO」をメニュー:1で再打ち込みし、saveし、
   メニュー:2で、ALPEGGIO(音符データ)の読出しを試したら、今度は問題無く再生出来た!!!
   やはりデータが無効だったようだ。



   治具類を整備したせいか、一度も動作途中で、液晶が真っ白になる現象は起きなかった。

  ・新たに音符データ「PRELUDIO.TXT」を打ち込み、読出しに成功した。今度のは全て16分音符で打ち込んだ。


■ 2023.4.24
  
KENKEN HPにある、typeP用「pacmon.hex」と「tetoris.hex」をダウンロードして、
   SDカードに収録し、動作確認した。      OK



   <HEXを動かす手順>
    @ USBキーボードを外す。
    A P_ONすると、SDカード上のファイル選択画面が液晶に表示されるので、上下左右ボタンで実行したい
       HEXプログラムを選択し、FIREボタンを押すと自動的にコンパイルされ実行される。


■ 2023.4.30
  ・KENKEN HPにある、KM-1500 BASICによる、ハード制御がらみの例を確認してみた。以下@は、HPからの記事を抜粋
    (1) LEDマトリクス表示
      @ LEDコントローラMAX7219搭載のLEDマトリクスを8連結した表示器を作成し、SPI接続してBASICから制御しました。
         SPI関連命令があるのでで簡単に制御することができます。
         4連結の場合はSPIWRITE命令で8個並んでいる引数を4個にしてください。
         <接続>
          VCC -- +5V(外部電源、3.3Vでも動作します)
          GND -- GND
          DIN -- GP19 SD-DI(MOSI) / SPI TX(25番pin)
          CS  -- GP3 I/O bit3 / SPI CS(5番pin)
          CLK -- GP18 SD-SCLK / SCK(24番pin)

      A 以前、実験テーマ120「8x8マトリックスLEDモジュール:M7SEGX1R-7219B "aitendo"の実験」で作成した
         2連の治具があるので、それを使うことにした。
         説明にあるように、SPIWRITE命令で8個並んでいる引数を2個に変更した。変更後のソース:MAX7219.BASを以下に示した。
         RUNすると、"AB"と表示して停止します。  OK



REM SPI LED Matrix x2 (MAX7219 LED Driver)
SPI 10000,16,0:REM 10MHz/16bit/Mode0

REM Not Test Mode
D=$0F00:SPIWRITE D,D

REM Not Shutdown Mode
D=$0C01:SPIWRITE D,D

REM No Decode Mode
D=$0900:SPIWRITE D,D

REM Set Briteness
D=$0A05:SPIWRITE D,D

REM Scan All LEDs
D=$0B07:SPIWRITE D,D

DIM F(63)
RESTORE FONTDT
FOR I=0 TO 63
F(I)=CREAD()
NEXT

FOR Y=0 TO 7
D=(Y+1)<<8
SPIWRITE D+F(Y),D+F(8+Y)
NEXT
END

LABEL FONTDT
CDATA $38,$6C,$C6,$FE,$C6,$C6,$C6,$00:REM A
CDATA $FC,$66,$66,$7C,$66,$66,$FC,$00:REM B
CDATA $3C,$66,$C0,$C0,$C0,$66,$3C,$00:REM C
CDATA $F8,$6C,$66,$66,$66,$6C,$F8,$00:REM D
CDATA $FE,$C0,$C0,$F8,$C0,$C0,$FE,$00:REM E
CDATA $FE,$C0,$C0,$F8,$C0,$C0,$C0,$00:REM F
CDATA $3C,$66,$C0,$CE,$C6,$66,$3C,$00:REM G
CDATA $C6,$C6,$C6,$FE,$C6,$C6,$C6,$00:REM H


■ 2023.5.2
  ・続き 以下@は、HPからの記事を抜粋

    (2) I2Cサンプル
      @ MachiKania type PのKM-BASICにはI2Cのマスターとしての機能があります。
         I2C接続の温湿度センサーAM2320と8×2キャラクター液晶AQM0802を同時に接続し、
         キャラクター液晶画面に温度と湿度を表示します。

         I2C接続の場合、プルアップ抵抗が必ず必要ですが、
         AQM0802のキット基板の抵抗(10KΩ)を利用する場合は省略可能です。

         MachiKania type PではSCL(クロック線)をIObit7、SDA(データ線)をIObit6に接続することで、
         BASICでI2C機器と通信することができます。
         Raspberry Pi PicoのI2Cは通信時にアドレスのほか、必ず1バイト以上のデータが必要です。
         プログラム13行目のI2CWRITE命令でAM2320の起動を行っていますが、
         アドレス$5Cの後ろにダミーで0を1つ付けています。
         このとき実際にはAM2320はNACKを返し、ダミーデータは送られません。

      A 私の場合、実験テーマ83「PIC16F_湿度・気圧計の実験と製作」の基板を流用して実験を行いました。
         気圧センサモジュールと、PIC16Fはソケットから抜きました。
         温湿度センサモジュール:HDC1000も実装されていますが、HDC1000は経年変化の影響を受けやすく湿度精度が悪いので、
         今使うなら「SHT31」を勧めます。(この辺は実験テーマ137が参考になります.。)
         今回は、I2CラインのプルアップとしてHDC1000に実装されている10kプルアップを利用するのみにし、
         8 x 2行のキャラクタ液晶:AQM0802に、
         「AQM0802 
         TEST   」
         と表示するだけの実験を行いました。 OK


 
REM I2C TEST (AQM0802)
REM 2023/5/2 N.Ishii

I2C 100:REM Set I2C Baudrate 100KHz
GOSUB INIAMQ
GOSUB PRTAMQ,0,"AQM0802"
GOSUB PRTAMQ,1,"TEST"
END

LABEL INIAMQ
REM Initialize AMQ0802
I2CWRITE $3E,$00,$38:WAIT 1:REM function set
I2CWRITE $3E,$00,$39:WAIT 1:REM function set
I2CWRITE $3E,$00,$14:WAIT 1:REM Internal OSC frequency
I2CWRITE $3E,$00,$73:WAIT 1:REM Contrast adjust data set
I2CWRITE $3E,$00,$56:WAIT 1:REM Contrast set
I2CWRITE $3E,$00,$6C:WAIT 15:REM Follower control
I2CWRITE $3E,$00,$38:WAIT 1:REM function set
I2CWRITE $3E,$00,$01:WAIT 1:REM Clear Display
I2CWRITE $3E,$00,$0C:WAIT 1:REM display control on
RETURN

LABEL PRTAMQ
REM Print String in line n
VAR S

REM Set DDRAM address 0x80 or 0xC0
I2CWRITE $3E,0,$80+((ARGS(1) AND 1)<<6):WAIT 1

S=ARGS(2)
WHILE PEEK(S):REM HIKISUU READ
I2CWRITE $3E,$40,PEEK(S):WAIT 1
S=S+1
WEND
RETURN


■ 2023.5.13
  KENKEN HPにある、温湿度気圧ロガーを試してみたく、
   予めamazonに手配しといた、温湿度センサー:AM2320及び、気圧センサー
:GP-BMP280-3.3が、本日届いた。


■ 2023.5.15
  
KENKEN HPにある、KM-1500 BASICによる、ハード制御がらみの例を、もう一つ確認してみた。以下HPからの記事を@に抜粋した。
    (3) 温湿度気圧ロガー
      @ 温湿度センサーAM2320および気圧センサーBMP280を利用した実用的な温湿度気圧ロガーです。
         接続はどちらもI2Cで行い、一定時間ごとに測定した結果をグラフ描画します。
         また同時にファイルにも記録を行います。(TPHLOG.TXT)
         測定間隔はソースプログラム9行目の変数Wの値で設定します。(60分のW秒間隔)→ defult:W= 3600:1分間隔
         縦軸の目盛りは温度と気圧は自動的に適切な目盛りを計算して描画します。
         湿度は0%〜100%固定です。
         また最新の測定結果は画面上部にテキスト表示もします。
         グラフが画面右端まで到達すると、スクロールして左端の描画は消えますが、ファイルには記録が残ります。

      A どんな動きをするか確認してみた。
       A-1.まず"℃"の〇が文字化けして"sC"になる。
           → メインループ中の以下の記述が、その場所 
             GPRINT 80,0,C_TIME,-1,SPRINTF$("%.1f",T#)+"ßC "+DEC$(INT(P#))+"hPa "+DEC$(INT(H#))+"%"
                                       ↑- KENKEN HPのソースをコピーしてメモ帳で開くと、βになっている。
                                         TeraPadで開くと、"sC"
                                           KENKEN HPには注意書きが有り
                                         「半角カナを使用しているので、表示すると文字化けする可能性があります。
                                          リンク先をファイルに保存してください。」

                                        ※ リンク先をクリックしてBASファイルを開くと文字化けするので
                                           この説明の通リ、右クリック-[リンクを保存]で試したら、
                                           上手く行った。゚C"になった。

       A-2.プロットは左端から始まり、時間軸の起点表示は、"0h"となっていて、サンプル毎に右に起点が移動するようになっている。



       A-3.SDカードへの記録フォーマットは以下のようになっている。(測定間隔:defult:W= 3600:1分間隔)

Temperature,Pressure,Humidity
23.8000,1013.37,63.5000%
23.2000,1013.38,62.8000%
23.2000,1013.35,62.2000%
23.2000,1013.32,61.9000%
23.2000,1013.34,61.5000%
23.2000,1013.30,61.1000%
23.2000,1013.32,61.0000%
23.2000,1013.37,60.8000%
23.2000,1013.39,60.8000%
23.2000,1013.35,60.7000%
23.2000,1013.35,60.7000%
23.2000,1013.29,60.6000%

       A-4.記録を開始したが記録途中で画面が真っ白になった。(約2.5時間収録後:14時開始〜 17時頃 現象発生)
           そこまでの「TPHLOG.TXT」はちゃんと記録されていた。(ローカルにバックアップSAVEした:作成年月=2023‎年‎5‎月‎15‎日、‏‎17:02:49)
           この現象は取直した後も何度が起きた。
           ブレッドボード上か、マザーボード上でのワイヤ挿入が甘く接触不良を起こしているのかな??


■ 2023.5.16
  
調査・試行続行
   (1) 接触不良の不安を除外する為、前に作ったRESET SW・POWER SW・DCジャックが実装された基板上に、
      センサモジュールも実装することにした。


 
    ・13:50:開始
     14:30:ウオーキングに出かける。
             ・
             ・
     15:50:帰宅後、見るとまたまた画面が真っ白になっていた。


          どこまで収録されているか、SDカードを確認してみた。以下の様になっていた。

    Temperature, Pressure, Humidity        NOTE:測定間隔:defult:W= 3600:1分間隔(W=60で1秒間隔)
---------------------------------------
  1   24.0000,  1011.29,  56.8000% 13:50
    2   24.0000,  1011.36,  56.6000% 13:51
                   ・
                   ・
 116   22.9000,  1010.83,  59.6000% 15:45
 117   22.9000,     1010.84,  59.6000% 15:46

    ※ これを見ると、帰宅して電源を切る寸前までの収録は正常のようである。
      ただ画面が真っ白になるという事は、液晶を制御している、SPIラインに何かしらの異常が起きている可能性がある。


■ 2023.5.17
  ・誤ってPICOの、vbusに12Vを印加してしまった時に、液晶が一時的にダメージを受けた可能性がある。
   (液晶は、3.3V電源。vbus5v→ dc/dc out= 3.3vを印加しているが、vbusに12vを印加した瞬間にdc/dc出力に高圧が発生した可能性がある。)
   一応動いてはいるが、動作が不安定。

  → 原因を特定したいので、もう1個同じ液晶を注文した。交換して試してみる。


■ 2023.5.19
  ・Yahho!!shopping orenge pico shopより、SPI 3.2inch QVGA液晶、届く。


  
  ※ 目論見通リ、液晶のドライバ(SPI制御部)の不良が原因だったようで、約8時間の収録を行ったが異常は見られなかった。


    
    Temperature, Pressure, Humidity
-------------------------------------------------------------
  1   26.9000,  1011.18,  55.9000% 14:15
  2   26.9000,  1011.14,  55.7000% 14:16
                ・
                ・
 479   25.2000,  1010.37,  58.3000% 22:14
 480   25.2000,    1010.36,  58.3000% 22:15

  NOTE1:測定間隔:defult:W= 3600:1分間隔(W=60で1秒間隔)
  NOTE2:上記CSVファイル形式の、時刻は実際には記録されない。


■ 2023.5.21
  
上記CSVファイル形式のデータを元に、Excelにて折れ線グラフ化を試した。

  <今のところの問題点>
   @ 縦軸の3系統化(温度・湿度・気圧)が上手く行かない。
      → Excelは「Microsoft Office Personal 2010 Ver.14.0.7268.5000(32bit)」を使用。
        2系統(温度・気圧)は何とか出来たが、湿度が追加出来ない。
        既存のメニューの中には、2系統までの設定しか用意されてない。

   A 湿度のデータに単位の"%"が含まれているのは何か意図があるのか?という疑問がある。
      → SDカードにはテキスト形式の「TPHLOG.txt」で書込まれ保存される。
        これをExcelで開く時、csvとしての設定をして「TPHLOG.csv」で保存した。
        セルに展開された、湿度項目のデータセルを右クリックしてデータ形式を確認すると
        「パーセント」になっていた。
        これを「標準」または「数値」に変更すると、例えば「0.565」とかになってしまう。
        データ中の不要な単位"%"のみ削除するエクセル関数も試したが上手く行かない。

   B 横軸は何も特別な設定をしてなく今は項目番号の、1〜 479までを、60間隔で「1 60 120・・・」と表示されているが
      これを出来れば、0開始にしたいが上手く行かない。


■ 2023.5.22
  ・今迄のはバックアップしといて、仕切り直しで最初の、txt→ csv変換から一つ一つ確認しながら再検証してみる。

  (1) Excelで、そのまま「TPHLOG.txt」を開くと以下の「テキストファイルウイザード・1/3」が立上る。

    「選択したデータは区切り文字で区切られています。
     [次へ]をクリックするか、区切るデータの形式を指定してください。
     元のデータの形式----------------------------------------------------
      ◎ カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ
        〇 スペースによって右または左に揃えられた固定長フィールドのデータ
     ---------------------------------------------------------------------

             ・
             ・
                                [次へ]           」

    @ [次へ]をクリック
    A 以下の「テキストファイルウイザード・2/3」が立上る。

     「フィールドの区切り文字を指定してください。[データのプレビュー]ボックスには区切り位置が表示されます。

      区切り文字--------
        [ ]タブ
        [ ]セミコロン
        [v]カンマ
        [ ]スペース
        [ ]その他 [  ]
      ----------------

      データのプレビュー-------------------------------------------------

      Temperature | Pressure | Humidity 
         6.9000 | 1011.18   | 55.9000%
                      ・      ・     ・
                 ・      ・     ・
     --------------------------------------------------------------- 
                                             [次へ]        」

    B [次へ]をクリック
    C 以下の「テキストファイルウイザード・3/3」が立上る。

     「区切ったあとの列のデータ形式を選択してください。

      列のデータ形式-----
        ◎G/標準
        〇文字列
        〇日付
        〇削除する
     --------------------

      データのプレビュー---------------------------------------------------
       G/標準   G/標準  文字列
      ===============================
      Temperature | Pressure | Humidity 
         26.9000 | 1011.18   | 55.9000%
           ・     ・     ・
           ・     ・     ・
     ---------------------------------------------------------------------
                                              [完了]        」

     ※ Humidityのみ文字列にしてみる。
        文字列なら、後で[検索]-[置換え]で "%"を""に置換えて削除した後、データ形式を
        数値に変換できるはず。

    D [完了]をクリック
    E .csvで保存(「このファイルにはcsvとは関係ない機能が含まれている・・」とかいう旨のワーニング
       が出るが無視して保存)

  (2) 保存したcsvを開くと
    @ Humidity項目のセルが全て文字列表示になっている。
    A セルを選択して、[検索と選択]- [置換]

     「検索と置換え

      _______[置換え]_________________________________
 
     検索する文字列    [%                    ]
     置換え後の文字列 [                            ]

                                                                   [置換]
     ---------------------------------------------------------------」

    B [置換]をクリックで、"%"のみ削除され、"55.9"だけ残る。
    C セルを右クリックし[セルの書式設定]- [データ形式]- [文字列]から、[数値]に変更。
    D 前のファイルは残したいので別名で保存
       「TPHLOG_2.csv」にした。

  (3) [経過時間[分]]項目をセル左端に追加
    @ データセルに、0〜 479を追加

  (4) 2軸の折れ線グラフ作成(3軸は標準のEXCEL機能では難があるので、2軸で妥協)
    @ [[経過時間[分]]項目・データセルを除いた他の、項目を含めた、全てのデータセルを選択(P,T,H)
    A [挿入]- [折れ線]- [2D-折れ線]- [折れ線]
    B 最初は、縦主軸(系統)0・200・400・・・・1000
       横軸= 目盛間隔:17 最小値:1 最大値:479

       Temperature:青
       Pressure    :青
       Humidity     :黄緑

       の設定になっていた。

    C 線の色と、縦軸の系列(主軸 or 第2軸)を変更
     ・線を右クリックして、[データ系列の書式設定]- [線の色]- ◎ 線(単色)- [書式適用続行?]- [はい]
      -[色- [_] ← ここのプルダウンで、色を選択(T=赤・P=緑・H=青)

     ・P線を右クリック- [データ系列の書式設定]- [系列のオプション]- ◎ 主軸(ここは変更なし)
      T線を右クリック- [データ系列の書式設定]- [系列のオプション]- ◎ 主軸 -> 第2軸(0〜70 10間隔になってた)
      H線を右クリック- [データ系列の書式設定]- [系列のオプション]- ◎ 主軸 -> 第2軸

    D 縦軸(主軸:P)の目盛り設定を変更
     ・最小値:◎ 自動  [0.0] -> 固定 [1005]
      最大値:◎ 自動  [1200.0] -> 固定 [1015]
      目盛間隔:◎ 自動 [200.0] -> 固定 [5]

    E 縦軸(第2軸)の目盛り設定を変更
     ・最小値:◎ 自動  [0.0] -> 固定 [20]
      最大値:◎ 自動  [70.0] -> 固定 [60]
      目盛間隔:◎ 自動 [10.0] -> 固定 [10]

  (5) 横軸の目盛りを、0から60分間隔に設定変更
    @ 横軸の目盛り部分を右クリック
    A [軸の書式設定]をクリック
    B 目盛の間隔 [60]
       ◎ 間隔の単位 [60]

       に設定
       これだけでは、1からのスタートになってしまう。
    C 横軸の目盛り部分を右クリックし、[データの選択]をクリック
    D [[経過時間[分]]項目・データセルを含めた、全てのデータセルを選択(経過時間, P,T,H)
    E 右側の設定枠[横(項目)軸ラベル-[編集]をクリック
    F 軸ラベルの範囲
       [                 ][ ] データ範囲の選択
    G [経過時間[分]]項目のデータセルを全て選択して [OK]をクリック
    ➈ [データソースの選択]ダイアログに戻るので、さらに [OK]をクリック

       → これで横軸の目盛が、0スタートになるはずだが、何故か反映されず、1のまま??


■ 2023.5.23
  
以前やった「sdロガー」でも横軸は、0から60分間隔の目盛り(ラベル)でやっていて、上手く行っている。
   設定の違いを調べてみたら、[軸の書式設定]- [表示形式]- [v] シートとリンクする
                                        ↑- このチェックが抜けてる。
    これを試してみたが変わらずng。

  ・訳が解らない????
   グラフを削除して最初に横軸の設定から試してみる。
   → 何故か、これで上手く行く。0からスタートになった。手順の違い?

  <正解手順概要>
   (1) 横軸の目盛りを、0から60分間隔に設定
   (2) T,P,Hの線色を変更
   (3) Pを主軸に設定 
   (4) T,Hを第2軸に設定
   (5) Pの目盛り設定を変更
   (6) Tの目盛り設定を変更

  ・タイトル等テキストを追加してまとめる。
   (1) グラフの外枠をクリック選択
   (2) [レイアウト]- [グラフタイトル]- [グラフの上]
   (3) 「温湿度・気圧測定記録:約8時間SD収録 230519」

   (4) [レイアウト]- [軸ラベル]- [主軸ラベル(H)]- [軸ラベルを軸の下に配置]
   (5) "経過時間 [分]"として配置

   (6) [レイアウト]- [軸ラベル]- [主軸ラベル(V)]- [軸ラベルを水平に配置]
   (7) "[hPa]"とし、上部の目盛ラベル"1015"の上に移動配置

   (8) [レイアウト]- [軸ラベル]- [第2縦軸ラベル(E)]- [軸ラベルを水平に配置]
   (9) "[℃, %"]"とし、上部の目盛ラベル"60"の上に移動配置

  ※ 2軸だが何とか形になった。


<最終BASICソース他>
 ・こちらから、どうぞ→ BLK_&_WH.BAS : BLACK & WHITE
                 CALENDER.BAS : カレンダー
                 JPN_DISP.BAS : 日本語表示

                 MUS_SUM5.BAS : 音楽シュミレータ

                 <音符データ>

                 ALPE_120.TXT : アルべジオ 120bpm
                 ALPEG_60.TXT : アルべジオ 60bpm
                     SCALE_C.TXT : C音階
                 ALPEGGIO.TXT: アルべジオ 8分音符                
                 PRELUDIO.TXT: プレリュード Am 16分音符


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