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


PIC−USBIO using BASIC

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

[第170回]



●PICUSBIO−03(119)基準電圧(2)DACの出力テスト

前回はPIC18F13K50のData Sheetでデバイスの「基準電圧」として説明しているものにはDACとFVRの2種類があると書きました。
FVRは「固定出力」ですが1.024V、2.048V、4.096Vの3通りが選べます。
その出力値はADCのチャネル’F’から入力することができそうですが直接電圧を測定することはできません(その方法はDACを使えば可能ですが)。
DACはデバイスの14pin(CVREF)から出力することができます。
まずはその出力をテスタで測ってみました。

ところが。
最初に測ってみたところ想定していたのと全く違った値になって面食らってしまいました。
DAC出力は+側の電圧をVDDに、−側をVSS(GND)にしたとき、VDD*n/32になります。
ここでnはREFCON2レジスタのbit4〜bit0で定義する5ビットの値(0〜31)です。
REFCON2=$1FにしたときDAC出力は4.94Vになったので、まあそんなところかと思ったのですが、REFCON2=$00にしたところDAC出力はまさかの約1.4Vになりました。
計算上の値は当然0Vです。

なぜだあ?
ここでおよそ1日の間迷走することになりました。
あかん。
わからん。
一体全体どうしたことなのだ。
そういえば。
DAC出力にはバッファをつけるべきという記述がありました(前回、「基準電圧の出力」参照)。
いや。
しかし。
テスターをあてただけでもいかんのか。
さすがに昔のアナログテスタではありませぬ。
安物とはいえデジタルテスタですぞ。
冬の日は短いです。
窓の外はすでに暗くなってきています。

1Fと00以外の値も入力して測ってみると00に近い値のときほど階差が大きく、1Fに近くなるにつれて階差が縮まりVDDに近い値に近付いてきます。
全然線形ではありません。
コンデンサの充電波形のグラフのような感じです。
うむむむむ。
どう考えてもCVREF出力にVDDから流入している電流があるとしか思えません。

流入?
おお!
そうか!

プルアップだ!
そうでした。
やっと気が付きました。

一般的なI/Oの動作テストをするためにPICUSBIO−03のI/O端子は10KΩの抵抗でVDDにプルアップしていたのでした([第52回]参照)。
プルアップ抵抗を外してあらためて確認してみたところ、今度はREFCON2=$00の設定で出力がほぼ0Vになりました。
やれやれ、です。
ほっと安心したところで、REFCON2に$00〜$1Fを入れてCVREF端子の電圧をテスターで測ってみました。
こういうときにBASICインタプリタは本当に便利です。
ダイレクトモードで
picout REFCON1,$E0
を実行したあと
picout REFCON2,$00
を実行するだけでCVREF端子にREFCON2=$00のときの電圧が出力されます。
あとはカーソルを上に上げて。
えっと。
文字で説明するよりも画像で見ていただいたほうが早いですね。

上で説明した通りを入力したところです。

これでpicout REFCON2,$00がダイレクト実行されました。
ここでCVREF端子の電圧を測定します。

次に[↑]キーと[→]キーを使ってカーソルを’$00’のところまで移動します。

ちなみに普通のコマンドプロンプト画面では[↑][→]キーを使ってカーソルを移動させることはできません。
上の画面ではPICUSBIO用BASICインタプリタが実行されていて、スクリーンエディタが働いているのでカーソルの移動ができて、そこで[Enter]キーを押せばそのラインにある命令を入力することができるのです。

末尾の’0’を’1’に書き換えました。


そこで[Enter]キーを押しました。

これでpicout REFCON2,$01がダイレクト実行されました。
ここでCVREF端子の電圧を測定します。

以下同様にして$1Fまで値を変えて入力しながら電圧を測定しました。

REFCON1の設定は最初に1度だけ実行すればその後書き換えない限りずっと有効です。
REFCON1、REFCON2は前回お見せしましたが下に再掲します。

REFCON1のbit7=’1’、bit5=’1’でDACの電圧値がCVREF端子から出力されます。
<bit3:bit2>=’00’でDACの+電源がVDDになります。
bit0=’0’でDACの−電源がVSS(GND)になります。

REFCON1が上記の設定のとき、
REFCON2の<bit4:bit0>の値をnとするとDACの電圧はVDD*n/32になります。


[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet


[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

下は上のようにして測定したCVREFの電圧値です。
REFCON2   計算値(V)   実測値(V)
00 0.008
01 0.156 0.168
02 0.313 0.326
03 0.469 0.478
04 0.625 0.633
05 0.781 0.790
06 0.938 0.946
07 1.094 1.100
08 1.25 1.254
09 1.406 1.414
0A 1.563 1.569
0B 1.719 1.726
0C 1.875 1.879
0D 2.031 2.035
0E 2.188 2.187
0F 2.344 2.339
10 2.5 2.492
11 2.656 2.647
12 2.813 2.804
13 2.969 2.959
14 3.125 3.115
15 3.281 3.269
16 3.438 3.424
17 3.594 3.580
18 3.75 3.734
19 3.906 3.895
1A 4.063 4.07
1B 4.219 4.23
1C 4.375 4.39
1D 4.531 4.55
1E 4.688 4.70
1F 4.844 4.86

計算値に近い実測値が得られています。
PICUSBIO−03のVDDはUSBの+5Vをそのまま利用しています。
そこのところが気になったので念のために測ってみました。
上の実測値からみて多分大丈夫だろうとは思いましたけれど。
実測した結果は5.03Vでした。
これなら大丈夫でしょう。

次回はこのCVREF出力を使ってADコンバータのテストをしてみます。

PIC−USBIO using BASIC[第170回]
2023.1.29upload

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