2022.9.20
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第58回]



●PICUSBIO−03(7)同じパソコンに2台のPICUSBIO−03を接続する(3)

前回からの続きです。
前回はPICUSBIO−03をWindows7パソコンに同時に2台USB接続してPICUSBIO用BASICを起動しました。
接続した2台のPICUSBIO−03には異なるIDナンバー(Release Number)を割り当てていたのですが、テストのためコマンドライン引数をつけないでBASICを起動しました。
その結果は想定していた通りで別々に立ち上げたコマンドプロンプトでそれぞれBASICを起動したのですがいずれもPICUSBIO−03のNo.30とUSB接続されました。
その状態でプログラムを実行するとどうなるか?

というところで前回は終りました。

その状態でプログラムを実行してみました。

同じ1台のPICUSBIO−03に対して2つの異なるプログラムから命令が送られますからまともに実行されないだろうということは当然予想がつきました。
同じ1台のPICUSBIO−03のI/Oポートからデータを出力して、そして同じPICUSBIO−03の同じI/Oポートからデータを入力するのですから、ちょっと考えるとうまくいくようにも思えますがそうは単純なことではないようです。
データを出力するときはPICの側でポートの向きを出力に設定したのちに出力しますが同じポートから入力するときはやはりまずPICの側でポートの向きを入力に設定してから値を入力します。
この時点で先に出力したデータは失われてしまいますから出力値を読み込むことはできません。
さらに考えてみると同じ1台のPICUSBIO−03に対して異なるBASICプログラムがアクセスしていることになります。
たとえてみれば。
正太郎と敵の怪人が別々の操縦器で鉄人28号を同時に操縦しようとしているようなものでありますね。
鉄人28号は狂ってしまいます。
上の画面の状況はたとえていえば、まあそんなような状態でありましょう。

しかし。
おそらく鉄人28号はコントロール不能に陥ってしまうでありましょうが、わがPICUSBIO−03の場合には制御不能というところまではいっていないようです。
そこで一体プログラムのどのあたりでどうなっているのか、もうすこし進んで確認してみることにいたしました。
状況からしてまともに動くはずがないというのは確かですから、それは酔狂というものですけれど。

プログラムの途中でループしているのは確かなようですから途中にPRINT文を追加してどこでループしているかがわかるようにしてみました。
こういうことが簡単にできるところがBASICインタプリタの有難いところです。

プログラムを実行しました。

上側のプログラムはデータをOUTする側のプログラムです。
60行で最初のデータをOUTしたあと70行、80行のところでループしているようです。
上の方に書きましたように入力データは読めないはず(入力ラインはプルアップしているのでこの場合Bポートの入力は$Fxになる)はずなのでここでのループは納得できます。
下側の状態はちょっと、はてな?です。
本来は20行、30行のところでPORTCの入力が$FFになってループするはずなのですがどういうわけか$F0が入力されるため、こちらのプログラムは見かけ上はまともに動作しているようです。
ここでPORTCから入力される値が$FFではなくて$F0であることから、以下のことが推測されます。
理由は2つのBASICが別々に同じPICUSBIO−3にアクセスしているところにあります。
上側のプログラムは50行でPICUSBIO−03に対して繰り返しPORTBの入力データを要求しています。
その値はおそらく$F0です。
その値がPICUSBIO−03の送信バッファに入ります。
そのときたまたま下側のプログラムが20行でPORTCからの入力データを要求したとすると、先に送信バッファに入っていた$F0が送出されることになります。
そしてPORTCから読み込まれた値(おそらく$FF)がPICUSBIO−03の送信バッファに入ります。
そのあとで上側のプログラムがPORTBの入力データを要求するとそのとき送信バッファにあった$FFが送出されることになります。
上の画面での下側のコマンドプロンプト窓の表示は連続高速で行なわれるのではなくてポツンポツンという感じで表示されていました。
おそらくたまたま上記のようなタイミングが発生したときに表示が行なわれると考えられます。
ま。
いずれにしてもまともに動くはずはない道理ですけれど。
それにしても暴走してしまったりハングアップしたりせずに2つのBASICプログラムがそれなりに動作しているというのはなかなかに興味深いことです。

PIC−USBIO using BASIC[第58回]
2022.9.20upload

前へ
次へ
ホームページトップへ戻る