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


PIC−USBIO using BASIC

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

[第176回]



●PICUSBIO−03(125)ADコンバータ(8)DAコンバータと接続

前回までADコンバータについてのテストをしてきました。
ADコンバータについては大体は理解できたつもりです。
DAC出力およびFVR出力をデバイス内部のチャネルから入力する機能についてもテストをしました。
ADコンバータとしての普通の使い方についても外部アナログ入力チャネルにDAC外部出力をつないでテストをしました。
ADコンバータについてはそれで終ってもよいのですけれど。
当初はPICにDAコンバータの機能があるとは思っていなかったために、ADコンバータのテストをするためには外部にDAコンバータが別途必要になると考えていました。
そこでSPIモードのテストをするときにDAコンバータと接続して動作テストをしました([第123回])。
せっかくADコンバータのテストをするときのためにと思ってそのように準備したのですから、ADコンバータについての最後の締めくくりとしてDAコンバータ(MCP4911)の出力をPICUSBIO−03のAD入力に接続してテストをしてみることにしました。
下はその接続図です。

PICUSBIO−03にMCP4911を接続したときの回路図とPICUSBIO−03のADテストのときの回路図をそのままつなぎました。
図の上部がMCP4911と接続した側のPICUSB−03の回路(#1)で図の下側はそのMCP4911の出力をAD入力端子(AN7)で受ける側のPICUSB−03の回路(#0)です。
両者の間はMCP4911の出力とAN7入力を接続するほかは双方のGNDを接続しているだけです。

そのように接続した2台のPICUSBIO−03はそれぞれ別のコマンドプロンプトのPICUSBIO用BASICインタプリタで起動しました。

左側がADコンバータ入力を行なう側(#0)で右側がMCP4911と接続してDA出力を行なう側(#1)です。
右側のプログラムは[第124回]でMCP4911に出力用テストデータを送信するのに使ったプログラムです。
左側のプログラムは今までに作ったADC用のプログラムを参考にして作成しました。
左側のプログラムの説明です。
AN7をアナログ入力にするために端子を共用するRC3を入力に設定します(10行)。
それとともにANSELレジスタのビット7を’1’にしてAN7をアナログ入力にします(20行)。
30行、40行のADCON2、ADCON1は今までのADCの設定と同じです([第171回]参照)。
50行〜70行のADCON0についても[第171回]と同じです。
70行を実行するとAN7から入力されたアナログ値がデジタル値に変換されてADRESHレジスタとADRESLレジスタに入ります。
80行でその上位8ビットを変数aに読み込み、下位8ビットを変数bに読み込みます。
90行でデジタル値を電圧値(単位mV)に換算して変数dに入れます([第172回]参照)。
100行でデジタル値と電圧値を表示します。

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

先に右側を実行します。
ここでMCP4911に送信した値は$200(10進数の512)です。
50行の$38と60行の$00がその値です([第124回]参照)。
その後で左側を実行しました。
表示されたデジタル値は’01FF’ですから右側の’200’に対しては誤差の範囲です。
MCP4911側で計算した’200’の計算上の電圧値は2502mV([第124回]参照)でした。
今回はVDDについては測定しなかったのですが2台のPICUSBIO−03はそれぞれ別のUSBポートに接続していてともにUSBの+5VをVDDとして使っています。
上のMCP4911側で計算した電圧値はそのときの電圧値ですから今回のVDDの値とは異なっている可能性がありますし、USBポートから供給される+5Vもポートごとに異なっている可能性もあります。
それは今この記事を書いていて気が付いたことです。
本当は2つのUSBの+5V電圧も測定するべきなのですが、今回のテストも昨日行なったものなので厳密に言うとそのときの+5V電圧は今とは異なっているかもしれません。
そこまで考えるとUSBの+5Vを測り直した上でもう一度今回の動作テストをやり直さなければならないことになります。
そうなのですけれど。
相変わらず時間の無いなかで書いていますので、動作テストとしては「それなりの値」が出ていればよいということにして再テストはスルーすることにしました。
その割にはたまたまかも知れませんがよい値が出ていると思います。
しかしそのように気が付いたことですから念のためにUSBで供給されている+5Vの電圧をあらためて測ってみたところ両方とも5.03Vでした。
そこでVDD=5.03Vとして右側の出力電圧値を計算し直してみると512*5030/1023=2517mVになります。
左側の値は511*5030/1024=2510mVになります。
再計算してみても電圧値も誤差の範囲と考えてよいと思います。

[第124回]では続いてMCP4911に$300と$100を送ってテストを行ないました。
今回もそれと同じことをやってみます。

右側のプログラムの50行を書き換えました([第124回]参照)。
MCP4911に与えた値は’300’です。
そのあと右側を先に実行してから左側を実行しました。
表示されたデジタル値は’0301’ですから右側の’300’に対しては誤差の範囲です。
[第124回]で計算した’300’の計算上の電圧値は3731mVでした。
VDD=5.03Vとして計算をし直してみると768*5030/1023=3776mVになります。
左側の値は769*5030/1024=3777mVになります。
たまたまかもしれませんが再計算した電圧値はぴったり一致しました。

最後のテストです。

右側のプログラムの50行を書き換えました([第124回]参照)。
MCP4911に与えた値は’100’です。
そのあと右側を先に実行してから左側を実行しました。
表示されたデジタル値は’0100’ですから右側と一致しました。
[第124回]で計算した’100’の計算上の電圧値は1244mVでした。
VDD=5.03Vとして計算をし直してみると256*5030/1023=1259mVになります。
左側の値は256*5030/1024=1258mVになります。
電圧値も一致しました。

PIC−USBIO using BASIC[第176回]
2023.2.4upload

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