PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第182回]
●実数演算
[第6回]に書きましたようにPICUSBIO用のBASICインタプリタはずっと今まで計算機能としては整数演算のみのBASICとして紹介をしてきました。
計算の対象が基本的にPICのI/O制御に限定されますから整数を扱うことが中心になります。
計算とは言うもののたとえばI/Oから入力した値の比較などが中心であとは個数、回数などのカウントが主な対象になるかと思います。
PICUSBIO用のBASICインタプリタの作成を思い立った当初はそういう基本的な考えでスタートしましたし、それについては今でも大体はそういうことだと思っております。
ところがADコンバータについて考えることになったあたりから、整数だけではちょいと不便かもしれない、と思うようになりました。
ADコンバータは[第167回]から書いています。
[第170回]ではPIC内蔵の可変基準電圧を計測しました。
そのときはデジタル値を電卓で計算するとともにDACの出力をデジタルテスターで測定しました。
フルスケールが5Vの値ですからそこの表にありますように全てが小数点以下の数を含む実数値です。
この値をADコンバータで読み取ると16進数が返ってくることになります。
それをただ10進数に直すだけではだめで電圧値に換算する必要があります。
つまりは当然小数点以下の値まで計算することになります。
しかし整数BASICではそれは無理な話です。
が。
たまたまその値については単位をVではなくてmVにすればなんとかいける、ということを思いつきました。
それで「整数計算」のみで実質的には小数点以下の数値を演算したのが[第172回]です。
そのように工夫さえすれば整数演算のみでもなんとかなるとは思います。
思いますけれど。
ちょいと面白くないのですよねえ。
こういう用途もあるということがわかってしまうと、せめて簡単でもよいから実数計算ができるとよいじゃありませんか。
しかし。
そりゃあ迷いましたです。
もう当初の腹積もりから考えたら連載期間も随分長くなってしまっています。
やりたいことややらなくてはならないことは山ほど抱えてしまっています。
今になってから実数計算機能まで組み込むなど、本音で言えばやめておきたいところです。
決して簡単なことではないのです。
当初からずっと処理の対象は整数型と文字型のみを扱うということで組み立ててきたプログラムを一度壊してそこに実数型をはめこまなければなりません。
せっかくそれなりにうまく動作しているというのに、きっとバグに悩むことになるに違いない。
できれば止めておきたい。
そう思いつつ。
なんとか時間をみつけてプログラムの改造にとりかかってしまいました。
その結果。
ハンパな機能ではありますが。
なんとか最低限の実数計算機能を組み込むことができました。
さっそくテストをしたのはもちろん[第172回]のプログラムです。
下は[第172回]で作ったプログラムです。
取得した16進数を「mV」単位の10進数に変換しています。
そこのところを「V」単位の実数に換算して表示するように変更しました(下のプログラム)。
実数計算機能を付加するにあたって変数名をどうするかということでちょっと悩みました。
整数計算と実数計算を区別するスイッチとしては計算式の左辺に置く変数名の型を使うのが無理の無い方法です。
Cではその型は変数名ごとにプログラムの先頭で定義します。
BASICとしてはそういう面倒なことは御免です。
私が若い頃に使っていた昔のFORTRANでは変数名の最初の1文字がi〜nの変数は整数型という(暗黙の?)ルールがありました。
それを使おうかとも思ったのですが自由な名前がつけられないという制約が出てきます。
結局ちょいと面倒ですけれど変数名の後ろに’!’をつけたら実数型ということにしました。
ちなみに当BASICインタプリタでは変数名のうしろに’$’をつけたら文字型変数であることを示します。
今回組み込んだ実数演算機能は時間がないなかでとりあえず最低限の機能にしましたので、実数計算は=の右辺で2項のみの計算に限ります。
a+b
a−b
a*b
a/b
の4通りのみです。
a、bは整数でも構いません。
そのルールのためにもとの整数計算では一度で行なっていたところを二度に分けて行っています。
120行では先に整数の計算を行なってそれをdに入れたあと、dを1024で割って得た実数値をdd!に入れています。
125行では同様にして整数値のeを計算したあとe/32をee!に入れています。
プログラムを実行した結果です。
今気が付きました。
3番目が実測値で4番目が計算値になっています。
[第172回]の結果とは並びが逆になってしまいました。
今からやり直すのも面倒ですのでこのままにしておきます。
下はスクロールして見えなくなった部分です。
実数の表示は数値の大きさに関係なくつねに小数部は6桁です。
このあたりも含めて時間ができたら機能アップしたいと思っています。
PIC−USBIO using BASIC[第182回]
2023.2.11upload
前へ
次へ
ホームページトップへ戻る