楽天市場
[無料でホームページを作成] [通報・削除依頼]

続9 8ピンPICでUSB PIC16F57_USBIO (その2)

PIC16F57で多チャンネル化の検討を行いました。

img_20141025-114155.jpg

<回路図>

img_20141025-114221.jpg

<回路上の留意点>
以前のPIC16F57ではPORTA,3を出力として使用していましたが、今回の回路ではPORTA,3を使用せずPORTB(入出力選択可)、PORTC(出力専用)を使用します。

<ホストプログラム>
制御に使用するサンプルプログラム(ホスト)は16FUSBに付属の16FUSB_HID_DioSampleAPP.exeを改造したものを使用します。
PORTB(ビット8~F)の入出力の選択は左上段Tris内のチェックボックスにより設定します。起動時は0x00(全て出力)に設定されます。
チェックボックスをチェックすると該当するビットが出力から入力に切り替わります。
PORTC(ビット0~7)は出力専用のためTrisがありません。
制御可能な出力は8(最小)~16(最大)、入力は0(最小)~8(最大)となります。
バイナリとソースプログラムを同包しています。

<プログラム作成の留意点>

当初はPORTCも入出力選択できるようにしたかったのですが、レポートデスクリプタの記述を変更して、複数バイトのデータをやりとりしようとすると何故か動作が安定しませんでした。
そこでギリギリ実用的な線として入力ポートを8ビット確保可能な仕様としました。
PORTBの入出力選択に対応するため、PORTBの入出力状態を記憶する変数TrisBをRAM上に新設しました。

以下に転送フォーマットを示します、転送量は従来どうり入出力とも1バイトの仕様です。

?ホストから
bit7 Tris/Port選択 (1:Tris, 0:Port)
bit6 PORTB/PORTC選択 (1:PORTB, 0:PORTC)
bit5 データ上位/下位選択 (1:上位bit4-7, 0:下位bit0-3)
bit4 未使用
bit3-0 データ本体 (4ビット)

?ホストへ
bit7-0 PORTB入力データとTrisBの論理積 (8ビット)

解説:16FUSB_HID_DioSampleAPP.exeを起動し、上段Trisのチェックボックスにチェックを入れると、ホストは変更したTrisのデータをデバイスに転送する。デバイスはこのデータを識別(bit7-5)してTrisB中の上位または下位4ビットを変更し、PORTBのTrisを書き換える。
Trisが入力(=1)に書き換えられたPORTBのビットは入力専用となり、中断のInputのチェックボックスでモニタされる。このとき下段のOutputのチェックボックスは16個全て入力可能だが、PORTBの該当するビットが入力モードになっている為、該当するビットのチェックボックスをチェックしても出力は変化しない。

デバイスがPORTBの信号変化を検出すると、ホストへPORTBのデータを転送する。このときTrisBとの論理積をとって出力に設定されているビットの情報を無効(=0)にする。


ダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/

https://drive.google.com/file/d/1DnPIAgpF9CQBlg4P-F37g3Zb4V-6Mu6O/view?usp=drivesdk