PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第181回]
●PICUSBIO−03(130)I/Oポート
前回でやっとPICUSBIO−03についての説明が完了したと思ったのですが。
実は少し前からちょっと気になっていることがありました。
過去記事をざっと確認してみたところ、本来ならいの一番に説明しなければならないはずの「I/Oポート」の説明がなくて「TIMER0」から始まっています。
どうやらI/Oポートについては説明したつもりになっていたようです。
I/Oポートはポピュラーな機能ですしこれまで作ってきた多くのテストプログラムの中でごく普通に使ってきましたからあえて説明しなくてもよいようなものですけれど。
やっぱり一応は簡単にでも説明しておくべきでありましょう。
というわけで今回は今更ながらですが「I/Oポート」について簡単にまとめておきたいと思います。
いつものようにPIC18F13K50のData Sheetを読みながらの説明です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●I/Oポート
(PIC18F13K50にはポートA、ポートB、ポートCの)3ポートがあります。
I/Oポートの一部はデバイスの周辺機能と端子を共用しています。
通常(端子を共用している)周辺機能がイネーブル(有効)な場合、その端子は汎用I/O端子としては使えません。
各ポートには次の3つのレジスタがあります。
・TRISレジスタ(データ方向レジスタ)
・PORTレジスタ(デバイス端子の入力レベルを読む)
・LATレジスタ(出力ラッチ)
LATレジスタはI/O端子から出力されているデータに対するリードモディファイライト操作に有益なレジスタです。
リードモディファイライトはポートに対してビットセット、ビットリセットなどの命令を実行するときにシステムが実行する機能です。
I/O端子に容量性の負荷がかっている場合などにはLATレジスタが必要になることがありますが、BASICの場合には気にする必要はありません。
PORTAはUSB、クロック発振回路などに使っているのでI/Oポートとしては使えません。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●PORTB、TRISB、LATBレジスタ
PORTBは4ビットで入出力可能なポートです。
方向レジスタはTRISBです。
TRISBのビットを1にセットすると対応するPORTBの端子は入力になります(出力ドライバは無効になります)。
TRISBのビットを0クリアすると対応するPORTBの端子は出力になります(出力ドライバが有効になり出力ラッチの値が端子から出力されます)。
PORTBデータラッチレジスタ(LATB)もメモリにマップされています。
LATBレジスタに対するリードモディファイライト操作はPORTBに出力されたラッチデータをリードしライトします。
BASICの場合にはLATBレジスタは意識する必要はありません。
入力も出力もPORTBに対して実行して構いません。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●プルアップ
PORTBの全ての端子には内部で(高抵抗で)プルアップする機能があります。
WPUBレジスタのビットをセットすると対応する端子がプルアップされます。
原文ではこのあとINTCON2レジスタのRABPUビットについての複雑な説明がありますがPORTB割込みに関係する設定と考えられます。
本稿ではPORTBの割込みについては扱いません。
普通はWPUBのビットセットでプルアップあり、ビットクリアでプルアップなしと考えてよいと思います。
PORT端子を出力に設定するとプルアップは自動的にOFFになります。
プルアップはパワーONリセットでOFFになります。
Note:パワーONリセットによってRB<5:4>はアナログ入力に設定され(I/Oポートとして)読むと’0’が読み出されます。
’weak pull−up’とありますから高抵抗でプルアップするという意味だと思います。
一体どの程度の抵抗値なのかが気になるところです。
Data Sheetを最初から終わりまで検索してみたところ一箇所だけ数値が記載されているところがみつかりました。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
下から3番目の項目D070のところにあります。
VDD=5Vの場合に端子をVSSにつないだときにプルアップ抵抗に流れる電流値です。
50μA〜400μAとありますから抵抗値は5/0.05=100(KΩ)〜5/0.4=12.5(KΩ)になります。
標準は250μAですから5/0.25=20(KΩ)になります。
なおD070には*がついています。
*を見ると’not tested’とありますから「目安にしてくださいねー」ということだと思います。
下はPORTB レジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
PORTBはビット7〜ビット4の4ビットです。
bit7−4 RB<7:4>PORTB I/O端子ビット
1=ポート端子は>VIH
0=ポート端子は<VIL
bit3−0 未実装(’0’が読み出されます)
下はTRISBレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−4 TRISB<7:4>PORTB 3ステートコントロールビット
1=PORTB端子は入力になる(3ステート)*
0=PORTB端子は出力になる
bit3−0 未実装(’0’が読み出されます)
*入力は「出力」ではありませんから3ステート(ハイインピーダンス)と考えてもよいという意味でしょう。
下はWPUBレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−4 WPUB<7:4>プルアップイネーブル(有効)ビット
1=プルアップ有り
0=プルアップ無し
bit3−0 未実装(’0’が読み出されます)
下はLATBレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−4 LATB<7:4>RB<7:4>ポートI/O出力ラッチレジスタビット
bit3−0 未実装(’0’が読み出されます)
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●PORTC、TRISC、LATCレジスタ
PORTCは8ビットで入出力可能なポートです。
方向レジスタはTRISCです。
TRISCのビットを1にセットすると対応するPORTCの端子は入力になります(出力ドライバは無効になります)。
TRISCのビットを0クリアすると対応するPORTCの端子は出力になります(出力ドライバが有効になり出力ラッチの値が端子から出力されます)。
PORTCデータラッチレジスタ(LATC)もメモリにマップされています。
LATCレジスタに対するリードモディファイライト操作はPORTCに出力されたラッチデータをリードしライトします。
BASICの場合にはLATCレジスタは意識する必要はありません。
入力も出力もPORTCに対して実行して構いません。
PORTCの全ての端子にはシュミットトリガ入力バッファがついています。
各端子は端子ごとに入力、出力に設定できます。
Note:パワーONリセットによってRC<7:6>およびRC<3:0>はアナログ入力に設定され(I/Oポートとして)読むと’0’が読み出されます。
下はPORTCレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−0 RC<7:0>PORTC I/O端子ビット
1=ポート端子は>VIH
0=ポート端子は<VIL
下はTRISCレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−0 TRISC<7:0>PORTC 3ステートコントロールビット
1=PORTC端子は入力になる(3ステート)*
0=PORTC端子は出力になる
*入力は「出力」ではありませんから3ステート(ハイインピーダンス)と考えてもよいという意味でしょう。
下はLATCレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−0 LATC<7:0>RC<7:0>ポートI/O出力ラッチレジスタビット
原文でRB<7:0>とあるのはミスプリントだと思います。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
●ポートアナログコントロール
いくつかのポート端子はたとえばADコンバータとかコンパレータなどのアナログ機能と端子を共用しています。
これらのI/O端子をアナログ入力として使うときはデジタル入力の不適切なバイアスによって過剰な電流が流れるのを避けるためにデジタル入力バッファを無効にする必要があります。
アナログ機能と端子を共用するデジタル入力バッファの制御はANSELおよびANSELHレジスタで行ないます。
ANSxビットを’1’にセットすると対応するデジタル入力バッファは無効にされアナログ入力が有効である間は(デジタル入力として)その端子を読むと’0’が返ります。
ANSxビットの状態はデジタル出力には影響しません。
TRISxビットを0クリアしかつANSxビットをセットした端子はデジタル出力として働きますが入力はアナログ入力モードとして働きます。
下はANSELレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7 ANS7:RC3 アナログセレクトコントロールビット
1=RC3のデジタル入力バッファはディスエーブル(無効)になる
0=RC3のデジタル入力バッファはイネーブル(有効)になる
bit6 ANS6:RC2 アナログセレクトコントロールビット
1=RC2のデジタル入力バッファはディスエーブル(無効)になる
0=RC2のデジタル入力バッファはイネーブル(有効)になる
bit5 ANS5:RC1 アナログセレクトコントロールビット
1=RC1のデジタル入力バッファはディスエーブル(無効)になる
0=RC1のデジタル入力バッファはイネーブル(有効)になる
bit4 ANS4:RC0 アナログセレクトコントロールビット
1=RC0のデジタル入力バッファはディスエーブル(無効)になる
0=RC0のデジタル入力バッファはイネーブル(有効)になる
bit3 ANS3:RA4 アナログセレクトコントロールビット
1=RA4のデジタル入力バッファはディスエーブル(無効)になる
0=RA4のデジタル入力バッファはイネーブル(有効)になる
bit2−0 未実装(’0’が読み出されます)
下はANSELHレジスタです。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit7−4 未実装(’0’が読み出されます)
bit3 ANS11:RB5 アナログセレクトコントロールビット
1=RB5のデジタル入力バッファはディスエーブル(無効)になる
0=RB5のデジタル入力バッファはイネーブル(有効)になる
bit2 ANS10:RB4 アナログセレクトコントロールビット
1=RB4のデジタル入力バッファはディスエーブル(無効)になる
0=RB4のデジタル入力バッファはイネーブル(有効)になる
bit1 ANS9:RC7 アナログセレクトコントロールビット
1=RC7のデジタル入力バッファはディスエーブル(無効)になる
0=RC7のデジタル入力バッファはイネーブル(有効)になる
bit0 ANS8:RC6 アナログセレクトコントロールビット
1=RC6のデジタル入力バッファはディスエーブル(無効)になる
0=RC6のデジタル入力バッファはイネーブル(有効)になる
●PICUSBIO−03のパワーON後のポートの設定
PIC18F13K50はデフォルトではパワーON後はアナログと端子を共用するポートはアナログモードになります。
またI/Oポートの向きは入力になります。
しかしPICUSBIO−03は起動後にUSB接続の設定を行なうなど、BASICインタプリタのための独自の設定を行ないます。
そのなかでアナログと端子を共用するポートはデジタルモードになります。
PIUCUSBIO用BASICインタプリタを起動してポートの初期的な状態を確認してみました。
TRISB=00、TRISC=EFになりました。
PORTBのRB7−RB4は出力、PORTCはRC4のみ出力で他のビットは入力です。
どうも今までの他のPICUSBIOボードの設定をそのまま受けているようで、ちょっと中途半端な設定です。
この設定についてはどうするかちょっと検討してみることにします。
ANSELおよびANSELHは全ビットが’0’ですからアナログと端子を兼用するポートは全部デジタルに設定しています。
PIC−USBIO using BASIC[第181回]
2023.2.9upload
前へ
次へ
ホームページトップへ戻る