2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« NanoScoutの資料公開 | トップページ | シェーキー再開です »

2011年11月23日 (水)

PICで走るTiny-BASICのまとめ

管理人のページ:

以前PIC16F886に乗せたTiny-BASICを作りましたが、バージョンが0.41と、かなり半端なところでとまっていましたので、このへんでまとめてしまいましょう。気分が悪いですからね。バージョン1.0をリリースしたいと思います。

以前の投稿は、今年の2月3月のアーカイブを見てください。製作の顛末がわかります。
実際のところ、このBASICはXBee経由でプログラムをダウンロードできるロボットの実験用として開発したものです。カメロという、WEBサイトからプログラムを送り込める「半自律型」リモートブレインロボットの実験に使用しました。
ブログにはあまり投稿していませんが、センサで周囲の障害物のマップを作るプログラムや、障害物から距離をとって安全に移動するプログラムなどを、WEBサイトから適切に送信・実行させてテストした結果、リアルタイム性の低いネットワークシステムでも移動ロボットの頭脳になりそう、というところまではこぎつけています。

今回は、そっち方向へ進化したHANA-BASICではなく、カンタンに作れるワンボードBASICコンピュータという切り口でまとめようと思います。そんなわけで、このようなボードコンピュータにまとめました。

Dscn1969

部品取付け領域が広い秋月のユニバーサル基板を使ってますが、ご覧の通り大陸的に(この言葉は電子工作のカリスマ、泉弘志先生がよく使っておられましたね)広々と組んでありますので、普通のユニバーサルでも十分に収まるでしょう。部品点数を減らすとともに、部品の種類も整理しました。抵抗2種類、コンデンサも2種類だけです。
USBシリアル変換モジュールは秋月のこれです。以前の回路同様、Xbeeにも対応しています。
回路図を含むマニュアルはこちらです。

「hanabasicv10.pdf」をダウンロード

Tiny-BASICでのプログラムがわかる方で、かつ本ブログを見た方でないとわかり難いですが。また、マニュアルを読めばお分かりのとおり、エラーチェックは未完成です。リポートされないエラーがあっても実行できてしまうので、おかしな結果を出すことがあります。万一使ってみたい方がいたら、そんなもんだと割り切って目視デバッグを心がけてください!

作例のハード面の特徴は、I/Oに電源とGNDが取れるピンソケットを付けたことです。ブレットボードを併用することでアナログ出力のセンサの実験などには重宝します。今回ナノスカウトで使ったガスセンサもこれでテストしています。TeraTermに読み出し値がカンタンに表示できるのは言うまでもありませんが、ガスセンサのようにシーケンシャルな制御が必要なものも、実に簡単にテストできるので意外と重宝します。

今回のバージョンではAUTO RUNモードを追加したのが最も大きな変更でしょう。
これはHANA-BASICボードをスタンドアロンで使うための機能で、BASICプログラムをロードした後、CTRL+Aキーをたたくと、それ以降、起動5秒後にそのBASICプログラムを自動的に実行するというものです。いちいちパソコンをつないでrunコマンドを打ち込む必要がなく、また、BASICプログラムは電源を切っても消えないEEPメモリに記憶されているので、電源投入ですぐ機能する組込みマイコンとして使うことが出来ます。
このモードを解除するには、パソコンを接続し、リセット後5秒以内にスペースバーを叩けばOKです。
また、細かい改良ですが、「RUNNING」LEDを常時点灯、プログラム実行時に点滅(それらしく)に変更しました。以前は電源が入っているかどうかわかり難かったのでパイロットランプをかねるようにしました。電流はその分くいますが。

こちらでccscを使ったMPLABプロジェクトファイルや回路図やPIC16F886に書き込むHEXファイル、それにBASICサンプルプログラムをおさめた、プロジェクト一式がダウンロードできます。

「HANA-BASIC_V10_PRJ.zip」をダウンロード

今回、これだけの内容で16F886のメモリ(8Kステップ)を90%も使用しています。昔のTiny-BASICと比べると、ちっともTinyな感じはしません。2Kとか4Kとかが相場でしたからね。
プログラムの設計が悪いせいもありますが、プログラムメモリやデータメモリのセグメントが小さいのもサイズ肥大の大きな要因になっています。アセンブラコードを見ると、別のページにある関数を呼び出すのにかなりステップ数を食っているのがわかります。ページ切り替えの処理ですね。今回のプログラムのように関数呼び出しが多いと、このオーバーヘッドは馬鹿になりません。
C言語でのPIC16の使用経験からすると、2Kステップまでは、結構入るなという感じですが、2Kを超えるあたりから堰を切ったようにプログラムメモリを消費するというイメージがあります。1ページのサイズが2kだからなんでしょうね。昔小さな組み込みマイコンでやったように、よく使うサブルーチンを呼ばれるページすべてにおいたりするようなセグメントを意識した作りにすれば、もっとコンパクトなコードになるでしょう。アセンブラで書けば、ですが。
ともあれ、本来のPICマイコンのアプリケーションとしては想定外のシロモノなのでしょう。

« NanoScoutの資料公開 | トップページ | シェーキー再開です »

管理人のページ」カテゴリの記事

コメント

HanaBasic 興味を持って見ています。
PICAXEなど新しい物も出ていますが初心者向けではなさそうです。
初心者向けにHANABASICが動作する部品KITを作成したいのですが
よろしいでしょうか?

コメントありがとうございます。オーナーのササガワです。
ご利用いだたくのは構いませんが、かなり昔に自分用に開発したものなので十分なサポートはできません。ご自身で十分にご試用いただいたうえで、ご検討ください。
ソースコードの二次配布、改変などに制限はありませんので、どうぞご自由にお使いください。

了承いただきありがとうございます。
ちなみに、当方で無償で書き込んだPICの添付もよろしいですか?

オーナーのササガワです。
もちろん問題ありません。

面白いですね。 楽しくプログラムしています。

1bit出力の実験
案外簡単に出来ました。
予約語として"b&0x7F" ; off7 とか有れば明示的で
分かりやすいかも。

load
b=0
:LOOP
a=@30
print a
if a100 then b=b&0x7F
if a200 then b=b&0xBF
@40=b
delay 100
goto LOOP
end
eof

インタプリタですが、面白ですね。 基本設計のセンスとリソースの使い方がすばらしいです。

・配列変数も良く出来ています。
・乱数も、電源を切って入れ直しても違う数字です。
 次回起動用に種を保存しているのでしょうか。
・Delayも16bitなので、最大が65535みたいですね。

load

for i=0 to 29
a=@36
@i=a
next i

for i=0 to 29
print @i
next i

print " "
print @0
print @1
print @2
print @3
print @4
print @5
print @6
print @7
print @8

end
eof

ブログオーナーのササガワです。
楽しんでいただけて何よりです。
乱数は中でタイマーを回しておき、RUNしたときの値をシードにしていたと思います。このためリセットしてもRUNするタイミングでシードが異なります。自動実行モードだとRUNのタイミングが一定なので、同じ乱数を繰り返すかもしれません。昔のことなのでちょっと記憶が曖昧ですが、そんな感じです。

ササガワさん、
HanaBasic楽しいです。
ひとつ ご相談したいことがあるのですが、メールいただけませんでしょうか?

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1140145/43077353

この記事へのトラックバック一覧です: PICで走るTiny-BASICのまとめ:

« NanoScoutの資料公開 | トップページ | シェーキー再開です »