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


PIC−USBIO using BASIC

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

[第171回]



●PICUSBIO−03(120)ADコンバータ(3)DAC出力をADCに入力する

今回は前回説明しましたCVREF出力(DAC出力)をADコンバータに入力することでADコンバータの動作テストを行ないます。
ADコンバータの入力端子はAN7(pinNo.7)を使います。
そこにCVREF出力(pinNo.14)をつなぎます。
AN7はフラットケーブルコネクタのNo.4につながっています。
CVREFはフラットケーブルNo.3につながっています。
ちょうど隣同士なので片側がコネクタで片側は切り離しのフラットケーブルの隣同士の線をつないでテストします。
下がその接続図(回路図)です。

右端が16pinフラットケーブルコネクタです。
そのpin3とpin4をつないでいます。
こうすることで自分が出力したアナログ値を自分で入力してテストすることができます。
簡単なセルフテストです。
DAC出力のほうは前回テスト済みです。
DACに与える値は5ビットですが、それをADコンバータに入力してもとのデジタル値に変換できればADコンバータも正しく機能していることになります。
下はそのように考えて作ったテストプログラムです。

プログラムで設定するREFCON1、REFCON2レジスタは[第169回]で説明しています。
またANSELは[第168回]のレジスタ一覧にあります。
ビットを’1’に設定したAN端子がアナログ端子に設定されます。
ADCON0〜ADCON2、ADRESH、ADRESLレジスタは[第167回]で説明をしています。
10行でDACをCVREF端子から出力可能にします。
20行はCVREF端子に対応するポート(RC2)とAN7に対応するポート(RC3)を入力に設定します(RC2は設定しなくてもよいらしいのですがRC3を設定するついでです)。
30行でAN7をアナログ端子に設定します(ANSELのbit7=1)。
40行でレジスタ右詰、アクイジションタイム=20TAD、ADCクロック=FOSC/64に設定します(BASICは実行速度が遅いのでコンバートクロックだけを速くしても無駄ですから一番遅いものを選択します)。
50行でADコンバータのプラス側電源にVDDを、マイナス側電源にVSS(GND)を設定します。
60行でCHS<3:0>=’0111’にセットしてAN7を選択します。
70行でGO/DONE=’0’、ADON=’1’にセットします。
80行〜130行のFOR〜NEXT文で変数aの値を0〜31まで変えます。
aはDACに与えるデジタル値です。
90行でREFCON2レジスタにaを書き込みます。
この値に対応する電圧値がCVREF端子から出力されます。
100行でADCON0のGO/DONEビットを’1’にしてADコンバートをスタートさせます。
110行と120行でADCON0、a、ADRESH、ADRESLの各16進数の値を表示します。
ADCON0はGO/DONE(ビット1)が’0’になってコンバートが完了していることを確認するために表示します。

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

結果の表示の最初の部分がスクロールして見えなくなってしまいました。
その部分を下に戻して表示しました。

左端のADCON0は全て’1D’でbit1のGO/DONEが’0’になっていることが確認できます。
真ん中の値がDACに与えたデジタル値(a)で右側の値がADコンバートして得られた値です。
aは5ビットであるのに対してADコンバート値は10ビットですからちょっと見ただけでは両者が同じなのかどうかわかりません。
10ビットの値のうちの上位5ビットを取り出しせば比較することができます。
たとえば$10に対する$01FEの10ビット部分は0111111110ですからその上位5ビットは01111です。
$0Fですがその下位には’1’が続いていますから$10に近い値であることがわかります。
そのような計算を全部に行なうのは面倒ですのでプログラムでそれをやってしまいます。
こういうときにもBASICは実に便利です。

プログラムの一部を変更しました。

110行で結果の値の上位8ビットを変数bに、下位8ビットを変数cに入れます。
120行でbとcを16ビットの値に合成した上で四捨五入するために16(’10000’)を加算します。
その値を32で割れば上位5ビットが取り出せます。
それをdに入れます。
130行で表示の末尾にdの値を追加しました。

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

今回も結果の表示の最初の部分がスクロールして見えなくなってしまいましたのでその部分を下に戻して表示しました。


プログラムで結果の値の上位5ビットを取り出してもとの値と比較したところ全て一致しました。
もとの値が5ビットですから10ビットのADコンバータの完全なテストにはなりませんが、ADコンバータの機能も一応は正しく働いていることが確認できました。

PIC−USBIO using BASIC[第171回]
2023.1.30upload

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