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


PIC−USBIO using BASIC

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

[第179回]



●PICUSBIO−03(128)コンパレータモジュール(3)555の三角波を入力

PIC18F13K50のコンパレータモジュールはC1とC2の2組あります。
しかし外部入力端子も出力端子も2組のモジュールで共用しているので両方を同時に使うためには工夫が必要になります。
外部出力端子は1本しかありませんからどちらかの出力しか使えません。
内部に出力することはできますからもう一方の出力は内部出力にしてそれをソフトウェアで読み取るという使い方になるかと思います。
外部入力端子は非反転入力C12IN1−〜C12IN3−の3入力から選べますから2組のコンパレータに別々の入力信号を割り当てるという使い方ができると思います。
2組のコンパレータを同時に使うというような使い方は本稿で扱う範囲を超えますからここでは1組のコンパレータを使ってごく単純なテストをしてみます。

コンパレータの使い方として典型的なものは[第177回]の最初のところでお見せしたFigure18−1のような使い方だと思います。
上下に震動するアナログ波を入力してそれを一定の電圧値と比較することでデジタル信号に変換します。
そのテストをするためには適当なアナログ信号が必要です。
アナログ波形を発生するような装置があればよいのですが今までアナログ回路には余り縁が無かったものですからそんな気の利いたものは持ち合わせておりません。
何かテストに利用できる簡単なものを作ろうと考えて思いついたのはNE555回路です。
NE555は通常はデジタルのパルス波を発生することなどに使います。
出力はデジタルなのですがそのパルス波を発生させる元のところではRCを使ったノコギリ波が出ています。
それが利用できるのではと思いました。
555は8ピンのICでコンデンサ1個と抵抗2本で簡単にパルス波出力回路を組むことができます。
さっそく即席で組むつもりだったのですが。
ちょっと待てよ。
555ならND80Z3.5で7セグメントLED表示回路に使っているじゃありませんか。
それが利用できたら世話はありません。
こちらがND80Z3.5の555回路です。

pin6のところにノコギリ波が出ています。
R28とR29を介してC22を充放電することでできるノコギリ波です。
オシロで確認してみたところ2〜3.5V程度の狭い範囲ですがなんとか利用できそうな波形が確認できました。
これならなんとか使えそうです。

こちらがテスト中の写真です。

左側がPICUSBIO−03です。
右側はテストに使っているND80ZVですが555回路はND80Z3.5と変わりません。
555のpin6とPICUSBIO−03のC12IN3−(RC3)をフラットケーブルとミノムシクリップを使って接続しました。
コンパレータの入力としてはC12IN1−〜C12IN3−のどれを使ってもよいのですがAD変換のテストのときにAN7を入力に使いましたから同じRC3兼用端子のC12IN3−を使うことにしました。
PIC18F13K50の端子接続図は[第72回]にありますから参照してください。
それとPICUSBIO−03とND80ZVの両方のGNDを同じようにフラットケーブルとミノムシクリップを使って接続しました。

下が作成したプログラムです。

たった5行だけでそれも全てレジスタに値を書き込むだけです。
コンパレータモジュールは一度設定するとプログラムの実行から離れて単独で機能するようになりますから、プログラムは必要な設定が済んだら終了してしまっても構いません。
プログラムの説明です。
コンパレータ出力C12OUTはRC4と端子を共用しています。
コンパレータ入力C12IN3−はRC3と端子を共用しています。
10行でRC4を出力、RC3を入力に設定します(TRSCのbit4=0、bit3=1、その他のビットはとりあえず出力に設定)。
20行でC12IN3−に対応する端子をアナログ入力に設定します。
C12IN3−はAN7と端子を共用しています。
ANSELレジスタは[第168回]にレジスタのビット図があります。
AN7はANSELレジスタのビット7です。
対応するビットを’1’にするとその端子がアナログ入力になります。
今回のテストでは555からの入力波形が2V〜3.5Vぐらいなのでコンパレータの入力しきい値を3Vぐらいのところに決めました。
555からの入力信号はC12IN3−端子を経由してコンパレータのC1VIN−(反転入力)につなぎます。
C1VIN+(非反転入力)には内部基準電圧としてはVREF(CVREF)とFVRのいずれかをつなぐことになりますが今回は設定値として約+3Vが必要ですから可変基準電圧VREF(CVREF)を接続します。
そのどちらを選択するかはCM2CON1レジスタのC1RSELビットで決定します。
C1RSELビット(CM2CON1レジスタのビット5)を’0’にするとCVREFが選択され、同時にCVREFはC1VREFに接続されます。
C1RSELビットはデフォルトでは’0’ですからCM2CON1レジスタを設定する必要はありません(CM2CON1レジスタは前回で説明しています)。
C1VREFはREFCON1レジスタとREFCON2レジスタで設定します([第170回]参照)。
今回はDAC出力は外部端子に出力せず内部でコンパレータ入力につなぎますからREFCON1レジスタのbit5=0、プラス側電源はVDD(<bit3:bit2>=00)、マイナス側電源はGND(bit0=0)に設定します(30行でREFCON1=$C0に設定)。
REFCON2レジスタはDACの出力電圧を決定します。
[第170回]のCVREFの電圧値の表で見ると設定値が$13のときに出力電圧が約3VになっていますからREFCON2に$13を設定します(40行)。
50行で最終的なコンパレータC1の設定を行ないます。
CM1CON0レジスタは前回説明しました。
bit7=1でC1をイネーブル(有効)にします。
bit6はC1OUTの設定ですがC1POLビットの設定が関係しています。
今回はアナログ入力信号を反転入力(C1VIN−)につなぎますがデジタル出力はそれと同相にします。
出力が反転する設定ですからC1POL(bit4)=1にします。
なのでC1OUT(bit6)は’0’にします。
bit5もC1OUTの設定ですがC2OUTの設定が優先します。
C2OUTはCM2CON0レジスタのC2OE(bit4)=0のときは無視できます。
C2OEビットはデフォルトでは’0’なのでC2OUTは無視できます。
結果としてbit5=1にします。
bit4は上で’1’にしました。
bit3はどちらでもよいのですがBASICは遅いのでここは低速(=’0’)を選択します。
基準電圧としてはC1VREFを使いますからbit2=1にします。
信号入力端子はC12IN3−にしますから<bit1:bit0>は’11’にします。
以上によりCM1CON0レジスタには’10110111’($B7)を設定します。

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

下は実行後にオシロで観測した波形です。

上側(CH1)は555のpin6の波形です。
下側(CH2)はコンパレータC1の出力波形です。
CH1が3V近くまで上がったところでコンパレータの出力がHになっています。
CH1の波形は下がり方が急なので3Vが境であるとは確認できませんが3.5V〜2Vの間でCH2がLになっていることは間違いありません。
ちょっとアバウトですけれどコンパレータモジュールの簡単な動作テストとしてはこんなところでよいのではないかと思います。

PIC−USBIO using BASIC[第179回]
2023.2.7upload

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