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


PIC−USBIO using BASIC

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

[第54回]



●PICUSBIO−03(3)ビット列を補正したプログラム

前回はPICUSBIO−03とND80Z3.5を接続してSTROBE/READY方式でデータの入出力テストを行ないました。
接続には[第52回]で作成した16pin−26pinフラットケーブルコネクタを使いましたが16pin側と26pin側の信号配列が一致していないため出力した通りのデータが相手側に伝わりません。
今回はその信号配列を補正して相手に正しいデータが伝わるようにプログラムを直します。
ビット列の補正はND80Z3.5側のプログラムで行ないます。

下は補正したあとのプログラムです。

70行〜90行で補正を行なっています。
82C55のBポートから出力されるデータとPICUSBIO−03のPORTCに入力されるデータの関係は下のようになっています。
Bポート   B7  B6  B5  B4  B3  B2  B1  B0
PORTC  C6  C7  C4  C5  C2  C3  C0  C1
この関係を見るとBポートの偶数ビットを左にシフトし、奇数ビットを右にシフトするとPORTCのビット並びに一致することがわかります。
上のプログラムでは70行で偶数ビットをマスクしてそれを左にシフトしています。
整数値を2倍するともとの値が左にシフトします。
80行では奇数ビットをマスクしてそれを右にシフトしています。
整数値を2で割るともとの値が右にシフトします。
90行ではそのようにして得た2数を合わせることで目的の数を得ています。

PICUSBIO−03の側のプログラムは前回と同じです。


プログラムを実行しました。
PICUSBIO−03の側の画面です。

ND80Z3.5側のプログラムで出力データの値を補正したので1のビットが右から左にきれいにシフトしています。

こちらはND80Z3.5の側の画面です。

右側の値についてはまだ補正していませんのでPICUSBIO−03からエコーバックされた値がこちらから出力した値(左側)と一致していません。
最後の仕上げとしてその部分も補正します。

PICUSBIO−03の側のプログラムも直します。

値の補正はND80Z3.5のプログラムで行います。
こちらのプログラムではPORTCから入力した値の下位4ビットにシフトした1のビットがある期間はその下位4ビットをPORTBの上位4ビットから出力し、PORTCから入力した値の上位4ビットにシフトした1のビットがある期間はその上位4ビットをそのままPORTBの上位4ビットから出力するようにします。
こうすることでつねに1のビットを含む4ビットの値がエコーバックされます。
50行と60行でその変更を行なっています。

ND80Z3.5側のプログラムです。

PICUSBIO−03のPORTBから出力されるデータと82C55のCポートに入力されるデータの関係は下のようになっています。
PORTB   B7  B6  B5  B4
Cポート    C1  C0  C3  C2
この関係を見るとCポートの下位4ビットのうちの下位2ビット(C1、C0)を左に2ビットシフトし、上位2ビット(C3、C2)を右に2ビットシフトするとPORTBのビット並びに一致することがわかります。
上のプログラムでは140行で下位2ビットをマスクしてそれを左に2回シフトしています(4倍する)。
整数値を4倍するともとの値が左に2ビットシフトします。
150行では上位2ビットをマスクしてそれを右に2回シフトしています(4で割る)。
整数値を4で割るともとの値が右に2ビットシフトします。
160行ではそのようにして得た2数を合わせることで目的の数を得ています。

プログラムの実行結果です。

左側の出力した値と右側のエコーバックされた値が一致しました。

PIC−USBIO using BASIC[第54回]
2022.9.14upload

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