'PC parallel port working with MCP3302 SPI device
'
option explicit
Dim CmdStr0, CmdStr1 As String
Dim Ary(24) As Long
'port addresses
Const Po378 = &H378, Pi379 = &H379, P37A = &H37A, P37B = &H37B
'command string for MCP3302 SPI
CmdStr0 = Trim("000000011000000000000000") ' chn0
CmdStr1 = Trim("000000011100000000000000") ' chn1
Const EhDhCh = 7 'cs hi, do hi, clk hi'' ready state
Const ElDhCh = 3 'cs lo, do hi, clk hi
Const ElDhCl = 2 'cs lo, do hi, clk lo
Const ElDlCh = 1 'cs lo, do lo, clk hi
Const ElDlCl = 0 'cs lo, do lo, clk lo
Const Dinp = &H80 '' '0000,0001_1000,0000_0000,0000
'-------------------------------------
Private Sub Form_Load()
Form1.Show
MakePwrAry
CmdStr0 = Trim("000000011000000000000000") ' chn0
CmdStr1 = Trim("000000011100000000000000") ' chn1
End Sub
'---------------------------------
Private Sub ReadSPI()
DoEvents
Out Po378, ElDhCh
'send data bits to ADC msb 1st
For p = 1 To 24
If Mid$(CmdStr0, p, 1) = "1" Then
Out Po378, ElDhCh
Out Po378, ElDhCl '''ClDh
Out Po378, ElDhCh ''ChDh
Else ' lo
Out Po378, ElDlCh
Out Po378, ElDlCl ''ClDl
Out Po378, ElDlCh ''''ChDl
End If
V = Inp(Pi379) And Dinp
If V <> Dinp Then
ADCValue1 = ADCValue1 + Ary(p)
End If
Next p
Out Po378, EhDhCh
End Sub
'-----------------------------
Private Sub MakePwrAry()
'precalculate weighting for array when ADC is read,
Dim p As Long
p = 1
For z = 24 To 13 Step -1
Ary(z) = p
p = p * 2
Next z
For z = 12 To 1 Step -1
Ary(z) = 0
Next z
End Sub