📄 form10.frm
字号:
ImagineryDataLower = PortRead(&HD, &H97)
ImagineryData = ImagineryDataLower + (ImagineryDataUpper * 256)
If ImagineryData < &H7FFF Then
' Positive Data.
Else
' Negative
ImagineryData = ImagineryData And &H7FFF
ImagineryData = ImagineryData - &H7FFF
End If
Magnitude = ((RealData ^ 2) + (ImagineryData ^ 2)) ^ 0.5
' If (Form1.Option7.Value = True And Form1.Option8.Value = False) Then
' ' mid point cal
' sweep_phase = -(calibration_phase_mid_point - phase2(ImagineryData, RealData))
' GainFactor = Val(Text5.Text)
' Impedance = 1 / (Magnitude * GainFactor)
'
' End If
' If (Form1.Option7.Value = False And Form1.Option8.Value = True) Then
' ' multipoint cal
' sweep_phase = -(calibration_phase_multi_point(IndexArray) - phase2(ImagineryData, RealData))
' GainFactor = calibration_GainFactors(IndexArray)
' Impedance = 1 / (Magnitude * GainFactor)
' End If
' ' Write Data to each array.
' MagnitudeArray(IndexArray) = Impedance
' PhaseArray(IndexArray) = sweep_phase
' ImagineryDataArray(IndexArray) = ImagineryData
code(IndexArray) = Magnitude
' RealDataArray(IndexArray) = RealData
Increment = Increment - 1 ' incremet was set to number of increments of sweep at the start
' FrequencyPoints(IndexArray) = Frequency
Frequency = Frequency + FrequencyIncrements ' holds the current value of the sweep freq
IndexArray = IndexArray + 1
'------------- Check to see if sweep complete ----------------------
ReadbackStatusRegister = PortRead(&HD, &H8F)
ReadbackStatusRegister = ReadbackStatusRegister And &H4 ' mask off bit D2
' Increment to next frequency point Frequency
WritetToControlRegister &H80, &H30
Loop
'--- the sweep is complete at this point now we plot the data --------------
'Calculate the average impedance
Average_impedance = code(0)
Sum_impedance = 0
For i = 0 To NumberIncrements - 1
Sum_impedance = Sum_impedance + code(i)
Next i
Average_impedance = Sum_impedance / NumberIncrements
Sum_impedance = 0
'----------------------------------------------------------------------------
Text10.Text = Average_impedance
Average_impedance = 0
MsgBox " sweep complete "
Command6.Enabled = True
Exit Sub
sweepErrorMsg2:
MsgBox "Error completing Calibration sweep check values"
End Sub
' Writes one byte of data to part and reads back to verify
Private Sub WritetToPart(RegisterAddress As Long, RegisterData As Long)
Dim ReadbackFrequency As Long
PortWrite &HD, RegisterAddress, RegisterData
ReadbackFrequency = PortRead(&HD, RegisterAddress)
If ReadbackFrequency <> RegisterData Then
MsgBox "Error:Invaid data write/readback sequence to part.check power connections: "
End If
End Sub
Private Sub WritetToControlRegister(RegisterAddress As Long, RegisterData As Long)
Dim ReadbackFrequency As Long
RegisterData = RegisterData + Gain + OutputVoltage
PortWrite &HD, RegisterAddress, RegisterData
ReadbackFrequency = PortRead(&HD, RegisterAddress)
If ReadbackFrequency <> RegisterData Then
MsgBox "error"
End If
End Sub
Private Sub WritetToControlRegister2(RegisterAddress As Long, RegisterData As Long)
Dim ReadbackFrequency As Long
RegisterData = RegisterData
PortWrite &HD, RegisterAddress, RegisterData
ReadbackFrequency = PortRead(&HD, RegisterAddress)
If ReadbackFrequency <> RegisterData Then
MsgBox "error"
End If
End Sub
Public Sub msDelay(DelVal As Long)
Tstart = Timer
Do: Loop Until Timer > (Tstart + DelVal / 1000)
End Sub
Private Sub EnterStandbyMode()
' Enter Standby Mode Set Bits D15,D13,D12 in Control Register.
WritetToPart &H80, &HB0
'WritetToPart &H81, &H0
End Sub
Private Sub UpdateStartFrequency()
Dim TempStartFrequency As Double
Dim StartFrequencybyte0 As Long
Dim StartFrequencybyte2 As Long
Dim StartFrequencybyte1A As Long
Dim StartFrequencybyte1B As Long
Dim DDSRefClockFrequency As Double
DDSRefClockFrequency = Abs(Val(Form1.Text7.Text))
' Val converts Text1 string to hex format
StartFrequency = Val(Form1.Text1.Text)
TempStartFrequency = (StartFrequency / (DDSRefClockFrequency / 4)) * &HFFFFFF * 8
TempStartFrequency = Int(TempStartFrequency)
If (StartFrequency < 0) Then
Form1.Text1.Text = "0"
' Convert Start Frequency to 3 Byte local Variables.
StartFrequencybyte0 = 0
StartFrequencybyte1A = 0
StartFrequencybyte2 = 0
' Write in data to Start frequency register and verify
' correct contents written
WritetToPart &H84, StartFrequencybyte0 '84 hex lsb
WritetToPart &H83, StartFrequencybyte1A '83 hex
WritetToPart &H82, StartFrequencybyte2 '82 hex msb
Else
'-------------------------------------------------------------------------------------------------
StartFrequencybyte0 = TempStartFrequency And &HFF
StartFrequencybyte1A = ((TempStartFrequency And &HFF00) / 256)
StartFrequencybyte2 = ((TempStartFrequency And &HFF0000) / 65536)
StartFrequencybyte1B = StartFrequencybyte1A ' TEMPORY COPY OF StartFrequencybyte1A
If (StartFrequencybyte1A >= &HFF) Then ' is Dim StartFrequencybyte1a too big to transmit as 1 byte i.e ffhex
'if it is it must be broken up resulting in any overflow into a second byte being carried over to the third byte
'remember that the part will only store the bottom three bytes
StartFrequencybyte1B = StartFrequencybyte1B And &HFF
MSBfromStartFrequencybyte1B = (StartFrequencybyte1A And &HFF00) / 256
StartFrequencybyte2 = (StartFrequencybyte2 * 256) + MSBfromStartFrequencybyte1B
StartFrequencybyte2 = ((StartFrequencybyte2 * 256) + MSBfromStartFrequencybyte1B) And &HFF
End If
' Write in data to Start frequency register and verify
' correct contents written
WritetToPart &H84, StartFrequencybyte0 '84 hex lsb
WritetToPart &H83, StartFrequencybyte1B '83 hex
WritetToPart &H82, StartFrequencybyte2 '82 hex msb
'-------------------------------------------------------------------------------------------------
End If
End Sub
Private Sub UpdateFrequencyIncrement()
Dim FrequencyIncrementbyt0 As Long
Dim FrequencyIncrementbyt1A As Long
Dim FrequencyIncrementbyt1B As Long
Dim FrequencyIncrementbyt2 As Long
Dim TempStartFrequency As Double
Dim DDSRefClockFrequency As Double
' Val converts Text1 string to decimal format
FrequencyIncrements = Val(Form1.Text2.Text)
DDSRefClockFrequency = Abs(Val(Form1.Text7.Text))
TempStartFrequency = ((FrequencyIncrements / (DDSRefClockFrequency / 4)) * &HFFFFFF) * 8
TempStartFrequency = Int(TempStartFrequency)
'----------------------------------------------------------------------------------------
If (FrequencyIncrements < 0) Then
Text2.Text = "0"
' Convert increment Frequency to 3 Byte local Variables.
FrequencyIncrementbyt0 = 0 '84 hex lsb
FrequencyIncrementbyt1B = 0 '83 hex
FrequencyIncrementbyt2 = 0 '82 hex msb
' Write in data to frequency increment register and verify
' correct contents written
WritetToPart &H87, FrequencyIncrementbyt0 '84 hex lsb
WritetToPart &H86, FrequencyIncrementbyt1B '83 hex
WritetToPart &H85, FrequencyIncrementbyt2 '82 hex msb
Else
'----------------------------------------------------------------------------------------
' Convert Frequencyincrement to 3 Byte local Variables.
FrequencyIncrementbyt0 = TempStartFrequency And &HFF
FrequencyIncrementbyt1A = ((TempStartFrequency And &HFF00) / 256)
FrequencyIncrementbyt2 = ((TempStartFrequency And &HFF0000) / 65536)
FrequencyIncrementbyt1B = FrequencyIncrementbyt1A ' TEMPORY COPY OF FrequencyIncrementbyte1A
If (FrequencyIncrementbyt1A >= &HFF) Then ' is Dim StartFrequencybyte1a too big to transmit as 1 byte i.e ffhex
' if it is it must be broken up resulting in any overflow into a second byte being carried over to the third byte
' remember that the part will only store the bottom three bytes
FrequencyIncrementbyt1B = FrequencyIncrementbyt1B And &HFF
MSBfromFrequencyIncrementbyt1B = (FrequencyIncrementbyt1A And &HFF00) / 256
FrequencyIncrementbyt2 = (FrequencyIncrementbyt2 * 256) + MSBfromFrequencyIncrementbyt1B
FrequencyIncrementbyt2 = ((FrequencyIncrementbyt2 * 256) + MSBfromFrequencyIncrementbyt1B) And &HFF
End If
' Write in data to Start frequency register and verify
' correct contents written
WritetToPart &H87, FrequencyIncrementbyt0 '84 hex lsb
WritetToPart &H86, FrequencyIncrementbyt1B '83 hex
WritetToPart &H85, FrequencyIncrementbyt2 '82 hex msb
End If
End Sub
Private Sub UpdateNumberIncrements()
Dim NumberIncrementsbyte0 As Long
Dim NumberIncrementsbyte1 As Long
' Val converts Text1 string to hex format
NumberIncrements = Val(Form1.Text3.Text)
If (NumberIncrements >= 511) Then
NumberIncrements = 511
Text3.Text = "511"
ElseIf (NumberIncrements <= 0) Then
NumberIncrements = 1
Text3.Text = "1"
Else
NumberIncrements = Val(Form1.Text3.Text)
End If
' Convert Number Increments to 2 Byte local Variables.
NumberIncrementsbyte0 = NumberIncrements And &HFF
NumberIncrementsbyte1 = ((NumberIncrements And &HF00) / 511)
' Write in data to Number Increments register and verify
' correct contents written
WritetToPart &H89, NumberIncrementsbyte0
WritetToPart &H88, NumberIncrementsbyte1
End Sub
Private Sub UpdateSettlingTime()
Dim SettlingTimebyte0 As Long
Dim SettlingTimebyte1 As Long
' Val converts Text1 string to hex format
SettlingTime = Val(Form1.Text4.Text)
If (SettlingTime >= 511) Then
SettlingTime = 511
Text4.Text = "511"
Else
SettlingTime = Val(Form1.Text4.Text)
End If
' Convert Number Increments to 2 Byte local Variables.
SettlingTimebyte0 = SettlingTime And &HFF
SettlingTimebyte1 = ((SettlingTime And &HFF00) / 511)
' Write in data to Number Increments register and verify
' correct contents written
WritetToPart &H8B, SettlingTimebyte0
'SettlingTimebyte1 = (SettlingTimebyte1 Or &H0) ' Default to number of cycles x1
WritetToPart &H8A, SettlingTimebyte1
End Sub
Private Sub Command4_Click()
On Error GoTo sweepErrorMsg3
Dim ReadbackStatusRegister As Long
Dim RealData As Double
Dim RealDataUpper As Long
Dim RealDataLower As Long
Dim ImagineryData As Double
Dim ImagineryDataLower As Long
Dim ImagineryDataUpper As Long
Dim Magnitude As Double
Dim Impedance As Double
Dim Admittance As Double
Dim MaxMagnitude As Double
Dim MinMagnitude As Double
Dim MaxConductivity As Double
Dim MinConductivity As Double
Dim Sum_impedance As Double
Dim Sum_Admittance As Double
Dim Average_impedance As Double
Dim Average_Admittance As Double
Dim phase As Long
Dim Frequency As Double
Dim Increment As Long ' number of increments
Dim i As Integer
Dim xy As Variant
Dim varray As Variant
Dim AD5933_Gain_cal As Double
Dim AD5933_offset_cal As Double
IndexArray = 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -