電圧を測定するためのプログラム
注.おもなプロシージャを表示しています。
左のプログラムで動作する
A/Dコンバータ
解説中心
標準モジュールに記述
標準モジュールに記述
電圧測定のため、コマンドボタンに書かれたプログラムコードは、以下の通りである。プログラム言語はVBAを
使用した。これをVBでプログラミングしても、記述はほとんど同じであるので、VBへの変更も簡単に行える。タイミ
ング図にあわせて解説する。最も基本となるプロシージャは、コマンドボタン3に書かれた以下のコードである。
Private Sub CommandButton3_Click()
Dim comname As String '配列宣言、文字列を宣言する。
comname = "COM1" '使用するポート名。
check = rsio_open(comname) 'Commポートをオープンする。 ・・・・・・・・・・@
dummy = rsio_INI 'タイミングの初期化。・・・・・・・・・・・・・・A
adresult = AD_con(0) * 5 / 255 '入力値を電圧値に換算する式。・・・・・・・・・・B
Cells(4, 4).Value = adresult '差動入力1の変換結果をセル番地D4に表示する。
End Sub
このプログラムコードを解説する。
@ Commポートをオープンするプロシージャー(以下標準モジュール)
Function rsio_open(comname As String) As Boolean
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const OPEN_EXISTING = 3
hComm = CreateFile(comname, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)
If hComm <> -1 Then rsio_open = True Else rsio_open = False
End Function
・2行目 オープン方法で”読み”を選択する数値。
・3行目 オープン方法で”書き”を選択する数値。
・4行目 既存ファイルをオープンする数値(&H3)。
・ファイルをオープンする関数(CreateFile関数)、戻り値は成功すればハンドル番号、失敗すれば−1にな
る。
A タイミングを初期化してタイミング図のAの位置にする。
Function rsio_INI() As Boolean
For i = 0 To 20
clock_HL 'CLOCKを与える
If cs_check = 0 Then Exit For '74LS390の出力がLならぬける
Next i
For i = 0 To 20
clock_HL 'CLOCKを与える
If cs_check = 1 Then Exit For '74LS390の出力がHならぬける
Next i
End Function 'タイミング図のAの位置。
B 電圧を測定するプロシージャー。
Function AD_con(ch As Integer) As Integer
Dim inComm As Long
Dim j As Integer
Dim i As Integer
Dim ad As Integer
For j = 0 To 1 '差動の場合はODD/DIGNの値を変えて2回測定する
For i = 0 To 20
clock_HL 'CSをLにする。タイミング図のBの位置。
If cs_check = 0 Then Exit For '74LS390の出力をLにする
Next i
datain_H 'STARBITをセットする
clock_HL 'クロックを与えて、Cの位置にする。
datain_L '差動入力をCH0,1で行うので、SGL/DIFをLにセットする。
clock_HL 'クロックを与える。
If j = 0 Then 'ODD/SIGNをセットする
datain_L '1回目は0にする。このとき、CH0は+、CH1は−になる。
Else
datain_H '2回目は1、0と1の極性を入れ替える。
End If
clock_HL 'クロックを与える。
If ch = 0 Then 'SELECTをセットする
datain_L 'CH0,1を使う
Else
datain_H 'CH2,3を使う
End If
clock_HL 'クロックを与えて、Dの位置にする。MUX SETTING TIME
ad = 0
For i = 7 To 0 Step -1 '8回シフトして変換値を取得する
clock_HL 'クロックを与えて、Eの位置から8クロックをスタート。
dummy = GetCommModemStatus(hComm, inComm) 'RS-232Cの状態を読みとる。
If (inComm And MS_DSR_ON) = 0 Then '変換結果を読みとる。
ad = ad + 2 ^ i '重みを乗じてデータを蓄積する。
End If
Next i
For i = 0 To 2 'CSをHにしてリセットする。
clock_HL '余分の3クロックを進める。
Next i
If ad <> 0 And j = 0 Then Exit For '1回目の符号どおりであれば1回でやめる
ad = ad * -1 '2回目であればマイナスをつける
Next j
AD_con = ad 'データ値をAD_conに代入する。
End Function
【計算式】
0V〜5Vを0〜255に分割してい
るから、求める電圧をχとすると、
χ:AD_con=5:255
より
χ=AD_con*5/255
となる。
デジタル信号を電圧に変
換する計算式の求め方