2005-12-08

USB-An(アナログ入力)テストPG 

現在試用中のUSB-Anの動作確認をした時に実際にコーディングした内容を載せておきます。
言語はActiveBasicで
vbausbio.dll(本拠地で公開している汎用USB-IOをコントロールするためのもの)を使用しています。
USB-Anに対しては入力ができるように初期値を設定し、
入力するアナログポートを指定後、
データを取得といった手順になります。
取得後値を換算して温度表示させています。
ログ出力を含めてもこの程度のコーディングでOKです。

'---------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

'--------------------------------------
' Main画面が閉じられた時の処理
'--------------------------------------
Sub MainWnd_Destroy()
USBANTEST_DestroyObjects()
PostQuitMessage(0)
End Sub

'--------------------------------------
' ボタンが押された時の処理
'--------------------------------------
Sub MainWnd_CommandButton1_Click()


'USB-An初期処理
AnInit()

'1分毎のインターバルタイマーを起動する
SetTimer(hMainWnd,1,60000,0)

'Logタイトルを出力する
LogTitle()

'データ収集
AnGet()

End Sub

'--------------------------------------
' タイマー割り込みが発生した時の処理
'--------------------------------------
Sub MainWnd_Timer(TimerID As DWord)

'データ収集
AnGet()

End Sub

'--------------------------------------------------------
' ここから下は、ユーザー定義関数を記述するための領域になります。

'======================================
' Anポート初期処理
'======================================
Sub AnInit()

Dim lngRet As Long

'ポート0 READ設定(読み込みが可能なようにOFFを出力)
'全ピンread
lngRet =uio_out(0,&HFF,0)

'ポート1 
'An3入力 (上位2ビット:Anポート 下位2ビット:下位2ビット入力値)
'3(0011):An0 7(0111):An1 11(1011):Pin2-An2 15(1111):An-3
lngRet =uio_out(1,&H0F,0)

'AD変換が落ち着くまで待つ
Sleep(500)

End Sub

'======================================
' データ収集処理
'======================================
Sub AnGet()

Dim lngRet As Long

Dim lAnPinNo As Long
Dim byRData As Byte
Dim sglData As Single
Dim strData as String

'An入力ピン切替
lAnPinNo = 0
lngRet =uio_out(1, lAnPinNo * &H4 + &H3, 0)

'8Bit入力
lngRet =uio_inp(byRData,0,0)

'8Bit(0-255)の値を温度(0-50)に変換する
sglData = byRData*50/255
'EditBoxに値を表示
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Str$(sglData))

'ログファイルに出力する
LogWrite(sglData)
End Sub

'======================================
' ログ初期処理(タイトル出力)
'======================================
Sub LogTitle()

Open "log.csv" As #1
'最初(ファイルが空)の時にタイトルを出力
If Eof(1) Then
Print #1, "日付,時間,温度"
End If
Close #1

End Sub

'======================================
' ログ出力処理
'======================================
Sub LogWrite(sglData as Single)

Dim strData As String

strData = Date$()+","+Time$()+","+Str$(sglData)
Open "log.csv" For Append as #1
Print #1, strData
Close #1

End Sub

2005-12-06

USB-An(汎用USBでアナログ入力) 

Km2Netから新たに販売されているUSB-Anを現在試用中です。

これは汎用USB-IOにアナログ入力が可能なPICを組み合わせたもので送料込みで3000円(Km2Netで確認してください)販売されているものです。

汎用USB-IOはネーミング通りでデジタルのIO(入出力)ができるものですがアナログを扱うためにはAD変換ICやPICなどで別に回路を組まないといけなかったのですが、USB-Anの基板のみで(汎用USB-IOと同じ命令で)アナログデータが扱えます。

また、ジャンパー設定でアナログ入力1とデジタルIO4のパターンからアナログ5とデジタル無しのパターンまで6通りのパターンで入力ができます。

写真ではLM35(温度IC)とレベル変換用のLM358で0~50℃を0V~5Vの電圧になるように回路を組み温度計として機能するようにしています。(基板の右下にたくさん穴が空いている場所がフリースペースで自由に回路が組めるようになっています、その場所に組み込んでいます)
回路はLM35(実験)を参考にしています。

プログラムも回路も簡単にできました。LM35(実験)の回路通りで部品も4点、プログラムも4行程度
です、もちろん実際のプログラムでは表示したりファイルに書いたりする処理を追加したのでそれなりに行数が増えました。

あとは精度がどれくらいあるのか気になります、コンピュータ(USBの5V)から電源を取っているのでどれくらいコンピュータの5Vが安定化されているかにより精度が決まるのではないかと思っています。
2.5V程度の定電圧を発生させて同時にアナログ入力させて補正をしようかと思っています。
5Vが変動してもアナログ値が取得できるようになるのではと思っています。

色々試して、結果をホームページに載せる予定です。 Posted by Picasa