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


PIC−USBIO using BASIC

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

[第59回]



●PICUSBIO−03(8)TRISC、TRISB、PORTC、PORTB

このところ書いておりますPICUSBIO−03はそれ以前に紹介してきました一連のPICUSBIOボードとは根本的に異なっているところがあります。
その違いについては以前にも書いたと思います。
PICUSBIO−03以外のボードはボード全体がI/Oポートとしてまとまっていてそこに搭載されているPICはただのUSBインターフェースICとして扱っているのに対してPICUSBIO−03はPIC自体をI/Oポートとして扱っているという点にあります。
しかしI/Oポートとしてその機能を比べると他のボードにはポートが24ビットあるのに対してPICUSBIO−03はその半分のわずか12ポートしかありません。
24ビットものI/Oポートは必要なくて12ポートもあれば十分という用途があったとして、もしも価格が他のボードよりも安価ならばそういうボードもあってもよいか、という程度の価値しかないように思われるかもしれません。
しかし。
PICUSBIO−03はそのほかのボードにはない大きなメリットがあるのです(作った当初は私自身がそのことに気が付いていませんでした)。

こういうボードを作ろうと思い立ったそもそものきっかけはWindowsパソコンで82C55の制御ができたらそれなりに用途があるのではと考えたからでした。
その昔のWindows95やWindows98(WindowsXPも?)はI/Oポート(パラレルポート、プリンタポート、その実体は82C55)を使ってパソコン上のソフトで外部のI/O回路を直接制御することができました。
しかしそれ以後のWindowsにはパラレルポートもなくなってしまいそういうことが簡単にできなくなってしまいました。
それに代わって今はなんでもUSBの時代になりました。
ならばUSBでWindowsパソコンにI/Oポート回路をつないでそれを制御できれば昔と同じことができるようになるではないか。
そのように考えたのがそもそもの始まりでした。
そこでUSBインターフェース付きの82C55回路ボードや82C55的回路ボードなどの一連のボードを開発したのでした。
その過程でふと、少ないビット数のポートでよければPICの外にわざわざ別のI/O回路をつけなくてもPICだけでもよいのでは、と思いついて作ってしまったのがPICUSBIO−03でした。
その時点では私自身の認識としてもPICUSBIO−03はただの12ビットI/Oボードに過ぎませんでした。

しかし当連載も回を重ねていくなかでBASICの機能もそれなりに向上し、またテストプログラムを作ってあれこれテストをしていく中でPICUSBIO−03にはそのほかにはない別の可能性があることに気が付きました。
往々にして短所も見方を変えれば長所となることがあります。
PICUSBIO−03はI/Oポートのビット数が少ないことは他のボードに比べれば短所かもしれませんが、それ自体がI/Oであるという点に注目すれば大きな長所となります。

前回まではPICUSBIO−03もそれまでのボードと同じように扱ってきました。
PIC内蔵のPORTCとPORTBに対してBASICのIN、OUTで入出力をする使い方です。
ほんとうはPORTCを入力ポート、出力ポートとして使うためには方向制御のためのレジスタTRISCの設定が必要です。
同様にPORTBに対してはTRISBの設定が必要です。
PICUSBIO用BASICではそこのところを簡略化してPICUSBIO−03に対してOUT命令を実行するとPIC内部のプログラムでTRISC(TRISB)にコントロールワードを送りポートの向きを出力に設定してからデータを出力するようにしてあります。
同様にPICに対してIN関数を実行するとTRISC(TRISB)にコントロールワードを送りポートの向きを入力に設定してからデータを入力するようにしてあります。
余計な操作が不要であるだけ便利であるといえます。

しかし便利である反面、何らかの機能を犠牲にしていることも事実です。
色々考えたのですけれどPIC自体のI/Oポート、PORTB、PORTCを簡単に扱うにはそれしかないという結論になったため上記のような使い方になりました。
そのため犠牲にしたのはTRISB、TRISCに直接アクセスできないことと、出力ポートに対して入力を実行することができないという点です。
82C55の場合たとえばCポートが出力に設定されている場合にそのCポートに対してINを実行するとそれ以前に出力されてラッチされていた値がそのまま読み込まれます。
一方でPICUSBIO−03の場合たとえばPORTCに対してINを実行するとその時点で先にポートの向きを入力に設定するためそれ以前に出力されていたかもしれない出力データは失われてしまって読み込むことはできません。

それが一体なんなの?
とお思いかもしれませんが。
それはたとえばの一例です。
回が進んでいくうちに
「おお、そういうことか!」
ときっと納得していただけることと思います。

前置きが長くなってしまいました。
PICUSBIO−03のI/Oポートに対してはそれまでのボードと同じようにOUT命令、IN関数を使った簡便なアクセス方法に加えて、直接TRISC、TRISB、PORTC、PORTBにアクセスすることができる機能を付加しました。

前置きが長くなってしまいましたので本日は時間がなくなってしまいました。
この続きは次回に致します。

PIC−USBIO using BASIC[第59回]
2022.9.21upload

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