3.その他     RISC用タイニーBASIC・・ 8PinRISC の CH32V003に豊四季タイニーBASICを入れる

このページ で公開している はなゆう製のソフトはフリーソフトです。ロイヤリティも保証もありません。店主
(2024/0817)
できあがったCH32V-RISCチップ+基盤の完成品、豊四季タイニーBASICが入っている。
できあがったRISCチップ基盤の完成品、豊四季BASICが入っている。 小さくてかわいい

CH32V-RISCチップに豊四季タイニーBASICの機能追加作業中の光景
          、ブレッドボードのRISCをLinkEに接続する
ブレッドボードで開発する。「tB]印がRISKチップ、LinkEの白いのは赤LEDが眩しくて
  

8PinRISCの CH32V003に豊四季タイニーBASICを入れる。回路図


このペー ジで何ができるのか?

秋月電子で販売しています、@40の8ピンのRISC(@40RISC)上で動作する 豊四季タイニーBASICが使えるようになりました。
標準品に IN、OUT、ANA、SAVE、BOOT、LOAD、RND、TICK、CLT を追加しました。8ピ ンRISC の電源以外の6ピンがI/Oとして使えます。
インタープリタ版です。 PC等の端末からTx,Rxピンを使って操作できます。
作ったBASICプログラムを ”SAVE BOOT” 文 でRISCチップ内のフラッシュに書き込んで、自動運転もできます。
豊四季タイニーBASICの操作画面 TeraTarmで操作、表示しています。
豊四季タイニーBASICの操作画面 TeraTarmで操作、表示しています。

開発は Windows10+MonRiverStadio Var1.91(以後MRSと略)+LinkEで行いました。言語は C( K&R )です。
できるまでは 結構しんどかったです。
しかし LPC(ARM)を始めたときよりは、情報が多いので助かりました。

見て判りますが ここではRISC,開発ソフトの準備、操作は紹介していません。 ネットに、いっぱい出ていますのでそちらを参考してください。

まとめ 目次
使ったものの紹介
できあがったソフト置き場はここ
豊四季タイニー BASICに追加したこと
判ったこと、注意点は
サンプルソフトなど

< 使ったものの紹介 >
使ったのは 秋月電子で扱っている、@40の8ピンのRISCです(32ビットRISCマイコンCH32v003J4M6)これをブレッドボード でつかうため、8ピンDIP拡張基盤 に乗せました。
これに  秋月で購入した、LinkEを接続します。LinkEは RISCのSWDIOを使ってプログラムライターとして、Tx,Rxを使ってシリアル通信、 3.3Vの電源の供給を行います。

このような小ピンのワンチップは、ただ小さいというだけで扱いやすそうですが、難点は「パケ、金額に比例してメモリーが小さい」ですが、このチッ プは EEPROMが16KB、RAMが2KBあり、豊四季タイニーBASIC フルセットが載せられました。
8ピンとはいえ、電源の2ピンを除いても、I/Oが6ピンもあるので、小さな治具としてなら結構使えます。
同じコアで20ピンのチップ( CH32V003F4P6 )もありますので、両方持っているのがベストです。
このI/Oが使えることが大事で、価値があります。そうでなければ、もっとパワフルで安易なPCで代用できます。

開発は MRSで ADCあたりのサンプルをプロジェクトして、改築しています。
basic.cは作 者さんのページからコピペして、追記しました。
MRS内臓の Cコンパイラ 、デバッガー 、ターミナル で編集、虫取りを繰り返し、 TOP絵のように LinkEを介して RISCに書き込みます。
MRS+LinkEでCH32VのタイニーBASIC を改造する

最終は PCのTeraTarm(115200bps)+LinkE(3.3Vが出ます)+RISCで動作させます。
最低で 電源が2本、Tx,Rx(SWDIO)の合計4本必要です。

MRSでBASIC用のプロジェクトを作る



出来上がった ソフト置き場 で す
main.c から basic.c を呼んでいます。 この2つのソースと、コンパイルしたHEXファイルを載せておきます。
書き込むだけなら、そ の他 を参考にしてくださ い。
もしくは 上のMRSの 左欄のobjフォルダの中に HEXファイルをコピペして 書き込んでもOKです。



< できた もの 豊四季タイニーBASICに追加したこと >

1.@40RISCで、豊四季タイニーBASICが使えるようになった。
2.標準(?)に IN、OUT、ANA、SAVE、BOOT、LOAD、RND、TICK、CLT を追加しました。
内容は
IN+ピン番号 0か1が取れます。 例) >B=IN3 ... 3はチップの3番ピンで PA2です。
OUT+ピン    >OUT3 HIGH or LOW
ANA+ピン    >C=ANA(3)
SAVE()    プログラムを自身のフラッシュに書き込みます。 BOOTを付けると、自動で実行します。サイズは1KByte。
LOAD() フラッシュからプログラムを読み出します。
TICK()    10msecのタイマー値です。7FFFまでいくと 0に戻ります。 systicを使ってます。>B=TICK()
TCL        TICKを ゼロクリアします。
RND        乱数発生    >A=RND(99)
BASICが使える大きさは 中間コードで 1KByteです。

以上の機能を詰め込んで、14KBに収めました。残量はあまり無いです。

電流は Vcc=3.3v時 実行時に ハイサイド電流計で 4.8mA(max)でした。
 ついでに。。。
電流波形は比較的にきれいでして、デジタルテスターでも読めます。
データシートには載らない部分ですが、
Vccが 3.3V=4.0mA、2.87v=5.84mA このあたりが下限のリセット電圧で、内部でモガイています。
2.7V=5.77mA、、2.42V=0.09mA では停止して下がります。 以下は2.0V=0.08mAでした。
    (2024/0829 追記おわり)

※ I/Oの指定は ピン番号を使いました。PC1=5ピンですが、PC1では配線できないし、20ピンではピン番が異なる。8ピ ンで使うののを前提で、8ピ ンチップ の番号を割り付けました。
※20ピンなら、全てのピンに拡張できます。全てのポートが使えます。安いしオススメです。
※ Tx,Rxピンも I/Oとして使えます。 例 M=ANA(1) とか A=IN1

3.LinkEはシリアルUSB変換器として使えます。 私のPCではCOM4と認識しました。
その状態で ターミナルソフトTeraTarmを立ち上げて、シリアル->COM4、設定は115200bpsでtBASICと通信できます。

MRSは EclipsのRISC版です。 NPX社のLPCに比べると、インストは楽です。アクチ不要でした。
プロジェクトが簡単に作れます。ターミナル+LinkEも使えて、結構便利です。デバックも、安定して使えます。

< 判ったこと、注意点は >
1. Cの標準ライブラリーはあっても、中は空なので使えません。LINKでエラーになります。
2.コンパイル効率を上げるためか、レジスタを多用していますので、エラーが発見しにくい。
3.WHILE文は要注意です。 条件が空のときもありました
4.変数の扱いも注意です。LoacalとGrovalの認識が危ない。
えてして コンパイラは けっこうあぶないです。 
変数は アドレスで指定する方式が固いです。ポインタを使うような。。。

5必要なところしか、触ってはいけない、好奇心は怪我の元です。
一度 LinkEをポアしました。LinkE上のリセットボタンを押しながらUSBに差し込んで、復旧しました。

6.PA2のADCが使えなかった件は、内部クロックの指定に変えて、使えています。
【参考 ◼️ CH32V003 マイコンの PA1 や PA2 が使えないときに確認すること

CH32VのPA2をADCで使うために内部クロックに変更した。

上のように変更しました。

7.内部の周辺デバイスは STM32と同じですので、参考になります。
ADコンバータ【STM32のADコンバータ詳細】https://depfields.com/adc/ 

8.周辺デバイスのサンプルは、下記にあり、Cで平易に記述されていて、判りやすいです。

https://www.wch.cn/downloads/CH32V003EVT_ZIP.html
これをコピペして使わせていただきました、これと 前記のSTM32のサイトを突き合わせると判りやすい。

特に フラッシュの扱いは 助かりました。

9.開発者の著作「タイニーBASICをCで書く 単行本-2016/4/25鈴木哲哉」は できれば 目を通しておいたほうがいいです。
本書の 第1章のさわり「お試し版」をソシム社のサイトで公開しています。
タイニーBASICをCで書く本

10.速度 ラズパイ版を3Aに入れました。 マンデルブロ集合をやってみた、SSHで15秒でした。 @40RISCでは8秒でした。
OSが絡むと遅くなります。 でも 早いぞ32bitRISC@24MHz

11. 20ピンの CH32V003F4P6 もお勧めです。
良い点
1)安い・・・@50
2)ピンが多い分だけ、GPIO、ADCが多い
3)SWDIOピンが別にある。
克服する点
4)足のピッチが狭い(0.65mm)のでハンダ付けのスキルアップできる。
5)拡張基盤の幅が広い。 スキニーがほしいです。 立たせればいいけど・・・
6)BASICでの I/O数の拡張は、ソースを見れば判りますが、単純です。フラッシュですので何度でもやり直しはできます。ただし、ROMの残量がSAVE領域を圧迫しますので注意して下さい。


< 私の作った サンプルソフトです >

11.作ってみました Hit and Blowです。
12.発振器 です。TICKの10msecを使って、HとLの長さ、繰り返し数、先出しはHか? を指示すると5ピンに出力します。繰り返しを1にすると ワンショット動作となります。

<その他 >
MiniGameを見つけました  その中のPacManです。 書き込みました 動きました。 いい動きしています。インベーダー、テトリスもあります。
RISC-PacManの操作方法
上の<イメージ>をクリックすると 動画に飛びます。
下は 書き込み方です。

MiniGame-PacManをCH32V-RISCに書き込み方法

13.豊四季BASICの作者さんに 感謝いたします。

14.気がかりなこと
AND,ORの論理演算が欲しかったが もう ROMに残は無いです。
SAVEは1KBです、RAMの限界の2KBにしておけばよかった。

以上 ページの先頭に戻ります。