電圧を測定するためのプログラム
注.おもなプロシージャを表示しています。
左のプログラムで動作する
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
となる。
デジタル信号を電圧に変
換する計算式の求め方
もどる