26 from time
import gmtime, strftime
30 from tkFileDialog
import askopenfilename
31 from tkFileDialog
import asksaveasfilename
32 from tkSimpleDialog
import askstring
33 from tkMessageBox
import *
44 RevDate =
"(2 March 2020)"
46 Version_url =
'https://github.com/analogdevicesinc/alice/releases/download/1.3.1/alice-desktop-1.3-setup.exe'
49 R0lGODlhIAAgAHAAACH5BAEAAAIALAAAAAAgACAAgQAAAP///wAAAAAAAAJJhI+py+0PYwtBWkDp
50 hTnv2XlfEobjUZZnmn4se72vJMtcbYN4ruz44uORgiodsfI4Im++2M5VW81OmBbVULxiRVrUsgsO
55 root.title(
"ALICE DeskTop " + SWRev + RevDate +
": ALM1000 Oscilloscope")
56 img = PhotoImage(data=TBicon)
57 root.call(
'wm',
'iconphoto', root._w,
'-default', img)
96 MouseCAV = MouseCAI = MouseCBV = MouseCBI = MouseMuxA = MouseMuxB = MouseMuxC = MouseMuxD = -10
98 COLORframes =
"#000080"
99 COLORcanvas =
"#000000"
100 COLORgrid =
"#808080"
101 COLORzeroline =
"#0000ff"
102 COLORtrace1 =
"#00ff00"
103 COLORtrace2 =
"#ff8000"
104 COLORtrace3 =
"#00ffff"
105 COLORtrace4 =
"#ffff00"
106 COLORtrace5 =
"#ff00ff"
107 COLORtrace6 =
"#C80000"
108 COLORtrace7 =
"#8080ff"
109 COLORtraceR1 =
"#008000"
110 COLORtraceR2 =
"#905000"
111 COLORtraceR3 =
"#008080"
112 COLORtraceR4 =
"#808000"
113 COLORtraceR5 =
"#800080"
114 COLORtraceR6 =
"#800000"
115 COLORtraceR7 =
"#4040a0"
116 COLORtext =
"#ffffff"
117 COLORtrigger =
"#ff0000"
118 COLORsignalband =
"#ff0000"
125 BaseSampleRate = 100000
126 AWGSAMPLErate = BaseSampleRate
127 SAMPLErate = BaseSampleRate
133 MathString =
"VBuffA[t] + VBuffB[t]"
135 MathXString =
"VBuffA[t]"
137 MathYString =
"VBuffB[t]"
139 UserAString =
"MaxV1-VATop"
140 UserALabel =
"OverShoot"
141 UserBString =
"MinV2-VBBase"
142 UserBLabel =
"UnderShoot"
146 AWGAMathString =
"(VBuffA + VBuffB)/2"
147 AWGBMathString =
"(VBuffA + VBuffB)/2"
148 FFTUserWindowString =
"numpy.kaiser(SMPfft, 14) * 3"
149 DigFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
150 DigFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
151 ChaMeasString1 =
"DCV1"
152 ChaMeasString2 =
"DCI1"
153 ChaMeasString3 =
"SV1"
154 ChaMeasString4 =
"MaxV1-MinV1"
155 ChaMeasString5 =
"MaxI1-MinI1"
156 ChaMeasString6 =
"math.sqrt(SV1**2 - DCV1**2)"
157 ChbMeasString1 =
"DCV2"
158 ChbMeasString2 =
"DCI2"
159 ChbMeasString3 =
"SV2"
160 ChbMeasString4 =
"MaxV2-MinV2"
161 ChbMeasString5 =
"MaxI2-MinI2"
162 ChbMeasString6 =
"math.sqrt(SV2**2 - DCV2**2)"
163 ChaLableSrring1 =
"CHA-DCV "
164 ChaLableSrring2 =
"CHA-DCI "
165 ChaLableSrring3 =
"CHA-TRMS "
166 ChaLableSrring4 =
"CHA-VP-P "
167 ChaLableSrring5 =
"CHA-IP-P "
168 ChaLableSrring6 =
"CHA-ACRMS "
169 ChbLableSrring1 =
"CHB-DCV "
170 ChbLableSrring2 =
"CHB-DCI "
171 ChbLableSrring3 =
"CHB-TRMS "
172 ChbLableSrring4 =
"CHB-VP-P "
173 ChbLableSrring5 =
"CHB-IP-P "
174 ChbLableSrring6 =
"CHB-ACRMS "
176 GridWidth = IntVar(0)
178 TRACEwidth = IntVar(0)
180 TRACEaverage = IntVar(0)
184 HarmonicMarkers = IntVar(0)
185 HarmonicMarkers.set(3)
186 AWG_Amp_Mode = IntVar(0)
189 Two_X_Sample = IntVar(0)
191 ADC_Mux_Mode = IntVar(0)
193 Last_ADC_Mux_Mode = 0
194 Alternate_Sweep_Mode = IntVar(0)
195 Alternate_Sweep_Mode.set(0)
197 ZEROstuffing = IntVar(0)
199 FFTwindow = IntVar(0)
202 RelPhaseCorrection = 15
203 RelPhaseCenter = IntVar(0)
204 RelPhaseCenter.set(0)
205 ImpedanceCenter = IntVar(0)
206 ImpedanceCenter.set(0)
207 MultipleBoards = IntVar(0)
208 MultipleBoards.set(0)
209 IgnoreFirmwareCheck = 0
210 EnableCommandInterface = 0
213 EnableMinigenMode = 0
214 EnablePmodDA1Mode = 0
216 EnableGenericSerialMode = 0
217 EnableAD5626SerialMode = 0
218 EnableDigitalFilter = 0
219 EnableMeasureScreen = 0
222 AllowFlashFirmware = 0
238 CHA_TC1 = DoubleVar(0)
240 CHA_TC2 = DoubleVar(0)
242 CHB_TC1 = DoubleVar(0)
244 CHB_TC2 = DoubleVar(0)
246 CHA_A1 = DoubleVar(0)
248 CHA_A2 = DoubleVar(0)
250 CHB_A1 = DoubleVar(0)
252 CHB_A2 = DoubleVar(0)
258 InitFile = open(
"alice_init.ini")
259 for line
in InitFile:
261 exec( line.rstrip() )
263 print(
"Skiping " + line.rstrip())
266 print(
"No Init File Read")
269 XOLF = XOLBP = XOLXY = XOLIA = int(FontSize * 4.625)
270 XOLNqP = XOLNiC = int(FontSize * 3.125)
274 root.style.theme_use(Style_String)
276 root.style.theme_use(
'default')
278 root.tk_focusFollowsMouse()
282 default_font = tkFont.nametofont(
"TkDefaultFont")
283 default_font.configure(size=FontSize)
285 CHvpdiv = (0.001, 0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0)
287 CHipdiv = (0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
289 TMpdiv = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
290 ResScalediv = (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000)
291 SampRateList = (1024, 2048, 4096, 8192, 16384, 32765, 64000, 96385, 96774, 97166, 97561, 97959, 98361, 98765, 99174, 99585, 100000)
294 AWGAOffsetvalue = 0.0
298 AWGADutyCyclevalue = 50
301 AWGBOffsetvalue = 0.0
305 AWGBDutyCyclevalue = 50
315 MeasGateStatus = IntVar(0)
316 MeasGateStatus.set(0)
318 DCV1 = DCV2 = MinV1 = MaxV1 = MinV2 = MaxV2 = MidV1 = PPV1 = MidV2 = PPV2 = SV1 = SI1 = 0
320 DCVMuxA = MinVMuxA = MaxVMuxA = MidVMuxA = PPVMuxA = SVMuxA = 0
321 DCVMuxB = MinVMuxB = MaxVMuxB = MidVMuxB = PPVMuxB = SVMuxB = 0
322 DCVMuxC = MinVMuxC = MaxVMuxC = MidVMuxC = PPVMuxC = SVMuxC = 0
323 DCVMuxD = MinVMuxD = MaxVMuxD = MidVMuxD = PPVMuxD = SVMuxD = 0
324 DCI1 = DCI2 = MinI1 = MaxI1 = MinI2 = MaxI2 = MidI1 = PPI1 = MidI2 = PPI2 = SV2 = SI2 = 0
325 CHAperiod = CHAfreq = CHBperiod = CHBfreq = 0
327 CHAVGain = CHBVGain = 1.0
328 CHAVOffset = CHBVOffset = 0.0
330 CHAOffset = CHBOffset = CHBAOffset = CHBBOffset = CHBCOffset = CHBDOffset = 2.5
331 CHAIOffset = CHBIOffset = InOffA = InGainA = InOffB = InGainB = 0.0
333 CANVASwidth = GRW + 2 * X0L
334 CANVASheight = GRH + Y0T + (FontSize * 7)
357 DigFiltABoxCar = IntVar(0)
358 DigFiltBBoxCar = IntVar(0)
367 SampleRateStatus = IntVar(0)
368 ETSStatus = IntVar(0)
376 VmemoryA = numpy.ones(1)
377 VmemoryB = numpy.ones(1)
378 ImemoryA = numpy.ones(1)
379 ImemoryB = numpy.ones(1)
380 TRACEresetTime =
True
381 TRACEresetFreq =
True
382 AWGScreenStatus = IntVar(0)
414 ScreenTrefresh = IntVar(0)
415 ScreenXYrefresh = IntVar(0)
417 ZEROstuffing = IntVar(0)
425 CurrentFreqX = X0LBP + 14
426 FBins = numpy.linspace(0, 50000, num=16384)
427 FStep = numpy.linspace(0, 16384, num=NSteps.get())
428 FSweepMode = IntVar(0)
429 FSweepCont = IntVar(0)
430 FStepSync = IntVar(0)
431 FSweepSync = IntVar(0)
432 ShowCA_VdB = IntVar(0)
434 ShowCB_VdB = IntVar(0)
436 ShowMarkerBP = IntVar(0)
437 ShowCA_RdB = IntVar(0)
438 ShowCA_RP = IntVar(0)
439 ShowCB_RdB = IntVar(0)
440 ShowCB_RP = IntVar(0)
441 ShowMathBP = IntVar(0)
442 ShowRMathBP = IntVar(0)
443 SingleShotSA = IntVar(0)
452 NetworkScreenStatus = IntVar(0)
453 BDSweepFile = IntVar(0)
457 MarkerNum = MarkerFreqNum = 0
460 TCursor = VCursor = 0
463 XCursor = YCursor = 0
465 ShowdBCur = IntVar(0)
466 FCursor = dBCursor = 0
467 ShowBPCur = IntVar(0)
468 ShowBdBCur = IntVar(0)
469 BPCursor = BdBCursor = 0
470 RUNstatus = IntVar(0)
475 DBdivlist = [1, 2, 3, 5, 10, 15, 20]
476 DBdivindex = IntVar(0)
480 DBdivindexBP = IntVar(0)
482 DBlevelBP = IntVar(0)
485 SpectrumScreenStatus = IntVar(0)
486 SmoothCurvesSA = IntVar(0)
487 SmoothCurvesBP = IntVar(0)
489 IAScreenStatus = IntVar(0)
490 NqPScreenStatus = IntVar(0)
492 NiCScreenStatus = IntVar(0)
494 ImpedanceMagnitude = 0.0
496 ImpedanceRseries = 0.0
497 ImpedanceXseries = 0.0
498 Show_Rseries = IntVar(0)
499 Show_Xseries = IntVar(0)
500 Show_Magnitude = IntVar(0)
501 Show_Angle = IntVar(0)
502 Show_RseriesRef = IntVar(0)
503 Show_XseriesRef = IntVar(0)
504 Show_MagnitudeRef = IntVar(0)
505 Show_AngleRef = IntVar(0)
519 DisplaySeries = IntVar(0)
520 IA_Ext_Conf = IntVar(0)
521 IASweepSaved = IntVar(0)
529 OhmStatus = IntVar(0)
530 OhmRunStatus = IntVar(0)
540 FFTmemoryA = numpy.ones(1)
541 PhaseMemoryA = numpy.ones(1)
542 FFTmemoryB = numpy.ones(1)
543 PhaseMemoryB = numpy.ones(1)
544 SMPfftpwrTwo = IntVar(0)
546 SMPfft = 2 ** SMPfftpwrTwo.get()
548 FFTwindowshape = numpy.ones(SMPfft)
560 FreqTraceMode = IntVar(0)
577 MathScreenStatus = IntVar(0)
579 XYScreenStatus = IntVar(0)
608 SDATAPort = IntVar(0)
609 SLATCHPort = IntVar(0)
613 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
614 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
615 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
616 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
617 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
618 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
619 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
620 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
621 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
622 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
623 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
624 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
625 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
626 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
627 sKDBgw8AKFzIsKFChA4jMoQoUSJFAAgHLryYUeDGgx8zhiw4EuRDkxg7ltR4UmRLki9RclQZk2VK
628 lzdh5pTJE+dMnz1/6uyYsKZHowRXHt1pcGREohUbQo2qNKlDolgFBgQAOw==
630 hipulseimg = PhotoImage(data=hipulse)
633 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
634 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
635 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
636 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
637 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
638 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
639 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
640 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
641 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
642 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
643 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
644 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
645 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
646 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
647 sKBBggASKgRwEOHChwsbDoRIkaHEBxQdWpSosGHHix8NhvSYkORGkyhBljw4kuVKkS9TwjzpkubE
648 mDVl6tR4ESPOmzYLtgTac6hAozxzqgzqkynRmhUhmoz6cCpVpD0vBgQAOw==
650 lowpulseimg = PhotoImage(data=lowpulse)
680 self.
widget.after_cancel(id)
684 x, y, cx, cy = self.
widget.bbox(
"insert")
685 x += self.
widget.winfo_rootx() + 25
686 y += self.
widget.winfo_rooty() + 20
690 self.
tw.wm_overrideredirect(
True)
691 self.
tw.wm_geometry(
"+%d+%d" % (x, y))
692 label = Label(self.
tw, text=self.
text, justify=
'left',
693 background=
"#ffffe0", relief=
'solid', borderwidth=1,
707 global TgInput, TgEdge, ManualTrigger, SingleShot, AutoLevel, SingleShotSA
708 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
709 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
710 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
711 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
712 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
713 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
714 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
715 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
716 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
717 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
718 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
719 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
720 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
721 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
722 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
723 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase
724 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
725 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
726 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
727 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, DacScreenStatus, DigScreenStatus
728 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
729 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
730 global TimeDisp, XYDisp, FreqDisp, IADisp, XYScreenStatus, IAScreenStatus, SpectrumScreenStatus
731 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry, AWGAPhaseDelay, AWGBPhaseDelay
732 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasDelay
733 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
734 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
735 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, HozPossentry
736 global SmoothCurvesBP, bodewindow, AWG_Amp_Mode
737 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp
738 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP
739 global BPSweepMode, BPSweepCont, BodeScreenStatus, RevDate, SweepStepBodeEntry
740 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
741 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
742 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
743 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
744 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
745 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
746 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
747 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
748 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
749 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
750 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter, NetworkScreenStatus
751 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
752 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
753 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
754 global AWGABurstFlag, AWGACycles, AWGABurstDelay
755 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
756 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
759 ConfgFile = open(filename,
"w")
761 ConfgFile.write(
"root.geometry('+" + str(root.winfo_x()) +
'+' + str(root.winfo_y()) +
"')\n")
762 ConfgFile.write(
"awgwindow.geometry('+" + str(awgwindow.winfo_x()) +
'+' + str(awgwindow.winfo_y()) +
"')\n")
763 ConfgFile.write(
'global GRW; GRW = ' + str(GRW) +
'\n')
764 ConfgFile.write(
'global GRH; GRH = ' + str(GRH) +
'\n')
766 ConfgFile.write(
'global MathString; MathString = "' + MathString +
'"\n')
767 ConfgFile.write(
'global MathUnits; MathUnits = "' + MathUnits +
'"\n')
768 ConfgFile.write(
'global MathAxis; MathAxis = "' + MathAxis +
'"\n')
769 ConfgFile.write(
'global MathXString; MathXString = "' + MathXString +
'"\n')
770 ConfgFile.write(
'global MathXUnits; MathXUnits = "' + MathXUnits +
'"\n')
771 ConfgFile.write(
'global MathXAxis; MathXAxis = "' + MathXAxis +
'"\n')
772 ConfgFile.write(
'global MathYString; MathYString = "' + MathYString +
'"\n')
773 ConfgFile.write(
'global MathYUnits; MathYUnits = "' + MathYUnits +
'"\n')
774 ConfgFile.write(
'global MathYAxis; MathYAxis = "' + MathYAxis +
'"\n')
775 if MathScreenStatus.get() > 0:
776 ConfgFile.write(
'NewEnterMathControls()\n')
777 ConfgFile.write(
"MathWindow.geometry('+" + str(MathWindow.winfo_x()) +
'+' + str(MathWindow.winfo_y()) +
"')\n")
779 ConfgFile.write(
'DestroyMathScreen()\n')
780 if XYScreenStatus.get() > 0:
781 ConfgFile.write(
'global GRWXY; GRWXY = ' + str(GRWXY) +
'\n')
782 ConfgFile.write(
'global GRHXY; GRHXY = ' + str(GRHXY) +
'\n')
783 ConfgFile.write(
'MakeXYWindow()\n')
784 ConfgFile.write(
"xywindow.geometry('+" + str(xywindow.winfo_x()) +
'+' + str(xywindow.winfo_y()) +
"')\n")
785 ConfgFile.write(
'CHAsbxy.delete(0,END)\n')
786 ConfgFile.write(
'CHAsbxy.insert(0, ' + CHAsbxy.get() +
')\n')
787 ConfgFile.write(
'CHAIsbxy.delete(0,END)\n')
788 ConfgFile.write(
'CHAIsbxy.insert(0, ' + CHAIsbxy.get() +
')\n')
789 ConfgFile.write(
'CHAVPosEntryxy.delete(0,END)\n')
790 ConfgFile.write(
'CHAVPosEntryxy.insert(4, ' + CHAVPosEntryxy.get() +
')\n')
791 ConfgFile.write(
'CHAIPosEntryxy.delete(0,END)\n')
792 ConfgFile.write(
'CHAIPosEntryxy.insert(4, ' + CHAIPosEntryxy.get() +
')\n')
793 ConfgFile.write(
'CHBsbxy.delete(0,END)\n')
794 ConfgFile.write(
'CHBsbxy.insert(0, ' + CHBsbxy.get() +
')\n')
795 ConfgFile.write(
'CHBIsbxy.delete(0,END)\n')
796 ConfgFile.write(
'CHBIsbxy.insert(0, ' + CHBIsbxy.get() +
')\n')
797 ConfgFile.write(
'CHBVPosEntryxy.delete(0,END)\n')
798 ConfgFile.write(
'CHBVPosEntryxy.insert(4, ' + CHBVPosEntryxy.get() +
')\n')
799 ConfgFile.write(
'CHBIPosEntryxy.delete(0,END)\n')
800 ConfgFile.write(
'CHBIPosEntryxy.insert(4, ' + CHBIPosEntryxy.get() +
')\n')
802 ConfgFile.write(
'DestroyXYScreen()\n')
803 if IAScreenStatus.get() > 0:
804 ConfgFile.write(
'global GRWIA; GRWIA = ' + str(GRWIA) +
'\n')
805 ConfgFile.write(
'global GRHIA; GRHIA = ' + str(GRHIA) +
'\n')
806 ConfgFile.write(
'MakeIAWindow()\n')
807 ConfgFile.write(
"iawindow.geometry('+" + str(iawindow.winfo_x()) +
'+' + str(iawindow.winfo_y()) +
"')\n")
808 ConfgFile.write(
'IASource.set(' + str(IASource.get()) +
')\n')
809 ConfgFile.write(
'DisplaySeries.set(' + str(DisplaySeries.get()) +
')\n')
810 ConfgFile.write(
'RsystemEntry.delete(0,END)\n')
811 ConfgFile.write(
'RsystemEntry.insert(5, ' + RsystemEntry.get() +
')\n')
812 ConfgFile.write(
'ResScale.delete(0,END)\n')
813 ConfgFile.write(
'ResScale.insert(5, ' + ResScale.get() +
')\n')
814 ConfgFile.write(
'GainCorEntry.delete(0,END)\n')
815 ConfgFile.write(
'GainCorEntry.insert(5, ' + GainCorEntry.get() +
')\n')
816 ConfgFile.write(
'PhaseCorEntry.delete(0,END)\n')
817 ConfgFile.write(
'PhaseCorEntry.insert(5, ' + PhaseCorEntry.get() +
')\n')
818 ConfgFile.write(
'NetworkScreenStatus.set(' + str(NetworkScreenStatus.get()) +
')\n')
820 ConfgFile.write(
'DestroyIAScreen()\n')
821 if SpectrumScreenStatus.get() > 0:
822 ConfgFile.write(
'global GRWF; GRWF = ' + str(GRWF) +
'\n')
823 ConfgFile.write(
'global GRHF; GRHF = ' + str(GRHF) +
'\n')
824 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
825 ConfgFile.write(
'MakeSpectrumWindow()\n')
826 ConfgFile.write(
"freqwindow.geometry('+" + str(freqwindow.winfo_x()) +
'+' + str(freqwindow.winfo_y()) +
"')\n")
827 ConfgFile.write(
'ShowC1_VdB.set(' + str(ShowC1_VdB.get()) +
')\n')
828 ConfgFile.write(
'ShowC1_P.set(' + str(ShowC1_P.get()) +
')\n')
829 ConfgFile.write(
'ShowC2_VdB.set(' + str(ShowC2_VdB.get()) +
')\n')
830 ConfgFile.write(
'ShowC2_P.set(' + str(ShowC2_P.get()) +
')\n')
831 ConfgFile.write(
'StartFreqEntry.delete(0,END)\n')
832 ConfgFile.write(
'StartFreqEntry.insert(5, ' + StartFreqEntry.get() +
')\n')
833 ConfgFile.write(
'StopFreqEntry.delete(0,END)\n')
834 ConfgFile.write(
'StopFreqEntry.insert(5, ' + StopFreqEntry.get() +
')\n')
835 ConfgFile.write(
'HScale.set(' + str(HScale.get()) +
')\n')
836 ConfgFile.write(
'FreqTraceMode.set(' + str(FreqTraceMode.get()) +
')\n')
837 ConfgFile.write(
'SingleShotSA.set(' + str(SingleShotSA.get()) +
')\n')
839 ConfgFile.write(
'DestroySpectrumScreen()\n')
840 if DacScreenStatus.get() > 0:
841 ConfgFile.write(
'MakeDacScreen()\n')
842 ConfgFile.write(
"win1.geometry('+" + str(win1.winfo_x()) +
'+' + str(win1.winfo_y()) +
"')\n")
844 ConfgFile.write(
'DestroyDacScreen()\n')
845 if DigScreenStatus.get() > 0:
846 ConfgFile.write(
'MakeDigScreen()\n')
847 ConfgFile.write(
"win2.geometry('+" + str(win2.winfo_x()) +
'+' + str(win2.winfo_y()) +
"')\n")
849 ConfgFile.write(
'DestroyDigScreen()\n')
850 if EnableHSsampling > 0:
851 ConfgFile.write(
'FminEntry.delete(0,"end")\n')
852 ConfgFile.write(
'FminEntry.insert(0, ' + FminEntry.get() +
')\n')
853 ConfgFile.write(
'HtMulEntry.delete(0,"end")\n')
854 ConfgFile.write(
'HtMulEntry.insert(0, ' + HtMulEntry.get() +
')\n')
855 if MinigenScreenStatus.get() == 1:
856 ConfgFile.write(
'MakeMinigenWindow()\n')
857 ConfgFile.write(
"minigenwindow.geometry('+" + str(minigenwindow.winfo_x()) +
'+' + str(minigenwindow.winfo_y()) +
"')\n")
858 ConfgFile.write(
'MinigenMode.set(' + str(MinigenMode.get()) +
')\n')
859 ConfgFile.write(
'MinigenFout.delete(0,END)\n')
860 ConfgFile.write(
'MinigenFout.insert(4, ' + MinigenFout.get() +
')\n')
861 ConfgFile.write(
'MinigenFclk.delete(0,END)\n')
862 ConfgFile.write(
'MinigenFclk.insert(4, ' + MinigenFclk.get() +
')\n')
863 ConfgFile.write(
'SCLKPort.set(' + str(SCLKPort.get()) +
')\n')
864 ConfgFile.write(
'SDATAPort.set(' + str(SDATAPort.get()) +
')\n')
865 ConfgFile.write(
'SLATCHPort.set(' + str(SLATCHPort.get()) +
')\n')
867 ConfgFile.write(
'DestroyMinigenScreen()\n')
868 if MuxScreenStatus.get() == 1:
869 ConfgFile.write(
'MakeMuxModeWindow()\n')
870 ConfgFile.write(
"muxwindow.geometry('+" + str(muxwindow.winfo_x()) +
'+' + str(muxwindow.winfo_y()) +
"')\n")
871 ConfgFile.write(
'Show_CBA.set(' + str(Show_CBA.get()) +
')\n')
872 ConfgFile.write(
'Show_CBB.set(' + str(Show_CBB.get()) +
')\n')
873 ConfgFile.write(
'Show_CBC.set(' + str(Show_CBC.get()) +
')\n')
874 ConfgFile.write(
'Show_CBD.set(' + str(Show_CBD.get()) +
')\n')
875 ConfgFile.write(
'MuxEnb.set(' + str(MuxEnb.get()) +
')\n')
876 ConfgFile.write(
'CHB_Asb.delete(0,END)\n')
877 ConfgFile.write(
'CHB_Asb.insert(0, ' + CHB_Asb.get() +
')\n')
878 ConfgFile.write(
'CHB_Bsb.delete(0,END)\n')
879 ConfgFile.write(
'CHB_Bsb.insert(0, ' + CHB_Bsb.get() +
')\n')
880 ConfgFile.write(
'CHB_Csb.delete(0,END)\n')
881 ConfgFile.write(
'CHB_Csb.insert(0, ' + CHB_Csb.get() +
')\n')
882 ConfgFile.write(
'CHB_Dsb.delete(0,END)\n')
883 ConfgFile.write(
'CHB_Dsb.insert(0, ' + CHB_Dsb.get() +
')\n')
884 ConfgFile.write(
'CHB_APosEntry.delete(0,END)\n')
885 ConfgFile.write(
'CHB_APosEntry.insert(4, ' + CHB_APosEntry.get() +
')\n')
886 ConfgFile.write(
'CHB_BPosEntry.delete(0,END)\n')
887 ConfgFile.write(
'CHB_BPosEntry.insert(4, ' + CHB_BPosEntry.get() +
')\n')
888 ConfgFile.write(
'CHB_CPosEntry.delete(0,END)\n')
889 ConfgFile.write(
'CHB_CPosEntry.insert(4, ' + CHB_CPosEntry.get() +
')\n')
890 ConfgFile.write(
'CHB_DPosEntry.delete(0,END)\n')
891 ConfgFile.write(
'CHB_DPosEntry.insert(4, ' + CHB_DPosEntry.get() +
')\n')
893 ConfgFile.write(
'DestroyMuxScreen()\n')
894 if BodeScreenStatus.get() == 1:
895 ConfgFile.write(
'global GRWBP; GRWBP = ' + str(GRWBP) +
'\n')
896 ConfgFile.write(
'global GRHBP; GRHBP = ' + str(GRHBP) +
'\n')
897 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
898 ConfgFile.write(
'ImpedanceCenter.set(' + str(ImpedanceCenter.get()) +
')\n')
899 ConfgFile.write(
'MakeBodeWindow()\n')
900 ConfgFile.write(
"bodewindow.geometry('+" + str(bodewindow.winfo_x()) +
'+' + str(bodewindow.winfo_y()) +
"')\n")
901 ConfgFile.write(
'ShowCA_VdB.set(' + str(ShowCA_VdB.get()) +
')\n')
902 ConfgFile.write(
'ShowCB_VdB.set(' + str(ShowCB_VdB.get()) +
')\n')
903 ConfgFile.write(
'ShowCA_P.set(' + str(ShowCA_P.get()) +
')\n')
904 ConfgFile.write(
'ShowCB_P.set(' + str(ShowCB_P.get()) +
')\n')
905 ConfgFile.write(
'ShowCA_RdB.set(' + str(ShowCA_RdB.get()) +
')\n')
906 ConfgFile.write(
'ShowCA_RP.set(' + str(ShowCA_RP.get()) +
')\n')
907 ConfgFile.write(
'ShowCB_RdB.set(' + str(ShowCB_RdB.get()) +
')\n')
908 ConfgFile.write(
'ShowCB_RP.set(' + str(ShowCB_RP.get()) +
')\n')
909 ConfgFile.write(
'BodeDisp.set(' + str(BodeDisp.get()) +
')\n')
910 ConfgFile.write(
'ShowMarkerBP.set(' + str(ShowMarkerBP.get()) +
')\n')
911 ConfgFile.write(
'ShowMathBP.set(' + str(ShowMathBP.get()) +
')\n')
912 ConfgFile.write(
'ShowRMathBP.set(' + str(ShowRMathBP.get()) +
')\n')
913 ConfgFile.write(
'HScaleBP.set(' + str(HScaleBP.get()) +
')\n')
914 ConfgFile.write(
'NSteps.set(' + str(NSteps.get()) +
')\n')
915 ConfgFile.write(
'DBdivindexBP.set(' + str(DBdivindexBP.get()) +
')\n')
916 ConfgFile.write(
'DBlevelBP.set(' + str(DBlevelBP.get()) +
')\n')
917 ConfgFile.write(
'FSweepMode.set(' + str(FSweepMode.get()) +
')\n')
918 ConfgFile.write(
'SweepStepBodeEntry.delete(0,END)\n')
919 ConfgFile.write(
'SweepStepBodeEntry.insert(4, ' + SweepStepBodeEntry.get() +
')\n')
920 ConfgFile.write(
'StopBodeEntry.delete(0,END)\n')
921 ConfgFile.write(
'StopBodeEntry.insert(4, ' + StopBodeEntry.get() +
')\n')
922 ConfgFile.write(
'StartBodeEntry.delete(0,END)\n')
923 ConfgFile.write(
'StartBodeEntry.insert(4, ' + StartBodeEntry.get() +
')\n')
924 ConfgFile.write(
'Show_Rseries.set(' + str(Show_Rseries.get()) +
')\n')
925 ConfgFile.write(
'Show_Xseries.set(' + str(Show_Xseries.get()) +
')\n')
926 ConfgFile.write(
'Show_Magnitude.set(' + str(Show_Magnitude.get()) +
')\n')
927 ConfgFile.write(
'Show_Angle.set(' + str(Show_Angle.get()) +
')\n')
929 ConfgFile.write(
'DestroyBodeScreen()\n')
930 if MeasureStatus.get() == 1:
932 ConfgFile.write(
'global ChaLableSrring1; ChaLableSrring1 = "' + ChaLableSrring1 +
'"\n')
933 ConfgFile.write(
'global ChaLableSrring2; ChaLableSrring2 = "' + ChaLableSrring2 +
'"\n')
934 ConfgFile.write(
'global ChaLableSrring3; ChaLableSrring3 = "' + ChaLableSrring3 +
'"\n')
935 ConfgFile.write(
'global ChaLableSrring4; ChaLableSrring4 = "' + ChaLableSrring4 +
'"\n')
936 ConfgFile.write(
'global ChaLableSrring5; ChaLableSrring5 = "' + ChaLableSrring5 +
'"\n')
937 ConfgFile.write(
'global ChaLableSrring6; ChaLableSrring6 = "' + ChaLableSrring6 +
'"\n')
938 ConfgFile.write(
'global ChbLableSrring1; ChbLableSrring1 = "' + ChbLableSrring1 +
'"\n')
939 ConfgFile.write(
'global ChbLableSrring2; ChbLableSrring2 = "' + ChbLableSrring2 +
'"\n')
940 ConfgFile.write(
'global ChbLableSrring3; ChbLableSrring3 = "' + ChbLableSrring3 +
'"\n')
941 ConfgFile.write(
'global ChbLableSrring4; ChbLableSrring4 = "' + ChbLableSrring4 +
'"\n')
942 ConfgFile.write(
'global ChbLableSrring5; ChbLableSrring5 = "' + ChbLableSrring5 +
'"\n')
943 ConfgFile.write(
'global ChbLableSrring6; ChbLableSrring6 = "' + ChbLableSrring6 +
'"\n')
944 ConfgFile.write(
'global ChaMeasString1; ChaMeasString1 = "' + ChaMeasString1 +
'"\n')
945 ConfgFile.write(
'global ChaMeasString2; ChaMeasString2 = "' + ChaMeasString2 +
'"\n')
946 ConfgFile.write(
'global ChaMeasString3; ChaMeasString3 = "' + ChaMeasString3 +
'"\n')
947 ConfgFile.write(
'global ChaMeasString4; ChaMeasString4 = "' + ChaMeasString4 +
'"\n')
948 ConfgFile.write(
'global ChaMeasString5; ChaMeasString5 = "' + ChaMeasString5 +
'"\n')
949 ConfgFile.write(
'global ChaMeasString6; ChaMeasString6 = "' + ChaMeasString6 +
'"\n')
950 ConfgFile.write(
'global ChbMeasString1; ChbMeasString1 = "' + ChbMeasString1 +
'"\n')
951 ConfgFile.write(
'global ChbMeasString2; ChbMeasString2 = "' + ChbMeasString2 +
'"\n')
952 ConfgFile.write(
'global ChbMeasString3; ChbMeasString3 = "' + ChbMeasString3 +
'"\n')
953 ConfgFile.write(
'global ChbMeasString4; ChbMeasString4 = "' + ChbMeasString4 +
'"\n')
954 ConfgFile.write(
'global ChbMeasString5; ChbMeasString5 = "' + ChbMeasString5 +
'"\n')
955 ConfgFile.write(
'global ChbMeasString6; ChbMeasString6 = "' + ChbMeasString6 +
'"\n')
956 ConfgFile.write(
'MakeMeasureScreen()\n')
957 ConfgFile.write(
"measurewindow.geometry('+" + str(measurewindow.winfo_x()) +
'+' + str(measurewindow.winfo_y()) +
"')\n")
959 ConfgFile.write(
'DestroyMeasuewScreen()\n')
960 if ETSStatus.get() == 1:
961 ConfgFile.write(
'MakeETSWindow()\n')
962 ConfgFile.write(
"etswindow.geometry('+" + str(etswindow.winfo_x()) +
'+' + str(etswindow.winfo_y()) +
"')\n")
963 ConfgFile.write(
'ETSDisp.set(' + str(ETSDisp.get()) +
')\n')
964 ConfgFile.write(
'ETSDir.set(' + str(ETSDir.get()) +
')\n')
965 ConfgFile.write(
'FMulXEntry.delete(0,END)\n')
966 ConfgFile.write(
'FMulXEntry.insert(6, ' + FMulXEntry.get() +
')\n')
967 ConfgFile.write(
'DivXEntry.delete(0,END)\n')
968 ConfgFile.write(
'DivXEntry.insert(4, ' + DivXEntry.get() +
')\n')
969 ConfgFile.write(
'ETSts.delete(0,END)\n')
970 ConfgFile.write(
'ETSts.insert(4, ' + ETSts.get() +
')\n')
972 ConfgFile.write(
'DestroyETSScreen()\n')
974 ConfgFile.write(
'TRIGGERentry.delete(0,END)\n')
975 ConfgFile.write(
'TRIGGERentry.insert(4, ' + TRIGGERentry.get() +
')\n')
976 ConfgFile.write(
'HoldOffentry.delete(0,"end")\n')
977 ConfgFile.write(
'HoldOffentry.insert(0, ' + HoldOffentry.get() +
')\n')
978 ConfgFile.write(
'HozPossentry.delete(0,"end")\n')
979 ConfgFile.write(
'HozPossentry.insert(0, ' + HozPossentry.get() +
')\n')
980 ConfgFile.write(
'TMsb.delete(0,END)\n')
981 ConfgFile.write(
'TMsb.insert(0, ' + TMsb.get() +
')\n')
982 ConfgFile.write(
'TgInput.set(' + str(TgInput.get()) +
')\n')
983 ConfgFile.write(
'AutoLevel.set(' + str(AutoLevel.get()) +
')\n')
984 ConfgFile.write(
'ManualTrigger.set(' + str(ManualTrigger.get()) +
')\n')
985 ConfgFile.write(
'SingleShot.set(' + str(SingleShot.get()) +
')\n')
986 ConfgFile.write(
'TgEdge.set(' + str(TgEdge.get()) +
')\n')
987 ConfgFile.write(
'Xsignal.set(' + str(Xsignal.get()) +
')\n')
988 ConfgFile.write(
'Ysignal.set(' + str(Ysignal.get()) +
')\n')
990 ConfgFile.write(
'TimeDisp.set(' + str(TimeDisp.get()) +
')\n')
991 ConfgFile.write(
'XYDisp.set(' + str(XYDisp.get()) +
')\n')
992 ConfgFile.write(
'FreqDisp.set(' + str(FreqDisp.get()) +
')\n')
993 ConfgFile.write(
'IADisp.set(' + str(IADisp.get()) +
')\n')
994 ConfgFile.write(
'ShowC1_V.set(' + str(ShowC1_V.get()) +
')\n')
995 ConfgFile.write(
'ShowC1_I.set(' + str(ShowC1_I.get()) +
')\n')
996 ConfgFile.write(
'ShowC2_V.set(' + str(ShowC2_V.get()) +
')\n')
997 ConfgFile.write(
'ShowC2_I.set(' + str(ShowC2_I.get()) +
')\n')
998 ConfgFile.write(
'Show_MathX.set(' + str(Show_MathX.get()) +
')\n')
999 ConfgFile.write(
'Show_MathY.set(' + str(Show_MathY.get()) +
')\n')
1000 ConfgFile.write(
'AutoCenterA.set(' + str(AutoCenterA.get()) +
')\n')
1001 ConfgFile.write(
'AutoCenterB.set(' + str(AutoCenterB.get()) +
')\n')
1002 ConfgFile.write(
'TRACEmodeTime.set(' + str(TRACEmodeTime.get()) +
')\n')
1004 ConfgFile.write(
'CHAVPosEntry.delete(0,END)\n')
1005 ConfgFile.write(
'CHAVPosEntry.insert(4, ' + CHAVPosEntry.get() +
')\n')
1006 ConfgFile.write(
'CHAIPosEntry.delete(0,END)\n')
1007 ConfgFile.write(
'CHAIPosEntry.insert(4, ' + CHAIPosEntry.get() +
')\n')
1008 ConfgFile.write(
'CHAsb.delete(0,END)\n')
1009 ConfgFile.write(
'CHAsb.insert(0, ' + CHAsb.get() +
')\n')
1010 ConfgFile.write(
'CHAIsb.delete(0,END)\n')
1011 ConfgFile.write(
'CHAIsb.insert(0, ' + CHAIsb.get() +
')\n')
1013 ConfgFile.write(
'CHBVPosEntry.delete(0,END)\n')
1014 ConfgFile.write(
'CHBVPosEntry.insert(4, ' + CHBVPosEntry.get() +
')\n')
1015 ConfgFile.write(
'CHBIPosEntry.delete(0,END)\n')
1016 ConfgFile.write(
'CHBIPosEntry.insert(4, ' + CHBIPosEntry.get() +
')\n')
1017 ConfgFile.write(
'CHBsb.delete(0,END)\n')
1018 ConfgFile.write(
'CHBsb.insert(0, ' + CHBsb.get() +
')\n')
1019 ConfgFile.write(
'CHBIsb.delete(0,END)\n')
1020 ConfgFile.write(
'CHBIsb.insert(0, ' + CHBIsb.get() +
')\n')
1022 ConfgFile.write(
'AWG_Amp_Mode.set('+ str(AWG_Amp_Mode.get()) +
')\n')
1023 ConfgFile.write(
'AWGAMode.set('+ str(AWGAMode.get()) +
')\n')
1024 ConfgFile.write(
'AWGAIOMode.set('+ str(AWGAIOMode.get()) +
')\n')
1025 ConfgFile.write(
'AWGATerm.set('+ str(AWGATerm.get()) +
')\n')
1026 ConfgFile.write(
'AWGAPhaseDelay.set('+ str(AWGAPhaseDelay.get()) +
')\n')
1027 ConfgFile.write(
'AWGAAmplEntry.delete(0,END)\n')
1028 ConfgFile.write(
'AWGAAmplEntry.insert(4, ' + AWGAAmplEntry.get() +
')\n')
1029 ConfgFile.write(
'AWGAOffsetEntry.delete(0,END)\n')
1030 ConfgFile.write(
'AWGAOffsetEntry.insert(4, ' + AWGAOffsetEntry.get() +
')\n')
1031 ConfgFile.write(
'AWGAFreqEntry.delete(0,END)\n')
1032 ConfgFile.write(
'AWGAFreqEntry.insert(4, ' + AWGAFreqEntry.get() +
')\n')
1033 ConfgFile.write(
'AWGAPhaseEntry.delete(0,END)\n')
1034 ConfgFile.write(
'AWGAPhaseEntry.insert(4, ' + AWGAPhaseEntry.get() +
')\n')
1035 ConfgFile.write(
'AWGADutyCycleEntry.delete(0,END)\n')
1036 ConfgFile.write(
'AWGADutyCycleEntry.insert(4, ' + AWGADutyCycleEntry.get() +
')\n')
1037 ConfgFile.write(
'AWGAShape.set(' + str(AWGAShape.get()) +
')\n')
1038 ConfgFile.write(
'AWGARepeatFlag.set(' + str(AWGARepeatFlag.get()) +
')\n')
1039 ConfgFile.write(
'AWGABurstFlag.set(' + str(AWGABurstFlag.get()) +
')\n')
1040 ConfgFile.write(
'global AWGACycles; AWGACycles = ' + str(AWGACycles) +
'\n')
1041 ConfgFile.write(
'global AWGABurstDelay; AWGABurstDelay = ' + str(AWGABurstDelay) +
'\n')
1043 ConfgFile.write(
'AWGBMode.set('+ str(AWGBMode.get()) +
')\n')
1044 ConfgFile.write(
'AWGBIOMode.set('+ str(AWGBIOMode.get()) +
')\n')
1045 ConfgFile.write(
'AWGBTerm.set('+ str(AWGBTerm.get()) +
')\n')
1046 ConfgFile.write(
'AWGBPhaseDelay.set('+ str(AWGBPhaseDelay.get()) +
')\n')
1047 ConfgFile.write(
'AWGBAmplEntry.delete(0,END)\n')
1048 ConfgFile.write(
'AWGBAmplEntry.insert(4, ' + AWGBAmplEntry.get() +
')\n')
1049 ConfgFile.write(
'AWGBOffsetEntry.delete(0,END)\n')
1050 ConfgFile.write(
'AWGBOffsetEntry.insert(4, ' + AWGBOffsetEntry.get() +
')\n')
1051 ConfgFile.write(
'AWGBFreqEntry.delete(0,END)\n')
1052 ConfgFile.write(
'AWGBFreqEntry.insert(4, ' + AWGBFreqEntry.get() +
')\n')
1053 ConfgFile.write(
'AWGBPhaseEntry.delete(0,END)\n')
1054 ConfgFile.write(
'AWGBPhaseEntry.insert(4, ' + AWGBPhaseEntry.get() +
')\n')
1055 ConfgFile.write(
'AWGBDutyCycleEntry.delete(0,END)\n')
1056 ConfgFile.write(
'AWGBDutyCycleEntry.insert(4, ' + AWGBDutyCycleEntry.get() +
')\n')
1057 ConfgFile.write(
'AWGBShape.set(' + str(AWGBShape.get()) +
')\n')
1058 ConfgFile.write(
'AWGBRepeatFlag.set(' + str(AWGBRepeatFlag.get()) +
')\n')
1059 ConfgFile.write(
'AWGBBurstFlag.set(' + str(AWGBBurstFlag.get()) +
')\n')
1060 ConfgFile.write(
'global AWGBCycles; AWGBCycles = ' + str(AWGBCycles) +
'\n')
1061 ConfgFile.write(
'global AWGBBurstDelay; AWGBBurstDelay = ' + str(AWGBBurstDelay) +
'\n')
1063 ConfgFile.write(
'AWGSync.set(' + str(AWGSync.get()) +
')\n')
1065 ConfgFile.write(
'CHAVGainEntry.delete(0,END)\n')
1066 ConfgFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1067 ConfgFile.write(
'CHBVGainEntry.delete(0,END)\n')
1068 ConfgFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1069 ConfgFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1070 ConfgFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1071 ConfgFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1072 ConfgFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1074 ConfgFile.write(
'MeasDCV1.set(' + str(MeasDCV1.get()) +
')\n')
1075 ConfgFile.write(
'MeasMinV1.set(' + str(MeasMinV1.get()) +
')\n')
1076 ConfgFile.write(
'MeasMaxV1.set(' + str(MeasMaxV1.get()) +
')\n')
1077 ConfgFile.write(
'MeasBaseV1.set(' + str(MeasBaseV1.get()) +
')\n')
1078 ConfgFile.write(
'MeasTopV1.set(' + str(MeasTopV1.get()) +
')\n')
1079 ConfgFile.write(
'MeasMidV1.set(' + str(MeasMidV1.get()) +
')\n')
1080 ConfgFile.write(
'MeasPPV1.set(' + str(MeasPPV1.get()) +
')\n')
1081 ConfgFile.write(
'MeasRMSV1.set(' + str(MeasRMSV1.get()) +
')\n')
1082 ConfgFile.write(
'MeasDCI1.set(' + str(MeasDCI1.get()) +
')\n')
1083 ConfgFile.write(
'MeasMinI1.set(' + str(MeasMinI1.get()) +
')\n')
1084 ConfgFile.write(
'MeasMaxI1.set(' + str(MeasMaxI1.get()) +
')\n')
1085 ConfgFile.write(
'MeasMidI1.set(' + str(MeasMidI1.get()) +
')\n')
1086 ConfgFile.write(
'MeasPPI1.set(' + str(MeasPPI1.get()) +
')\n')
1087 ConfgFile.write(
'MeasRMSI1.set(' + str(MeasRMSI1.get()) +
')\n')
1088 ConfgFile.write(
'MeasDiffAB.set(' + str(MeasDiffAB.get()) +
')\n')
1089 ConfgFile.write(
'MeasDCV2.set(' + str(MeasDCV2.get()) +
')\n')
1090 ConfgFile.write(
'MeasMinV2.set(' + str(MeasMinV2.get()) +
')\n')
1091 ConfgFile.write(
'MeasMaxV2.set(' + str(MeasMaxV2.get()) +
')\n')
1092 ConfgFile.write(
'MeasBaseV2.set(' + str(MeasBaseV2.get()) +
')\n')
1093 ConfgFile.write(
'MeasTopV2.set(' + str(MeasTopV2.get()) +
')\n')
1094 ConfgFile.write(
'MeasMidV2.set(' + str(MeasMidV2.get()) +
')\n')
1095 ConfgFile.write(
'MeasPPV2.set(' + str(MeasPPV2.get()) +
')\n')
1096 ConfgFile.write(
'MeasRMSV2.set(' + str(MeasRMSV2.get()) +
')\n')
1097 ConfgFile.write(
'MeasDCI2.set(' + str(MeasDCI2.get()) +
')\n')
1098 ConfgFile.write(
'MeasMinI2.set(' + str(MeasMinI2.get()) +
')\n')
1099 ConfgFile.write(
'MeasMaxI2.set(' + str(MeasMaxI2.get()) +
')\n')
1100 ConfgFile.write(
'MeasMidI2.set(' + str(MeasMidI2.get()) +
')\n')
1101 ConfgFile.write(
'MeasPPI2.set(' + str(MeasPPI2.get()) +
')\n')
1102 ConfgFile.write(
'MeasRMSI2.set(' + str(MeasRMSI2.get()) +
')\n')
1103 ConfgFile.write(
'MeasDiffBA.set(' + str(MeasDiffBA.get()) +
')\n')
1105 ConfgFile.write(
'MeasAHW.set(' + str(MeasAHW.get()) +
')\n')
1106 ConfgFile.write(
'MeasALW.set(' + str(MeasALW.get()) +
')\n')
1107 ConfgFile.write(
'MeasADCy.set(' + str(MeasADCy.get()) +
')\n')
1108 ConfgFile.write(
'MeasAPER.set(' + str(MeasAPER.get()) +
')\n')
1109 ConfgFile.write(
'MeasAFREQ.set(' + str(MeasAFREQ.get()) +
')\n')
1110 ConfgFile.write(
'MeasBHW.set(' + str(MeasBHW.get()) +
')\n')
1111 ConfgFile.write(
'MeasBLW.set(' + str(MeasBLW.get()) +
')\n')
1112 ConfgFile.write(
'MeasBDCy.set(' + str(MeasBDCy.get()) +
')\n')
1113 ConfgFile.write(
'MeasBPER.set(' + str(MeasBPER.get()) +
')\n')
1114 ConfgFile.write(
'MeasBFREQ.set(' + str(MeasBFREQ.get()) +
')\n')
1115 ConfgFile.write(
'MeasPhase.set(' + str(MeasPhase.get()) +
')\n')
1116 ConfgFile.write(
'MeasDelay.set(' + str(MeasDelay.get()) +
')\n')
1118 ConfgFile.write(
'MathTrace.set(' + str(MathTrace.get()) +
')\n')
1120 ConfgFile.write(
'CHAIGainEntry.delete(0,END)\n')
1121 ConfgFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1122 ConfgFile.write(
'CHBIGainEntry.delete(0,END)\n')
1123 ConfgFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1124 ConfgFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1125 ConfgFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1126 ConfgFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1127 ConfgFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1129 ConfgFile.write(
'global UserAString; UserAString = "' + UserAString +
'"\n')
1130 ConfgFile.write(
'global UserALabel; UserALabel = "' + UserALabel +
'"\n')
1131 ConfgFile.write(
'global UserBString; UserBString = "' + UserBString +
'"\n')
1132 ConfgFile.write(
'global UserBLabel; UserBLabel = "' + UserBLabel +
'"\n')
1133 ConfgFile.write(
'global AWGAMathString; AWGAMathString = "' + AWGAMathString +
'"\n')
1134 ConfgFile.write(
'global AWGBMathString; AWGBMathString = "' + AWGBMathString +
'"\n')
1135 ConfgFile.write(
'global FFTUserWindowString; FFTUserWindowString= "' + FFTUserWindowString +
'"\n')
1136 ConfgFile.write(
'global DigFilterAString; DigFilterAString = "' + DigFilterAString +
'"\n')
1137 ConfgFile.write(
'global DigFilterBString; DigFilterBString = "' + DigFilterBString +
'"\n')
1140 CHA_TC1.set(float(cha_TC1Entry.get()))
1141 CHA_TC2.set(float(cha_TC2Entry.get()))
1142 CHB_TC1.set(float(chb_TC1Entry.get()))
1143 CHB_TC2.set(float(chb_TC2Entry.get()))
1144 CHA_A1.set(float(cha_A1Entry.get()))
1145 CHA_A2.set(float(cha_A2Entry.get()))
1146 CHB_A1.set(float(chb_A1Entry.get()))
1147 CHB_A2.set(float(chb_A2Entry.get()))
1150 ConfgFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1151 ConfgFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1152 ConfgFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1153 ConfgFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1154 ConfgFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1155 ConfgFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1156 ConfgFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1157 ConfgFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1158 ConfgFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1159 ConfgFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1160 ConfgFile.write(
'cha_TC1Entry.delete(0,END)\n')
1161 ConfgFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1162 ConfgFile.write(
'cha_TC2Entry.delete(0,END)\n')
1163 ConfgFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1164 ConfgFile.write(
'chb_TC1Entry.delete(0,END)\n')
1165 ConfgFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1166 ConfgFile.write(
'chb_TC2Entry.delete(0,END)\n')
1167 ConfgFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1168 ConfgFile.write(
'cha_A1Entry.delete(0,END)\n')
1169 ConfgFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1170 ConfgFile.write(
'cha_A2Entry.delete(0,END)\n')
1171 ConfgFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1172 ConfgFile.write(
'chb_A1Entry.delete(0,END)\n')
1173 ConfgFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1174 ConfgFile.write(
'chb_A2Entry.delete(0,END)\n')
1175 ConfgFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1178 if SpectrumScreenStatus.get() > 0
or IAScreenStatus.get() > 0
or BodeScreenStatus.get() > 0:
1179 ConfgFile.write(
'SMPfftpwrTwo.set(' + str(SMPfftpwrTwo.get()) +
')\n')
1180 ConfgFile.write(
'FFTwindow.set(' + str(FFTwindow.get()) +
')\n')
1181 ConfgFile.write(
'ZEROstuffing.set(' + str(ZEROstuffing.get()) +
')\n')
1182 ConfgFile.write(
'Vdiv.set(' + str(Vdiv.get()) +
')\n')
1184 ConfgFile.write(
'DBdivindex.set(' + str(DBdivindex.get()) +
')\n')
1185 ConfgFile.write(
'DBlevel.set(' + str(DBlevel.get()) +
')\n')
1187 ConfgFile.write(
'CutDC.set(' + str(CutDC.get()) +
')\n')
1194 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1200 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1206 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1211 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1215 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1216 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1217 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
1218 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1219 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1220 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1221 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1222 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1223 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1224 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1225 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1226 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1227 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1228 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1229 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1230 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1231 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1232 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1233 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1234 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1235 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1236 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1237 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1238 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1239 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1240 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1241 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1242 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
1243 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1244 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1245 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1246 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1247 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1248 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1249 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1250 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1251 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1252 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1253 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1254 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1255 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1256 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1257 global AWGABurstFlag, AWGACycles, AWGABurstDelay
1258 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
1259 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1263 ConfgFile = open(filename)
1264 for line
in ConfgFile:
1266 exec( line.rstrip() )
1268 print(
"Skipping " + line.rstrip())
1270 if DevID !=
"No Device":
1286 print(
"Config File Not Found.")
1289 global AWGAShape, AWGBShape, BisCompA
1291 if AWGAShape.get()==9:
1293 elif AWGAShape.get()==11:
1295 elif AWGAShape.get()==15:
1297 elif AWGAShape.get()==16:
1299 elif AWGAShape.get()==17:
1301 elif AWGAShape.get()==18:
1303 elif AWGAShape.get()==12:
1305 elif AWGAShape.get()==14:
1307 elif AWGAShape.get()==19:
1309 elif AWGAShape.get()==20:
1311 elif AWGAShape.get()==21:
1313 elif AWGAShape.get()==22:
1315 elif AWGAShape.get()==7:
1317 elif AWGAShape.get()==8:
1320 if BisCompA.get() == 1:
1322 if AWGBShape.get()==9:
1324 elif AWGBShape.get()==11:
1326 elif AWGBShape.get()==15:
1328 elif AWGBShape.get()==16:
1330 elif AWGBShape.get()==17:
1332 elif AWGBShape.get()==18:
1334 elif AWGBShape.get()==12:
1336 elif AWGBShape.get()==14:
1338 elif AWGBShape.get()==19:
1340 elif AWGBShape.get()==20:
1342 elif AWGBShape.get()==7:
1344 elif AWGBShape.get()==8:
1353 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1359 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1365 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1371 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1376 global COLORtext, COLORcanvas, ColorMode, Bodeca, BodeScreenStatus
1377 global ca, Freqca, SpectrumScreenStatus, XYca, XYScreenStatus, IAca, IAScreenStatus
1379 if ColorMode.get() > 0:
1380 COLORtext =
"#000000"
1381 COLORtrace4 =
"#a0a000"
1382 COLORtraceR4 =
"#606000"
1383 COLORcanvas =
"#ffffff"
1385 COLORcanvas =
"#000000"
1386 COLORtrace4 =
"#ffff00"
1387 COLORtraceR4 =
"#808000"
1388 COLORtext =
"#ffffff"
1389 ca.config(background=COLORcanvas)
1391 if SpectrumScreenStatus.get() > 0:
1392 Freqca.config(background=COLORcanvas)
1394 if XYScreenStatus.get() > 0:
1395 XYca.config(background=COLORcanvas)
1397 if IAScreenStatus.get() > 0:
1398 IAca.config(background=COLORcanvas)
1400 if BodeScreenStatus.get() > 0:
1401 Bodeca.config(background=COLORcanvas)
1405 global CANVASwidth, CANVASheight
1406 global COLORtext, MarkerNum, ColorMode
1408 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")])
1409 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n")
1410 if MarkerNum > 0
or ColorMode.get() > 0:
1411 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1413 COLORtext =
"#000000"
1416 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1420 COLORtext =
"#ffffff"
1424 global CANVASwidthXY, CANVASheightXY, xywindow
1425 global COLORtext, MarkerNum, ColorMode, XYca
1427 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=xywindow)
1428 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=xywindow)
1429 if MarkerNum > 0
or ColorMode.get() > 0:
1430 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1432 COLORtext =
"#000000"
1435 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1439 COLORtext =
"#ffffff"
1443 global CANVASwidthIA, CANVASheightIA
1444 global COLORtext, IAca, ColorMode, iawindow
1446 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=iawindow)
1447 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=iawindow)
1448 if ColorMode.get() > 0:
1449 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1451 COLORtext =
"#000000"
1454 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1456 COLORtext =
"#ffffff"
1460 global CANVASwidthBP, CANVASheightBP
1461 global COLORtext, Bodeca, bodewindow
1463 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent = bodewindow)
1464 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=bodewindow)
1465 if MarkerNum > 0
or ColorMode.get() > 0:
1466 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1468 COLORtext =
"#000000"
1471 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1473 COLORtext =
"#ffffff"
1477 global VBuffA, VBuffB, IBuffA, IBuffB, SAMPLErate
1480 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
1481 DataFile = open(filename,
'w')
1482 DataFile.write(
'Sample-#, CA-V, CA-I, CB-V, CB-I \n' )
1483 for index
in range(len(VBuffA)):
1484 TimePnt = float((index+0.0)/SAMPLErate)
1485 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
', ' + str(IBuffA[index]) +
', '
1486 + str(VBuffB[index]) +
', ' + str(IBuffB[index]) +
'\n')
1490 global SAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
1493 Channel = askstring(
"Choose Channel",
"CA-V, CB-V, CA-I or CB-I\n\nChannel:\n", initialvalue=
"CA-V")
1494 if (Channel ==
None):
1497 filename = asksaveasfilename(defaultextension =
".txt", filetypes=[(
"Text Columns",
"*.txt")])
1498 DataFile = open(filename,
'w')
1499 for index
in range(len(VBuffA)):
1500 TimePnt = float((index+0.0)/SAMPLErate)
1501 if Channel ==
"CA-V":
1502 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
'\n')
1503 elif Channel ==
"CA-I":
1504 DataFile.write( str(TimePnt) +
', ' + str(IBuffA[index]) +
'\n')
1505 elif Channel ==
"CB-V":
1506 DataFile.write( str(TimePnt) +
', ' + str(VBuffB[index]) +
'\n')
1507 elif Channel ==
"CB-I":
1508 DataFile.write( str(TimePnt) +
', ' + str(IBuffB[index]) +
'\n')
1512 global VBuffA, VBuffB, IBuffA, IBuffB, SHOWsamples
1515 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")])
1517 CSVFile = open(filename)
1518 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
1520 csv_f = csv.reader(CSVFile, dialect)
1528 VBuffA.append(float(row[1]))
1529 IBuffA.append(float(row[2]))
1530 VBuffB.append(float(row[3]))
1531 IBuffB.append(float(row[4]))
1532 SHOWsamples = SHOWsamples + 1
1534 print(
'skipping non-numeric row')
1535 VBuffA = numpy.array(VBuffA)
1536 IBuffA = numpy.array(IBuffA)
1537 VBuffB = numpy.array(VBuffB)
1538 IBuffB = numpy.array(IBuffB)
1542 showwarning(
"WARNING",
"No such file found or wrong format!")
1547 url =
"https://wiki.analog.com/university/tools/m1k/alice/desk-top-users-guide"
1548 webbrowser.open(url,new=2)
1551 global RevDate, SWRev, FWRevOne, HWRevOne, DevID, Version_url
1554 u = urllib2.urlopen(Version_url)
1556 time_string = str(meta.getheaders(
"Last-Modified"))
1558 time_string =
"Unavailable"
1560 showinfo(
"About ALICE",
"ALICE DeskTop" + SWRev + RevDate +
"\n" +
1561 "Latest Version: " + time_string[7:18] +
"\n" +
1562 "ADALM1000 Hardware Rev " + str(HWRevOne) +
"\n" +
1563 "Firmware Rev " + str(FWRevOne) +
"\n" +
1564 "Board Serial Number " + DevID +
"\n" +
1565 "Software is provided as is without any Warranty")
1568 global T1Vline, T2Vline, T1Iline, T2Iline
1569 global TXYline, Tmathline, TMRline, TXYRline
1570 global T1VRline, T2VRline, T1IRline, T2IRline, TMCVline, TMDVline
1571 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowMath, MathTrace
1572 global MuxScreenStatus, TMCRline, TMBRline, TMAVline, TMBVline, TMCVline, TMDVline
1573 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb
1575 if ShowC1_V.get() == 1:
1577 if ShowC2_V.get() == 1:
1579 if ShowC1_I.get() == 1:
1581 if ShowC2_I.get() == 1:
1583 if MathTrace.get() > 0:
1585 if MuxScreenStatus.get() > 0:
1586 if Show_CBA.get() > 0:
1588 if Show_CBB.get() > 0:
1590 if Show_CBC.get() > 0:
1592 if Show_CBD.get() > 0:
1594 if len(TXYline) > 4:
1598 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1599 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1601 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1602 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1603 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1604 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1606 devidstr = DevID[17:31]
1607 filename = devidstr +
"_O.cal"
1608 CalFile = open(filename,
"w")
1610 CalFile.write(
'CHAVGainEntry.delete(0,END)\n')
1611 CalFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1612 CalFile.write(
'CHBVGainEntry.delete(0,END)\n')
1613 CalFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1614 CalFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1615 CalFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1616 CalFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1617 CalFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1619 CalFile.write(
'CHAIGainEntry.delete(0,END)\n')
1620 CalFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1621 CalFile.write(
'CHBIGainEntry.delete(0,END)\n')
1622 CalFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1623 CalFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1624 CalFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1625 CalFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1626 CalFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1630 CHA_TC1.set(float(cha_TC1Entry.get()))
1631 CHA_TC2.set(float(cha_TC2Entry.get()))
1632 CHB_TC1.set(float(chb_TC1Entry.get()))
1633 CHB_TC2.set(float(chb_TC2Entry.get()))
1634 CHA_A1.set(float(cha_A1Entry.get()))
1635 CHA_A2.set(float(cha_A2Entry.get()))
1636 CHB_A1.set(float(chb_A1Entry.get()))
1637 CHB_A2.set(float(chb_A2Entry.get()))
1640 CalFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1641 CalFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1642 CalFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1643 CalFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1644 CalFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1645 CalFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1646 CalFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1647 CalFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1648 CalFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1649 CalFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1650 CalFile.write(
'cha_TC1Entry.delete(0,END)\n')
1651 CalFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1652 CalFile.write(
'cha_TC2Entry.delete(0,END)\n')
1653 CalFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1654 CalFile.write(
'chb_TC1Entry.delete(0,END)\n')
1655 CalFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1656 CalFile.write(
'chb_TC2Entry.delete(0,END)\n')
1657 CalFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1658 CalFile.write(
'cha_A1Entry.delete(0,END)\n')
1659 CalFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1660 CalFile.write(
'cha_A2Entry.delete(0,END)\n')
1661 CalFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1662 CalFile.write(
'chb_A1Entry.delete(0,END)\n')
1663 CalFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1664 CalFile.write(
'chb_A2Entry.delete(0,END)\n')
1665 CalFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1670 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1671 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1673 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1674 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1675 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1676 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1678 devidstr = DevID[17:31]
1679 filename = devidstr +
"_O.cal"
1681 CalFile = open(filename)
1682 for line
in CalFile:
1683 exec( line.rstrip() )
1686 print(
"Cal file for this device not found")
1689 global UserAString, UserALabel, MeasUserA
1691 TempString = UserALabel
1692 UserALabel = askstring(
"Measurement Label",
"Current Label: " + UserALabel +
"\n\nNew Label:\n", initialvalue=UserALabel)
1693 if (UserALabel ==
None):
1695 UserALabel = TempString
1697 TempString = UserAString
1698 UserAString = askstring(
"Measurement Formula",
"Current Formula: " + UserAString +
"\n\nNew Formula:\n", initialvalue=UserAString)
1699 if (UserAString ==
None):
1701 UserAString = TempString
1706 global UserBString, UserBLabel, MeasUserB
1708 TempString = UserBLabel
1709 UserBLabel = askstring(
"Measurement Label",
"Current Label: " + UserBLabel +
"\n\nNew Label:\n", initialvalue=UserBLabel)
1710 if (UserBLabel ==
None):
1712 UserBLabel = TempString
1714 TempString = UserBString
1715 UserBString = askstring(
"Measurement Formula",
"Current Formula: " + UserBString +
"\n\nNew Formula:\n", initialvalue=UserBString)
1716 if (UserBString ==
None):
1718 UserBString = TempString
1723 global RUNstatus, MathScreenStatus, MathWindow, SWRev, RevDate
1724 global MathString, MathUnits, MathXString, MathXUnits, MathYString, MathYUnits
1725 global MathAxis, MathXAxis, MathYAxis, MathTrace
1726 global formentry, unitsentry, axisentry, xformentry, xunitsentry, xaxisentry, yformentry, yunitsentry, yaxisentry
1727 global formlab, xformlab, yformlab
1729 if MathScreenStatus.get() == 0:
1730 MathScreenStatus.set(1)
1732 MathWindow = Toplevel()
1733 MathWindow.title(
"Math Formula " + SWRev + RevDate)
1734 MathWindow.resizable(FALSE,FALSE)
1735 MathWindow.protocol(
"WM_DELETE_WINDOW", DestroyMathScreen)
1736 frame1 = LabelFrame(MathWindow, text=
"Built-in Exp", style=
"A10R1.TLabelframe")
1737 frame2 = LabelFrame(MathWindow, text=
"Math Trace", style=
"A10R1.TLabelframe")
1738 frame3 = LabelFrame(MathWindow, text=
"X Math Trace", style=
"A10R1.TLabelframe")
1739 frame4 = LabelFrame(MathWindow, text=
"Y Math Trace", style=
"A10R1.TLabelframe")
1742 frame1.grid(row = 0, column=0, rowspan=3, sticky=W)
1743 frame2.grid(row = 0, column=1, sticky=W)
1744 frame3.grid(row = 1, column=1, sticky=W)
1745 frame4.grid(row = 2, column=1, sticky=W)
1749 rb1 = Radiobutton(frame1, text=
'none', variable=MathTrace, value=0, command=UpdateTimeTrace)
1750 rb1.grid(row=0, column=0, sticky=W)
1751 rb2 = Radiobutton(frame1, text=
'CAV+CBV', variable=MathTrace, value=1, command=UpdateTimeTrace)
1752 rb2.grid(row=1, column=0, sticky=W)
1753 rb3 = Radiobutton(frame1, text=
'CAV-CBV', variable=MathTrace, value=2, command=UpdateTimeTrace)
1754 rb3.grid(row=2, column=0, sticky=W)
1755 rb4 = Radiobutton(frame1, text=
'CBV-CAV', variable=MathTrace, value=3, command=UpdateTimeTrace)
1756 rb4.grid(row=3, column=0, sticky=W)
1757 rb5 = Radiobutton(frame1, text=
'CAI-CBI', variable=MathTrace, value=8, command=UpdateTimeTrace)
1758 rb5.grid(row=4, column=0, sticky=W)
1759 rb6 = Radiobutton(frame1, text=
'CBI-CAI', variable=MathTrace, value=9, command=UpdateTimeTrace)
1760 rb6.grid(row=5, column=0, sticky=W)
1761 rb7 = Radiobutton(frame1, text=
'CAV*CAI', variable=MathTrace, value=4, command=UpdateTimeTrace)
1762 rb7.grid(row=6, column=0, sticky=W)
1763 rb8 = Radiobutton(frame1, text=
'CBV*CBI', variable=MathTrace, value=5, command=UpdateTimeTrace)
1764 rb8.grid(row=7, column=0, sticky=W)
1765 rb9 = Radiobutton(frame1, text=
'CAV/CAI', variable=MathTrace, value=6, command=UpdateTimeTrace)
1766 rb9.grid(row=8, column=0, sticky=W)
1767 rb10 = Radiobutton(frame1, text=
'CBV/CBI', variable=MathTrace, value=7, command=UpdateTimeTrace)
1768 rb10.grid(row=9, column=0, sticky=W)
1769 rb11 = Radiobutton(frame1, text=
'CBV/CAV', variable=MathTrace, value=10, command=UpdateTimeTrace)
1770 rb11.grid(row=10, column=0, sticky=W)
1771 rb12 = Radiobutton(frame1, text=
'CBI/CAI', variable=MathTrace, value=11, command=UpdateTimeTrace)
1772 rb12.grid(row=11, column=0, sticky=W)
1773 rb13 = Radiobutton(frame1, text=
'Formula', variable=MathTrace, value=12, command=UpdateTimeTrace)
1774 rb13.grid(row=12, column=0, sticky=W)
1778 sframe2a = Frame( frame2 )
1779 sframe2a.pack(side=TOP)
1780 formlab = Label(sframe2a, text=
"Formula ", style=
"A10B.TLabel")
1781 formlab.grid(row=0, column=0, sticky=W)
1782 formlab.pack(side=LEFT)
1783 formentry = Entry(sframe2a, width=23)
1784 formentry.grid(row=0, column=1, sticky=W)
1785 formentry.pack(side=LEFT)
1786 formentry.delete(0,
"end")
1787 formentry.insert(0,MathString)
1788 sframe2b = Frame( frame2 )
1789 sframe2b.pack(side=TOP)
1790 unitslab = Label(sframe2b, text=
"Units ", style=
"A10B.TLabel")
1791 unitslab.grid(row=0, column=0, sticky=W)
1792 unitslab.pack(side=LEFT)
1793 unitsentry = Entry(sframe2b, width=6)
1794 unitsentry.grid(row=0, column=1, sticky=W)
1795 unitsentry.pack(side=LEFT)
1796 unitsentry.delete(0,
"end")
1797 unitsentry.insert(0,MathUnits)
1798 checkbt = Button(sframe2b, text=
"Check", command=CheckMathString )
1799 checkbt.grid(row=0, column=2, sticky=W)
1800 checkbt.pack(side=LEFT)
1801 sframe2c = Frame( frame2 )
1802 sframe2c.pack(side=TOP)
1803 axislab = Label(sframe2c, text=
"Axis ", style=
"A10B.TLabel")
1804 axislab.grid(row=0, column=0, sticky=W)
1805 axislab.pack(side=LEFT)
1806 axisentry = Entry(sframe2c, width=3)
1807 axisentry.grid(row=0, column=1, sticky=W)
1808 axisentry.pack(side=LEFT)
1809 axisentry.delete(0,
"end")
1810 axisentry.insert(0,MathAxis)
1811 applybt = Button(sframe2c, text=
"Apply", command=ApplyMathString )
1812 applybt.grid(row=0, column=2, sticky=W)
1813 applybt.pack(side=LEFT)
1817 sframe3a = Frame( frame3 )
1818 sframe3a.pack(side=TOP)
1819 xformlab = Label(sframe3a, text=
" X Formula ", style=
"A10B.TLabel")
1820 xformlab.grid(row=0, column=0, sticky=W)
1821 xformlab.pack(side=LEFT)
1822 xformentry = Entry(sframe3a, width=20)
1823 xformentry.grid(row=0, column=1, sticky=W)
1824 xformentry.pack(side=LEFT)
1825 xformentry.delete(0,
"end")
1826 xformentry.insert(0, MathXString)
1827 sframe3b = Frame( frame3 )
1828 sframe3b.pack(side=TOP)
1829 xunitslab = Label(sframe3b, text=
"X Units ", style=
"A10B.TLabel")
1830 xunitslab.grid(row=0, column=0, sticky=W)
1831 xunitslab.pack(side=LEFT)
1832 xunitsentry = Entry(sframe3b, width=6)
1833 xunitsentry.grid(row=0, column=1, sticky=W)
1834 xunitsentry.pack(side=LEFT)
1835 xunitsentry.delete(0,
"end")
1836 xunitsentry.insert(0, MathXUnits)
1837 xcheckbt = Button(sframe3b, text=
"Check", command=CheckMathXString )
1838 xcheckbt.grid(row=0, column=2, sticky=W)
1839 xcheckbt.pack(side=LEFT)
1840 sframe3c = Frame( frame3 )
1841 sframe3c.pack(side=TOP)
1842 xaxislab = Label(sframe3c, text=
"X Axis ", style=
"A10B.TLabel")
1843 xaxislab.grid(row=0, column=0, sticky=W)
1844 xaxislab.pack(side=LEFT)
1845 xaxisentry = Entry(sframe3c, width=3)
1846 xaxisentry.grid(row=0, column=1, sticky=W)
1847 xaxisentry.pack(side=LEFT)
1848 xaxisentry.delete(0,
"end")
1849 xaxisentry.insert(0, MathXAxis)
1850 xapplybt = Button(sframe3c, text=
"Apply", command=ApplyMathXString )
1851 xapplybt.grid(row=0, column=3, sticky=W)
1852 xapplybt.pack(side=LEFT)
1856 sframe4a = Frame( frame4 )
1857 sframe4a.pack(side=TOP)
1858 yformlab = Label(sframe4a, text=
"Y Formula ", style=
"A10B.TLabel")
1859 yformlab.grid(row=0, column=0, sticky=W)
1860 yformlab.pack(side=LEFT)
1861 yformentry = Entry(sframe4a, width=20)
1862 yformentry.grid(row=0, column=1, sticky=W)
1863 yformentry.pack(side=LEFT)
1864 yformentry.delete(0,
"end")
1865 yformentry.insert(0,MathYString)
1866 sframe4b = Frame( frame4 )
1867 sframe4b.pack(side=TOP)
1868 yunitslab = Label(sframe4b, text=
"Y Units ", style=
"A10B.TLabel")
1869 yunitslab.grid(row=0, column=0, sticky=W)
1870 yunitslab.pack(side=LEFT)
1871 yunitsentry = Entry(sframe4b, width=6)
1872 yunitsentry.grid(row=0, column=1, sticky=W)
1873 yunitsentry.pack(side=LEFT)
1874 yunitsentry.delete(0,
"end")
1875 yunitsentry.insert(0,MathYUnits)
1876 ycheckbt = Button(sframe4b, text=
"Check", command=CheckMathYString )
1877 ycheckbt.grid(row=0, column=2, sticky=W)
1878 ycheckbt.pack(side=LEFT)
1879 sframe4c = Frame( frame4 )
1880 sframe4c.pack(side=TOP)
1881 yaxislab = Label(sframe4c, text=
"Y Axis ", style=
"A10B.TLabel")
1882 yaxislab.grid(row=0, column=0, sticky=W)
1883 yaxislab.pack(side=LEFT)
1884 yaxisentry = Entry(sframe4c, width=3)
1885 yaxisentry.grid(row=0, column=1, sticky=W)
1886 yaxisentry.pack(side=LEFT)
1887 yaxisentry.delete(0,
"end")
1888 yaxisentry.insert(0,MathYAxis)
1889 yapplybt = Button(sframe4c, text=
"Apply", command=ApplyMathYString )
1890 yapplybt.grid(row=0, column=3, sticky=W)
1891 yapplybt.pack(side=LEFT)
1893 dismissbutton = Button(MathWindow, text=
"Dismiss", command=DestroyMathScreen)
1894 dismissbutton.grid(row=3, column=0, sticky=W)
1896 if RUNstatus.get() > 0:
1900 global MathScreenStatus, MathWindow
1902 if MathScreenStatus.get() == 1:
1903 MathScreenStatus.set(0)
1904 MathWindow.destroy()
1907 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry, formlab
1908 global VBuffA, VBuffB, IBuffA, IBuffB
1909 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
1910 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
1911 global FFTBuffA, FFTBuffB, FFTwindowshape
1912 global AWGAwaveform, AWGBwaveform
1913 global Show_MathX, Show_MathY
1914 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
1915 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
1918 TempString = formentry.get()
1920 MathResult = eval(TempString)
1921 formlab.configure(text=
"Formula ", style=
"A10G.TLabel")
1923 formlab.configure(text=
"Formula ", style=
"A10R.TLabel")
1926 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry, xformlab
1927 global VBuffA, VBuffB, IBuffA, IBuffB
1928 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
1929 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
1930 global FFTBuffA, FFTBuffB, FFTwindowshape
1931 global AWGAwaveform, AWGBwaveform
1932 global Show_MathX, Show_MathY
1933 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
1934 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
1937 TempString = xformentry.get()
1939 MathResult = eval(TempString)
1940 xformlab.configure(text=
"X Formula ", style=
"A10G.TLabel")
1942 xformlab.configure(text=
"X Formula ", style=
"A10R.TLabel")
1945 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry, yformlab
1946 global VBuffA, VBuffB, IBuffA, IBuffB
1947 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
1948 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
1949 global FFTBuffA, FFTBuffB, FFTwindowshape
1950 global AWGAwaveform, AWGBwaveform
1951 global Show_MathX, Show_MathY
1952 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
1953 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
1956 TempString = yformentry.get()
1958 MathResult = eval(TempString)
1959 yformlab.configure(text=
"Y Formula ", style=
"A10G.TLabel")
1961 yformlab.configure(text=
"Y Formula ", style=
"A10R.TLabel")
1964 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry
1966 MathString = formentry.get()
1967 MathUnits = unitsentry.get()
1968 MathAxis = axisentry.get()
1971 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry
1973 MathXString = xformentry.get()
1974 MathXUnits = xunitsentry.get()
1975 MathXAxis = xaxisentry.get()
1978 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry
1980 MathYString = yformentry.get()
1981 MathYUnits = yunitsentry.get()
1982 MathYAxis = yaxisentry.get()
1987 TempString = MarkerLoc
1988 MarkerLoc = askstring(
"Marker Text Location",
"Current Marker Text Location: " + MarkerLoc +
"\n\nNew Location: (UL, UR, LL, LR)\n", initialvalue=MarkerLoc)
1989 if (MarkerLoc ==
None):
1990 MarkerLoc = TempString
2000 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
2008 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
2022 global TgInput, TRIGGERlevel, TRIGGERentry
2023 global MaxV1, MinV1, MaxV2, MinV2
2024 global MaxI1, MinI1, MaxI2, MinI2
2026 MidV1 = (MaxV1+MinV1)/2
2027 MidV2 = (MaxV2+MinV2)/2
2028 MidI1 = (MaxI1+MinI1)/2
2029 MidI2 = (MaxI2+MinI2)/2
2030 if (TgInput.get() == 0):
2032 elif (TgInput.get() == 1 ):
2033 DCString =
' {0:.2f} '.format(MidV1)
2034 elif (TgInput.get() == 2 ):
2035 DCString =
' {0:.2f} '.format(MidI1)
2036 elif (TgInput.get() == 3 ):
2037 DCString =
' {0:.2f} '.format(MidV2)
2038 elif (TgInput.get() == 4 ):
2039 DCString =
' {0:.2f} '.format(MidI2)
2041 TRIGGERlevel = eval(DCString)
2042 TRIGGERentry.delete(0,END)
2043 TRIGGERentry.insert(4, DCString)
2060 global TRIGGERlevel, TRIGGERentry
2064 TRIGGERlevel = float(eval(TRIGGERentry.get()))
2066 TRIGGERentry.delete(0,END)
2067 TRIGGERentry.insert(0, TRIGGERlevel)
2073 global HoldOff, HoldOffentry
2076 HoldOff = float(eval(HoldOffentry.get()))
2078 HoldOffentry.delete(0,END)
2079 HoldOffentry.insert(0, HoldOff)
2082 global HozPoss, HozPossentry
2085 HozPoss = float(eval(HozPossentry.get()))
2087 HozPossentry.delete(0,END)
2088 HozPossentry.insert(0, HozPoss)
2091 global HozPossentry, TgInput, TMsb
2095 TIMEdiv = float(eval(TMsb.get()))
2098 TMsb.delete(0,
"end")
2099 TMsb.insert(0,TIMEdiv)
2101 if TIMEdiv < 0.0002:
2103 if TgInput.get() > 0:
2104 HozPoss = -5 * TIMEdiv
2105 HozPossentry.delete(0,END)
2106 HozPossentry.insert(0, HozPoss)
2109 global HoldOffentry, HoldOff, TgInput, TMsb
2113 TIMEdiv = float(eval(TMsb.get()))
2116 TMsb.delete(0,
"end")
2117 TMsb.insert(0,TIMEdiv)
2119 if TIMEdiv < 0.0002:
2121 if TgInput.get() == 0:
2122 HoldOff = HoldOff + TIMEdiv
2123 HoldOffentry.delete(0,END)
2124 HoldOffentry.insert(0, HoldOff)
2127 global CHB_APosEntry, DCVMuxA
2129 CHB_APosEntry.delete(0,
"end")
2130 CHB_APosEntry.insert(0,
' {0:.2f} '.format(DCVMuxA))
2133 global CHB_BPosEntry, DCVMuxB
2135 CHB_BPosEntry.delete(0,
"end")
2136 CHB_BPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxB))
2139 global CHB_CPosEntry, DCVMuxC
2141 CHB_CPosEntry.delete(0,
"end")
2142 CHB_CPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxC))
2145 global CHD_BPosEntry, DCVMuxD
2147 CHB_DPosEntry.delete(0,
"end")
2148 CHB_DPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxD))
2151 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2153 if MarkerScale.get() != 1:
2155 CHB_Alab.config(style=
"Rtrace2.TButton")
2156 CHB_Blab.config(style=
"Strace6.TButton")
2157 CHB_Clab.config(style=
"Strace7.TButton")
2158 CHB_Dlab.config(style=
"Strace4.TButton")
2163 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2165 if MarkerScale.get() != 1:
2167 CHB_Alab.config(style=
"Strace2.TButton")
2168 CHB_Blab.config(style=
"Rtrace6.TButton")
2169 CHB_Clab.config(style=
"Strace7.TButton")
2170 CHB_Dlab.config(style=
"Strace4.TButton")
2175 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2177 if MarkerScale.get() != 1:
2179 CHB_Alab.config(style=
"Strace2.TButton")
2180 CHB_Blab.config(style=
"Strace6.TButton")
2181 CHB_Clab.config(style=
"Rtrace7.TButton")
2182 CHB_Dlab.config(style=
"Strace4.TButton")
2187 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2189 if MarkerScale.get() != 1:
2191 CHB_Alab.config(style=
"Strace2.TButton")
2192 CHB_Blab.config(style=
"Strace6.TButton")
2193 CHB_Clab.config(style=
"Strace7.TButton")
2194 CHB_Dlab.config(style=
"Rtrace4.TButton")
2199 global CHAVPosEntry, DCV1
2201 CHAVPosEntry.delete(0,
"end")
2202 CHAVPosEntry.insert(0,
' {0:.2f} '.format(DCV1))
2205 global CHBVPosEntry, DCV2
2207 CHBVPosEntry.delete(0,
"end")
2208 CHBVPosEntry.insert(0,
' {0:.2f} '.format(DCV2))
2211 global CHAIPosEntry, DCI1
2213 CHAIPosEntry.delete(0,
"end")
2214 CHAIPosEntry.insert(0,
' {0:.2f} '.format(DCI1))
2217 global CHBIPosEntry, DCI2
2219 CHBIPosEntry.delete(0,
"end")
2220 CHBIPosEntry.insert(0,
' {0:.2f} '.format(DCI2))
2223 global CHAVPosEntryxy, DCV1
2225 CHAVPosEntryxy.delete(0,
"end")
2226 CHAVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV1))
2229 global CHBVPosEntryxy, DCV2
2231 CHBVPosEntryxy.delete(0,
"end")
2232 CHBVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV2))
2235 global CHAIPosEntryxy, DCI1
2237 CHAIPosEntryxy.delete(0,
"end")
2238 CHAIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI1))
2241 global CHBIPosEntryxy, DCI2
2243 CHBIPosEntryxy.delete(0,
"end")
2244 CHBIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI2))
2247 global RUNstatus, session, CHA, CHB, devx, AWG_2X
2253 CHA.mode = Mode.HI_Z_SPLIT
2254 CHB.mode = Mode.HI_Z_SPLIT
2260 if session.continuous:
2269 global RUNstatus, PowerStatus, devx, PwrBt, DevID, FWRevOne, session, AWGSync
2270 global contloop, discontloop, TIMEdiv, First_Slow_sweep
2272 if DevID ==
"No Device":
2273 showwarning(
"WARNING",
"No Device Plugged In!")
2274 elif FWRevOne == 0.0:
2275 showwarning(
"WARNING",
"Out of data Firmware!")
2277 if PowerStatus == 0:
2279 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2280 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2281 if (RUNstatus.get() == 0):
2283 if AWGSync.get() == 0:
2285 CHA.mode = Mode.HI_Z_SPLIT
2286 CHB.mode = Mode.HI_Z_SPLIT
2288 if not session.continuous:
2291 elif session.continuous:
2294 CHA.mode = Mode.HI_Z_SPLIT
2295 CHB.mode = Mode.HI_Z_SPLIT
2312 if session.continuous:
2317 First_Slow_sweep = 0
2319 First_Slow_sweep = 1
2322 global session, AWGSync
2325 if AWGSync.get() == 0:
2327 if not session.continuous:
2330 elif session.continuous:
2336 if session.continuous:
2340 global AWGAFreqEntry, AWGAFreqvalue, Two_X_Sample, FWRevOne
2343 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
2345 AWGAFreqEntry.delete(0,
"end")
2346 AWGAFreqEntry.insert(0, AWGAFreqvalue)
2348 if AWGAFreqvalue > 20000.0:
2357 global IASource, CHA, CHB, AWGAMode, AWGBMode, AWGBIOMode
2359 if IASource.get() == 1:
2360 CHA.mode = Mode.HI_Z
2361 CHB.mode = Mode.HI_Z
2364 CHA.mode = Mode.SVMI
2365 CHB.mode = Mode.HI_Z
2367 if AWGBIOMode.get() == 0:
2371 global RUNstatus, TimeDisp, XYDisp, FreqDisp, IADisp, session, AWGSync
2372 global CHA, CHB, contloop, discontloop
2374 if (RUNstatus.get() == 1):
2376 CHA.mode = Mode.HI_Z_SPLIT
2377 CHB.mode = Mode.HI_Z_SPLIT
2378 if AWGSync.get() == 0:
2383 if session.continuous:
2392 elif (RUNstatus.get() == 2):
2394 elif (RUNstatus.get() == 3):
2396 elif (RUNstatus.get() == 4):
2398 if TimeDisp.get() > 0:
2400 if XYDisp.get() > 0:
2402 if FreqDisp.get() > 0:
2404 if IADisp.get() > 0:
2408 global RUNstatus, PowerStatus, devx, PwrBt
2410 if (RUNstatus.get() == 1):
2412 if PowerStatus == 1:
2414 PwrBt.config(style=
"PwrOff.TButton",text=
"PWR-Off")
2415 devx.ctrl_transfer( 0x40, 0x50, 49, 0, 0, 0, 100)
2418 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2419 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2422 global TIMEdiv, TMsb, RUNstatus, Two_X_Sample, ETSDisp, FWRevOne
2425 TIMEdiv = float(eval(TMsb.get()))
2426 if TIMEdiv < 0.0002:
2428 TMsb.delete(0,
"end")
2429 TMsb.insert(0,TIMEdiv)
2432 TMsb.delete(0,
"end")
2433 TMsb.insert(0,TIMEdiv)
2435 if ETSDisp.get() == 0:
2436 Samples_per_div = TIMEdiv * 100.0
2438 if Samples_per_div < 20.0:
2444 if RUNstatus.get() == 2:
2453 CH1vpdvLevel = float(eval(CHAsb.get()))
2456 CHAsb.insert(0, CH1vpdvLevel)
2463 CH1ipdvLevel = float(eval(CHAIsb.get()))
2465 CHAIsb.delete(0,END)
2466 CHAIsb.insert(0, CH1ipdvLevel)
2473 CH2vpdvLevel = float(eval(CHBsb.get()))
2476 CHBsb.insert(0, CH2vpdvLevel)
2483 CH2ipdvLevel = float(eval(CHBIsb.get()))
2485 CHBIsb.delete(0,END)
2486 CHBIsb.insert(0, CH2ipdvLevel)
2490 global CHAOffset, CHAVPosEntry
2493 CHAOffset = float(eval(CHAVPosEntry.get()))
2495 CHAVPosEntry.delete(0,END)
2496 CHAVPosEntry.insert(0, CHAOffset)
2501 global CHAIOffset, CHAIPosEntry
2504 CHAIOffset = float(eval(CHAIPosEntry.get()))
2506 CHAIPosEntry.delete(0,END)
2507 CHAIPosEntry.insert(0, CHAIOffset)
2512 global CHBOffset, CHBVPosEntry
2515 CHBOffset = float(eval(CHBVPosEntry.get()))
2517 CHBVPosEntry.delete(0,END)
2518 CHBVPosEntry.insert(0, CHBOffset)
2523 global CHBIOffset, CHBIPosEntry
2526 CHBIOffset = float(eval(CHBIPosEntry.get()))
2528 CHBIPosEntry.delete(0,END)
2529 CHBIPosEntry.insert(0, CHBIOffset)
2534 global TimeDisp, ckb1
2535 if TimeDisp.get() == 1:
2536 ckb1.config(style=
"Enab.TCheckbutton")
2538 ckb1.config(style=
"Disab.TCheckbutton")
2542 if XYDisp.get() == 1:
2543 ckb2.config(style=
"Enab.TCheckbutton")
2545 ckb2.config(style=
"Disab.TCheckbutton")
2548 global FreqDisp, ckb3
2549 if FreqDisp.get() == 1:
2550 ckb3.config(style=
"Enab.TCheckbutton")
2552 ckb3.config(style=
"Disab.TCheckbutton")
2555 global BodeDisp, ckb5, AWGSync
2556 if BodeDisp.get() == 1:
2558 ckb5.config(style=
"Enab.TCheckbutton")
2560 ckb5.config(style=
"Disab.TCheckbutton")
2564 if IADisp.get() == 1:
2565 ckb4.config(style=
"Enab.TCheckbutton")
2567 ckb4.config(style=
"Disab.TCheckbutton")
2570 global OhmDisp, ckb6
2571 if OhmDisp.get() == 1:
2572 ckb6.config(style=
"Enab.TCheckbutton")
2574 ckb6.config(style=
"Disab.TCheckbutton")
2577 global ETSDisp, enb1
2578 if ETSDisp.get() == 1:
2579 enb1.config(style=
"Enab.TCheckbutton")
2582 enb1.config(style=
"Disab.TCheckbutton")
2588 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp, SpectrumScreenStatus, HWRevOne
2589 global IADisp, IAScreenStatus, CutDC, DevOne, AWGBMode, MuxEnb, BodeScreenStatus, BodeDisp
2590 global MuxScreenStatus, VBuffA, VBuffB, MuxSync, AWGBIOMode
2591 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD, MuxChan
2592 global ShowC1_V, ShowC2_V, ShowC2_I, SMPfft
2593 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
2594 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2595 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2596 global SV1, SI1, SV2, SI2, SVA_B
2597 global FregPoint, FBins, FStep
2599 global TRACEresetTime, TRACEmodeTime
2600 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
2601 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
2602 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
2603 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
2604 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
2605 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
2609 if (RUNstatus.get() == 1)
or (RUNstatus.get() == 2):
2610 if TimeDisp.get() > 0
or XYDisp.get() > 0:
2611 if MuxScreenStatus.get() == 0:
2615 if DualMuxMode.get() == 1:
2620 if HWRevOne ==
"D" :
2623 if AWGBIOMode.get() == 0:
2625 if MuxEnb.get() == 1:
2629 if MuxSync.get() == 0:
2635 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
2636 TRACEresetTime =
True
2637 elif TRACEmodeTime.get() == 1:
2638 if TRACEresetTime ==
True:
2639 TRACEresetTime =
False
2641 VmemoryMuxA = VBuffMA
2642 VmemoryMuxB = VBuffMB
2643 VmemoryMuxC = VBuffMC
2644 ImemoryMuxD = VBuffMD
2645 if Show_CBA.get() == 1:
2647 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2648 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2649 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2650 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2652 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2655 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
2657 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
2660 VmemoryMuxA = VBuffMA
2661 if Show_CBB.get() == 1:
2663 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2664 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2665 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2666 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2668 devx.ctrl_transfer(0x40, PIO3x, 3, 0, 0, 0, 100)
2671 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
2673 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
2676 VmemoryMuxB = VBuffMB
2677 if Show_CBC.get() == 1:
2679 if DualMuxMode.get() == 1:
2680 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2681 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2683 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2684 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
2685 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2686 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2688 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2691 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
2693 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
2696 VmemoryMuxC = VBuffMC
2697 if Show_CBD.get() == 1:
2699 if DualMuxMode.get() == 1:
2700 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2701 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2703 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2704 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
2705 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2706 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2708 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2711 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
2713 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
2716 VmemoryMuxD = VBuffMD
2717 if Show_CBA.get() == 0
and Show_CBB.get() == 0
and Show_CBC.get() == 0
and Show_CBD.get() == 0
and ShowC1_V.get() == 1:
2719 if (FreqDisp.get() > 0
and SpectrumScreenStatus.get() == 1)
or (IADisp.get() > 0
and IAScreenStatus.get() == 1)
or (BodeDisp.get() > 0
and BodeScreenStatus.get() == 1):
2720 if IADisp.get() > 0
or BodeDisp.get() > 0:
2723 if BodeDisp.get() > 0:
2724 if LoopNum.get() <= len(FStep):
2725 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
2726 if FregPoint < 100.0:
2728 elif FregPoint < 500.0:
2730 elif FregPoint < 2000.0:
2734 if Two_X_Sample.get() > 0
and FregPoint < 2000.0:
2738 elif OhmRunStatus.get() == 1
and OhmDisp.get() == 1:
2740 root.update_idletasks()
2744 global RMode, CHATestVEntry, CHATestREntry, CHA, CHB, devx, OhmA0, OhmA1, discontloop
2745 global AWGAMode, AWGBMode, AWGAShape, AWGSync, AWGBTerm, AWGAOffsetEntry
2749 InOffA = float(eval(CHAVOffsetEntry.get()))
2751 CHAVOffsetEntry.delete(0,END)
2752 CHAVOffsetEntry.insert(0, InOffA)
2754 InGainA = float(eval(CHAVGainEntry.get()))
2756 CHAVGainEntry.delete(0,END)
2757 CHAVGainEntry.insert(0, InGainA)
2759 InOffB = float(eval(CHBVOffsetEntry.get()))
2761 CHBVOffsetEntry.delete(0,END)
2762 CHBVOffsetEntry.insert(0, InOffB)
2764 InGainB = float(eval(CHBVGainEntry.get()))
2766 CHBVGainEntry.delete(0,END)
2767 CHBVGainEntry.insert(0, InGainB)
2769 CurOffA = float(CHAIOffsetEntry.get())
2773 CurOffB = float(CHBIOffsetEntry.get())
2777 CurGainA = float(CHAIGainEntry.get())
2781 CurGainB = float(CHBIGainEntry.get())
2785 chatestv = float(eval(CHATestVEntry.get()))
2788 CHATestVEntry.delete(0,END)
2789 CHATestVEntry.insert(0, chatestv)
2791 CHATestVEntry.delete(0,END)
2792 CHATestVEntry.insert(0, chatestv)
2794 chatestr = float(eval(CHATestREntry.get()))
2796 CHATestREntry.delete(0,END)
2797 CHATestREntry.insert(0, chatestr)
2799 DCVA0 = DCVB0 = DCIA0 = DCIB0 = 0.0
2805 AWGAOffsetEntry.delete(0,
"end")
2806 AWGAOffsetEntry.insert(0, chatestv)
2807 if RMode.get() == 0:
2812 if AWGSync.get() > 0:
2819 ADsignal1 = devx.get_samples(210)
2822 if session.continuous:
2823 ADsignal1 = devx.read(210, -1,
True)
2826 for index
in range(200):
2827 DCVA0 += ADsignal1[index+10][0][0]
2828 DCVB0 += ADsignal1[index+10][1][0]
2829 DCIA0 += ADsignal1[index+10][0][1]
2830 DCIB0 += ADsignal1[index+10][1][1]
2832 DCVA0 = DCVA0 / 200.0
2833 DCVB0 = DCVB0 / 200.0
2834 DCIA0 = DCIA0 / 200.0
2835 DCIB0 = DCIB0 / 200.0
2836 DCVA0 = (DCVA0 - InOffA) * InGainA
2837 DCVB0 = (DCVB0 - InOffB) * InGainB
2838 DCIA0 = ((DCIA0*1000) - CurOffA) * CurGainA
2839 DCIB0 = ((DCIB0*1000) - CurOffB) * CurGainB
2840 if RMode.get() == 0:
2841 DCM = chatestr * (DCVB0/(DCVA0-DCVB0))
2842 DCR = (DCM * RIN) / (RIN - DCM)
2844 DCR = chatestr * ((DCVA0-DCVB0)/DCVB0)
2846 OhmString =
'{0:.2f} '.format(DCR) +
"Ohms "
2848 OhmString =
'{0:.3f} '.format(DCR/1000) +
"KOhms "
2849 IAString =
"Meas " +
' {0:.2f} '.format(DCIA0) +
" mA " +
' {0:.2f} '.format(DCVB0) +
" V"
2850 OhmA0.config(text = OhmString)
2851 OhmA1.config(text = IAString)
2854 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
2858 global TIMEdiv, TMsb
2859 global CHAVOffsetEntry, CHAVGainEntry, CHBVOffsetEntry, CHBVGainEntry
2860 global CHAIOffsetEntry, CHBIOffsetEntry, CHAIGainEntry, CHBIGainEntry
2861 global InOffA, InGainA, InOffB, InGainB
2862 global CurOffA, CurOffB, CurGainA, CurGainB
2866 TIMEdiv = eval(TMsb.get())
2869 TMsb.delete(0,
"end")
2870 TMsb.insert(0,TIMEdiv)
2871 if TIMEdiv < 0.0002:
2876 InOffA = float(eval(CHAVOffsetEntry.get()))
2878 CHAVOffsetEntry.delete(0,END)
2879 CHAVOffsetEntry.insert(0, InOffA)
2881 InGainA = float(eval(CHAVGainEntry.get()))
2883 CHAVGainEntry.delete(0,END)
2884 CHAVGainEntry.insert(0, InGainA)
2886 InOffB = float(eval(CHBVOffsetEntry.get()))
2888 CHBVOffsetEntry.delete(0,END)
2889 CHBVOffsetEntry.insert(0, InOffB)
2891 InGainB = float(eval(CHBVGainEntry.get()))
2893 CHBVGainEntry.delete(0,END)
2894 CHBVGainEntry.insert(0, InGainB)
2896 CurOffA = float(CHAIOffsetEntry.get())
2900 CurOffB = float(CHBIOffsetEntry.get())
2904 CurGainA = float(CHAIGainEntry.get())
2908 CurGainB = float(CHBIGainEntry.get())
2919 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
2920 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2921 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
2922 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
2923 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
2924 global CHA, CHB, session, devx, discontloop, contloop
2925 global TRACES, TRACESread, TRACEsize, First_Slow_sweep, ShiftPointer
2926 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
2927 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered
2928 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
2929 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
2930 global SCREENrefresh, DCrefresh
2931 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2932 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2933 global SV1, SI1, SV2, SI2, SVA_B
2934 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
2935 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
2936 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
2937 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
2938 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
2939 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
2940 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
2941 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
2942 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2943 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
2944 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
2945 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
2946 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
2947 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
2948 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
2949 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
2950 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
2951 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
2952 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
2953 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
2954 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
2957 DCVA0 = DCVB0 = DCIA0 = DCIB0= 0.0
2960 if First_Slow_sweep == 0:
2961 BufferLen = TIMEdiv*12.0
2962 VBuffA = numpy.ones(BufferLen)
2963 VBuffB = numpy.ones(BufferLen)
2964 IBuffA = numpy.ones(BufferLen)
2965 IBuffB = numpy.ones(BufferLen)
2966 First_Slow_sweep = 1
2968 if AWGScreenStatus.get() == 1:
2969 if AWGSync.get() > 0:
2975 ADsignal1 = devx.get_samples(NumSamples)
2977 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
2978 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
2979 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
2980 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
2983 if session.continuous:
2984 if MuxScreenStatus.get() > 0:
2985 devx.flush(-1,
True)
2986 DummySamples = NumSamples*2
2987 if DummySamples < 10000:
2988 DummySamples = 10000
2989 ADsignal1 = devx.read(DummySamples, -1,
True)
2990 ADsignal1 = devx.read(NumSamples, -1,
True)
2993 ADsignal1 = devx.get_samples(NumSamples)
2996 for index
in range(NumSamples):
2997 DCVA0 += ADsignal1[index][0][0]
2998 DCVB0 += ADsignal1[index][1][0]
2999 DCIA0 += ADsignal1[index][0][1]
3000 DCIB0 += ADsignal1[index][1][1]
3001 DCVA0 = DCVA0/(NumSamples)
3002 DCVB0 = DCVB0/(NumSamples)
3003 DCVA0 = (DCVA0 - InOffA) * InGainA
3004 DCVB0 = (DCVB0 - InOffB) * InGainB
3005 DCIA0 = DCIA0/(NumSamples)
3006 DCIB0 = DCIB0/(NumSamples)
3007 DCIA0 = DCIA0 * 1000
3008 DCIB0 = DCIB0 * 1000
3009 DCIA0 = (DCIA0 - CurOffA) * CurGainA
3010 DCIB0 = (DCIB0 - CurOffB) * CurGainB
3017 DCV1 = numpy.mean(VBuffA)
3018 DCV2 = numpy.mean(VBuffB)
3019 DCI1 = numpy.mean(IBuffA)
3020 DCI2 = numpy.mean(IBuffB)
3022 MinV1 = numpy.amin(VBuffA)
3023 MaxV1 = numpy.amax(VBuffA)
3024 MinV2 = numpy.amin(VBuffB)
3025 MaxV2 = numpy.amax(VBuffB)
3026 MinI1 = numpy.amin(IBuffA)
3027 MaxI1 = numpy.amax(IBuffA)
3028 MinI2 = numpy.amin(IBuffB)
3029 MaxI2 = numpy.amax(IBuffB)
3031 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA)))
3032 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA)))
3033 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB)))
3034 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB)))
3035 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA-VBuffB)))
3037 if TimeDisp.get() > 0:
3039 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3041 if MeasureStatus.get() > 0:
3043 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
3044 if RUNstatus.get() == 3:
3046 if RUNstatus.get() == 4:
3048 if TimeDisp.get() > 0:
3050 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3056 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3057 global VmemoryA, VmemoryB, ImemoryA, ImemoryB, MBuff, MBuffX, MBuffY
3058 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3059 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3060 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3061 global CHA, CHB, session, devx, discontloop, contloop
3062 global TRACES, TRACESread, TRACEsize
3063 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3064 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered
3065 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
3066 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3067 global SCREENrefresh, DCrefresh
3068 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3069 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3070 global SV1, SI1, SV2, SI2, SVA_B
3071 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3072 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3073 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3074 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3075 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3076 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3077 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3078 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3079 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3080 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3081 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3082 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3083 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3084 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3085 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3086 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3087 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3088 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3089 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3090 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3091 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3093 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3094 TRACEresetTime =
True
3095 elif TRACEmodeTime.get() == 1:
3096 if TRACEresetTime ==
True:
3097 TRACEresetTime =
False
3105 HoldOff = float(eval(HoldOffentry.get()))
3108 HoldOffentry.delete(0,END)
3109 HoldOffentry.insert(0, HoldOff)
3111 HoldOffentry.delete(0,END)
3112 HoldOffentry.insert(0, HoldOff)
3115 HozPoss = float(eval(HozPossentry.get()))
3117 HozPossentry.delete(0,END)
3118 HozPossentry.insert(0, HozPoss)
3120 hldn = int(HoldOff * SAMPLErate/1000 )
3121 hozpos = int(HozPoss * SAMPLErate/1000 )
3124 twoscreens = int(SAMPLErate * 20.0 * TIMEdiv / 1000.0)
3125 onescreen = int(twoscreens/2)
3126 if hldn+hozpos > MaxSamples-twoscreens:
3127 hldn = MaxSamples-twoscreens-hozpos
3128 HoldOffentry.delete(0,END)
3129 HoldOffentry.insert(0, hldn*1000/SAMPLErate)
3130 if ETSDisp.get() > 0:
3132 MaxETSrecord = int(AWGSAMPLErate * 10 * TIMEdiv / 1000.0)
3134 MaxETSrecord = int(AWGSAMPLErate * 20 * TIMEdiv / 1000.0)
3135 if (MaxETSrecord*100) > MaxSamples:
3136 MaxETSrecord = MaxSamples / 100
3138 DivX = float(eval(DivXEntry.get()))
3143 DivXEntry.delete(0,END)
3144 DivXEntry.insert(0, DivX)
3146 DivXEntry.delete(0,END)
3147 DivXEntry.insert(0, DivX)
3149 MulX = (DivX*SAMPLErate)/(100*FOff)
3150 while MulX > MaxETSrecord:
3152 MulX = (DivX*SAMPLErate)/(100*FOff)
3154 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
3155 MulXEntry.config(text = SRstring)
3156 SRstring =
"Offset = " + str(FOff) +
" samples"
3157 FOffEntry.config(text = SRstring)
3158 SHOWsamples = int(MulX * 100)
3160 SHOWsamples = twoscreens + hldn + hozpos
3161 if SHOWsamples > MaxSamples:
3162 SHOWsamples = MaxSamples
3163 if SHOWsamples < MinSamples:
3164 SHOWsamples = MinSamples
3166 TRIGGERsample = hldn
3168 TRIGGERsample = abs(hozpos)
3169 TRIGGERsample = TRIGGERsample + hozpos
3171 if AWGScreenStatus.get() == 1:
3172 if AWGSync.get() > 0:
3179 ADsignal1 = devx.get_samples(SHOWsamples)
3181 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3182 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3183 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3184 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3186 if session.continuous:
3187 if MuxScreenStatus.get() > 0:
3188 devx.flush(-1,
True)
3189 DummySamples = SHOWsamples*2
3190 if DummySamples < 20000:
3191 DummySamples = 20000
3192 ADsignal1 = devx.read(DummySamples, -1,
True)
3193 ADsignal1 = devx.read(SHOWsamples, -1,
True)
3196 ADsignal1 = devx.get_samples(SHOWsamples)
3198 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3199 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3200 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3201 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3203 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3204 if ADC_Mux_Mode.get() == 0:
3207 elif ADC_Mux_Mode.get() == 1:
3210 elif ADC_Mux_Mode.get() == 4:
3213 elif ADC_Mux_Mode.get() == 5:
3223 if SHOWsamples >= 20000
and DecimateOption.get() > 0:
3225 SAMPLErate = int(AWGSAMPLErate/increment)
3226 if SHOWsamples >= 40000
and DecimateOption.get() > 0:
3228 SAMPLErate = int(AWGSAMPLErate/increment)
3230 if SHOWsamples != len(ADsignal1):
3231 SHOWsamples = len(ADsignal1)
3232 while index < SHOWsamples:
3233 if Two_X_Sample.get() == 1
and ADC_Mux_Mode.get() < 6:
3234 if ADC_Mux_Mode.get() == 0:
3235 VBuffA.append(ADsignal1[index][0][0])
3236 VBuffA.append(ADsignal1[index][1][1])
3237 VBuffB.append(ADsignal1[index][0][1])
3238 VBuffB.append(ADsignal1[index][1][0])
3239 if Alternate_Sweep_Mode.get() == 0:
3244 elif ADC_Mux_Mode.get() == 1:
3245 IBuffA.append(ADsignal1[index][0][1])
3246 IBuffA.append(ADsignal1[index][1][0])
3247 IBuffB.append(ADsignal1[index][0][0])
3248 IBuffB.append(ADsignal1[index][1][1])
3249 if Alternate_Sweep_Mode.get() == 0:
3254 elif ADC_Mux_Mode.get() == 2:
3255 VBuffA.append((ADsignal1[index][0][1])/1024.0)
3256 VBuffA.append((ADsignal1[index][1][0])/1024.0)
3258 IBuffB.append( ((ADsignal1[index][0][0])/4096.0)-0.5 )
3259 IBuffB.append( ((ADsignal1[index][1][1])/4096.0)-0.5 )
3261 if Alternate_Sweep_Mode.get() == 0:
3266 elif ADC_Mux_Mode.get() == 3:
3267 VBuffB.append((ADsignal1[index][0][0])/1024.0)
3268 VBuffB.append((ADsignal1[index][1][1])/1024.0)
3270 IBuffA.append( ((ADsignal1[index][0][1])/4096.0)-0.5 )
3271 IBuffA.append( ((ADsignal1[index][1][0])/4096.0)-0.5 )
3273 if Alternate_Sweep_Mode.get() == 0:
3278 elif ADC_Mux_Mode.get() == 4:
3279 VBuffA.append(ADsignal1[index][0][0])
3280 VBuffA.append(ADsignal1[index][1][1])
3281 IBuffA.append(ADsignal1[index][0][1])
3282 IBuffA.append(ADsignal1[index][1][0])
3283 if Alternate_Sweep_Mode.get() == 0:
3288 elif ADC_Mux_Mode.get() == 5:
3289 VBuffB.append(ADsignal1[index][0][1])
3290 VBuffB.append(ADsignal1[index][1][0])
3291 IBuffB.append(ADsignal1[index][0][0])
3292 IBuffB.append(ADsignal1[index][1][1])
3293 if Alternate_Sweep_Mode.get() == 0:
3299 VBuffA.append(ADsignal1[index][0][0])
3300 IBuffA.append(ADsignal1[index][0][1])
3301 VBuffB.append(ADsignal1[index][1][0])
3302 IBuffB.append(ADsignal1[index][1][1])
3303 index = index + increment
3305 SHOWsamples = len(VBuffA)
3306 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3307 if ADC_Mux_Mode.get() == 0:
3308 VBuffA = numpy.array(VBuffA)
3309 VBuffB = numpy.array(VBuffB)
3310 VBuffA = (VBuffA - InOffA) * InGainA
3311 VBuffB = (VBuffB - InOffB) * InGainB
3313 Last_ADC_Mux_Mode = 0
3314 elif ADC_Mux_Mode.get() == 1:
3315 IBuffA = numpy.array(IBuffA) * 1000
3316 IBuffB = numpy.array(IBuffB) * 1000
3317 IBuffA = (IBuffA - CurOffA) * CurGainA
3318 IBuffB = (IBuffB - CurOffB) * CurGainB
3319 ADC_Mux_Mode.set(Last_ADC_Mux_Mode)
3320 elif ADC_Mux_Mode.get() == 4:
3321 VBuffA = numpy.array(VBuffA)
3322 IBuffA = numpy.array(IBuffA) * 1000
3323 IBuffA = (IBuffA - CurOffA) * CurGainA
3324 VBuffA = (VBuffA - InOffA) * InGainA
3326 Last_ADC_Mux_Mode = 4
3327 elif ADC_Mux_Mode.get() == 5:
3328 VBuffB = numpy.array(VBuffB)
3329 VBuffB = (VBuffB - InOffB) * InGainB
3330 IBuffB = numpy.array(IBuffB) * 1000
3331 IBuffB = (IBuffB - CurOffB) * CurGainB
3333 Last_ADC_Mux_Mode = 5
3337 VBuffA = numpy.array(VBuffA)
3338 VBuffB = numpy.array(VBuffB)
3339 IBuffA = numpy.array(IBuffA) * 1000
3340 IBuffB = numpy.array(IBuffB) * 1000
3341 VBuffA = (VBuffA - InOffA) * InGainA
3342 VBuffB = (VBuffB - InOffB) * InGainB
3343 IBuffA = (IBuffA - CurOffA) * CurGainA
3344 IBuffB = (IBuffB - CurOffB) * CurGainB
3347 if ETSDisp.get() > 0:
3348 baseFreq = SAMPLErate/DivX
3356 FMul = float(eval(FminEntry.get()))
3359 FMulXEntry.delete(0,END)
3360 FMulXEntry.insert(0, int(FMul))
3363 FMulXEntry.delete(0,END)
3364 FMulXEntry.insert(0, int(FMul))
3366 FMulXEntry.delete(0,END)
3367 FMulXEntry.insert(0, int(FMul))
3368 Fmin = baseFreq * FMul
3369 FminE = float(SAMPLErate + FOff)
3370 Samples_Cycle = SAMPLErate/FminE
3372 tot_cycles = int((MulX*100)/Samples_Cycle)
3373 tot_cycles = tot_cycles + 0.1
3374 if tot_cycles > SHOWsamples:
3375 tot_cycles = SHOWsamples-1
3377 while index < SHOWsamples:
3378 Ipart, Dpart = divmod( index*Samples_Cycle, 1)
3379 IndexValue = int(tot_cycles * Dpart)
3380 if IndexValue > SHOWsamples:
3381 IndexValue = SHOWsamples-1
3382 if IndexValue > tot_cycles:
3383 IndexValue = tot_cycles
3384 if ETSDir.get() == 0:
3385 VAets.append(VBuffA[IndexValue])
3386 VBets.append(VBuffB[IndexValue])
3387 IAets.append(IBuffA[IndexValue])
3388 IBets.append(IBuffB[IndexValue])
3390 VAets.append(VBuffA[tot_cycles-IndexValue])
3391 VBets.append(VBuffB[tot_cycles-IndexValue])
3392 IAets.append(IBuffA[tot_cycles-IndexValue])
3393 IBets.append(IBuffB[tot_cycles-IndexValue])
3396 TimeCorrection = int(SHiftFact )
3401 VBuffA = numpy.array(VBuffA)
3402 VBuffB = numpy.array(VBuffB)
3403 IBuffA = numpy.array(IBuffA)
3404 IBuffB = numpy.array(IBuffB)
3406 TimeCorrection = int(float(eval(ETSts.get())) * TimeCorrection)
3408 TimeCorrection = SHiftFact
3409 if ETSDir.get() == 0:
3410 VBuffB = numpy.roll(VBuffB, TimeCorrection)
3411 IBuffB = numpy.roll(IBuffB, TimeCorrection)
3413 VBuffB = numpy.roll(VBuffB, TimeCorrection)
3414 IBuffB = numpy.roll(IBuffB, TimeCorrection)
3415 SHOWsamples = twoscreens + hldn + hozpos
3417 if CHA_RC_HP.get() == 1:
3419 TC1A = float(cha_TC1Entry.get())
3422 cha_TC1Entry.delete(0,END)
3423 cha_TC1Entry.insert(0, TC1A)
3425 TC1A = CHA_TC1.get()
3427 TC2A = float(cha_TC2Entry.get())
3430 cha_TC2Entry.delete(0,END)
3431 cha_TC2Entry.insert(0, TC2A)
3433 TC2A = CHA_TC2.get()
3436 Gain1A = float(cha_A1Entry.get())
3438 Gain1A = CHA_A1.get()
3440 Gain2A = float(cha_A2Entry.get())
3442 Gain2A = CHA_A2.get()
3447 if CHB_RC_HP.get() == 1:
3449 TC1B = float(chb_TC1Entry.get())
3452 chb_TC1Entry.delete(0, END)
3453 chb_TC1Entry.insert(0, TC1B)
3455 TC1B = CHB_TC1.get()
3457 TC2B = float(chb_TC2Entry.get())
3460 chb_TC2Entry.delete(0, END)
3461 chb_TC2Entry.insert(0, TC2B)
3463 TC2B = CHB_TC2.get()
3466 Gain1B = float(chb_A1Entry.get())
3468 Gain1B = CHB_A1.get()
3470 Gain2B = float(chb_A2Entry.get())
3472 Gain2B = CHB_A2.get()
3478 if DigFiltA.get() == 1:
3479 if len(DFiltACoef) > 1:
3480 VBuffA = numpy.convolve(VBuffA, DFiltACoef)
3481 if DigFiltB.get() == 1:
3482 if len(DFiltBCoef) > 1:
3483 VBuffB = numpy.convolve(VBuffB, DFiltBCoef)
3486 if TgInput.get() == 1:
3488 if TgInput.get() == 2:
3490 if TgInput.get() == 3:
3492 if TgInput.get() == 4:
3494 if TgInput.get() > 4:
3496 if TgInput.get() == 5:
3498 if TgInput.get() == 6:
3500 if TgInput.get() == 7:
3502 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3504 if TgInput.get() > 0:
3505 LShift = 0 - TRIGGERsample
3506 VBuffA = numpy.roll(VBuffA, LShift)
3507 VBuffB = numpy.roll(VBuffB, LShift)
3508 IBuffA = numpy.roll(IBuffA, LShift)
3509 IBuffB = numpy.roll(IBuffB, LShift)
3510 if TgInput.get() > 4:
3511 if TgInput.get() == 5:
3512 MBuff = numpy.roll(MBuff, LShift)
3513 if TgInput.get() == 6:
3514 MBuffX = numpy.roll(MBuffX, LShift)
3515 if TgInput.get() == 7:
3516 MBuffY = numpy.roll(MBuffY, LShift)
3517 TRIGGERsample = hozpos
3519 if DualMuxMode.get() == 0
and MuxScreenStatus.get() == 0:
3520 VBuffA = VmemoryA + (VBuffA - VmemoryA) / TRACEaverage.get()
3521 IBuffA = ImemoryA + (IBuffA - ImemoryA) / TRACEaverage.get()
3522 if MuxScreenStatus.get() == 0:
3523 VBuffB = VmemoryB + (VBuffB - VmemoryB) / TRACEaverage.get()
3524 IBuffB = ImemoryB + (IBuffB - ImemoryB) / TRACEaverage.get()
3528 if MuxScreenStatus.get() == 0:
3532 if TgInput.get() == 1:
3534 if TgInput.get() == 2:
3536 if TgInput.get() == 3:
3538 if TgInput.get() == 4:
3541 if CHA_RC_HP.get() == 1
or CHB_RC_HP.get() == 1:
3542 Endsample = hldn+onescreen
3544 Endsample = SHOWsamples - 10
3545 if MeasGateStatus.get() == 1:
3546 if (MeasGateRight-MeasGateLeft) > 0:
3547 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
3548 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
3549 DCV1 = numpy.mean(VBuffA[hldn:Endsample])
3550 DCV2 = numpy.mean(VBuffB[hldn:Endsample])
3552 DCI1 = numpy.mean(IBuffA[hldn:Endsample])
3553 DCI2 = numpy.mean(IBuffB[hldn:Endsample])
3555 MinV1 = numpy.amin(VBuffA[hldn:Endsample])
3556 MaxV1 = numpy.amax(VBuffA[hldn:Endsample])
3557 MinV2 = numpy.amin(VBuffB[hldn:Endsample])
3558 MaxV2 = numpy.amax(VBuffB[hldn:Endsample])
3559 MinI1 = numpy.amin(IBuffA[hldn:Endsample])
3560 MaxI1 = numpy.amax(IBuffA[hldn:Endsample])
3561 MinI2 = numpy.amin(IBuffB[hldn:Endsample])
3562 MaxI2 = numpy.amax(IBuffB[hldn:Endsample])
3564 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample])))
3565 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA[hldn:Endsample])))
3566 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB[hldn:Endsample])))
3567 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB[hldn:Endsample])))
3568 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample]-VBuffB[hldn:Endsample])))
3570 if TgInput.get() > 0
and MuxChan > -1
and TRACEmodeTime.get() != 1:
3572 LShift = 0 - TRIGGERsample
3573 VBuffA = numpy.roll(VBuffA, LShift)
3574 VBuffB = numpy.roll(VBuffB, LShift)
3575 IBuffA = numpy.roll(IBuffA, LShift)
3576 IBuffB = numpy.roll(IBuffB, LShift)
3577 TRIGGERsample = hozpos
3579 Dval0 = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
3580 Dval1 = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
3581 if Show_CBA.get() == 1
and Dval0[0] == 0
and Dval1[0] == 0:
3585 MidVMuxA = (MaxV2+MinV2)/2.0
3586 PPVMuxA = MaxV2-MinV2
3589 if Show_CBB.get() == 1
and Dval0[0] == 1
and Dval1[0] == 0:
3593 MidVMuxB = (MaxV2+MinV2)/2.0
3594 PPVMuxB = MaxV2-MinV2
3597 if Show_CBC.get() == 1
and Dval0[0] == 0
and Dval1[0] == 1:
3598 if DualMuxMode.get() == 1:
3602 MidVMuxC = (MaxV1+MinV1)/2.0
3603 PPVMuxC = MaxV1-MinV1
3610 MidVMuxC = (MaxV2+MinV2)/2.0
3611 PPVMuxC = MaxV2-MinV2
3614 if Show_CBD.get() == 1
and Dval0[0] == 1
and Dval1[0] == 1:
3615 if DualMuxMode.get() == 1:
3619 MidVMuxD = (MaxV1+MinV1)/2.0
3620 PPVMuxD = MaxV1-MinV1
3627 MidVMuxD = (MaxV2+MinV2)/2.0
3628 PPVMuxD = MaxV2-MinV2
3632 if TimeDisp.get() > 0:
3634 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3636 if SingleShot.get() > 0
and Is_Triggered == 1:
3639 if ManualTrigger.get() == 1:
3641 if MeasureStatus.get() > 0:
3643 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
3644 if RUNstatus.get() == 3:
3646 if RUNstatus.get() == 4:
3648 if TimeDisp.get() > 0:
3650 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3666 Delta = 1.0/SAMPLErate
3668 Alpha = TC / (TC + Delta)
3669 OutBuff.append(InBuff[1]-InBuff[0])
3672 OutBuff.append( Alpha * (OutBuff[i-1] + InBuff[i] - InBuff[i-1]) )
3674 OutBuff = numpy.array(OutBuff)
3675 OutBuff = InBuff + (OutBuff * Gain)
3684 Delta = 1.0/SAMPLErate
3686 Alpha = Delta / (TC + Delta)
3688 OutBuff.append(Alpha*InBuff[0])
3690 OutBuff.append( OutBuff[i-1] + (Alpha * (InBuff[i] - InBuff[i-1])) )
3692 OutBuff = numpy.array(OutBuff)
3693 OutBuff = (OutBuff * Gain)
3700 result = numpy.empty_like(arr)
3702 result[:num] = fill_value
3703 result[num:] = arr[:-num]
3705 result[num:] = fill_value
3706 result[:num] = arr[-num:]
3714 global ADsignal1, FFTBuffA, FFTBuffB, SMPfft
3715 global AWGSync, AWGAMode, AWGBMode, AWGAShape, AWGAIOMode, AWGBIOMode
3716 global AWGAFreqvalue, AWGBFreqvalue, FStepSync, FSweepSync
3717 global NSteps, LoopNum, FSweepMode, FStep, FBins
3718 global StartFreqEntry, StopFreqEntry, HoldOffentry
3719 global session, CHA, CHB, devx, MaxSamples, discontloop
3720 global RUNstatus, SingleShotSA, FSweepCont, Two_X_Sample, ADC_Mux_Mode
3721 global AWGSAMPLErate, IAScreenStatus, SpectrumScreenStatus, BodeScreenStatus
3722 global NiCScreenStatus, NiCDisp, NqPScreenStatus, NqPDisp
3723 global OverRangeFlagA, OverRangeFlagB, BodeDisp, FreqDisp, IADisp
3724 global DCA, DCB, InOffA, InGainA, InOffB, InGainB
3725 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3726 global DigFiltA, DFiltACoef, DigFiltB, DFiltBCoef
3727 global BDSweepFile, FileSweepFreq, FileSweepAmpl
3728 global PIO_0, PIO_1, PIO_2, PIO_3
3729 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3730 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3731 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3732 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3733 global Reset_Freq, AWGAFreqEntry, AWGBFreqEntry, MinigenFout, IASource, IA_Ext_Conf
3735 HalfSAMPLErate = SAMPLErate/2
3738 InOffA = float(eval(CHAVOffsetEntry.get()))
3740 CHAVOffsetEntry.delete(0,END)
3741 CHAVOffsetEntry.insert(0, InOffA)
3743 InGainA = float(eval(CHAVGainEntry.get()))
3745 CHAVGainEntry.delete(0,END)
3746 CHAVGainEntry.insert(0, InGainA)
3748 InOffB = float(eval(CHBVOffsetEntry.get()))
3750 CHBVOffsetEntry.delete(0,END)
3751 CHBVOffsetEntry.insert(0, InOffB)
3753 InGainB = float(eval(CHBVGainEntry.get()))
3755 CHBVGainEntry.delete(0,END)
3756 CHBVGainEntry.insert(0, InGainB)
3758 HoldOff = float(eval(HoldOffentry.get()))
3761 HoldOffentry.delete(0,END)
3762 HoldOffentry.insert(0, HoldOff)
3764 HoldOffentry.delete(0,END)
3765 HoldOffentry.insert(0, HoldOff)
3770 if BodeDisp.get() == 0:
3771 if AWGAShape.get() == 7
and AWGAMode.get() == 0:
3773 elif AWGAShape.get() == 8
and AWGAMode.get() == 0:
3775 elif AWGBShape.get() == 7
and AWGBMode.get() == 0:
3777 elif AWGBShape.get() == 8
and AWGBMode.get() == 0:
3779 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
3780 if BDSweepFile.get() == 0:
3781 if LoopNum.get() <= len(FStep):
3782 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
3784 FregPoint = FBins[FStep[0]]
3786 if LoopNum.get() <= len(FileSweepFreq):
3787 FreqIndex = int((FileSweepFreq[LoopNum.get()-1]*16384)/HalfSAMPLErate)
3788 FregPoint = FBins[FreqIndex]
3789 VRMSAmpl = 10**(FileSweepAmpl[LoopNum.get()-1]/20)
3791 FregPoint = FBins[FileSweepFreq[0]]
3792 VRMSAmpl = 10**(FileSweepAmpl[0]/20)
3793 VMax = 2.5 + (1.414*VRMSAmpl)
3794 VMin = 2.5 - (1.414*VRMSAmpl)
3795 if FSweepMode.get() == 1:
3796 AWGAAmplEntry.delete(0,END)
3797 AWGAAmplEntry.insert(4, VMin)
3798 AWGAOffsetEntry.delete(0,END)
3799 AWGAOffsetEntry.insert(4, VMax)
3800 if FSweepMode.get() == 2:
3801 AWGBAmplEntry.delete(0,END)
3802 AWGBAmplEntry.insert(4, VMin)
3803 AWGBOffsetEntry.delete(0,END)
3804 AWGBOffsetEntry.insert(4, VMax)
3805 if FSweepMode.get() == 1:
3806 AWGAFreqEntry.delete(0,END)
3807 AWGAFreqEntry.insert(4, FregPoint)
3809 if FSweepMode.get() == 2:
3810 AWGBFreqEntry.delete(0,END)
3811 AWGBFreqEntry.insert(4, FregPoint)
3813 if FSweepMode.get() == 3:
3814 MinigenFout.delete(0,END)
3815 MinigenFout.insert(4, FregPoint)
3817 if AWGSync.get() > 0:
3818 if IAScreenStatus.get() > 0
and IASource.get() == 0:
3819 if Two_X_Sample.get() == 1:
3826 hldn = int(HoldOff * 100 )
3827 if hldn > MaxSamples-SMPfft:
3828 hldn = MaxSamples-SMPfft
3829 HoldOffentry.delete(0,END)
3830 HoldOffentry.insert(0, hldn/100)
3833 SHOWsamples = SMPfft + hldn
3834 if BodeDisp.get() > 0:
3835 if FStepSync.get() == 1:
3836 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
3837 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
3838 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
3839 if FStepSync.get() == 2:
3840 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
3841 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
3842 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
3843 if LoopNum.get() == 1
and FSweepSync.get() == 1:
3844 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
3845 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
3846 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
3847 if LoopNum.get() == 1
and FSweepSync.get() == 2:
3848 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
3849 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
3850 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
3851 if AWGScreenStatus.get() == 1:
3852 if IAScreenStatus.get() > 0
and IASource.get() == 0:
3853 if Two_X_Sample.get() == 1:
3858 if AWGSync.get() > 0:
3865 ADsignal1 = devx.get_samples(SHOWsamples)
3869 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3870 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3871 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3872 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3874 ADsignal1 = devx.read(SHOWsamples, -1,
True)
3877 if session.continuous:
3878 ADsignal1 = devx.read(SHOWsamples, -1,
True)
3880 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3881 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3882 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3883 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3886 OverRangeFlagA = OverRangeFlagB = 0
3888 if SHOWsamples != len(ADsignal1):
3889 SHOWsamples = len(ADsignal1)
3890 while index < SHOWsamples:
3891 if Two_X_Sample.get() == 1:
3892 if ADC_Mux_Mode.get() == 0:
3893 FFTBuffA.append(ADsignal1[index][0][0])
3894 FFTBuffA.append(ADsignal1[index][1][1])
3895 FFTBuffB.append(ADsignal1[index][0][1])
3896 FFTBuffB.append(ADsignal1[index][1][0])
3898 VAdata = ADsignal1[index][0][0]
3899 FFTBuffA.append(VAdata)
3900 VBdata = ADsignal1[index][1][0]
3901 FFTBuffB.append(VBdata)
3902 if VAdata > 5.0
or VAdata < 0.0:
3905 if VBdata > 5.0
or VBdata < 0.0:
3909 FFTBuffA = numpy.array(FFTBuffA)
3910 FFTBuffB = numpy.array(FFTBuffB)
3911 FFTBuffA = (FFTBuffA - InOffA) * InGainA
3912 FFTBuffB = (FFTBuffB - InOffB) * InGainB
3913 DCA = numpy.average(FFTBuffA)
3914 DCB = numpy.average(FFTBuffB)
3915 if CutDC.get() == 1:
3916 FFTBuffA = FFTBuffA - DCA
3917 FFTBuffB = FFTBuffB - DCB
3919 if CHA_RC_HP.get() == 1:
3921 TC1A = float(cha_TC1Entry.get())
3924 cha_TC1Entry.delete(0,END)
3925 cha_TC1Entry.insert(0, TC1A)
3927 TC1A = CHA_TC1.get()
3929 TC2A = float(cha_TC2Entry.get())
3932 cha_TC2Entry.delete(0,END)
3933 cha_TC2Entry.insert(0, TC2A)
3935 TC2A = CHA_TC2.get()
3938 Gain1A = float(cha_A1Entry.get())
3940 Gain1A = CHA_A1.get()
3942 Gain2A = float(cha_A2Entry.get())
3944 Gain2A = CHA_A2.get()
3948 if CHB_RC_HP.get() == 1:
3950 TC1B = float(chb_TC1Entry.get())
3953 chb_TC1Entry.delete(0, END)
3954 chb_TC1Entry.insert(0, TC1B)
3956 TC1B = CHB_TC1.get()
3958 TC2B = float(chb_TC2Entry.get())
3961 chb_TC2Entry.delete(0, END)
3962 chb_TC2Entry.insert(0, TC2B)
3964 TC2B = CHB_TC2.get()
3967 Gain1B = float(chb_A1Entry.get())
3969 Gain1B = CHB_A1.get()
3971 Gain2B = float(chb_A2Entry.get())
3973 Gain2B = CHB_A2.get()
3978 if DigFiltA.get() == 1:
3979 FFTBuffA = numpy.convolve(FFTBuffA, DFiltACoef)
3980 if DigFiltB.get() == 1:
3981 FFTBuffB = numpy.convolve(FFTBuffB, DFiltBCoef)
3983 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
3985 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
3987 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
3989 if NqPScreenStatus.get() > 0
and NqPDisp.get() > 0:
3991 if NiCScreenStatus.get() > 0
and NiCDisp.get() > 0:
3993 if SingleShotSA.get() == 1:
3997 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
3998 if RUNstatus.get() == 3:
4000 if RUNstatus.get() == 4:
4002 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
4004 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
4006 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
4007 LoopNum.set(LoopNum.get() + 1)
4008 if LoopNum.get() > NSteps.get():
4009 if FSweepMode.get() == 1:
4010 AWGAFreqEntry.delete(0,
"end")
4011 AWGAFreqEntry.insert(0, Reset_Freq)
4012 if FSweepMode.get() == 2:
4013 AWGBFreqEntry.delete(0,
"end")
4014 AWGBFreqEntry.insert(0, Reset_Freq)
4017 if FSweepCont.get() == 0:
4021 global VBuffA, VBuffB, IBuffA, IBuffB, HBuffA, HBuffB
4022 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
4023 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Xsignal
4024 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4025 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4026 global VABase, VATop, VBBase, VBTop
4028 if ShowC1_V.get() == 1
or Xsignal.get() == 6:
4029 CHAGridMax = (5 * CH1pdvRange ) + CHAOffset
4030 CHAGridMin = (-5 * CH1pdvRange ) + CHAOffset
4031 VAMid = (MinV1 + MaxV1)/2
4032 HBuffA = numpy.histogram(VBuffA, bins=5000, range=[CHAGridMin, CHAGridMax] )
4037 if HBuffA[0][b] > HBuffA[0][LowerPeak]
and HBuffA[1][b] < VAMid:
4039 VABase = HBuffA[1][b]
4040 if HBuffA[0][b] > HBuffA[0][UpperPeak]
and HBuffA[1][b] > VAMid:
4042 VATop = HBuffA[1][b]
4044 if ShowC2_V.get() == 1
or Xsignal.get() == 7:
4045 CHBGridMax = (5 * CH2pdvRange ) + CHBOffset
4046 CHBGridMin = (-5 * CH2pdvRange ) + CHBOffset
4047 VBMid = (MinV2 + MaxV2)/2
4048 HBuffB = numpy.histogram(VBuffB, bins=5000, range=[CHBGridMin, CHBGridMax] )
4053 if HBuffB[0][b] > HBuffB[0][LowerPeak]
and HBuffB[1][b] < VBMid:
4055 VBBase = HBuffB[1][b]
4056 if HBuffB[0][b] > HBuffB[0][UpperPeak]
and HBuffB[1][b] > VBMid:
4058 VBTop = HBuffB[1][b]
4062 global HistAsPercent
4064 if askyesno(
"Plot as Percent",
"Plot Histogram as Percent?", parent=xywindow):
4070 global MinV1, MaxV1, MinV2, MaxV2, HoldOff, TRIGGERsample, TgInput, LShift
4072 global SHOWsamples, SAMPLErate, CHAperiod, CHAfreq, CHBperiod, CHBfreq
4073 global CHAHW, CHALW, CHADCy, CHBHW, CHBLW, CHBDCy, ShowC1_V, ShowC2_V
4074 global CHABphase, CHBADelayR1, CHBADelayR2, CHBADelayF
4079 hldn = int(HoldOff * SAMPLErate/1000)
4080 if TgInput.get() > 0:
4081 Trace1 = numpy.roll(Trace1, -LShift)
4082 Trace2 = numpy.roll(Trace2, -LShift)
4084 Trace1 = numpy.roll(Trace1, -hldn)
4085 Trace2 = numpy.roll(Trace2, -hldn)
4087 MidV1 = (numpy.amax(Trace1)+numpy.amin(Trace1))/2.0
4088 MidV2 = (numpy.amax(Trace2)+numpy.amin(Trace2))/2.0
4090 MidV1 = (MinV1+MaxV1)/2
4091 MidV2 = (MinV2+MaxV2)/2
4093 Arising = [i
for (i, val)
in enumerate(Trace1)
if val >= MidV1
and Trace1[i-1] < MidV1]
4094 Afalling = [i
for (i, val)
in enumerate(Trace1)
if val <= MidV1
and Trace1[i-1] > MidV1]
4095 AIrising = [i - (Trace1[i] - MidV1)/(Trace1[i] - Trace1[i-1])
for i
in Arising]
4096 AIfalling = [i - (MidV1 - Trace1[i])/(Trace1[i-1] - Trace1[i])
for i
in Afalling]
4098 CHAfreq = SAMPLErate / numpy.mean(numpy.diff(AIrising))
4099 CHAperiod = (numpy.mean(numpy.diff(AIrising)) * 1000.0) / SAMPLErate
4100 if len(Arising) > 0
or len(Afalling) > 0:
4111 if AIfalling[0] < AIrising[0]:
4127 if AIfalling[1] < AIrising[1]:
4134 Brising = [i
for (i, val)
in enumerate(Trace2)
if val >= MidV2
and Trace2[i-1] < MidV2]
4135 Bfalling = [i
for (i, val)
in enumerate(Trace2)
if val <= MidV2
and Trace2[i-1] > MidV2]
4136 BIrising = [i - (Trace2[i] - MidV2)/(Trace2[i] - Trace2[i-1])
for i
in Brising]
4137 BIfalling = [i - (MidV2 - Trace2[i])/(Trace2[i-1] - Trace2[i])
for i
in Bfalling]
4139 CHBfreq = SAMPLErate / numpy.mean(numpy.diff(BIrising))
4140 CHBperiod = (numpy.mean(numpy.diff(BIrising)) * 1000.0) / SAMPLErate
4141 if len(Brising) > 0
or len(Bfalling) > 0:
4152 if BIfalling[0] < BIrising[0]:
4168 if BIfalling[1] < BIrising[1]:
4175 CHAHW = float(((anf1 - anr1) * 1000.0) / SAMPLErate)
4176 CHALW = float(((anr2 - anf1) * 1000.0) / SAMPLErate)
4177 CHADCy = float(anf1 - anr1) / float(anr2 - anr1) * 100.0
4178 CHBHW = float(((bnf1 - bnr1) * 1000.0) / SAMPLErate)
4179 CHBLW = float(((bnr2 - bnf1) * 1000.0) / SAMPLErate)
4180 CHBDCy = float(bnf1 - bnr1) / float(bnr2 - bnr1) * 100.0
4183 CHBADelayR1 = float((bnr1 - anr1) * 1000.0 / SAMPLErate)
4185 CHBADelayR1 = float((bnr2 - anr1) * 1000.0 / SAMPLErate)
4186 CHBADelayR2 = float((bnr2 - anr2) * 1000.0 / SAMPLErate)
4187 CHBADelayF = float((bnf1 - anf1) * 1000.0 / SAMPLErate)
4189 CHABphase = 360.0*(float((bnr1 - anr1) * 1000.0 / SAMPLErate))/CHAperiod
4193 CHABphase = CHABphase + 360.0
4196 global DX, TRIGGERsample, TRIGGERlevel
4200 DY = TrgBuff[int(n)] - TrgBuff[int(n+1)]
4202 DX = (TRIGGERlevel - TrgBuff[int(n+1)])/DY
4207 global AutoLevel, TgInput, TRIGGERlevel, TRIGGERentry, DX, SAMPLErate, Is_Triggered
4208 global HoldOffentry, HozPossentry, TRIGGERsample, TRACEsize, HozPoss, hozpos
4211 TRACEsize = SHOWsamples
4214 if len(TrgBuff) == 0:
4217 TrgMin = numpy.amin(TrgBuff)
4221 TrgMax = numpy.amax(TrgBuff)
4226 if AutoLevel.get() == 1:
4227 TRIGGERlevel = (TrgMin + TrgMax)/2
4228 TRIGGERentry.delete(0,
"end")
4229 TRIGGERentry.insert(0,
' {0:.4f} '.format(TRIGGERlevel))
4231 TRIGGERlevel = eval(TRIGGERentry.get())
4233 TRIGGERentry.delete(0,END)
4234 TRIGGERentry.insert(0, TRIGGERlevel)
4237 HoldOff = float(eval(HoldOffentry.get()))
4240 HoldOffentry.delete(0,END)
4241 HoldOffentry.insert(0, HoldOff)
4243 HoldOffentry.delete(0,END)
4244 HoldOffentry.insert(0, HoldOff)
4247 HozPoss = float(eval(HozPossentry.get()))
4249 HozPossentry.delete(0,END)
4250 HozPossentry.insert(0, HozPoss)
4252 hldn = int(HoldOff * SAMPLErate/1000)
4253 hozpos = int(HozPoss * SAMPLErate/1000)
4255 TRIGGERsample = hldn
4257 TRIGGERsample = abs(hozpos)
4259 Nmax = int(TRACEsize / 1.5)
4262 TRIGGERlevel2 = 0.99 * TRIGGERlevel
4263 if TRIGGERlevel2 < TrgMin:
4264 TRIGGERlevel2 = TrgMin
4265 if TRIGGERlevel2 > TrgMax:
4266 TRIGGERlevel2 = TrgMax
4267 ChInput = TrgBuff[int(n)]
4269 while ( ChInput >= TRIGGERlevel2)
and n < Nmax:
4271 ChInput = TrgBuff[int(n)]
4272 while (ChInput <= TRIGGERlevel)
and n < Nmax:
4275 ChInput = TrgBuff[int(n)]
4278 DX = (TRIGGERlevel - Prev)/DY
4281 if TgEdge.get() == 1:
4282 TRIGGERlevel2 = 1.01 * TRIGGERlevel
4283 if TRIGGERlevel2 < TrgMin:
4284 TRIGGERlevel2 = TrgMin
4285 if TRIGGERlevel2 > TrgMax:
4286 TRIGGERlevel2 = TrgMax
4287 ChInput = TrgBuff[int(n)]
4289 while (ChInput <= TRIGGERlevel2)
and n < Nmax:
4291 ChInput = TrgBuff[int(n)]
4292 while (ChInput >= TRIGGERlevel)
and n < Nmax:
4295 ChInput = TrgBuff[int(n)]
4298 DX = (Prev - TRIGGERlevel)/DY
4304 TRIGGERsample = n - 1
4307 TRIGGERsample = 1 + hldn
4315 TRIGGERsample = TRIGGERsample + hozpos
4318 global win2, DigScreenStatus
4320 DigScreenStatus.set(0)
4325 global D0, D1, D2, D3, D4, D5, D6, D7
4326 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4329 devx.ctrl_transfer( 0x40, D0.get(), PIO_0, 0, 0, 0, 100)
4331 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4333 devx.ctrl_transfer( 0x40, D1.get(), PIO_1, 0, 0, 0, 100)
4335 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4337 devx.ctrl_transfer( 0x40, D2.get(), PIO_2, 0, 0, 0, 100)
4339 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
4341 devx.ctrl_transfer( 0x40, D3.get(), PIO_3, 0, 0, 0, 100)
4343 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
4345 devx.ctrl_transfer( 0x40, D4.get(), PIO_4, 0, 0, 0, 100)
4347 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4349 devx.ctrl_transfer( 0x40, D5.get(), PIO_5, 0, 0, 0, 100)
4351 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4353 devx.ctrl_transfer( 0x40, D6.get(), PIO_6, 0, 0, 0, 100)
4355 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
4357 devx.ctrl_transfer( 0x40, D7.get(), PIO_7, 0, 0, 0, 100)
4359 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
4362 global D0, D1, D2, D3, D4, D5, D6, D7
4363 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4364 global DigScreenStatus, DacScreenStatus, win2, MuxScreenStatus
4366 if DigScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
4367 DigScreenStatus.set(1)
4369 win2.title(
"Dig Out")
4370 win2.resizable(FALSE,FALSE)
4371 win2.protocol(
"WM_DELETE_WINDOW", DestroyDigScreen)
4372 rb1 = Radiobutton(win2, text=
"D0-0", variable=D0, value=0x50, command=sel )
4373 rb1.grid(row=2, column=0, sticky=W)
4374 rb0z = Radiobutton(win2, text=
"D0-Z", variable=D0, value=0, command=sel )
4375 rb0z.grid(row=2, column=1, sticky=W)
4376 rb2 = Radiobutton(win2, text=
"D0-1", variable=D0, value=0x51, command=sel )
4377 rb2.grid(row=2, column=2, sticky=W)
4378 rb3 = Radiobutton(win2, text=
"D1-0", variable=D1, value=0x50, command=sel )
4379 rb3.grid(row=3, column=0, sticky=W)
4380 rb3z = Radiobutton(win2, text=
"D1-Z", variable=D1, value=0, command=sel )
4381 rb3z.grid(row=3, column=1, sticky=W)
4382 rb4 = Radiobutton(win2, text=
"D1-1", variable=D1, value=0x51, command=sel )
4383 rb4.grid(row=3, column=2, sticky=W)
4384 rb5 = Radiobutton(win2, text=
"D2-0", variable=D2, value=0x50, command=sel )
4385 rb5.grid(row=4, column=0, sticky=W)
4386 rb5z = Radiobutton(win2, text=
"D2-Z", variable=D2, value=0, command=sel )
4387 rb5z.grid(row=4, column=1, sticky=W)
4388 rb6 = Radiobutton(win2, text=
"D2-1", variable=D2, value=0x51, command=sel )
4389 rb6.grid(row=4, column=2, sticky=W)
4390 rb7 = Radiobutton(win2, text=
"D3-0", variable=D3, value=0x50, command=sel )
4391 rb7.grid(row=5, column=0, sticky=W)
4392 rb7z = Radiobutton(win2, text=
"D3-Z", variable=D3, value=0, command=sel )
4393 rb7z.grid(row=5, column=1, sticky=W)
4394 rb8 = Radiobutton(win2, text=
"D3-1", variable=D3, value=0x51, command=sel )
4395 rb8.grid(row=5, column=2, sticky=W)
4396 rb9 = Radiobutton(win2, text=
"D4-0", variable=D4, value=0x50, command=sel )
4397 rb9.grid(row=6, column=0, sticky=W)
4398 rb9z = Radiobutton(win2, text=
"D4-Z", variable=D4, value=0, command=sel )
4399 rb9z.grid(row=6, column=1, sticky=W)
4400 rb10 = Radiobutton(win2, text=
"D4-1", variable=D4, value=0x51, command=sel )
4401 rb10.grid(row=6, column=2, sticky=W)
4402 rb11 = Radiobutton(win2, text=
"D5-0", variable=D5, value=0x50, command=sel )
4403 rb11.grid(row=7, column=0, sticky=W)
4404 rb11z = Radiobutton(win2, text=
"D5-Z", variable=D5, value=0, command=sel )
4405 rb11z.grid(row=7, column=1, sticky=W)
4406 rb12 = Radiobutton(win2, text=
"D5-1", variable=D5, value=0x51, command=sel )
4407 rb12.grid(row=7, column=2, sticky=W)
4408 rb13 = Radiobutton(win2, text=
"D6-0", variable=D6, value=0x50, command=sel )
4409 rb13.grid(row=8, column=0, sticky=W)
4410 rb13z = Radiobutton(win2, text=
"D6-Z", variable=D6, value=0, command=sel )
4411 rb13z.grid(row=8, column=1, sticky=W)
4412 rb13 = Radiobutton(win2, text=
"D6-1", variable=D6, value=0x51, command=sel )
4413 rb13.grid(row=8, column=2, sticky=W)
4414 rb14 = Radiobutton(win2, text=
"D7-0", variable=D7, value=0x50, command=sel )
4415 rb14.grid(row=9, column=0, sticky=W)
4416 rb14z = Radiobutton(win2, text=
"D7-Z", variable=D7, value=0, command=sel )
4417 rb14z.grid(row=9, column=1, sticky=W)
4418 rb15 = Radiobutton(win2, text=
"D7-1", variable=D7, value=0x51, command=sel )
4419 rb15.grid(row=9, column=2, sticky=W)
4421 dismissbutton = Button(win2, text=
"Dismiss", command=DestroyDigScreen)
4422 dismissbutton.grid(row=10, column=0, sticky=W)
4425 global win1, DacScreenStatus
4427 DacScreenStatus.set(0)
4436 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4437 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4438 elif DAC0.get() == 4:
4439 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4440 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4441 elif DAC0.get() == 2:
4442 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4443 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4444 elif DAC0.get() == 3:
4445 Dval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
4446 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4447 elif DAC0.get() == 5:
4448 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4449 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4450 elif DAC0.get() == 7:
4451 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4452 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4453 elif DAC0.get() == 8:
4454 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4455 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4456 elif DAC0.get() == 6:
4457 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4458 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4459 elif DAC0.get() == 9:
4460 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4461 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4469 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4470 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4471 elif DAC1.get() == 4:
4472 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4473 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4474 elif DAC1.get() == 2:
4475 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4476 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4477 elif DAC1.get() == 3:
4478 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4479 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4480 elif DAC1.get() == 5:
4481 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4482 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4483 elif DAC1.get() == 7:
4484 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4485 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4486 elif DAC1.get() == 8:
4487 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4488 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4489 elif DAC1.get() == 6:
4490 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4491 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4492 elif DAC1.get() == 9:
4493 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4494 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4502 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
4503 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
4504 elif DAC2.get() == 4:
4505 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
4506 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
4507 elif DAC2.get() == 2:
4508 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
4509 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
4510 elif DAC2.get() == 3:
4511 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
4512 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
4513 elif DAC2.get() == 5:
4514 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
4515 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
4516 elif DAC2.get() == 7:
4517 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
4518 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
4519 elif DAC2.get() == 8:
4520 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
4521 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
4522 elif DAC2.get() == 6:
4523 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
4524 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
4525 elif DAC2.get() == 9:
4526 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
4527 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
4535 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
4536 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
4537 elif DAC3.get() == 4:
4538 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
4539 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
4540 elif DAC3.get() == 2:
4541 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
4542 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
4543 elif DAC3.get() == 3:
4544 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
4545 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
4546 elif DAC3.get() == 5:
4547 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
4548 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
4549 elif DAC3.get() == 7:
4550 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
4551 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
4552 elif DAC3.get() == 8:
4553 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
4554 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
4555 elif DAC3.get() == 6:
4556 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
4557 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
4558 elif DAC3.get() == 9:
4559 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
4560 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
4563 global DAC0, DAC1, DAC2, DAC3, SWRev, RevDate
4564 global DacScreenStatus, DigScreenStatus, win1, MuxScreenStatus
4566 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
4567 DacScreenStatus.set(1)
4569 win1.title(
"DAC Out "+ SWRev + RevDate)
4570 win1.resizable(FALSE,FALSE)
4571 win1.protocol(
"WM_DELETE_WINDOW", DestroyDacScreen)
4572 DAC0 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel0, length=90)
4573 DAC0.grid(row=0, column=0, sticky=W)
4574 DAC1 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel1, length=90)
4575 DAC1.grid(row=0, column=1, sticky=W)
4576 DAC2 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel2, length=90)
4577 DAC2.grid(row=0, column=2, sticky=W)
4578 DAC3 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel3, length=90)
4579 DAC3.grid(row=0, column=3, sticky=W)
4581 dismissbutton = Button(win1, text=
"Dismiss", command=DestroyDacScreen)
4582 dismissbutton.grid(row=1, column=0, columnspan=4, sticky=W)
4615 global MBuff, MBuffX, MBuffY, VBuffA, VBuffB, IBuffA, IBuffB
4616 global MathTrace, Show_MathX, Show_MathY, CHAOffset, CHBOffset, CHAIOffset, CHBIOffset
4617 global CHMOffset, CHMXOffset, CHMYOffset, MathString, MathStringX, MathStringY
4619 if MathTrace.get() > 0:
4620 if MathTrace.get() == 1:
4621 MBuff = (VBuffA + VBuffB) - CHAOffset
4623 elif MathTrace.get() == 2:
4624 MBuff = (VBuffA - VBuffB) - CHAOffset
4626 elif MathTrace.get() == 3:
4627 MBuff = (VBuffB - VBuffA) - CHBOffset
4629 elif MathTrace.get() == 4:
4630 MBuff = (VBuffA * IBuffA) - CHAIOffset
4632 elif MathTrace.get() == 5:
4633 MBuff = (VBuffB * IBuffB) - CHBIOffset
4635 elif MathTrace.get() == 6:
4636 MBuff = ((VBuffA / (IBuffA / 1000.0)) - CHAIOffset)
4638 elif MathTrace.get() == 7:
4639 MBuff = ((VBuffB / (IBuffB / 1000.0)) - CHBIOffset)
4641 elif MathTrace.get() == 8:
4642 MBuff = (IBuffA - IBuffB) - CHAIOffset
4644 elif MathTrace.get() == 9:
4645 MBuff = (IBuffB - IBuffA) - CHBIOffset
4647 elif MathTrace.get() == 10:
4649 MBuff = (VBuffB / VBuffA) - CHBOffset
4651 MBuff = (VBuffB / 0.000001) - CHBOffset
4653 elif MathTrace.get() == 11:
4655 MBuff = (IBuffB / IBuffA)
4657 MBuff = (IBuffB / 0.000001) - CHBIOffset
4659 elif MathTrace.get() == 12:
4662 MBuff = eval(MathString)
4663 MBuff = MBuff - CHMOffset
4666 if Show_MathX.get() > 0:
4668 MBuffX = eval(MathXString)
4669 MBuffX = MBuffX - CHMXOffset
4672 if Show_MathY.get() > 0:
4674 MBuffY = eval(MathYString)
4675 MBuffY = MBuffY - CHMYOffset
4680 global VBuffA, VBuffB, IBuffA, IBuffB
4681 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
4682 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
4683 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
4684 global FFTBuffA, FFTBuffB, FFTwindowshape
4685 global AWGAwaveform, AWGBwaveform
4686 global T1Vline, T2Vline, T1Iline, T2Iline
4687 global TMAVline, TMBVline, TMCVline, TMDVline
4688 global Tmathline, TMXline, TMYline
4689 global MathString, MathAxis, MathXString, MathYString, MathXAxis, MathYAxis
4690 global Triggerline, Triggersymbol, TgInput, TgEdge, HoldOff, HoldOffentry
4691 global X0L, Y0T, GRW, GRH, MouseX, MouseY, MouseCAV, MouseCAI, MouseCBV, MouseCBI
4692 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
4693 global SHOWsamples, ZOHold, AWGBMode
4694 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
4695 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
4696 global Show_MathX, Show_MathY
4697 global TRACES, TRACESread, RUNstatus
4698 global AutoCenterA, AutoCenterB
4699 global CHAsb, CHBsb, CHAOffset, CHBOffset, CHAIsb, CHBIsb, CHAIOffset, CHBIOffset
4703 global SAMPLErate, SCstart, Two_X_Sample
4704 global TRIGGERsample, TRACEsize, DX
4705 global TRIGGERlevel, TRIGGERentry, AutoLevel
4706 global InOffA, InGainA, InOffB, InGainB
4707 global CurOffA, CurOffB, CurGainA, CurGainB
4708 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4709 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4710 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4711 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
4712 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
4713 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
4714 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
4715 global HozPoss, HozPossentry
4718 if len(VBuffA) < 100:
4720 TRACEsize = SHOWsamples
4730 if TIMEdiv < 0.0002:
4733 if AutoCenterA.get() > 0:
4735 CHAVPosEntry.delete(0,END)
4736 CHAVPosEntry.insert(0,
' {0:.2f} '.format(CHAOffset))
4737 if AutoCenterB.get() > 0:
4739 CHBVPosEntry.delete(0,END)
4740 CHBVPosEntry.insert(0,
' {0:.2f} '.format(CHBOffset))
4743 CH1pdvRange = float(eval(CHAsb.get()))
4746 CHAsb.insert(0, CH1vpdvRange)
4748 CH2pdvRange = float(eval(CHBsb.get()))
4751 CHBsb.insert(0, CH2vpdvRange)
4753 CH1IpdvRange = float(eval(CHAIsb.get()))
4755 CHAIsb.delete(0,END)
4756 CHAIsb.insert(0, CH1IpdvRange)
4758 CH2IpdvRange = float(eval(CHBIsb.get()))
4760 CHBIsb.delete(0,END)
4761 CHBIsb.insert(0, CH2IpdvRange)
4764 CHAOffset = float(eval(CHAVPosEntry.get()))
4766 CHAVPosEntry.delete(0,END)
4767 CHAVPosEntry.insert(0, CHAOffset)
4769 CHAIOffset = float(eval(CHAIPosEntry.get()))
4771 CHAIPosEntry.delete(0,END)
4772 CHAIPosEntry.insert(0, CHAIOffset)
4774 CHBOffset = float(eval(CHBVPosEntry.get()))
4776 CHBVPosEntry.delete(0,END)
4777 CHBVPosEntry.insert(0, CHBOffset)
4779 CHBIOffset = float(eval(CHBIPosEntry.get()))
4781 CHBIPosEntry.delete(0,END)
4782 CHBIPosEntry.insert(0, CHBIOffset)
4784 if CH1pdvRange < 0.001:
4786 if CH2pdvRange < 0.001:
4788 if CH1IpdvRange < 0.1:
4790 if CH2IpdvRange < 0.1:
4794 HoldOff = float(eval(HoldOffentry.get()))
4797 HoldOffentry.delete(0,END)
4798 HoldOffentry.insert(0, HoldOff)
4800 HoldOffentry.delete(0,END)
4801 HoldOffentry.insert(0, HoldOff)
4804 HozPoss = float(eval(HozPossentry.get()))
4806 HozPossentry.delete(0,END)
4807 HozPossentry.insert(0, HozPoss)
4809 hldn = int(HoldOff * SAMPLErate/1000 )
4810 hozpos = int(HozPoss * SAMPLErate/1000 )
4827 if TgInput.get() > 0:
4828 SCmin = int(-1 * TRIGGERsample)
4829 SCmax = int(TRACEsize - TRIGGERsample - 0)
4832 SCmax = TRACEsize - 1
4840 Yconv1 = float(GRH/10.0) / CH1pdvRange
4841 Yconv2 = float(GRH/10.0) / CH2pdvRange
4842 YIconv1 = float(GRH/10.0) / CH1IpdvRange
4843 YIconv2 = float(GRH/10.0) / CH2IpdvRange
4844 Xconv1 = float(GRW/10.0) / CH1pdvRange
4845 Xconv2 = float(GRW/10.0) / CH2pdvRange
4846 XIconv1 = float(GRW/10.0) / CH1IpdvRange
4847 XIconv2 = float(GRW/10.0) / CH2IpdvRange
4848 if MuxScreenStatus.get() == 1:
4850 CHMApdvRange = float(eval(CHB_Asb.get()))
4852 CHB_Asb.delete(0,END)
4853 CHB_Asb.insert(0, CHMApdvRange)
4855 CHMBpdvRange = float(eval(CHB_Bsb.get()))
4857 CHB_Bsb.delete(0,END)
4858 CHB_Bsb.insert(0, CHMBpdvRange)
4860 CHMCpdvRange = float(eval(CHB_Csb.get()))
4862 CHB_Csb.delete(0,END)
4863 CHB_Csb.insert(0, CHMCpdvRange)
4865 CHMDpdvRange = float(eval(CHB_Dsb.get()))
4867 CHB_Dsb.delete(0,END)
4868 CHB_Dsb.insert(0, CHMDpdvRange)
4869 YconvMA = float(GRH/10.0) / CHMApdvRange
4870 YconvMB = float(GRH/10.0) / CHMBpdvRange
4871 YconvMC = float(GRH/10.0) / CHMCpdvRange
4872 YconvMD = float(GRH/10.0) / CHMDpdvRange
4874 CHBAOffset = float(eval(CHB_APosEntry.get()))
4876 CHB_APosEntry.delete(0,END)
4877 CHB_APosEntry.insert(0, CHBAOffset)
4879 CHBBOffset = float(eval(CHB_BPosEntry.get()))
4881 CHB_BPosEntry.delete(0,END)
4882 CHB_BPosEntry.insert(0, CHBBOffset)
4884 CHBCOffset = float(eval(CHB_CPosEntry.get()))
4886 CHB_CPosEntry.delete(0,END)
4887 CHB_CPosEntry.insert(0, CHBCOffset)
4889 CHBDOffset = float(eval(CHB_DPosEntry.get()))
4891 CHB_DPosEntry.delete(0,END)
4892 CHB_DPosEntry.insert(0, CHBDOffset)
4893 if MathAxis ==
"V-A":
4895 CHMOffset = CHAOffset
4896 elif MathAxis ==
"V-B":
4898 CHMOffset = CHBOffset
4899 elif MathAxis ==
"I-A":
4901 CHMOffset = CHAIOffset
4902 elif MathAxis ==
"I-B":
4904 CHMOffset = CHBIOffset
4907 CHMOffset = CHAOffset
4909 if MathYAxis ==
"V-A":
4911 CHMYOffset = CHAOffset
4912 elif MathYAxis ==
"V-B":
4914 CHMYOffset = CHBOffset
4915 elif MathYAxis ==
"I-A":
4917 CHMYOffset = CHAIOffset
4918 elif MathYAxis ==
"I-B":
4920 CHMYOffset = CHBIOffset
4923 CHMYOffset = CHAOffset
4925 if MathXAxis ==
"V-A":
4927 CHMXOffset = CHAOffset
4928 elif MathXAxis ==
"V-B":
4930 CHMXOffset = CHBOffset
4931 elif MathXAxis ==
"I-A":
4933 CHMXOffset = CHAIOffset
4934 elif MathXAxis ==
"I-B":
4936 CHMXOffset = CHBIOffset
4939 CHMXOffset = CHAOffset
4941 c1 = GRH / 2.0 + Y0T
4942 c2 = GRH / 2.0 + Y0T
4944 DISsamples = SAMPLErate * 10.0 * TIMEdiv / 1000.0
4956 if len(VBuffA) < 4
and len(VBuffB) < 4
and len(IBuffA) < 4
and len(IBuffB) < 4:
4958 t = int(SCstart + TRIGGERsample)
4963 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
4964 ypi1 = int(c1 - YIconv1 * (IBuffA[t] - CHAIOffset))
4965 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
4966 ypi2 = int(c1 - YIconv2 * (IBuffB[t] - CHBIOffset))
4967 DvY1 = DvY2 = DiY1 = DiY2 = 0
4969 if (DISsamples <= GRW):
4970 Xstep = GRW / DISsamples
4971 if AWGBMode.get() == 2
and Two_X_Sample.get() == 0:
4972 xa = int((Xstep/-2.5) - (Xstep*DX))
4974 xa = 0 - int(Xstep*DX)
4975 x = 0 - int(Xstep*DX)
4980 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
4982 ypi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
4983 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
4984 if MuxScreenStatus.get() == 1:
4985 if len(VBuffMA) > 4:
4986 ypvma = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
4987 if len(VBuffMB) > 4:
4988 ypvmb = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
4989 if len(VBuffMC) > 4:
4990 ypvmc = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
4991 if len(VBuffMD) > 4:
4992 ypvmd = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
4994 ypi2 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
4995 ypm = ypmx = ypmy = GRH / 2.0 + Y0T
4996 if TgInput.get() == 0:
5004 y1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5006 yi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
5016 if ShowC1_V.get() == 1 :
5017 if ZOHold.get() == 1:
5018 T1Vline.append(int(xa1))
5019 T1Vline.append(int(ypv1))
5020 T1Vline.append(int(xa1))
5021 T1Vline.append(int(y1))
5023 T1Vline.append(int(xa1))
5024 T1Vline.append(int(y1))
5027 if ShowC1_I.get() == 1:
5028 if ZOHold.get() == 1:
5029 T1Iline.append(int(xa1))
5030 T1Iline.append(int(ypi1))
5031 T1Iline.append(int(xa1))
5032 T1Iline.append(int(yi1))
5034 T1Iline.append(int(xa1))
5035 T1Iline.append(int(yi1))
5038 if ShowC2_V.get() == 1:
5039 y1 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5044 if ZOHold.get() == 1:
5045 T2Vline.append(int(x1))
5046 T2Vline.append(int(ypv2))
5047 T2Vline.append(int(x1))
5048 T2Vline.append(int(y1))
5050 T2Vline.append(int(x1))
5051 T2Vline.append(int(y1))
5054 if Show_CBA.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMA)>4:
5055 y1 = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
5060 if ZOHold.get() == 1:
5061 TMAVline.append(int(x1))
5062 TMAVline.append(int(ypvma))
5063 TMAVline.append(int(x1))
5064 TMAVline.append(int(y1))
5066 TMAVline.append(int(x1))
5067 TMAVline.append(int(y1))
5069 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5070 Xfine = MouseX - X0L - x
5071 MouseMuxA = ypvma - (y1 - ypvma) * (Xfine/Xstep)
5072 if Show_CBB.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMB)>4:
5073 y1 = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
5078 if ZOHold.get() == 1:
5079 TMBVline.append(int(x1))
5080 TMBVline.append(int(ypvmb))
5081 TMBVline.append(int(x1))
5082 TMBVline.append(int(y1))
5084 TMBVline.append(int(x1))
5085 TMBVline.append(int(y1))
5087 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5088 Xfine = MouseX - X0L - x
5089 MouseMuxB = ypvmb - (y1 - ypvmb) * (Xfine/Xstep)
5090 if Show_CBC.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMC)>4:
5091 y1 = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
5096 if ZOHold.get() == 1:
5097 TMCVline.append(int(x1))
5098 TMCVline.append(int(ypvmc))
5099 TMCVline.append(int(x1))
5100 TMCVline.append(int(y1))
5102 TMCVline.append(int(x1))
5103 TMCVline.append(int(y1))
5105 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5106 Xfine = MouseX - X0L - x
5107 MouseMuxC = ypvmc - (y1 - ypvmc) * (Xfine/Xstep)
5108 if Show_CBD.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMD)>4:
5109 y1 = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
5114 if ZOHold.get() == 1:
5115 TMDVline.append(int(x1))
5116 TMDVline.append(int(ypvmd))
5117 TMDVline.append(int(x1))
5118 TMDVline.append(int(y1))
5120 TMDVline.append(int(x1))
5121 TMDVline.append(int(y1))
5123 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5124 Xfine = MouseX - X0L - x
5125 MouseMuxD = ypvmd - (y1 - ypvmd) * (Xfine/Xstep)
5126 if ShowC2_I.get() == 1:
5128 yi1 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
5133 if (ZOHold.get() == 1):
5134 T2Iline.append(int(x1))
5135 T2Iline.append(int(ypi2))
5136 T2Iline.append(int(x1))
5137 T2Iline.append(int(yi1))
5139 T2Iline.append(int(x1))
5140 T2Iline.append(int(yi1))
5143 if MathTrace.get() > 0:
5144 if MathTrace.get() == 1:
5145 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
5147 elif MathTrace.get() == 2:
5148 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
5150 elif MathTrace.get() == 3:
5151 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
5153 elif MathTrace.get() == 4:
5154 Ypower = VBuffA[t] * IBuffA[t]
5155 ytemp = YIconv1 * (Ypower - CHAIOffset)
5156 y1 = int(c1 - ytemp)
5158 elif MathTrace.get() == 5:
5159 Ypower = VBuffB[t] * IBuffB[t]
5160 ytemp = YIconv2 * (Ypower - CHBIOffset)
5161 y1 = int(c2 - ytemp)
5163 elif MathTrace.get() == 6:
5164 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
5165 ytemp = YIconv1 * (Yohms - CHAIOffset)
5166 y1 = int(c1 - ytemp)
5168 elif MathTrace.get() == 7:
5169 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
5170 ytemp = YIconv2 * (Yohms - CHBIOffset)
5171 y1 = int(c2 - ytemp)
5173 elif MathTrace.get() == 8:
5174 Ydif = (IBuffA[t] - IBuffB[t])
5175 ytemp = YIconv1 * (Ydif - CHAIOffset)
5176 y1 = int(c2 - ytemp)
5178 elif MathTrace.get() == 9:
5179 Ydif = (IBuffB[t] - IBuffA[t])
5180 ytemp = YIconv2 * (Ydif - CHBIOffset)
5181 y1 = int(c2 - ytemp)
5183 elif MathTrace.get() == 10:
5185 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
5187 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
5189 elif MathTrace.get() == 11:
5191 Y1 = (IBuffB[t] / IBuffA[t])
5193 Y1 = (IBuffB[t] / 0.000001)
5194 ytemp = YIconv2 * (Y1 - CHBIOffset)
5195 y1 = int(c2 - ytemp)
5197 elif MathTrace.get() == 12:
5200 MathResult = eval(MathString)
5201 MathResult = MathResult - CHMOffset
5202 y1 = int(c1 - YconvM * MathResult)
5211 if ZOHold.get() == 1:
5212 Tmathline.append(int(x1))
5213 Tmathline.append(int(ypm))
5214 Tmathline.append(int(x1))
5215 Tmathline.append(int(y1))
5217 Tmathline.append(int(x1))
5218 Tmathline.append(int(y1))
5220 if Show_MathX.get() > 0:
5222 MathResult = eval(MathXString)
5223 MathResult = MathResult - CHMXOffset
5224 y1 = int(c1 - XconvMxy * MathResult)
5233 if ZOHold.get() == 1:
5234 TMXline.append(int(x1))
5235 TMXline.append(int(ypmx))
5236 TMXline.append(int(x1))
5237 TMXline.append(int(y1))
5239 TMXline.append(int(x1))
5240 TMXline.append(int(y1))
5242 if Show_MathY.get() > 0:
5244 MathResult = eval(MathYString)
5245 MathResult = MathResult - CHMYOffset
5246 y1 = int(c1 - YconvMxy * MathResult)
5255 if ZOHold.get() == 1:
5256 TMYline.append(int(x1))
5257 TMYline.append(int(ypmy))
5258 TMYline.append(int(x1))
5259 TMYline.append(int(y1))
5261 TMYline.append(int(x1))
5262 TMYline.append(int(y1))
5265 if MouseX - X0L >= x
and MouseX - X0L < (x + Xstep):
5266 Xfine = MouseX - X0L - x
5267 MouseCAV = ypv1 - (DvY1 * (Xfine/Xstep))
5268 MouseCAI = ypi1 - (DiY1 * (Xfine/Xstep))
5269 MouseCBV = ypv2 - (DvY2 * (Xfine/Xstep))
5270 MouseCBI = ypi2 - (DiY2 * (Xfine/Xstep))
5277 Tstep = DISsamples / GRW
5282 t = int(SCstart + TRIGGERsample)
5283 if t > len(VBuffA)-1:
5291 if (t >= len(VBuffA)):
5295 ylo = VBuffA[t] - CHAOffset
5296 ilo = IBuffA[t] - CHAIOffset
5300 while n < (t + Tstep)
and n < TRACEsize:
5301 if ( ShowC1_V.get() == 1 ):
5302 v = VBuffA[t] - CHAOffset
5307 if ( ShowC1_I.get() == 1 ):
5308 i = IBuffA[t] - CHAIOffset
5314 if ( ShowC1_V.get() == 1 ):
5315 ylo = int(c1 - Yconv1 * ylo)
5316 yhi = int(c1 - Yconv1 * yhi)
5325 T1Vline.append(int(x1))
5326 T1Vline.append(int(ylo))
5327 T1Vline.append(int(x1))
5328 T1Vline.append(int(yhi))
5330 if ( ShowC1_I.get() == 1 ):
5331 ilo = int(c1 - YIconv1 * ilo)
5332 ihi = int(c1 - YIconv1 * ihi)
5341 T1Iline.append(int(x1))
5342 T1Iline.append(int(ilo))
5343 T1Iline.append(int(x1))
5344 T1Iline.append(int(ihi))
5346 ylo = VBuffB[t] - CHBOffset
5347 ilo = IBuffB[t] - CHBIOffset
5351 if MuxScreenStatus.get() == 0:
5352 while n < (t + Tstep)
and n < TRACEsize:
5353 if ( ShowC2_V.get() == 1 ):
5354 v = VBuffB[t] - CHBOffset
5359 if ( ShowC2_I.get() == 1 ):
5360 i = IBuffB[t] - CHBIOffset
5366 if ( ShowC2_V.get() == 1 ):
5367 ylo = int(c2 - Yconv2 * ylo)
5368 yhi = int(c2 - Yconv2 * yhi)
5378 T2Vline.append(int(x1))
5379 T2Vline.append(int(ylo))
5380 T2Vline.append(int(x1))
5381 T2Vline.append(int(yhi))
5383 if ( ShowC2_I.get() == 1 ):
5384 ilo = int(c2 - YIconv2 * ilo)
5385 ihi = int(c2 - YIconv2 * ihi)
5394 T2Iline.append(int(x1))
5395 T2Iline.append(int(ilo))
5396 T2Iline.append(int(x1))
5397 T2Iline.append(int(ihi))
5400 if Show_CBA.get() == 1
and len(VBuffMA)>4:
5401 if t < len(VBuffMA):
5402 ylo = VBuffMA[t] - CHBAOffset
5405 while n < (t + Tstep)
and n < len(VBuffMA):
5406 v = VBuffMA[t] - CHBAOffset
5412 ylo = int(c2 - YconvMA * ylo)
5413 yhi = int(c2 - YconvMA * yhi)
5422 TMAVline.append(int(x1))
5423 TMAVline.append(int(ylo))
5424 TMAVline.append(int(x1))
5425 TMAVline.append(int(yhi))
5426 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5428 if Show_CBB.get() == 1
and len(VBuffMB)>4:
5429 if t < len(VBuffMB):
5430 ylo = VBuffMB[t] - CHBBOffset
5433 while n < (t + Tstep)
and n < len(VBuffMB):
5434 v = VBuffMB[t] - CHBBOffset
5440 ylo = int(c2 - YconvMB * ylo)
5441 yhi = int(c2 - YconvMB * yhi)
5450 TMBVline.append(int(x1))
5451 TMBVline.append(int(ylo))
5452 TMBVline.append(int(x1))
5453 TMBVline.append(int(yhi))
5454 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5456 if Show_CBC.get() == 1
and len(VBuffMC)>4:
5457 if t < len(VBuffMC):
5458 ylo = VBuffMC[t] - CHBCOffset
5461 while n < (t + Tstep)
and n < len(VBuffMC):
5462 v = VBuffMC[t] - CHBCOffset
5468 ylo = int(c2 - YconvMC * ylo)
5469 yhi = int(c2 - YconvMC * yhi)
5478 TMCVline.append(int(x1))
5479 TMCVline.append(int(ylo))
5480 TMCVline.append(int(x1))
5481 TMCVline.append(int(yhi))
5482 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5484 if Show_CBD.get() == 1
and len(VBuffMD)>4:
5485 if t < len(VBuffMD):
5486 ylo = VBuffMD[t] - CHBDOffset
5489 while n < (t + Tstep)
and n < len(VBuffMD):
5490 v = VBuffMD[t] - CHBDOffset
5496 ylo = int(c2 - YconvMD * ylo)
5497 yhi = int(c2 - YconvMD * yhi)
5506 TMDVline.append(int(x1))
5507 TMDVline.append(int(ylo))
5508 TMDVline.append(int(x1))
5509 TMDVline.append(int(yhi))
5510 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5512 if ( ShowC2_I.get() == 1 ):
5513 while n < (t + Tstep)
and n < TRACEsize:
5514 i = IBuffB[t] - CHBIOffset
5520 ilo = int(c2 - YIconv2 * ilo)
5521 ihi = int(c2 - YIconv2 * ihi)
5530 T2Iline.append(int(x1))
5531 T2Iline.append(int(ilo))
5532 T2Iline.append(int(x1))
5533 T2Iline.append(int(ihi))
5534 if MathTrace.get() > 0:
5535 if MathTrace.get() == 1:
5536 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
5538 elif MathTrace.get() == 2:
5539 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
5541 elif MathTrace.get() == 3:
5542 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
5544 elif MathTrace.get() == 4:
5545 Ypower = VBuffA[t] * IBuffA[t]
5546 ytemp = YIconv1 * (Ypower - CHAIOffset)
5547 y1 = int(c1 - ytemp)
5549 elif MathTrace.get() == 5:
5550 Ypower = VBuffB[t] * IBuffB[t]
5551 ytemp = YIconv2 * (Ypower - CHBIOffset)
5552 y1 = int(c2 - ytemp)
5554 elif MathTrace.get() == 6:
5555 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
5556 ytemp = YIconv1 * (Yohms- CHAIOffset)
5557 y1 = int(c1 - ytemp)
5559 elif MathTrace.get() == 7:
5560 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
5561 ytemp = YIconv2 * (Yohms - CHBIOffset)
5562 y1 = int(c2 - ytemp)
5564 elif MathTrace.get() == 8:
5565 Ydif = (IBuffA[t] - IBuffB[t])
5566 ytemp = YIconv1 * (Ydif - CHAIOffset)
5567 y1 = int(c2 - ytemp)
5569 elif MathTrace.get() == 9:
5570 Ydif = (IBuffB[t] - IBuffA[t])
5571 ytemp = YIconv2 * (Ydif - CHBIOffset)
5572 y1 = int(c2 - ytemp)
5574 elif MathTrace.get() == 10:
5576 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
5578 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
5579 elif MathTrace.get() == 11:
5581 Y1 = (IBuffB[t] / IBuffA[t])
5583 Y1 = (IBuffB[t] / 0.000001)
5584 ytemp = YIconv2 * (Y1 - CHBIOffset)
5585 y1 = int(c2 - ytemp)
5587 elif MathTrace.get() == 12:
5590 MathResult = eval(MathString)
5591 MathResult = MathResult - CHMOffset
5592 y1 = int(c1 - YconvM * MathResult)
5601 if (ZOHold.get() == 1):
5602 Tmathline.append(int(x1))
5603 Tmathline.append(int(ypm))
5604 Tmathline.append(int(x1))
5605 Tmathline.append(int(y1))
5607 Tmathline.append(int(x1))
5608 Tmathline.append(int(y1))
5610 if Show_MathX.get() > 0:
5612 MathResult = eval(MathXString)
5613 MathResult = MathResult - CHMXOffset
5614 y1 = int(c1 - XconvMxy * MathResult)
5623 if ZOHold.get() == 1:
5624 TMXline.append(int(x1))
5625 TMXline.append(int(ypmx))
5626 TMXline.append(int(x1))
5627 TMXline.append(int(y1))
5629 TMXline.append(int(x1))
5630 TMXline.append(int(y1))
5632 if Show_MathY.get() > 0:
5634 MathResult = eval(MathYString)
5635 MathResult = MathResult - CHMYOffset
5636 y1 = int(c1 - YconvMxy * MathResult)
5645 if ZOHold.get() == 1:
5646 TMYline.append(int(x1))
5647 TMYline.append(int(ypmy))
5648 TMYline.append(int(x1))
5649 TMYline.append(int(y1))
5651 TMYline.append(int(x1))
5652 TMYline.append(int(y1))
5655 if (MouseX - X0L) == x:
5661 if (t > len(VBuffA)):
5669 if TgInput.get() > 0:
5670 if TgInput.get() == 1 :
5672 ytemp = Yconv1 * (float(TRIGGERlevel)-CHAOffset)
5673 y1 = int(c1 - ytemp)
5674 elif TgInput.get() == 2:
5676 y1 = int(c1 - YIconv1 * (float(TRIGGERlevel) - CHAIOffset))
5677 elif TgInput.get() == 3:
5679 ytemp = Yconv2 * (float(TRIGGERlevel)-CHBOffset)
5680 y1 = int(c2 - ytemp)
5681 elif TgInput.get() == 4:
5683 y1 = int(c2 - YIconv2 * (float(TRIGGERlevel) - CHBIOffset))
5689 Triggerline.append(int(x1-5))
5690 Triggerline.append(int(y1+5))
5691 Triggerline.append(int(x1+5))
5692 Triggerline.append(int(y1))
5693 Triggerline.append(int(x1-5))
5694 Triggerline.append(int(y1-5))
5695 Triggerline.append(int(x1-5))
5696 Triggerline.append(int(y1+5))
5698 if TgEdge.get() == 0:
5704 Triggersymbol.append(int(x1-10))
5705 Triggersymbol.append(int(Ymin+y1))
5706 Triggersymbol.append(int(x1))
5707 Triggersymbol.append(int(Ymin+y1))
5708 Triggersymbol.append(int(x1))
5709 Triggersymbol.append(int(Ymin+y2))
5710 Triggersymbol.append(int(x1+10))
5711 Triggersymbol.append(int(Ymin+y2))
5714 global VBuffA, VBuffB, IBuffA, IBuffB
5715 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
5716 global TXYline, MathXString, MathYString, MathXAxis, MathYAxis
5717 global HoldOff, HoldOffentry
5718 global X0LXY, Y0TXY, GRWXY, GRHXY
5719 global YminXY, YmaxXY, XminXY, XmaxXY
5720 global SHOWsamples, ZOHold, AWGBMode
5721 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
5722 global TRACES, TRACESread, RUNstatus
5723 global Xsignal, Ysignal
5724 global CHAsbxy, CHBsbxy, CHAOffset, CHBOffset, CHAIsbxy, CHBIsbxy, CHAIOffset, CHBIOffset
5729 global SCstart, MathString
5730 global TRIGGERsample, TRACEsize, DX
5731 global TRIGGERlevel, TRIGGERentry, AutoLevel
5732 global InOffA, InGainA, InOffB, InGainB
5733 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
5734 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
5735 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
5736 global CHAVPosEntryxy, CHAIPosEntryxy, CHAVPosEntryxy, CHBIPosEntryxy
5737 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
5738 global HozPoss, HozPossentry
5741 if len(VBuffA) < 100:
5743 TRACEsize = SHOWsamples
5749 CH1pdvRange = float(eval(CHAsbxy.get()))
5751 CHAsbxy.delete(0,END)
5752 CHAsbxy.insert(0, CH1vpdvRange)
5754 CH2pdvRange = float(eval(CHBsbxy.get()))
5756 CHBsbxy.delete(0,END)
5757 CHBsbxy.insert(0, CH2vpdvRange)
5759 CH1IpdvRange = float(eval(CHAIsbxy.get()))
5761 CHAIsbxy.delete(0,END)
5762 CHAIsbxy.insert(0, CH1IpdvRange)
5764 CH2IpdvRange = float(eval(CHBIsbxy.get()))
5766 CHBIsbxy.delete(0,END)
5767 CHBIsbxy.insert(0, CH2IpdvRange)
5770 CHAOffset = float(eval(CHAVPosEntryxy.get()))
5772 CHAVPosEntryxy.delete(0,END)
5773 CHAVPosEntryxy.insert(0, CHAOffset)
5775 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
5777 CHAIPosEntryxy.delete(0,END)
5778 CHAIPosEntryxy.insert(0, CHAIOffset)
5780 CHBOffset = float(eval(CHBVPosEntryxy.get()))
5782 CHBVPosEntry.delete(0,END)
5783 CHBVPosEntry.insert(0, CHBOffset)
5785 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
5787 CHBIPosEntryxy.delete(0,END)
5788 CHBIPosEntryxy.insert(0, CHBIOffset)
5790 if CH1pdvRange < 0.001:
5792 if CH2pdvRange < 0.001:
5794 if CH1IpdvRange < 0.1:
5796 if CH2IpdvRange < 0.1:
5799 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
5800 Yconv2 = float(GRHXY/10.0) / CH2pdvRange
5801 YIconv1 = float(GRHXY/10.0) / CH1IpdvRange
5802 YIconv2 = float(GRHXY/10.0) / CH2IpdvRange
5803 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
5804 Xconv2 = float(GRWXY/10.0) / CH2pdvRange
5805 XIconv1 = float(GRWXY/10.0) / CH1IpdvRange
5806 XIconv2 = float(GRWXY/10.0) / CH2IpdvRange
5808 if MathYAxis ==
"V-A":
5810 CHMYOffset = CHAOffset
5811 elif MathYAxis ==
"V-B":
5813 CHMYOffset = CHBOffset
5814 elif MathYAxis ==
"I-A":
5816 CHMYOffset = CHAIOffset
5817 elif MathYAxis ==
"I-B":
5819 CHMYOffset = CHBIOffset
5822 CHMYOffset = CHAOffset
5823 if MathXAxis ==
"V-A":
5825 CHMXOffset = CHAOffset
5826 elif MathXAxis ==
"V-B":
5828 CHMXOffset = CHBOffset
5829 elif MathYAxis ==
"I-A":
5831 CHMXOffset = CHAIOffset
5832 elif MathXAxis ==
"I-B":
5834 CHMXOffset = CHBIOffset
5837 CHMXOffset = CHAOffset
5840 t = int(TRIGGERsample)
5841 c1 = GRHXY / 2.0 + Y0TXY
5842 c2 = GRWXY / 2.0 + X0LXY
5843 while (t < TRACEsize):
5844 if (Xsignal.get() == 3
and Ysignal.get() == 1):
5845 ylo = VBuffA[t] - CHAOffset
5846 xlo = VBuffB[t] - CHBOffset
5847 ylo = int(c1 - Yconv1 * ylo)
5848 xlo = int(c2 + Xconv2 * xlo)
5849 elif (Xsignal.get() == 1
and Ysignal.get() == 3):
5850 ylo = VBuffB[t] - CHBOffset
5851 xlo = VBuffA[t] - CHAOffset
5852 ylo = int(c1 - Yconv2 * ylo)
5853 xlo = int(c2 + Xconv1 * xlo)
5854 elif (Xsignal.get() == 5
and Ysignal.get() == 3):
5855 if ( MathTrace.get() == 2):
5856 ylo = VBuffB[t] - CHBOffset
5857 ylo = int(c1 - Yconv2 * ylo)
5858 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
5859 xlo = int(c2 + Xconv1 * xlo)
5860 elif (Xsignal.get() == 5
and Ysignal.get() == 4):
5861 if ( MathTrace.get() == 2):
5862 ylo = (IBuffB[t]) - CHBIOffset
5863 ylo = int(c1 - YIconv2 * ylo)
5864 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
5865 xlo = int(c2 + Xconv1 * xlo)
5866 elif (Xsignal.get() == 5
and Ysignal.get() == 2):
5867 if MathTrace.get() == 3:
5868 ylo = (IBuffA[t]) - CHAIOffset
5869 ylo = int(c1 - YIconv1 * ylo)
5870 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
5871 xlo = int(c2 + Xconv2 * xlo)
5872 elif (Xsignal.get() == 3
and Ysignal.get() == 5):
5873 if MathTrace.get() == 2:
5874 ylo = VBuffA[t] - VBuffB[t] - CHAOffset
5875 ylo = int(c1 - Yconv1 * ylo)
5876 xlo = VBuffB[t] - CHBOffset
5877 xlo = int(c2 + Xconv2 * xlo)
5878 elif (Xsignal.get() == 5
and Ysignal.get() == 1):
5879 if MathTrace.get() == 3:
5880 ylo = VBuffA[t] - CHAOffset
5881 ylo = int(c1 - Yconv1 * ylo)
5882 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
5883 xlo = int(c2 + Xconv2 * xlo)
5884 elif (Xsignal.get() == 1
and Ysignal.get() == 5):
5885 if MathTrace.get() == 3:
5886 ylo = VBuffB[t] - VBuffA[t] - CHBOffset
5887 ylo = int(c1 - Yconv2 * ylo)
5888 xlo = VBuffA[t] - CHAOffset
5889 xlo = int(c2 + Xconv1 * xlo)
5890 elif (Xsignal.get() == 1
and Ysignal.get() == 2):
5891 ylo = (IBuffA[t]) - CHAIOffset
5892 xlo = VBuffA[t] - CHAOffset
5893 ylo = int(c1 - YIconv1 * ylo)
5894 xlo = int(c2 + Xconv1 * xlo)
5895 elif (Xsignal.get() == 3
and Ysignal.get() == 2):
5896 ylo = (IBuffA[t]) - CHAIOffset
5897 xlo = VBuffB[t] - CHBOffset
5898 ylo = int(c1 - YIconv1 * ylo)
5899 xlo = int(c2 + Xconv2 * xlo)
5900 elif (Xsignal.get() == 2
and Ysignal.get() == 1):
5901 ylo = VBuffA[t] - CHAOffset
5902 xlo = (IBuffA[t]) - CHAIOffset
5903 ylo = int(c1 - Yconv1 * ylo)
5904 xlo = int(c2 + XIconv1 * xlo)
5905 elif (Xsignal.get() == 2
and Ysignal.get() == 3):
5906 ylo = VBuffB[t] - CHBOffset
5907 xlo = (IBuffA[t]) - CHAIOffset
5908 ylo = int(c1 - Yconv2 * ylo)
5909 xlo = int(c2 + XIconv1 * xlo)
5910 elif (Xsignal.get() == 3
and Ysignal.get() == 4):
5911 ylo = (IBuffB[t]) - CHBIOffset
5912 xlo = VBuffB[t] - CHBOffset
5913 ylo = int(c1 - YIconv2 * ylo)
5914 xlo = int(c2 + Xconv2 * xlo)
5915 elif (Xsignal.get() == 4
and Ysignal.get() == 3):
5916 ylo = VBuffB[t] - CHBOffset
5917 xlo = (IBuffB[t]) - CHBIOffset
5918 ylo = int(c1 - Yconv2 * ylo)
5919 xlo = int(c2 + XIconv2 * xlo)
5920 elif (Xsignal.get() == 4
and Ysignal.get() == 2):
5921 ylo = (IBuffA[t]) - CHAIOffset
5922 xlo = (IBuffB[t]) - CHBIOffset
5923 ylo = int(c1 - YIconv1 * ylo)
5924 xlo = int(c2 + XIconv2 * xlo)
5925 elif (Xsignal.get() == 2
and Ysignal.get() == 4):
5926 ylo = (IBuffB[t]) - CHBIOffset
5927 xlo = (IBuffA[t]) - CHAIOffset
5928 ylo = int(c1 - YIconv2 * ylo)
5929 xlo = int(c2 + XIconv1 * xlo)
5930 elif (Xsignal.get() == 1
and Ysignal.get() == 4):
5931 ylo = (IBuffB[t]) - CHBIOffset
5932 xlo = VBuffA[t] - CHAOffset
5933 ylo = int(c1 - YIconv2 * ylo)
5934 xlo = int(c2 + Xconv1 * xlo)
5935 elif (Xsignal.get() == 5
and Ysignal.get() == 5):
5937 MathResult = eval(MathYString)
5938 MathResult = MathResult - CHMYOffset
5939 ylo = int(c1 - YconvMxy * MathResult)
5943 MathResult = eval(MathXString)
5944 MathResult = MathResult - CHMXOffset
5945 xlo = int(c2 + XconvMxy * MathResult)
5956 TXYline.append(int(xlo))
5957 TXYline.append(int(ylo))
5961 global T1Vline, T2Vline, T1Iline, T2Iline, TXYline
5962 global TMXline, TMYline
5963 global T1VRline, T2VRline, T1IRline, T2IRline
5964 global Triggerline, Triggersymbol, Tmathline, TMRline, TXYRline
5965 global VBuffA, VBuffB, IBuffA, IBuffB
5966 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
5967 global TMAVline, TMBVline, TMCVline, TMDVline, TMCRline, TMBRline
5968 global VmemoryA, VmemoryB, VmemoryA, ImemoryB
5973 global FontSize, EnableHSsampling, ETSDisp, MinigenScreenStatus
5974 global MouseX, MouseY, MouseWidget, MouseCAV, MouseCAI, MouseCBV, MouseCBI
5975 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
5976 global ShowXCur, ShowYCur, TCursor, VCursor
5978 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowRXY, Show_MathX, Show_MathY
5979 global ShowRA_V, ShowRA_I, ShowRB_V, ShowRB_I, ShowMath
5980 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MathUnits, MathXUnits, MathYUnits
5981 global Xsignal, Ysignal, MathTrace, MathAxis, MathXAxis, MathYAxis
5982 global RUNstatus, SingleShot, ManualTrigger, session
5993 global TIMEdiv, Mulx
5994 global SAMPLErate, contloop, discontloop, HtMulEntry
5995 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry, TgInput
5996 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7, COLORtraceR7
5997 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6
5998 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6
5999 global CANVASwidth, CANVASheight
6000 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
6001 global ScreenTrefresh, SmoothCurves, Is_Triggered
6002 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
6003 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
6004 global InOffA, InGainA, InOffB, InGainB
6005 global CurOffA, CurOffB, CurGainA, CurGainB
6007 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
6008 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
6009 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
6010 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
6011 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
6012 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
6013 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
6014 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
6015 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
6016 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
6017 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
6018 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
6019 global AWGAShape, AWGBShape, MeasDiffAB, MeasDiffBA
6020 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6021 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6022 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
6023 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
6024 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
6025 global DacScreenStatus, DigScreenStatus, CHA_RC_HP, CHB_RC_HP
6026 global D0, D1, D2, D3, D4, D5, D6, D7
6027 global DevID, devx, MarkerNum, MarkerScale, MeasGateLeft, MeasGateRight, MeasGateStatus
6028 global HozPoss, HozPossentry
6029 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
6030 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
6031 global CHBADelayR1, CHBADelayR2, CHBADelayF, MeasDelay
6036 DISsamples = (10.0 * TIMEdiv)
6037 Tstep = DISsamples / GRW
6040 CH1pdvRange = float(eval(CHAsb.get()))
6043 CHAsb.insert(0, CH1vpdvRange)
6045 CH2pdvRange = float(eval(CHBsb.get()))
6048 CHBsb.insert(0, CH2vpdvRange)
6050 CH1IpdvRange = float(eval(CHAIsb.get()))
6052 CHAIsb.delete(0,END)
6053 CHAIsb.insert(0, CH1IpdvRange)
6055 CH2IpdvRange = float(eval(CHBIsb.get()))
6057 CHBIsb.delete(0,END)
6058 CHBIsb.insert(0, CH2IpdvRange)
6061 CHAOffset = float(eval(CHAVPosEntry.get()))
6063 CHAVPosEntry.delete(0,END)
6064 CHAVPosEntry.insert(0, CHAOffset)
6066 CHAIOffset = float(eval(CHAIPosEntry.get()))
6068 CHAIPosEntry.delete(0,END)
6069 CHAIPosEntry.insert(0, CHAIOffset)
6071 CHBOffset = float(eval(CHBVPosEntry.get()))
6073 CHBVPosEntry.delete(0,END)
6074 CHBVPosEntry.insert(0, CHBOffset)
6076 CHBIOffset = float(eval(CHBIPosEntry.get()))
6078 CHBIPosEntry.delete(0,END)
6079 CHBIPosEntry.insert(0, CHBIOffset)
6081 HoldOff = float(eval(HoldOffentry.get()))
6085 HoldOffentry.delete(0,END)
6086 HoldOffentry.insert(0, HoldOff)
6087 if ETSDisp.get() > 0
or MinigenScreenStatus.get() > 0:
6089 Mulx = float(eval(HtMulEntry.get()))
6094 if EnableHSsampling > 0:
6095 HtMulEntry.delete(0,END)
6096 HtMulEntry.insert(0, 1)
6101 HozPoss = float(eval(HozPossentry.get()))
6103 HozPossentry.delete(0,END)
6104 HozPossentry.insert(0, HozPoss)
6105 if MuxScreenStatus.get() == 1:
6107 CHMApdvRange = float(eval(CHB_Asb.get()))
6109 CHB_Asb.delete(0,END)
6110 CHB_Asb.insert(0, CHMApdvRange)
6112 CHMBpdvRange = float(eval(CHB_Bsb.get()))
6114 CHB_Bsb.delete(0,END)
6115 CHB_Bsb.insert(0, CHMBpdvRange)
6117 CHMCpdvRange = float(eval(CHB_Csb.get()))
6119 CHB_Csb.delete(0,END)
6120 CHB_Csb.insert(0, CHMCpdvRange)
6122 CHMDpdvRange = float(eval(CHB_Dsb.get()))
6124 CHB_Dsb.delete(0,END)
6125 CHB_Dsb.insert(0, CHMDpdvRange)
6126 if CHMApdvRange < 0.001:
6127 CHMApdvRange = 0.001
6128 if CHMBpdvRange < 0.001:
6129 CHMBpdvRange = 0.001
6130 if CHMCpdvRange < 0.001:
6131 CHMCpdvRange = 0.001
6132 if CHMDpdvRange < 0.001:
6133 CHMDpdvRange = 0.001
6135 CHBAOffset = float(eval(CHB_APosEntry.get()))
6137 CHB_APosEntry.delete(0,END)
6138 CHB_APosEntry.insert(0, CHBAOffset)
6140 CHBBOffset = float(eval(CHB_BPosEntry.get()))
6142 CHB_BPosEntry.delete(0,END)
6143 CHB_BPosEntry.insert(0, CHBBOffset)
6145 CHBCOffset = float(eval(CHB_CPosEntry.get()))
6147 CHB_CPosEntry.delete(0,END)
6148 CHB_CPosEntry.insert(0, CHBCOffset)
6150 CHBDOffset = float(eval(CHB_DPosEntry.get()))
6152 CHB_DPosEntry.delete(0,END)
6153 CHB_DPosEntry.insert(0, CHBDOffset)
6155 if CH1pdvRange < 0.001:
6157 if CH2pdvRange < 0.001:
6159 if CH1IpdvRange < 0.1:
6161 if CH2IpdvRange < 0.1:
6163 vt = HoldOff + HozPoss
6164 if ScreenTrefresh.get() == 0:
6174 MathFlag1 = (MathAxis ==
"V-A" and MathTrace.get() == 12)
or (MathXAxis ==
"V-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-A" and Show_MathY.get() == 1)
6175 MathFlag2 = (MathAxis ==
"V-B" and MathTrace.get() == 12)
or (MathXAxis ==
"V-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"V-B" and Show_MathY.get() == 1)
6176 MathFlag3 = (MathAxis ==
"I-A" and MathTrace.get() == 12)
or (MathXAxis ==
"I-A" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-A" and Show_MathY.get() == 1)
6177 MathFlag4 = (MathAxis ==
"I-B" and MathTrace.get() == 12)
or (MathXAxis ==
"I-B" and Show_MathX.get() == 1)
or (MathYAxis ==
"I-B" and Show_MathY.get() == 1)
6179 RightOffset = FontSize * 3
6180 LeftOffset = int(FontSize/2)
6181 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6182 ca.create_text(x1-LeftOffset, 12, text=
"CA-V", fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize-1 ))
6183 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6184 ca.create_text(x2+LeftOffset, 12, text=
"CA-I", fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize-1 ))
6185 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6186 ca.create_text(x1-RightOffset+2, 12, text=
"CB-V", fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize-1 ))
6187 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6188 ca.create_text(x2+RightOffset+4, 12, text=
"CB-I", fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize-1 ))
6191 y = Y0T + i * GRH/10.0
6194 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6199 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
6200 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6204 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6206 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6207 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6209 Vaxis_label = str(round(Vaxis_value,3 ))
6210 ca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
6212 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6213 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
6214 Iaxis_label = str(round(Iaxis_value, 3))
6215 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
6217 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6218 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6219 Vaxis_label = str(round(Vaxis_value, 3))
6220 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6222 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6223 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
6224 Iaxis_label = str(round(Iaxis_value, 3))
6225 ca.create_text(x2+RightOffset+4, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6226 if MuxScreenStatus.get() == 1:
6227 if Show_CBA.get() == 1:
6228 Vaxis_value = (((5-i) * CHMApdvRange ) + CHBAOffset)
6229 Vaxis_label = str(round(Vaxis_value, 3))
6230 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6231 if Show_CBB.get() == 1:
6232 Iaxis_value = 1.0 * (((5-i) * CHMBpdvRange ) + CHBBOffset)
6233 Iaxis_label = str(round(Iaxis_value, 3))
6234 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace6, anchor=
"w", font=(
"arial", FontSize ))
6235 if Show_CBC.get() == 1:
6236 Iaxis_value = 1.0 * (((5-i) * CHMCpdvRange ) + CHBCOffset)
6237 Iaxis_label = str(round(Iaxis_value, 3))
6238 ca.create_text(x2+RightOffset-3, y, text=Iaxis_label, fill=COLORtrace7, anchor=
"w", font=(
"arial", FontSize ))
6239 if Show_CBD.get() == 1:
6240 Iaxis_value = 1.0 * (((5-i) * CHMDpdvRange ) + CHBDOffset)
6241 Iaxis_label = str(round(Iaxis_value, 3))
6242 ca.create_text(x2+RightOffset+10, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6254 x = X0L + i * GRW/10.0
6257 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6262 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
6263 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6268 axis_value = ((i * vx)+ vt) / 1000.0
6269 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6270 if vx < 1000
and vx >= 1:
6271 axis_value = (i * vx) + vt
6272 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6274 axis_value = ((i * vx) + vt) * 1000.0
6275 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6276 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6278 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6280 axis_value = ((i * vx)+ vt) / 1000.0
6281 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6282 if vx < 1000
and vx >= 1:
6283 axis_value = (i * vx) + vt
6284 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6286 axis_value = ((i * vx) + vt) * 1000.0
6287 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6288 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6292 if len(Triggerline) > 2:
6293 ca.create_polygon(Triggerline, outline=COLORtrigger, fill=COLORtrigger, width=1)
6294 ca.create_line(Triggersymbol, fill=COLORtrigger, width=GridWidth.get())
6295 if TgInput.get() == 1:
6297 if TgInput.get() == 2:
6299 if TgInput.get() == 3:
6301 if TgInput.get() == 4:
6303 if TgInput.get() == 5:
6305 if TgInput.get() == 6:
6307 if TgInput.get() == 7:
6309 if Is_Triggered == 1:
6310 TgLabel = TgLabel +
" Triggered"
6312 TgLabel = TgLabel +
" Not Triggered"
6313 if SingleShot.get() > 0:
6314 TgLabel = TgLabel +
" Armed"
6315 x = X0L + (GRW/2) + 12
6316 ca.create_text(x, Ymin-FontSize, text=TgLabel, fill=COLORtrigger, anchor=
"w", font=(
"arial", FontSize ))
6318 if MarkerScale.get() == 0:
6319 Yconv1 = float(GRH/10.0) / CH1pdvRange
6320 Yoffset1 = CHAOffset
6321 COLORmarker = COLORtrace1
6323 if MarkerScale.get() == 1:
6325 Yconv1 = float(GRH/10.0) / CH1pdvRange
6326 Yoffset1 = CHAOffset
6327 COLORmarker = COLORtrace1
6329 if MarkerScale.get() == 2:
6331 Yconv1 = float(GRH/10.0) / CH2pdvRange
6332 Yoffset1 = CHBOffset
6333 COLORmarker = COLORtrace2
6335 if MarkerScale.get() == 3:
6337 Yconv1 = float(GRH/10.0) / CH1IpdvRange
6338 Yoffset1 = CHAIOffset
6339 COLORmarker = COLORtrace3
6341 if MarkerScale.get() == 4:
6343 Yconv1 = float(GRH/10.0) / CH2IpdvRange
6344 Yoffset1 = CHBIOffset
6345 COLORmarker = COLORtrace4
6348 if MarkerScale.get() == 5:
6350 Yconv1 = float(GRH/10.0) / CHMApdvRange
6351 Yoffset1 = CHBAOffset
6352 COLORmarker = COLORtrace2
6354 if MarkerScale.get() == 6:
6356 Yconv1 = float(GRH/10.0) / CHMBpdvRange
6357 Yoffset1 = CHBBOffset
6358 COLORmarker = COLORtrace6
6360 if MarkerScale.get() == 7:
6362 Yconv1 = float(GRH/10.0) / CHMCpdvRange
6363 Yoffset1 = CHBCOffset
6364 COLORmarker = COLORtrace7
6366 if MarkerScale.get() == 8:
6368 Yconv1 = float(GRH/10.0) / CHMDpdvRange
6369 Yoffset1 = CHBDOffset
6370 COLORmarker = COLORtrace4
6373 if ShowTCur.get() > 0:
6374 Dline = [TCursor, Y0T, TCursor, Y0T+GRH]
6375 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6376 Tpoint = ((TCursor-X0L) * Tstep) + vt
6377 Tpoint = Tpoint/Mulx
6379 axis_value = Tpoint / 1000.0
6380 V_label =
' {0:.2f} '.format(axis_value) +
" S"
6381 if Tpoint < 1000
and Tpoint >= 1:
6383 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
6385 axis_value = Tpoint * 1000.0
6386 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
6387 ca.create_text(TCursor+1, VCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
6388 if ShowVCur.get() > 0:
6389 Dline = [X0L, VCursor, X0L+GRW, VCursor]
6390 ca.create_line(Dline, dash=(4,3), fill=COLORmarker, width=GridWidth.get())
6392 yvolts = ((VCursor-c1)/Yconv1) - Yoffset1
6393 V1String =
' {0:.3f} '.format(-yvolts)
6394 V_label = V1String + Units
6395 ca.create_text(TCursor+1, VCursor+5, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
6396 if ShowTCur.get() == 0
and ShowVCur.get() == 0
and MouseWidget == ca:
6397 if MouseX > X0L
and MouseX < X0L+GRW
and MouseY > Y0T
and MouseY < Y0T+GRH:
6398 Dline = [MouseX, Y0T, MouseX, Y0T+GRH]
6399 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6400 Tpoint = ((MouseX-X0L) * Tstep) + vt
6401 Tpoint = Tpoint/Mulx
6403 axis_value = Tpoint / 1000.0
6404 V_label =
' {0:.2f} '.format(axis_value) +
" S"
6405 if Tpoint < 1000
and Tpoint >= 1:
6407 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
6409 axis_value = Tpoint * 1000.0
6410 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
6411 ca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
6412 Dline = [X0L, MouseY, X0L+GRW, MouseY]
6413 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6415 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
6416 V1String =
' {0:.3f} '.format(-yvolts)
6417 V_label = V1String + Units
6418 ca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
6420 if MeasGateStatus.get() == 1:
6421 LeftGate = X0L + MeasGateLeft / Tstep
6422 RightGate = X0L + MeasGateRight / Tstep
6423 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, dash=(5,3), fill=COLORtrace5)
6424 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, dash=(5,3), fill=COLORtrace7)
6426 SmoothBool = SmoothCurves.get()
6428 if len(T1Vline) > 4:
6429 ca.create_line(T1Vline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6430 if len(T1Iline) > 4:
6431 ca.create_line(T1Iline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6432 if len(T2Vline) > 4:
6433 ca.create_line(T2Vline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6434 if len(T2Iline) > 4:
6435 ca.create_line(T2Iline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6436 if len(Tmathline) > 4
and MathTrace.get() > 0:
6437 ca.create_line(Tmathline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6438 if len(TMXline) > 4 :
6439 ca.create_line(TMXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6440 if len(TMYline) > 4 :
6441 ca.create_line(TMYline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6442 if MuxScreenStatus.get() == 1:
6443 if len(TMAVline) > 4:
6444 ca.create_line(TMAVline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6445 if len(TMBVline) > 4:
6446 ca.create_line(TMBVline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6447 if len(TMCVline) > 4:
6448 ca.create_line(TMCVline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6449 if len(TMDVline) > 4:
6450 ca.create_line(TMDVline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6451 if ShowRB_V.get() == 1
and len(TMBRline) > 4:
6452 ca.create_line(TMBRline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6453 if ShowRB_I.get() == 1
and len(TMCRline) > 4:
6454 ca.create_line(TMCRline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6455 if ShowRA_V.get() == 1
and len(T1VRline) > 4:
6456 ca.create_line(T1VRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6457 if ShowRA_I.get() == 1
and len(T1IRline) > 4:
6458 ca.create_line(T1IRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6459 if ShowRB_V.get() == 1
and len(T2VRline) > 4:
6460 ca.create_line(T2VRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6461 if ShowRB_I.get() == 1
and len(T2IRline) > 4:
6462 ca.create_line(T2IRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6463 if ShowMath.get() == 1
and len(TMRline) > 4:
6464 ca.create_line(TMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6468 if session.continuous:
6469 sttxt =
"Running Continuous"
6471 sttxt =
"Running Discontinuous"
6472 if TRACEmodeTime.get() == 1:
6473 sttxt = sttxt +
" Averaging"
6474 if ManualTrigger.get() == 1:
6475 sttxt =
"Manual Trigger"
6476 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
6478 if ScreenTrefresh.get() == 1:
6479 sttxt = sttxt +
" Persistance ON"
6481 de = ca.find_enclosed( X0L-1, Y0T+GRH+12, CANVASwidth, Y0T+GRH+100)
6485 de = ca.find_enclosed( X0L-1, -1, CANVASwidth, 20)
6488 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
6491 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
6494 BoxColor =
"#808080"
6495 if DacScreenStatus.get() == 0
and (DigScreenStatus.get() == 1
or MuxScreenStatus.get() == 1):
6496 if D0.get() == 0
and D4.get() == 0:
6497 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
6499 BoxColor =
"#00ff00"
6501 BoxColor =
"#ff0000"
6502 ca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
6504 ca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
6505 if D1.get() == 0
and D5.get() == 0:
6506 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
6508 BoxColor =
"#00ff00"
6510 BoxColor =
"#ff0000"
6511 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
6513 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
6514 if D2.get() == 0
and D6.get() == 0:
6515 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
6517 BoxColor =
"#00ff00"
6519 BoxColor =
"#ff0000"
6520 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
6522 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
6523 if D3.get() == 0
and D7.get() == 0:
6524 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
6526 BoxColor =
"#00ff00"
6528 BoxColor =
"#ff0000"
6529 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
6531 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
6532 ca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
6536 txt =
' {0:.2f} '.format(vx / 1000.0) +
" S/div"
6537 if vx < 1000
and vx >= 1:
6538 txt =
' {0:.2f} '.format(vx) +
" mS/div"
6540 txt =
' {0:.2f} '.format(vx * 1000.0) +
" uS/div"
6544 txt = txt +
"View at "
6546 txt = txt + str(int(vt / 1000.0)) +
" S "
6547 if abs(vt) < 1000
and abs(vt) >= 1:
6548 txt = txt + str(int(vt)) +
" mS "
6550 txt = txt + str(int(vt * 1000.0)) +
" uS "
6552 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
6554 if ShowC1_V.get() == 1:
6555 if MeasAHW.get() == 1:
6556 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
6557 if MeasALW.get() == 1:
6558 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
6559 if MeasADCy.get() == 1:
6560 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
6561 if MeasAPER.get() == 1:
6562 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
6563 if MeasAFREQ.get() == 1:
6564 txt = txt +
" CA Freq = "
6567 V1String =
' {0:.1f} '.format(ChaF)
6568 txt = txt + str(V1String) +
" Hz "
6569 if ChaF > 1000
and ChaF < 1000000:
6570 V1String =
' {0:.1f} '.format(ChaF/1000)
6571 txt = txt + str(V1String) +
" KHz "
6573 V1String =
' {0:.1f} '.format(ChaF/1000000)
6574 txt = txt + str(V1String) +
" MHz "
6576 if ShowC2_V.get() == 1:
6577 if MeasBHW.get() == 1:
6578 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
6579 if MeasBLW.get() == 1:
6580 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
6581 if MeasBDCy.get() == 1:
6582 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
6583 if MeasBPER.get() == 1:
6584 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
6585 if MeasBFREQ.get() == 1:
6586 txt = txt +
" CB Freq = "
6589 V1String =
' {0:.1f} '.format(ChaF)
6590 txt = txt + str(V1String) +
" Hz "
6591 if ChaF > 1000
and ChaF < 1000000:
6592 V1String =
' {0:.1f} '.format(ChaF/1000)
6593 txt = txt + str(V1String) +
" KHz "
6595 V1String =
' {0:.1f} '.format(ChaF/1000000)
6596 txt = txt + str(V1String) +
" MHz "
6598 if MuxScreenStatus.get() == 0:
6599 if MeasPhase.get() == 1:
6600 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
6601 if MeasDelay.get() == 1:
6602 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
6605 y = Y0T+GRH+int(2.5 *FontSize)
6606 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
6607 if MeasTopV1.get() == 1
or MeasBaseV1.get() == 1
or MeasTopV2.get() == 1
or MeasBaseV2.get() == 1:
6610 if ShowC1_V.get() == 1:
6612 if CHA_RC_HP.get() == 1:
6616 txt = txt + str(CH1pdvRange) +
" V/div"
6617 if MeasDCV1.get() == 1:
6618 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
6619 if MeasMaxV1.get() == 1:
6620 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
6621 if MeasTopV1.get() == 1:
6622 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
6623 if MeasMinV1.get() == 1:
6624 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
6625 if MeasBaseV1.get() == 1:
6626 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
6627 if MeasMidV1.get() == 1:
6628 MidV1 = (MaxV1+MinV1)/2.0
6629 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
6630 if MeasPPV1.get() == 1:
6632 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
6633 if MeasRMSV1.get() == 1:
6634 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
6635 if MeasRMSVA_B.get() == 1:
6636 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
6637 if MeasDiffAB.get() == 1:
6638 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
6639 if MeasUserA.get() == 1:
6641 TempValue = eval(UserAString)
6642 V1String =
' {0:.4f} '.format(TempValue)
6645 txt = txt + UserALabel +
" = " + V1String
6646 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
6648 txt = txt + str(CH1IpdvRange) +
" mA/div"
6649 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
6651 txt = txt + str(CH1IpdvRange) +
" mA/div"
6652 if ShowC1_I.get() == 1:
6653 if MeasDCI1.get() == 1:
6654 V1String =
' {0:.2f} '.format(DCI1)
6655 txt = txt +
" AvgI = " + V1String
6656 if AWGAShape.get() == 0:
6658 Resvalue = (DCV1/DCI1)*1000
6659 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
6661 txt = txt +
" Res = OverRange"
6662 if MeasMaxI1.get() == 1:
6663 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
6664 if MeasMinI1.get() == 1:
6665 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
6666 if MeasMidI1.get() == 1:
6667 MidI1 = (MaxI1+MinI1)/2.0
6668 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
6669 if MeasPPI1.get() == 1:
6671 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
6672 if MeasRMSI1.get() == 1:
6673 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
6676 y = Y0T+GRH+(4*FontSize)
6677 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
6680 if MuxScreenStatus.get() == 1:
6682 if Show_CBA.get() > 0:
6684 elif Show_CBB.get() > 0:
6686 elif Show_CBC.get() > 0:
6688 elif Show_CBD.get() > 0:
6690 if MeasPhase.get() == 1:
6691 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
6692 if MeasDelay.get() == 1:
6693 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
6694 if MeasUserB.get() == 1:
6696 TempValue = eval(UserBString)
6697 V1String =
' {0:.4f} '.format(TempValue)
6700 txt = txt + UserBLabel +
" = " + V1String
6701 if ShowC2_V.get() == 1:
6702 if CHB_RC_HP.get() == 1:
6706 txt = txt + str(CH2pdvRange) +
" V/div"
6707 if MeasDCV2.get() == 1:
6708 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
6709 if MeasMaxV2.get() == 1:
6710 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
6711 if MeasTopV2.get() == 1:
6712 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
6713 if MeasMinV2.get() == 1:
6714 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
6715 if MeasBaseV2.get() == 1:
6716 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
6717 if MeasMidV2.get() == 1:
6718 MidV2 = (MaxV2+MinV2)/2.0
6719 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
6720 if MeasPPV2.get() == 1:
6722 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
6723 if MeasRMSV2.get() == 1:
6724 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
6725 if MeasDiffBA.get() == 1:
6726 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
6727 if MeasUserB.get() == 1:
6729 TempValue = eval(UserBString)
6730 V1String =
' {0:.4f} '.format(TempValue)
6733 txt = txt + UserBLabel +
" = " + V1String
6734 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
6736 txt = txt + str(CH2IpdvRange) +
" mA/div"
6737 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
6739 txt = txt + str(CH2IpdvRange) +
" mA/div"
6740 if ShowC2_I.get() == 1:
6741 if MeasDCI2.get() == 1:
6742 V1String =
' {0:.2f} '.format(DCI2)
6743 txt = txt +
" AvgI = " + V1String
6744 if AWGBShape.get() == 0:
6746 Resvalue = (DCV2/DCI2)*1000
6747 R1String =
' {0:.1f} '.format(Resvalue)
6748 txt = txt +
" Res = " + R1String
6750 txt = txt +
" Res = OverRange"
6751 if MeasMaxI2.get() == 1:
6752 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
6753 if MeasMinI2.get() == 1:
6754 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
6755 if MeasMidI2.get() == 1:
6756 MidI2 = (MaxI2+MinI2)/2.0
6757 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
6758 if MeasPPI2.get() == 1:
6760 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
6761 if MeasRMSI2.get() == 1:
6762 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
6765 y = Y0T+GRH+int(5.5*FontSize)
6766 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
6770 global Tmathline, TMRline, TXYRline
6776 global XYca, MouseX, MouseY, MouseWidget
6777 global ShowXCur, ShowYCur, XCursor, YCursor
6779 global ShowRXY, ShowMath, MathUnits, MathXUnits, MathYUnits
6780 global Xsignal, Ysignal, MathXAxis, MathYAxis
6781 global RUNstatus, SingleShot, ManualTrigger
6794 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry
6795 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7
6796 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5
6797 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5
6798 global CANVASwidthXY, CANVASheightXY
6799 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
6800 global ScreenXYrefresh, SmoothCurves
6801 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
6802 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
6803 global SV1, SI1, SV2, SI2, CHABphase
6804 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
6805 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
6806 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
6807 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
6808 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase
6809 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
6810 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
6811 global AWGAShape, AWGBShape
6812 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6813 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6814 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
6815 global DacScreenStatus, DigScreenStatus
6816 global D0, D1, D2, D3, D4, D5, D6, D7
6817 global DevID, devx, MarkerNum, MarkerScale
6818 global HozPoss, HozPossentry
6819 global HistAsPercent, VBuffA, VBuffB, HBuffA, HBuffB
6820 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
6821 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
6824 Ymax = Y0TXY + GRHXY
6826 InOffA = float(eval(CHAVOffsetEntry.get()))
6828 CHAVOffsetEntry.delete(0,END)
6829 CHAVOffsetEntry.insert(0, InOffA)
6831 InGainA = float(eval(CHAVGainEntry.get()))
6833 CHAVGainEntry.delete(0,END)
6834 CHAVGainEntry.insert(0, InGainA)
6836 InOffB = float(eval(CHBVOffsetEntry.get()))
6838 CHBVOffsetEntry.delete(0,END)
6839 CHBVOffsetEntry.insert(0, InOffB)
6841 InGainB = float(eval(CHBVGainEntry.get()))
6843 CHBVGainEntry.delete(0,END)
6844 CHBVGainEntry.insert(0, InGainB)
6847 CH1pdvRange = float(eval(CHAsbxy.get()))
6849 CHAsbxy.delete(0,END)
6850 CHAsbxy.insert(0, CH1vpdvRange)
6852 CH2pdvRange = float(eval(CHBsbxy.get()))
6854 CHBsbxy.delete(0,END)
6855 CHBsbxy.insert(0, CH2vpdvRange)
6857 CH1IpdvRange = float(eval(CHAIsbxy.get()))
6859 CHAIsbxy.delete(0,END)
6860 CHAIsbxy.insert(0, CH1IpdvRange)
6862 CH2IpdvRange = float(eval(CHBIsbxy.get()))
6864 CHBIsbxy.delete(0,END)
6865 CHBIsbxy.insert(0, CH2IpdvRange)
6868 CHAOffset = float(eval(CHAVPosEntryxy.get()))
6870 CHAVPosEntryxy.delete(0,END)
6871 CHAVPosEntryxy.insert(0, CHAOffset)
6873 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
6875 CHAIPosEntryxy.delete(0,END)
6876 CHAIPosEntryxy.insert(0, CHAIOffset)
6878 CHBOffset = float(eval(CHBVPosEntryxy.get()))
6880 CHBVPosEntry.delete(0,END)
6881 CHBVPosEntry.insert(0, CHBOffset)
6883 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
6885 CHBIPosEntryxy.delete(0,END)
6886 CHBIPosEntryxy.insert(0, CHBIOffset)
6888 if CH1pdvRange < 0.001:
6890 if CH2pdvRange < 0.001:
6892 if CH1IpdvRange < 0.05:
6894 if CH2IpdvRange < 0.05:
6897 if Xsignal.get() == 6:
6898 CHAIOffset = 5 * CH1IpdvRange
6899 if Xsignal.get() == 7:
6900 CHBIOffset = 5 * CH2IpdvRange
6901 if ScreenXYrefresh.get() == 0:
6912 y = Y0TXY + i * GRHXY/10.0
6915 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6920 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
6921 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6925 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6926 if Ysignal.get() == 2
or Xsignal.get() == 6:
6927 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
6928 Iaxis_label = str(round(Iaxis_value, 3))
6929 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"e", font=(
"arial", FontSize ))
6930 elif Ysignal.get() == 4
or Xsignal.get() == 7:
6931 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
6932 Iaxis_label = str(round(Iaxis_value, 3))
6933 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"e", font=(
"arial", FontSize ))
6934 elif Ysignal.get() == 1:
6935 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6936 Vaxis_label = str(round(Vaxis_value, 3))
6937 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
6938 elif Ysignal.get() == 3:
6939 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6940 Vaxis_label = str(round(Vaxis_value, 3))
6941 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6942 elif Ysignal.get() == 5:
6943 TempCOLOR = COLORtrace5
6944 if MathTrace.get() == 2:
6945 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6946 elif MathTrace.get() == 3:
6947 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6949 if MathYAxis ==
"V-A":
6950 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6951 TempCOLOR = COLORtrace1
6952 elif MathYAxis ==
"V-B":
6953 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6954 TempCOLOR = COLORtrace2
6955 elif MathYAxis ==
"I-A":
6956 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
6957 TempCOLOR = COLORtrace3
6958 elif MathYAxis ==
"I-B":
6959 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
6960 TempCOLOR = COLORtrace4
6962 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6963 Vaxis_label = str(round(Vaxis_value, 3))
6964 XYca.create_text(x1-3, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
6974 x = X0LXY + i * GRWXY/10.0
6977 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6982 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
6983 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6986 if Xsignal.get() == 1
or Xsignal.get() == 6:
6987 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
6988 Vaxis_label = str(round(Vaxis_value, 3))
6989 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
6990 elif Xsignal.get() == 3
or Xsignal.get() == 7:
6991 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
6992 Vaxis_label = str(round(Vaxis_value, 3))
6993 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
6994 elif Xsignal.get() == 2:
6995 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
6996 Iaxis_label = str(round(Iaxis_value, 3))
6997 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
6998 elif Xsignal.get() == 4:
6999 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7000 Iaxis_label = str(round(Iaxis_value, 3))
7001 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7002 elif Xsignal.get() == 5:
7003 TempCOLOR = COLORtrace5
7004 if MathTrace.get() == 2:
7005 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7006 elif MathTrace.get() == 3:
7007 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7009 if MathXAxis ==
"V-A":
7010 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7011 TempCOLOR = COLORtrace1
7012 elif MathXAxis ==
"V-B":
7013 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7014 TempCOLOR = COLORtrace2
7015 elif MathXAxis ==
"I-A":
7016 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7017 TempCOLOR = COLORtrace3
7018 elif MathXAxis ==
"I-B":
7019 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7020 TempCOLOR = COLORtrace4
7022 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7023 TempCOLOR = COLORtrace5
7024 Vaxis_label = str(round(Vaxis_value, 3))
7025 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7027 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7028 if Xsignal.get() == 1
or Xsignal.get() == 6:
7029 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7030 Vaxis_label = str(round(Vaxis_value, 3))
7031 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
7032 elif Xsignal.get() == 3
or Xsignal.get() == 7:
7033 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7034 Vaxis_label = str(round(Vaxis_value, 3))
7035 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
7036 elif Xsignal.get() == 2:
7037 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7038 Iaxis_label = str(round(Iaxis_value, 3))
7039 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
7040 elif Xsignal.get() == 4:
7041 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7042 Iaxis_label = str(round(Iaxis_value, 3))
7043 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7044 elif Xsignal.get() == 5:
7045 TempCOLOR = COLORtrace5
7046 if MathTrace.get() == 2:
7047 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7048 elif MathTrace.get() == 3:
7049 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7051 if MathXAxis ==
"V-A":
7052 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7053 TempCOLOR = COLORtrace1
7054 elif MathXAxis ==
"V-B":
7055 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7056 TempCOLOR = COLORtrace2
7057 elif MathXAxis ==
"I-A":
7058 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7059 TempCOLOR = COLORtrace3
7060 elif MathXAxis ==
"I-B":
7061 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7062 TempCOLOR = COLORtrace4
7064 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7065 Vaxis_label = str(round(Vaxis_value, 3))
7066 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7069 if len(TXYline) > 4:
7070 if Xsignal.get() == 1:
7071 XYca.create_line(TXYline, fill=COLORtrace1, width=TRACEwidth.get())
7072 elif Xsignal.get() == 2:
7073 XYca.create_line(TXYline, fill=COLORtrace3, width=TRACEwidth.get())
7074 elif Xsignal.get() == 3:
7075 XYca.create_line(TXYline, fill=COLORtrace2, width=TRACEwidth.get())
7076 elif Xsignal.get() == 4:
7077 XYca.create_line(TXYline, fill=COLORtrace4, width=TRACEwidth.get())
7078 elif Xsignal.get() == 5
or Ysignal.get() == 5:
7079 XYca.create_line(TXYline, fill=COLORtrace5, width=TRACEwidth.get())
7080 if len(TXYRline) > 4
and ShowRXY.get() == 1:
7081 XYca.create_line(TXYRline, fill=COLORtraceR1, width=TRACEwidth.get())
7083 if Xsignal.get() == 6:
7086 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7087 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
7090 c2 = GRWXY / 2.0 + X0LXY
7092 if HistAsPercent == 1:
7093 ylo = float(HBuffA[0][b]) / len(VBuffA)
7097 ylo = int(y1 - (Yconv1 * ylo))
7102 xlo = HBuffA[1][b] - CHAOffset
7103 xlo = int(c2 + Xconv1 * xlo)
7104 Dline = [xlo,y1,xlo,ylo]
7105 XYca.create_line(Dline, fill=COLORtrace1)
7107 if Xsignal.get() == 7:
7110 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7111 Xconv1 = float(GRWXY/10.0) / CH2pdvRange
7113 c2 = GRWXY / 2.0 + X0LXY
7115 if HistAsPercent == 1:
7116 ylo = float(HBuffB[0][b]) / len(VBuffB)
7120 ylo = int(y1 - Yconv1 * ylo)
7125 xlo = HBuffB[1][b] - CHBOffset
7126 xlo = int(c2 + Xconv1 * xlo)
7127 Dline = [xlo,y1,xlo,ylo]
7128 XYca.create_line(Dline, fill=COLORtrace2)
7131 if Xsignal.get() == 1
or Xsignal.get() == 6:
7132 Xconv1 = float(GRWXY/10) / CH1pdvRange
7133 Xoffset1 = CHAOffset
7134 COLORXmarker = COLORtrace1
7136 if Xsignal.get() == 2:
7137 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7138 Xoffset1 = CHAIOffset
7139 COLORXmarker = COLORtrace3
7141 if Xsignal.get() == 3
or Xsignal.get() == 7:
7142 Xconv1 = float(GRWXY/10) / CH2pdvRange
7143 Xoffset1 = CHBOffset
7144 COLORXmarker = COLORtrace2
7146 if Xsignal.get() == 4:
7147 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7148 Xoffset1 = CHBIOffset
7149 COLORmarker = COLORtrace4
7151 if Xsignal.get() == 5:
7152 X_label = MathXUnits
7153 if MathXAxis ==
"V-A":
7154 Xconv1 = float(GRWXY/10) / CH1pdvRange
7155 Xoffset1 = CHAOffset
7156 COLORXmarker = COLORtrace1
7157 elif MathXAxis ==
"V-B":
7158 Xconv1 = float(GRWXY/10) / CH2pdvRange
7159 Xoffset1 = CHBOffset
7160 COLORXmarker = COLORtrace2
7161 elif MathXAxis ==
"I-A":
7162 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7163 Xoffset1 = CHAIOffset
7164 COLORXmarker = COLORtrace3
7165 elif MathXAxis ==
"I-B":
7166 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7167 Xoffset1 = CHBIOffset
7168 COLORXmarker = COLORtrace4
7170 Xconv1 = float(GRWXY/10) / CH1pdvRange
7171 Xoffset1 = CHAOffset
7172 COLORXmarker = COLORtrace1
7174 if Ysignal.get() == 1
or Ysignal.get() == 6:
7175 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7176 Yoffset1 = CHAOffset
7177 COLORYmarker = COLORtrace1
7179 if Ysignal.get() == 2:
7180 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7181 Yoffset1 = CHAIOffset
7182 COLORYmarker = COLORtrace3
7184 if Ysignal.get() == 3
or Ysignal.get() == 7:
7185 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7186 Yoffset1 = CHBOffset
7187 COLORYmarker = COLORtrace2
7189 if Ysignal.get() == 4:
7190 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7191 Yoffset1 = CHBIOffset
7192 COLORYmarker = COLORtrace4
7194 if Ysignal.get() == 5:
7195 Y_label = MathYUnits
7196 if MathYAxis ==
"V-A":
7197 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7198 Yoffset1 = CHAOffset
7199 COLORYmarker = COLORtrace1
7200 elif MathYAxis ==
"V-B":
7201 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7202 Yoffset1 = CHBOffset
7203 COLORYmarker = COLORtrace2
7204 elif MathYAxis ==
"I-A":
7205 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7206 Yoffset1 = CHAIOffset
7207 COLORYmarker = COLORtrace3
7208 elif MathYAxis ==
"I-B":
7209 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7210 Yoffset1 = CHBIOffset
7211 COLORYmarker = COLORtrace4
7213 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7214 Yoffset1 = CHAOffset
7215 COLORYmarker = COLORtrace1
7216 if ShowXCur.get() > 0:
7217 Dline = [XCursor, Y0TXY, XCursor, Y0TXY+GRHXY]
7218 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7219 c1 = GRWXY / 2.0 + X0LXY
7220 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7221 XString =
' {0:.3f} '.format(xvolts)
7222 V_label = XString + X_label
7223 XYca.create_text(XCursor+1, YCursor-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7224 if ShowYCur.get() > 0:
7225 Dline = [X0LXY, YCursor, X0LXY+GRWXY, YCursor]
7226 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7227 c1 = GRHXY / 2.0 + Y0TXY
7228 yvolts = ((YCursor-c1)/Yconv1) - Yoffset1
7229 V1String =
' {0:.3f} '.format(-yvolts)
7230 V_label = V1String + Y_label
7231 XYca.create_text(XCursor+1, YCursor+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7232 if ShowXCur.get() == 0
and ShowYCur.get() == 0
and MouseWidget == XYca:
7233 if MouseX > X0LXY
and MouseX < X0LXY+GRWXY
and MouseY > Y0TXY
and MouseY < Y0TXY+GRHXY:
7234 Dline = [MouseX, Y0TXY, MouseX, Y0TXY+GRHXY]
7235 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7236 c1 = GRWXY / 2.0 + X0LXY
7237 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7238 XString =
' {0:.3f} '.format(xvolts)
7239 V_label = XString + X_label
7240 XYca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7241 Dline = [X0LXY, MouseY, X0LXY+GRWXY, MouseY]
7242 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7243 c1 = GRHXY / 2 + Y0TXY
7244 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7245 V1String =
' {0:.3f} '.format(-yvolts)
7246 V_label = V1String + Y_label
7247 XYca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7252 if TRACEmodeTime.get() == 1:
7253 sttxt = sttxt +
" Averaging"
7254 if ManualTrigger.get() == 1:
7255 sttxt =
"Manual Trigger"
7256 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7258 if ScreenXYrefresh.get() == 1:
7259 sttxt = sttxt +
" Persistance ON"
7261 de = XYca.find_enclosed( X0LXY-1, Y0TXY+GRHXY+19, CANVASwidthXY, Y0TXY+GRHXY+100)
7265 de = XYca.find_enclosed( X0LXY-1, -1, CANVASwidthXY, 20)
7268 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7271 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7274 BoxColor =
"#808080"
7275 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 1 :
7276 if D0.get() == 0
and D4.get() == 0:
7277 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7279 BoxColor =
"#00ff00"
7281 BoxColor =
"#ff0000"
7282 XYca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7284 XYca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7285 if D1.get() == 0
and D5.get() == 0:
7286 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7288 BoxColor =
"#00ff00"
7290 BoxColor =
"#ff0000"
7291 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7293 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7294 if D2.get() == 0
and D6.get() == 0:
7295 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7297 BoxColor =
"#00ff00"
7299 BoxColor =
"#ff0000"
7300 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7302 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7303 if D3.get() == 0
and D7.get() == 0:
7304 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7306 BoxColor =
"#00ff00"
7308 BoxColor =
"#ff0000"
7309 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7311 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7312 XYca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7315 if Xsignal.get() == 1
or Xsignal.get() == 3:
7317 if Xsignal.get() == 1:
7318 if MeasAHW.get() == 1:
7319 txt = txt +
" CA Hi Width = " +
' {0:.2f} '.format(CHAHW) +
" mS "
7320 if MeasALW.get() == 1:
7321 txt = txt +
" CA Lo Width = " +
' {0:.2f} '.format(CHALW) +
" mS "
7322 if MeasADCy.get() == 1:
7323 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
7324 if MeasAPER.get() == 1:
7325 txt = txt +
" CA Period = " +
' {0:.2f} '.format(CHAperiod) +
" mS "
7326 if MeasAFREQ.get() == 1:
7327 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
7328 if Xsignal.get() == 3:
7329 if MeasBHW.get() == 1:
7330 txt = txt +
" CB Hi Width = " +
' {0:.2f} '.format(CHBHW) +
" mS "
7331 if MeasBLW.get() == 1:
7332 txt = txt +
" CB Lo Width = " +
' {0:.2f} '.format(CHBLW) +
" mS "
7333 if MeasBDCy.get() == 1:
7334 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
7335 if MeasBPER.get() == 1:
7336 txt = txt +
" CB Period = " +
' {0:.2f} '.format(CHBperiod) +
" mS "
7337 if MeasBFREQ.get() == 1:
7338 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
7339 if MeasPhase.get() == 1:
7340 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7343 y = Y0TXY+GRHXY+int(2.5*FontSize)
7344 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7346 if Xsignal.get() == 1
or Ysignal.get() == 1
or Xsignal.get() == 6:
7349 txt = txt + str(CH1pdvRange) +
" V/div"
7350 if MeasDCV1.get() == 1:
7351 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
7352 if MeasMaxV1.get() == 1:
7353 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
7354 if MeasTopV1.get() == 1:
7355 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
7356 if MeasMinV1.get() == 1:
7357 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
7358 if MeasBaseV1.get() == 1:
7359 txt = txt +
" Top = " +
' {0:.4f} '.format(VABase)
7360 if MeasMidV1.get() == 1:
7361 MidV1 = (MaxV1+MinV1)/2
7362 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
7363 if MeasPPV1.get() == 1:
7365 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
7366 if MeasRMSV1.get() == 1:
7367 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
7368 if MeasUserA.get() == 1:
7370 TempValue = eval(UserAString)
7371 V1String =
' {0:.4f} '.format(TempValue)
7374 txt = txt + UserALabel +
" = " + V1String
7375 if Xsignal.get() == 2:
7377 txt = txt + str(CH1IpdvRange) +
" mA/div"
7378 elif (Xsignal.get() == 2):
7380 txt = txt + str(CH1IpdvRange) +
" mA/div"
7381 if Xsignal.get() == 2
or Ysignal.get() == 2:
7382 if MeasDCI1.get() == 1:
7383 V1String =
' {0:.2f} '.format(DCI1)
7384 txt = txt +
" AvgI = " + V1String
7385 if AWGAShape.get() == 0:
7387 Resvalue = (DCV1/DCI1)*1000
7388 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7390 txt = txt +
" Res = OverRange"
7391 if MeasMaxI1.get() == 1:
7392 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
7393 if MeasMinI1.get() == 1:
7394 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
7395 if MeasMidI1.get() == 1:
7396 MidI1 = (MaxI1+MinI1)/2
7397 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
7398 if MeasPPI1.get() == 1:
7400 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
7401 if MeasRMSI1.get() == 1:
7402 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
7405 y = Y0TXY+GRHXY+int(4*FontSize)
7406 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7409 if Xsignal.get() == 3
or Ysignal.get() == 3
or Xsignal.get() == 7:
7411 txt = txt + str(CH2pdvRange) +
" V/div"
7412 if MeasDCV2.get() == 1:
7413 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
7414 if MeasMaxV2.get() == 1:
7415 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
7416 if MeasTopV2.get() == 1:
7417 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
7418 if MeasMinV2.get() == 1:
7419 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
7420 if MeasBaseV2.get() == 1:
7421 txt = txt +
" Top = " +
' {0:.4f} '.format(VBBase)
7422 if MeasMidV2.get() == 1:
7423 MidV2 = (MaxV2+MinV2)/2
7424 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
7425 if MeasPPV2.get() == 1:
7427 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
7428 if MeasRMSV2.get() == 1:
7429 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
7430 if MeasUserB.get() == 1:
7432 TempValue = eval(UserBString)
7433 V1String =
' {0:.4f} '.format(TempValue)
7436 txt = txt + UserBLabel +
" = " + V1String
7437 if Xsignal.get() == 4:
7439 txt = txt + str(CH2IpdvRange) +
" mA/div"
7440 elif Xsignal.get() == 4:
7442 txt = txt + str(CH2IpdvRange) +
" mA/div"
7443 if Xsignal.get() == 4
or Ysignal.get() == 4:
7444 if MeasDCI2.get() == 1:
7445 V1String =
' {0:.2f} '.format(DCI2)
7446 txt = txt +
" AvgI = " + V1String
7447 if AWGBShape.get() == 0:
7449 Resvalue = (DCV2/DCI2)*1000
7450 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7452 txt = txt +
" Res = OverRange"
7453 if MeasMaxI2.get() == 1:
7454 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
7455 if MeasMinI2.get() == 1:
7456 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
7457 if MeasMidI2.get() == 1:
7458 MidI2 = (MaxI2+MinI2)/2
7459 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
7460 if MeasPPI2.get() == 1:
7462 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
7463 if MeasRMSI2.get() == 1:
7464 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
7467 y = Y0TXY+GRHXY+int(5.5 * FontSize)
7468 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7471 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7473 if MarkerScale.get() != 1:
7475 CHAlab.config(style=
"Rtrace1.TButton")
7476 CHBlab.config(style=
"Strace2.TButton")
7477 CHAIlab.config(style=
"Strace3.TButton")
7478 CHBIlab.config(style=
"Strace4.TButton")
7483 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7485 if MarkerScale.get() != 3:
7487 CHAlab.config(style=
"Strace1.TButton")
7488 CHBlab.config(style=
"Strace2.TButton")
7489 CHAIlab.config(style=
"Rtrace3.TButton")
7490 CHBIlab.config(style=
"Strace4.TButton")
7495 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7497 if MarkerScale.get() != 2:
7499 CHAlab.config(style=
"Strace1.TButton")
7500 CHBlab.config(style=
"Rtrace2.TButton")
7501 CHAIlab.config(style=
"Strace3.TButton")
7502 CHBIlab.config(style=
"Strace4.TButton")
7507 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7509 if MarkerScale.get() != 3:
7511 CHAlab.config(style=
"Strace1.TButton")
7512 CHBlab.config(style=
"Strace2.TButton")
7513 CHAIlab.config(style=
"Strace3.TButton")
7514 CHBIlab.config(style=
"Rtrace4.TButton")
7519 global MarkerXYScale, CHAxylab, CHBxylab
7521 MarkerXYScale.set(1)
7522 CHAxylab.config(style=
"Rtrace1.TButton")
7523 CHBxylab.config(style=
"Strace2.TButton")
7526 global MarkerXYScale, CHAxylab, CHBxylab
7528 MarkerXYScale.set(2)
7529 CHBxylab.config(style=
"Rtrace2.TButton")
7530 CHAxylab.config(style=
"Strace1.TButton")
7533 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
7537 if RUNstatus.get() == 0:
7539 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
7542 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
7543 if event.widget == ca:
7544 if ShowTCur.get() > 0
or ShowVCur.get() > 0:
7545 ShiftKeyDwn = event.state & 1
7546 if ShowTCur.get() > 0
and ShiftKeyDwn == 0:
7547 TCursor = TCursor + event.delta/100
7548 elif ShowVCur.get() > 0
or ShiftKeyDwn == 1:
7549 VCursor = VCursor - event.delta/100
7555 if RUNstatus.get() == 0:
7559 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca, Bodeca
7561 shift_key = event.state & 1
7562 if event.widget == ca:
7563 if ShowVCur.get() > 0
and shift_key == 0:
7564 VCursor = VCursor - 1
7565 elif ShowVCur.get() > 0
and shift_key == 1:
7566 VCursor = VCursor - 5
7567 if RUNstatus.get() == 0:
7570 if event.widget == XYca:
7571 if ShowYCur.get() > 0
and shift_key == 0:
7572 YCursor = YCursor - 1
7573 elif ShowYCur.get() > 0
and shift_key == 1:
7574 YCursor = YCursor - 5
7575 if RUNstatus.get() == 0:
7580 if event.widget == Freqca:
7581 if ShowdBCur.get() > 0
and shift_key == 0:
7582 dBCursor = dBCursor - 1
7583 elif ShowdBCur.get() > 0
and shift_key == 1:
7584 dBCursor = dBCursor - 5
7585 if RUNstatus.get() == 0:
7590 if event.widget == Bodeca:
7591 if ShowBdBCur.get() > 0
and shift_key == 0:
7592 BdBCursor = BdBCursor - 1
7593 elif ShowBdBCur.get() > 0
and shift_key == 1:
7594 BdBCursor = BdBCursor - 5
7595 if RUNstatus.get() == 0:
7601 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca
7603 shift_key = event.state & 1
7604 if event.widget == ca:
7605 if ShowVCur.get() > 0
and shift_key == 0:
7606 VCursor = VCursor + 1
7607 elif ShowVCur.get() > 0
and shift_key == 1:
7608 VCursor = VCursor + 5
7609 if RUNstatus.get() == 0:
7612 if event.widget == XYca:
7613 if ShowYCur.get() > 0
and shift_key == 0:
7614 YCursor = YCursor + 1
7615 elif ShowYCur.get() > 0
and shift_key == 1:
7616 YCursor = YCursor + 5
7617 if RUNstatus.get() == 0:
7622 if event.widget == Freqca:
7623 if ShowdBCur.get() > 0
and shift_key == 0:
7624 dBCursor = dBCursor + 1
7625 elif ShowdBCur.get() > 0
and shift_key == 1:
7626 dBCursor = dBCursor + 5
7627 if RUNstatus.get() == 0:
7632 if event.widget == Bodeca:
7633 if ShowBdBCur.get() > 0
and shift_key == 0:
7634 BdBCursor = BdBCursor + 1
7635 elif ShowBdBCur.get() > 0
and shift_key == 1:
7636 BdBCursor = BdBCursor + 5
7637 if RUNstatus.get() == 0:
7643 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
7645 shift_key = event.state & 1
7646 if event.widget == ca:
7647 if ShowTCur.get() > 0
and shift_key == 0:
7648 TCursor = TCursor - 1
7649 elif ShowTCur.get() > 0
and shift_key == 1:
7650 TCursor = TCursor - 5
7651 if RUNstatus.get() == 0:
7654 if event.widget == XYca:
7655 if ShowXCur.get() > 0
and shift_key == 0:
7656 XCursor = XCursor - 1
7657 elif ShowXCur.get() > 0
and shift_key == 1:
7658 XCursor = XCursor - 5
7659 if RUNstatus.get() == 0:
7664 if event.widget == Freqca:
7665 if ShowFCur.get() > 0
and shift_key == 0:
7666 FCursor = FCursor - 1
7667 elif ShowFCur.get() > 0
and shift_key == 1:
7668 FCursor = FCursor - 5
7669 if RUNstatus.get() == 0:
7674 if event.widget == Bodeca:
7675 if ShowBPCur.get() > 0
and shift_key == 0:
7676 BPCursor = BPCursor - 1
7677 elif ShowBPCur.get() > 0
and shift_key == 1:
7678 BPCursor = BPCursor - 5
7679 if RUNstatus.get() == 0:
7685 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
7687 shift_key = event.state & 1
7688 if event.widget == ca:
7689 if ShowTCur.get() > 0
and shift_key == 0:
7690 TCursor = TCursor + 1
7691 elif ShowTCur.get() > 0
and shift_key == 1:
7692 TCursor = TCursor + 5
7693 if RUNstatus.get() == 0:
7696 if event.widget == XYca:
7697 if ShowXCur.get() > 0
and shift_key == 0:
7698 XCursor = XCursor + 1
7699 elif ShowXCur.get() > 0
and shift_key == 1:
7700 XCursor = XCursor + 5
7701 if RUNstatus.get() == 0:
7706 if event.widget == Freqca:
7707 if ShowFCur.get() > 0
and shift_key == 0:
7708 FCursor = FCursor + 1
7709 elif ShowFCur.get() > 0
and shift_key == 1:
7710 FCursor = FCursor + 5
7711 if RUNstatus.get() == 0:
7716 if event.widget == Bodeca:
7717 if ShowBPCur.get() > 0
and shift_key == 0:
7718 BPCursor = BPCursor + 1
7719 elif ShowBPCur.get() > 0
and shift_key == 1:
7720 BPCursor = BPCursor + 5
7721 if RUNstatus.get() == 0:
7727 global RUNstatus, ca, XYca, Freqca, Bodeca, IAca
7729 if event.widget == ca:
7730 if RUNstatus.get() == 0:
7732 elif RUNstatus.get() > 0:
7735 if event.widget == XYca:
7736 if RUNstatus.get() == 0:
7738 elif RUNstatus.get() > 0:
7743 if event.widget == IAca:
7744 if RUNstatus.get() == 0:
7746 elif RUNstatus.get() > 0:
7751 if event.widget == Freqca:
7752 if RUNstatus.get() == 0:
7754 elif RUNstatus.get() > 0:
7759 if event.widget == Bodeca:
7760 if RUNstatus.get() == 0:
7762 elif RUNstatus.get() > 0:
7773 global ca, MarkerLoc, Mulx
7774 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
7775 global TMsb, CHAsb, CHBsb, CHAIsb, CHBIsb, MarkerScale
7776 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
7777 global SAMPLErate, RUNstatus, MarkerNum, PrevV, PrevT
7778 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
7779 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
7780 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
7781 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
7782 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
7783 global MeasGateLeft, MeasGateRight, MeasGateStatus, MeasGateNum, TMsb, SAMPLErate
7786 HoldOff = float(eval(HoldOffentry.get()))
7790 HoldOffentry.delete(0,END)
7791 HoldOffentry.insert(0, HoldOff)
7794 TIMEdiv = float(eval(TMsb.get()))
7797 TMsb.delete(0,
"end")
7798 TMsb.insert(0,TIMEdiv)
7800 if TIMEdiv < 0.0002:
7803 if (RUNstatus.get() == 0):
7804 MarkerNum = MarkerNum + 1
7807 CH1pdvRange = float(eval(CHAsb.get()))
7810 CHAsb.insert(0, CH1vpdvRange)
7812 CH2pdvRange = float(eval(CHBsb.get()))
7815 CHBsb.insert(0, CH2vpdvRange)
7817 CH1IpdvRange = float(eval(CHAIsb.get()))
7819 CHAIsb.delete(0,END)
7820 CHAIsb.insert(0, CH1IpdvRange)
7822 CH2IpdvRange = float(eval(CHBIsb.get()))
7824 CHBIsb.delete(0,END)
7825 CHBIsb.insert(0, CH2IpdvRange)
7828 CHAOffset = float(eval(CHAVPosEntry.get()))
7830 CHAVPosEntry.delete(0,END)
7831 CHAVPosEntry.insert(0, CHAOffset)
7833 CHAIOffset = float(eval(CHAIPosEntry.get()))
7835 CHAIPosEntry.delete(0,END)
7836 CHAIPosEntry.insert(0, CHAIOffset)
7838 CHBOffset = float(eval(CHBVPosEntry.get()))
7840 CHBVPosEntry.delete(0,END)
7841 CHBVPosEntry.insert(0, CHBOffset)
7843 CHBIOffset = float(eval(CHBIPosEntry.get()))
7845 CHBIPosEntry.delete(0,END)
7846 CHBIPosEntry.insert(0, CHBIOffset)
7848 if CH1pdvRange < 0.001:
7850 if CH2pdvRange < 0.001:
7852 if CH1IpdvRange < 1.0:
7854 if CH2IpdvRange < 1.0:
7857 if MuxScreenStatus.get() == 1:
7859 CHMApdvRange = float(eval(CHB_Asb.get()))
7861 CHB_Asb.delete(0,END)
7862 CHB_Asb.insert(0, CHMApdvRange)
7864 CHMBpdvRange = float(eval(CHB_Bsb.get()))
7866 CHB_Bsb.delete(0,END)
7867 CHB_Bsb.insert(0, CHMBpdvRange)
7869 CHMCpdvRange = float(eval(CHB_Csb.get()))
7871 CHB_Csb.delete(0,END)
7872 CHB_Csb.insert(0, CHMCpdvRange)
7874 CHMDpdvRange = float(eval(CHB_Dsb.get()))
7876 CHB_Dsb.delete(0,END)
7877 CHB_Dsb.insert(0, CHMDpdvRange)
7878 YconvMA = float(GRH/10.0) / CHMApdvRange
7879 YconvMB = float(GRH/10.0) / CHMBpdvRange
7880 YconvMC = float(GRH/10.0) / CHMCpdvRange
7881 YconvMD = float(GRH/10.0) / CHMDpdvRange
7883 CHBAOffset = float(eval(CHB_APosEntry.get()))
7885 CHB_APosEntry.delete(0,END)
7886 CHB_APosEntry.insert(0, CHBAOffset)
7888 CHBBOffset = float(eval(CHB_BPosEntry.get()))
7890 CHB_BPosEntry.delete(0,END)
7891 CHB_BPosEntry.insert(0, CHBBOffset)
7893 CHBCOffset = float(eval(CHB_CPosEntry.get()))
7895 CHB_CPosEntry.delete(0,END)
7896 CHB_CPosEntry.insert(0, CHBCOffset)
7898 CHBDOffset = float(eval(CHB_DPosEntry.get()))
7900 CHB_DPosEntry.delete(0,END)
7901 CHB_DPosEntry.insert(0, CHBDOffset)
7902 Yoffset1 = CHAOffset
7903 if MarkerScale.get() == 1:
7904 Yconv1 = float(GRH/10.0) / CH1pdvRange
7905 Yoffset1 = CHAOffset
7906 COLORmarker = COLORtrace1
7908 elif MarkerScale.get() == 2:
7909 Yconv1 = float(GRH/10.0) / CH2pdvRange
7910 Yoffset1 = CHBOffset
7911 COLORmarker = COLORtrace2
7913 elif MarkerScale.get() == 3:
7914 Yconv1 = float(GRH/10.0) / CH1IpdvRange
7915 Yoffset1 = CHAIOffset
7916 COLORmarker = COLORtrace3
7918 elif MarkerScale.get() == 4:
7919 Yconv1 = float(GRH/10.0) / CH2IpdvRange
7920 Yoffset1 = CHBIOffset
7921 COLORmarker = COLORtrace4
7924 elif MarkerScale.get() == 5:
7925 Yconv1 = float(GRH/10.0) / CHMApdvRange
7926 Yoffset1 = CHBAOffset
7927 COLORmarker = COLORtrace2
7929 elif MarkerScale.get() == 6:
7930 Yconv1 = float(GRH/10.0) / CHMBpdvRange
7931 Yoffset1 = CHBBOffset
7932 COLORmarker = COLORtrace6
7934 elif MarkerScale.get() == 7:
7935 Yconv1 = float(GRH/10.0) / CHMCpdvRange
7936 Yoffset1 = CHBCOffset
7937 COLORmarker = COLORtrace7
7939 elif MarkerScale.get() == 8:
7940 Yconv1 = float(GRH/10.0) / CHMDpdvRange
7941 Yoffset1 = CHBDOffset
7942 COLORmarker = COLORtrace4
7945 Yconv1 = float(GRH/10.0) / CH1pdvRange
7946 Yoffset1 = CHAOffset
7947 COLORmarker = COLORtrace1
7950 c1 = GRH / 2.0 + Y0T
7951 xc1 = GRW / 2.0 + X0L
7952 c2 = GRH / 2.0 + Y0T
7954 ca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
7955 ca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
7956 DISsamples = (10.0 * TIMEdiv)
7957 Tstep = DISsamples / GRW
7958 Tpoint = ((event.x-X0L) * Tstep) + HoldOff
7960 Tpoint = Tpoint/Mulx
7962 axis_value = Tpoint / 1000.0
7963 TString =
' {0:.2f} '.format(axis_value) +
" S "
7964 if Tpoint < 1000
and Tpoint >= 1:
7966 TString =
' {0:.2f} '.format(axis_value) +
" mS "
7968 axis_value = Tpoint * 1000.0
7969 TString =
' {0:.2f} '.format(axis_value) +
" uS "
7971 yvolts = ((event.y-c1)/Yconv1) - Yoffset1
7972 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
7973 V1String =
' {0:.3f} '.format(-yvolts)
7975 V1String =
' {0:.1f} '.format(-yvolts)
7976 V_label = str(MarkerNum) +
" " + TString + V1String
7977 V_label = V_label + Units
7979 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
7980 DeltaV =
' {0:.3f} '.format(PrevV-yvolts)
7982 DeltaV =
' {0:.1f} '.format(PrevV-yvolts)
7985 axis_value = DT / 1000.0
7986 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
7987 if Tpoint < 1000
and Tpoint >= 1:
7989 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
7991 axis_value = DT * 1000.0
7992 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
7994 DFreq =
' {0:.3f} '.format(1.0/(Tpoint-PrevT))
7995 V_label = V_label +
" Delta " + DeltaT + DeltaV
7996 V_label = V_label + Units
7997 V_label = V_label +
", Freq " + DFreq +
" KHz"
8000 y = Y0T + 3 + (MarkerNum*10)
8002 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
8004 y = Y0T + 3 + (MarkerNum*10)
8006 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
8008 y = Y0T + GRH + 3 - (MarkerNum*10)
8010 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
8012 y = Y0T + GRH + 3 - (MarkerNum*10)
8014 ca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=Justify, font=(
"arial", FontSize ))
8015 ca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
8019 if MeasGateStatus.get() == 1:
8020 DISsamples = (10.0 * TIMEdiv)
8021 Tstep = DISsamples / GRW
8022 if MeasGateNum == 0:
8023 MeasGateLeft = ((event.x-X0L) * Tstep)
8026 MeasGateRight = ((event.x-X0L) * Tstep)
8028 LeftGate = X0L + MeasGateLeft / Tstep
8029 RightGate = X0L + MeasGateRight / Tstep
8030 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, fill=COLORtext)
8031 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, fill=COLORtext)
8037 if ShowC1_V.get() == 0:
8045 if ShowC2_V.get() == 0:
8053 if ShowC1_I.get() == 0:
8061 if ShowC2_I.get() == 0:
8111 global TRACEmodeTime
8113 if TRACEmodeTime.get() == 0:
8114 TRACEmodeTime.set(1)
8116 TRACEmodeTime.set(0)
8121 if ShowTCur.get() == 0:
8129 if ShowVCur.get() == 0:
8135 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus, XYca
8139 if RUNstatus.get() == 0:
8141 XYca.bind_all(
'<MouseWheel>', onCanvasXYScrollClick)
8144 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus
8145 if event.widget == XYca:
8146 if ShowXCur.get() > 0
or ShowYCur.get() > 0:
8147 ShiftKeyDwn = event.state & 1
8148 if ShowXCur.get() > 0
and ShiftKeyDwn == 0:
8149 XCursor = XCursor + event.delta/100
8150 elif ShowYCur.get() > 0
or ShiftKeyDwn == 1:
8151 YCursor = YCursor - event.delta/100
8152 if RUNstatus.get() == 0:
8162 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
8163 global TMsb, CHAsbxy, CHBsbxy, CHAIsbxy, CHBIsbxy, MarkerScale
8164 global CHAVPosEntryxy, CHAIPosEntryxy, CHBVPosEntryxy, CHBIPosEntryxy
8165 global SAMPLErate, RUNstatus, MarkerNum, PrevX, PrevY
8166 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
8167 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
8168 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
8171 if (RUNstatus.get() == 0):
8172 MarkerNum = MarkerNum + 1
8174 CH1pdvRange = float(eval(CHAsbxy.get()))
8176 CHAsbxy.delete(0,END)
8177 CHAsbxy.insert(0, CH1vpdvRange)
8179 CH2pdvRange = float(eval(CHBsbxy.get()))
8182 CHBsb.insert(0, CH2vpdvRange)
8184 CH1IpdvRange = float(eval(CHAIsbxy.get()))
8186 CHAIsbxy.delete(0,END)
8187 CHAIsbxy.insert(0, CH1IpdvRange)
8189 CH2IpdvRange = float(eval(CHBIsbxy.get()))
8191 CHBIsbxy.delete(0,END)
8192 CHBIsbxy.insert(0, CH2IpdvRange)
8195 CHAOffset = float(eval(CHAVPosEntryxy.get()))
8197 CHAVPosEntryxy.delete(0,END)
8198 CHAVPosEntryxy.insert(0, CHAOffset)
8200 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
8202 CHAIPosEntryxy.delete(0,END)
8203 CHAIPosEntryxy.insert(0, CHAIOffset)
8205 CHBOffset = float(eval(CHBVPosEntryxy.get()))
8207 CHBVPosEntryxy.delete(0,END)
8208 CHBVPosEntryxy.insert(0, CHBOffset)
8210 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
8212 CHBIPosEntryxy.delete(0,END)
8213 CHBIPosEntryxy.insert(0, CHBIOffset)
8215 if CH1pdvRange < 0.001:
8217 if CH2pdvRange < 0.001:
8219 if CH1IpdvRange < 1.0:
8221 if CH2IpdvRange < 1.0:
8224 HoldOff = float(eval(HoldOffentry.get()))
8228 HoldOffentry.delete(0,END)
8229 HoldOffentry.insert(0, HoldOff)
8231 Yconv1 = float(GRHXY/10) / CH1pdvRange
8232 Xconv1 = float(GRWXY/10) / CH1pdvRange
8233 Yconv2 = float(GRHXY/10) / CH2pdvRange
8234 Xconv2 = float(GRWXY/10) / CH2pdvRange
8237 COLORmarker = COLORtext
8238 Yoffset1 = CHAOffset
8239 c1 = GRHXY / 2 + Y0TXY
8240 xc1 = GRWXY / 2 + X0LXY
8241 c2 = GRHXY / 2 + Y0TXY
8243 XYca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
8244 XYca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
8245 XYca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8246 if (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==3
or Ysignal.get()==5):
8247 yvolts = ((event.y-c2)/Yconv2) - CHBOffset
8248 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
8249 VyString =
' {0:.3f} '.format(-yvolts)
8250 VxString =
' {0:.3f} '.format(-xvolts)
8251 V_label = str(MarkerNum) +
" " + VxString +
" V, " + VyString +
" V"
8253 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8254 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8255 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8257 y = Y0TXY + 3 + (MarkerNum*10)
8258 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8261 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==1
or Ysignal.get()==5):
8262 yvolts = ((event.y-c1)/Yconv1) - CHAOffset
8263 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
8264 VyString =
' {0:.3f} '.format(-yvolts)
8265 VxString =
' {0:.3f} '.format(-xvolts)
8266 V_label = str(MarkerNum) +
" " + VxString +
" V, " + VyString +
" V"
8268 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8269 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8270 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8272 y = Y0TXY + 3 + (MarkerNum*10)
8273 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8282 OutArray = numpy.array(OutArray)
8283 InArray = numpy.array(InArray)
8284 EndIndex = len(InArray)
8286 while StartIndex < WrFactor:
8287 OutArray = numpy.concatenate((OutArray, InArray[StartIndex:EndIndex:WrFactor]), axis=0)
8288 StartIndex = StartIndex + 1
8296 InArray = numpy.array(InArray)
8297 EndIndex = int(len(InArray)/WrFactor)
8299 while StartIndex < EndIndex:
8301 while LoopIndex < WrFactor:
8302 OutArray.append(InArray[StartIndex+LoopIndex])
8303 LoopIndex = LoopIndex + 1
8304 StartIndex = StartIndex + 1
8305 OutArray = numpy.array(OutArray)
8313 wavfile = wave.open(filename,
"w")
8316 framerate = SAMPLErate
8320 compname =
"not compressed"
8321 wavfile.setparams((nchannels,
8328 ArrN = numpy.array(data)
8329 ArrN /= numpy.max(numpy.abs(data))
8332 mul = int(s * amplitude)
8334 frames.append(struct.pack(
'h', mul))
8336 frames =
''.join(frames)
8338 for x
in xrange(0, repeat):
8340 wavfile.writeframes(frames)
8345 global AWGAAmplEntry, AWGAAmplvalue, AWGAMode, AWG_Amp_Mode
8348 AWGAAmplvalue = float(eval(AWGAAmplEntry.get()))
8350 AWGAAmplEntry.delete(0,
"end")
8351 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8353 if AWG_Amp_Mode.get() == 0:
8354 if AWGAMode.get() == 0:
8355 if AWGAAmplvalue > 5.00:
8356 AWGAAmplvalue = 5.00
8357 AWGAAmplEntry.delete(0,
"end")
8358 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8359 if AWGAAmplvalue < 0.00:
8360 AWGAAmplvalue = 0.00
8361 AWGAAmplEntry.delete(0,
"end")
8362 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8363 elif AWG_Amp_Mode.get() == 1:
8364 if AWGAMode.get() == 0:
8365 if AWGAAmplvalue > 2.5:
8367 AWGAAmplEntry.delete(0,
"end")
8368 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8369 if AWGAAmplvalue < -2.50:
8370 AWGAAmplvalue = -2.50
8371 AWGAAmplEntry.delete(0,
"end")
8372 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8373 if AWGAMode.get() == 1:
8374 if AWGAAmplvalue > 200.00:
8375 AWGAAmplvalue = 200.00
8376 AWGAAmplEntry.delete(0,
"end")
8377 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8378 if AWGAAmplvalue < -200.00:
8379 AWGAAmplvalue = -200.00
8380 AWGAAmplEntry.delete(0,
"end")
8381 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8384 global AWGAOffsetEntry, AWGAOffsetvalue, AWGAMode, AWG_Amp_Mode
8387 AWGAOffsetvalue = float(eval(AWGAOffsetEntry.get()))
8389 AWGAOffsetEntry.delete(0,
"end")
8390 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8391 if AWGAMode.get() == 0:
8392 if AWGAOffsetvalue > 5.00:
8393 AWGAOffsetvalue = 5.00
8394 AWGAOffsetEntry.delete(0,
"end")
8395 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8396 if AWGAOffsetvalue < 0.00:
8397 AWGAOffsetvalue = 0.00
8398 AWGAOffsetEntry.delete(0,
"end")
8399 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8400 if AWGAMode.get() == 1:
8401 if AWGAOffsetvalue > 200.00:
8402 AWGAOffsetvalue = 200.00
8403 AWGAOffsetEntry.delete(0,
"end")
8404 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8405 if AWGAOffsetvalue < -200.00:
8406 AWGAOffsetvalue = -200.00
8407 AWGAOffsetEntry.delete(0,
"end")
8408 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8411 global AWGAFreqEntry, AWGAFreqvalue, AWG_2X
8412 global BodeScreenStatus, BodeDisp
8415 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
8417 AWGAFreqEntry.delete(0,
"end")
8418 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8419 if AWG_2X.get() == 1:
8420 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
8421 if AWGAFreqvalue > 90000:
8422 AWGAFreqvalue = 90000
8423 AWGAFreqEntry.delete(0,
"end")
8424 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8426 if AWGAFreqvalue > 50000:
8427 AWGAFreqvalue = 50000
8428 AWGAFreqEntry.delete(0,
"end")
8429 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8431 if AWGAFreqvalue > 25000:
8432 AWGAFreqvalue = 25000
8433 AWGAFreqEntry.delete(0,
"end")
8434 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8435 if AWGAFreqvalue < 0:
8437 AWGAFreqEntry.delete(0,
"end")
8438 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8442 global AWGAPhaseDelay, phasealab, awgaph, awgadel
8444 if AWGAPhaseDelay.get() == 0:
8445 phasealab.configure(text=
"Deg")
8446 awgaph.configure(style=
"WPhase.TRadiobutton")
8447 awgadel.configure(style=
"GPhase.TRadiobutton")
8448 elif AWGAPhaseDelay.get() == 1:
8449 phasealab.configure(text=
"mSec")
8450 awgaph.configure(style=
"GPhase.TRadiobutton")
8451 awgadel.configure(style=
"WPhase.TRadiobutton")
8454 global AWGAPhaseEntry, AWGAPhasevalue
8457 AWGAPhasevalue = float(eval(AWGAPhaseEntry.get()))
8459 AWGAPhaseEntry.delete(0,
"end")
8460 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8462 if AWGAPhasevalue > 360:
8463 AWGAPhasevalue = 360
8464 AWGAPhaseEntry.delete(0,
"end")
8465 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8466 if AWGAPhasevalue < 0:
8468 AWGAPhaseEntry.delete(0,
"end")
8469 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8472 global AWGADutyCycleEntry, AWGADutyCyclevalue
8475 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))/100
8477 AWGADutyCycleEntry.delete(0,
"end")
8478 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
8480 if AWGADutyCyclevalue > 1:
8481 AWGADutyCyclevalue = 1
8482 AWGADutyCycleEntry.delete(0,
"end")
8483 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue*100)
8484 if AWGADutyCyclevalue < 0:
8485 AWGADutyCyclevalue = 0
8486 AWGADutyCycleEntry.delete(0,
"end")
8487 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
8491 global AWGAShape, AWGAWave, phasealab, duty1lab
8493 if AWGAShape.get() == 0:
8495 duty1lab.config(text=
"%")
8497 if AWGAShape.get() == 1:
8499 duty1lab.config(text=
"%")
8501 if AWGAShape.get() == 2:
8502 AWGAWave =
'triangle'
8503 duty1lab.config(text=
"%")
8505 if AWGAShape.get() == 3:
8506 AWGAWave =
'sawtooth'
8507 duty1lab.config(text=
"%")
8509 if AWGAShape.get() == 4:
8511 duty1lab.config(text=
"%")
8513 if AWGAShape.get() == 5:
8514 AWGAWave =
'stairstep'
8515 duty1lab.config(text=
"%")
8517 if AWGAShape.get() > 5:
8518 AWGAWave =
'arbitrary'
8522 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X
8525 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
8527 CSVFile = open(filename)
8531 csv_f = csv.reader(CSVFile, csv.excel)
8533 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
8541 if len(row) > 1
and ColumnSel == 0:
8542 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
8543 ColumnNum = int(RequestColumn) - 1
8544 ColumnLen = str(len(row))
8549 if colnum == ColumnNum:
8550 AWGAwaveform.append(float(col))
8553 print(
'skipping non-numeric row', RowNum)
8555 AWGAwaveform = numpy.array(AWGAwaveform)
8557 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8563 global AWG_2X, AWGA2X, AWGAwaveform
8565 if AWG_2X.get() == 1:
8568 AWGA2X = AWGAwaveform[1::2]
8569 Tempwaveform = AWGAwaveform[::2]
8570 AWGAwaveform = Tempwaveform
8573 global AWGABurstFlag, AWGACycles, AWGABurstDelay
8575 if AWGABurstFlag.get() == 1:
8576 AWGACyclesString = askstring(
"AWG A Burst Mode",
"Current number of cycles " + str(AWGACycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGACycles), parent=awgwindow)
8577 if (AWGACyclesString ==
None):
8579 AWGACycles = int(AWGACyclesString)
8580 AWGADelayString = askstring(
"AWG A Burst Mode",
"Current Burst delay " + str(AWGABurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGABurstDelay), parent=awgwindow)
8581 if (AWGADelayString ==
None):
8583 AWGABurstDelay = float(AWGADelayString)
8587 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
8588 global AWG_2X, AWGA2X
8591 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
8593 spf = wave.open(filename,
'r')
8595 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
8598 Length = spf.getnframes()
8602 if spf.getnchannels() == 2:
8603 showwarning(
"Split Stereo",
"Left to AWGA Right to AWGB", parent=awgwindow)
8604 signal = spf.readframes(Length)
8605 Stereo = numpy.fromstring(signal,
'Int16')
8608 AWGAwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
8610 AWGBwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
8612 AWGAwaveform = numpy.array(AWGAwaveform)
8613 AWGBwaveform = numpy.array(AWGBwaveform)
8614 AWGALength.config(text =
"L = " + str(len(AWGAwaveform)))
8615 AWGBLength.config(text =
"L = " + str(len(AWGBwaveform)))
8616 AWGBShape.set(AWGAShape.get())
8619 signal = spf.readframes(Length)
8620 WAVsignal = numpy.fromstring(signal,
'Int16')
8622 AWGAwaveform = (WAVsignal * 2.5 / 32768) + 2.5
8623 AWGAwaveform = numpy.array(AWGAwaveform)
8625 AWGALength.config(text =
"L = " + str(len(AWGAwaveform)))
8630 global AWGAwaveform, AWGALength, awgwindow
8632 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
8633 numpy.savetxt(filename, AWGAwaveform, delimiter=
",", fmt=
'%2.4f')
8636 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
8637 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
8638 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
8639 global DFiltACoef, DFiltBCoef
8640 global AWG_2X, AWGA2X
8642 TempString = AWGAMathString
8643 AWGAMathString = askstring(
"AWG A Math Formula",
"Current Formula: " + AWGAMathString +
"\n\nNew Formula:\n", initialvalue=AWGAMathString, parent=awgwindow)
8644 if (AWGAMathString ==
None):
8645 AWGAMathString = TempString
8647 AWGAwaveform = eval(AWGAMathString)
8648 AWGAwaveform = numpy.array(AWGAwaveform)
8650 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8654 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
8655 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
8656 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab
8664 if AWGAFreqvalue < 10.0:
8670 if AWGAFreqvalue > 0.0:
8671 if AWG_2X.get() == 1:
8672 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
8674 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8676 AWGAperiodvalue = 10.0
8678 if AWGAPhaseDelay.get() == 0:
8679 if AWGAPhasevalue > 0:
8680 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
8682 AWGAdelayvalue = 0.0
8683 elif AWGAPhaseDelay.get() == 1:
8684 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
8685 Cycles = int(32768/AWGAperiodvalue)
8688 RecLength = int(Cycles * AWGAperiodvalue)
8689 if RecLength % 2 != 0:
8690 RecLength = RecLength + 1
8692 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
8693 if AWGAMode.get() == 1:
8694 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
8695 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
8697 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
8698 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
8699 AWGAwaveform = (AWGAwaveform * amplitude) + offset
8700 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
8703 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8705 duty1lab.config(text=
"%")
8706 phasealab.config(text=
"Delay")
8710 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
8711 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
8712 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab
8718 duty1lab.config(text =
"M Index")
8719 phasealab.config(text =
"M Freq")
8721 if AWGAFreqvalue > 0.0:
8722 if AWG_2X.get() == 1:
8723 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
8725 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8727 AWGAperiodvalue = 10.0
8730 ModFreq = float(eval(AWGAPhaseEntry.get()))
8733 AWGAPhaseEntry.delete(0,
"end")
8734 AWGAPhaseEntry.insert(0, ModFreq)
8738 AWGAPhaseEntry.delete(0,
"end")
8739 AWGAPhaseEntry.insert(0, ModFreq)
8741 if AWG_2X.get() == 1:
8742 MODperiodvalue = (BaseSampleRate*2)/ModFreq
8744 MODperiodvalue = BaseSampleRate/ModFreq
8747 ModIndex = float(eval(AWGADutyCycleEntry.get()))
8750 AWGADutyCycleEntry.delete(0,
"end")
8751 AWGADutyCycleEntry.insert(0, ModIndex)
8753 ModCycles = int(32768/MODperiodvalue)
8756 RecLength = int(ModCycles * MODperiodvalue)
8757 if RecLength % 2 != 0:
8758 RecLength = RecLength + 1
8759 CarCycles = int(RecLength/AWGAperiodvalue)
8761 AWGAwaveform = numpy.sin( (numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) - ModIndex*numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)) )
8762 if AWGAMode.get() == 1:
8763 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
8764 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
8766 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
8767 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
8768 AWGAwaveform = (AWGAwaveform * amplitude) + offset
8769 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
8772 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8776 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
8777 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
8778 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab
8784 duty1lab.config(text =
"M Index")
8785 phasealab.config(text =
"M Freq")
8787 if AWGAFreqvalue > 0.0:
8788 if AWG_2X.get() == 1:
8789 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
8791 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8793 AWGAperiodvalue = 10.0
8796 ModFreq = float(eval(AWGAPhaseEntry.get()))
8799 AWGAPhaseEntry.delete(0,
"end")
8800 AWGAPhaseEntry.insert(0, ModFreq)
8804 AWGAPhaseEntry.delete(0,
"end")
8805 AWGAPhaseEntry.insert(0, ModFreq)
8807 if AWG_2X.get() == 1:
8808 MODperiodvalue = (BaseSampleRate*2)/ModFreq
8810 MODperiodvalue = BaseSampleRate/ModFreq
8813 ModIndex = float(eval(AWGADutyCycleEntry.get()))/200.0
8816 AWGADutyCycleEntry.delete(0,
"end")
8817 AWGADutyCycleEntry.insert(0, ModIndex)
8819 ModCycles = int(32768/MODperiodvalue)
8822 RecLength = int(ModCycles * MODperiodvalue)
8823 if RecLength % 2 != 0:
8824 RecLength = RecLength + 1
8825 CarCycles = int(RecLength/AWGAperiodvalue)
8827 AWGAwaveform = numpy.sin(numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) * (0.5+(ModIndex*(numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)))))
8828 if AWGAMode.get() == 1:
8829 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
8830 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
8832 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
8833 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
8834 AWGAwaveform = (AWGAwaveform * amplitude) + offset
8835 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
8838 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8842 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
8843 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
8844 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
8852 if AWGAFreqvalue > 0.0:
8853 if AWG_2X.get() == 1:
8854 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
8856 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8858 AWGAperiodvalue = 0.0
8859 if AWG_Amp_Mode.get() == 1:
8860 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
8861 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
8863 MaxV = AWGAOffsetvalue
8864 MinV = AWGAAmplvalue
8866 PulseWidth = int(AWGADutyCyclevalue*100)
8867 PulseSamples = int(AWGAperiodvalue/PulseWidth)
8869 for i
in range(PulseSamples):
8870 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
8872 for j
in range(PulseWidth):
8874 AWGAwaveform.append(MaxV)
8876 AWGAwaveform.append(MinV)
8878 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8879 duty1lab.config(text=
"PWidth")
8883 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
8884 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
8885 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
8892 Max_term = int(AWGADutyCyclevalue*100)
8893 if AWG_2X.get() == 1:
8894 TempRate = (BaseSampleRate*2)
8896 TempRate = BaseSampleRate
8898 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGAFreqvalue))
8900 while k <= Max_term:
8902 Harmonic = (math.sin(k*numpy.pi/2.0)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGAFreqvalue)))
8903 AWGAwaveform = AWGAwaveform + Harmonic
8905 if AWG_Amp_Mode.get() == 0:
8906 amplitude = (AWGAOffsetvalue-AWGAAmplvalue)/2.0
8907 offset = (AWGAOffsetvalue+AWGAAmplvalue)/2.0
8909 amplitude = AWGAAmplvalue
8910 offset = AWGAOffsetvalue
8911 AWGAwaveform = (AWGAwaveform * amplitude) + offset
8913 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8914 duty1lab.config(text=
"Harmonics")
8918 global AWGAwaveform, AWGSampleRate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
8919 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay
8920 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
8928 if AWGAFreqvalue > 0.0:
8929 if AWG_2X.get() == 1:
8930 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
8931 SamplesPermS = int((BaseSampleRate*2)/1000)
8932 if AWGAperiodvalue % 2 != 0:
8933 AWGAperiodvalue = AWGAperiodvalue + 1
8935 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8936 SamplesPermS = int(BaseSampleRate/1000)
8938 AWGAperiodvalue = 0.0
8939 if AWG_Amp_Mode.get() == 1:
8940 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
8941 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
8943 MaxV = AWGAOffsetvalue
8944 MinV = AWGAAmplvalue
8946 if AWGAPhaseDelay.get() == 0:
8947 if AWGAPhasevalue > 0:
8948 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
8950 AWGAdelayvalue = 0.0
8951 elif AWGAPhaseDelay.get() == 1:
8952 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
8954 Cycles = int(AWGADutyCyclevalue*100)
8955 NCycles = -1 * Cycles
8957 AWGAwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGAFreqvalue))
8958 amplitude = (MaxV-MinV) / 2.0
8959 offset = (MaxV+MinV) / 2.0
8960 AWGAwaveform = (AWGAwaveform * amplitude) + offset
8961 Cycles = int(37500/AWGAperiodvalue)
8965 Extend = int((Cycles-1.0)*AWGAperiodvalue/2.0)
8966 AWGAwaveform = numpy.pad(AWGAwaveform, (Extend,Extend),
'wrap')
8967 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
8969 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
8971 duty1lab.config(text=
"Cycles")
8975 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
8976 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
8977 global AWGABurstFlag, AWGACycles, AWGABurstDelay
8978 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
8986 if AWGAFreqvalue > 0.0:
8987 if AWG_2X.get() == 1:
8988 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
8989 SamplesPermS = int((BaseSampleRate*2)/1000)
8990 if AWGAperiodvalue % 2 != 0:
8991 AWGAperiodvalue = AWGAperiodvalue + 1
8993 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
8994 SamplesPermS = int(BaseSampleRate/1000)
8996 AWGAperiodvalue = 0.0
8997 if AWG_Amp_Mode.get() == 1:
8998 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
8999 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9001 MaxV = AWGAOffsetvalue
9002 MinV = AWGAAmplvalue
9004 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9007 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9010 Remainder = int((AWGAperiodvalue - PulseWidth - SlopeValue)/2)
9013 PulseWidth = PulseWidth - SlopeValue
9016 StepAmp = (MaxV - MinV)/2
9017 StepOff = (MaxV + MinV)/2
9018 AWGAwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
9019 MidArray = numpy.ones(PulseWidth) * MinV
9020 AWGAwaveform = numpy.insert(AWGAwaveform, SlopeValue, MidArray)
9021 AWGAwaveform = numpy.pad(AWGAwaveform, (Remainder, Remainder),
'edge')
9022 if AWGABurstFlag.get() == 1:
9023 TempOneCycle = AWGAwaveform
9024 for i
in range(AWGACycles-1):
9025 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9026 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9027 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9029 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9030 duty1lab.config(text=
"%")
9031 phasealab.config(text =
"Rise Time")
9035 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9036 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9037 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9038 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9046 if AWGAFreqvalue > 0.0:
9047 if AWG_2X.get() == 1:
9048 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9049 SamplesPermS = int((BaseSampleRate*2)/1000)
9050 if AWGAperiodvalue % 2 != 0:
9051 AWGAperiodvalue = AWGAperiodvalue + 1
9053 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9054 SamplesPermS = int(BaseSampleRate/1000)
9056 AWGAperiodvalue = 0.0
9057 if AWG_Amp_Mode.get() == 1:
9058 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9059 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9061 MaxV = AWGAOffsetvalue
9062 MinV = AWGAAmplvalue
9064 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9067 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9070 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9073 PulseWidth = PulseWidth - SlopeValue
9076 StepValue = (MaxV - MinV) / SlopeValue
9078 for i
in range(SlopeValue):
9079 AWGAwaveform.append(SampleValue)
9080 SampleValue = SampleValue + StepValue
9081 for i
in range(PulseWidth):
9082 AWGAwaveform.append(MaxV)
9083 for i
in range(SlopeValue):
9084 AWGAwaveform.append(SampleValue)
9085 SampleValue = SampleValue - StepValue
9086 for i
in range(Remainder):
9087 AWGAwaveform.append(MinV)
9088 if AWGABurstFlag.get() == 1:
9089 TempOneCycle = AWGAwaveform
9090 for i
in range(AWGACycles-1):
9091 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9092 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9093 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9095 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9096 duty1lab.config(text=
"%")
9097 phasealab.config(text =
"Rise Time")
9101 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9102 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9103 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9104 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9112 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
9114 AWGADutyCycleEntry.delete(0,
"end")
9115 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9117 if AWGAFreqvalue > 0.0:
9118 if AWG_2X.get() == 1:
9119 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9120 SamplesPermS = int((BaseSampleRate*2)/1000)
9121 if AWGAperiodvalue % 2 != 0:
9122 AWGAperiodvalue = AWGAperiodvalue + 1
9124 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9125 SamplesPermS = int(BaseSampleRate/1000)
9127 AWGAperiodvalue = 0.0
9128 if AWG_Amp_Mode.get() == 1:
9129 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9130 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9132 MaxV = AWGAOffsetvalue
9133 MinV = AWGAAmplvalue
9135 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9138 PulseWidth = int(AWGADutyCyclevalue*SamplesPermS)
9141 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9144 PulseWidth = PulseWidth - SlopeValue
9147 StepValue = (MaxV - MinV) / SlopeValue
9149 for i
in range(SlopeValue):
9150 AWGAwaveform.append(SampleValue)
9151 SampleValue = SampleValue + StepValue
9152 for i
in range(PulseWidth):
9153 AWGAwaveform.append(MaxV)
9154 for i
in range(SlopeValue):
9155 AWGAwaveform.append(SampleValue)
9156 SampleValue = SampleValue - StepValue
9157 for i
in range(Remainder):
9158 AWGAwaveform.append(MinV)
9159 if AWGABurstFlag.get() == 1:
9160 TempOneCycle = AWGAwaveform
9161 for i
in range(AWGACycles-1):
9162 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9163 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9164 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9166 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9167 duty1lab.config(text=
"Width mS")
9168 phasealab.config(text =
"Rise Time")
9172 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9173 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9174 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9175 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9183 if AWGAFreqvalue > 0.0:
9184 if AWG_2X.get() == 1:
9185 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9186 SamplesPermS = int((BaseSampleRate*2)/1000)
9187 if AWGAperiodvalue % 2 != 0:
9188 AWGAperiodvalue = AWGAperiodvalue + 1
9190 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9191 SamplesPermS = int(BaseSampleRate/1000)
9193 AWGAperiodvalue = 0.0
9194 if AWG_Amp_Mode.get() == 1:
9195 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9196 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9198 MaxV = AWGAOffsetvalue
9199 MinV = AWGAAmplvalue
9201 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9204 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9207 Remainder = int(AWGAperiodvalue - PulseWidth)
9210 PulseWidth = PulseWidth - SlopeValue
9213 StepValue = (MaxV - MinV) / SlopeValue
9215 for i
in range(SlopeValue):
9216 AWGAwaveform.append(SampleValue)
9217 SampleValue = SampleValue + StepValue
9218 for i
in range(PulseWidth):
9219 AWGAwaveform.append(MaxV)
9220 for i
in range(Remainder):
9221 AWGAwaveform.append(MinV)
9222 if AWGABurstFlag.get() == 1:
9223 TempOneCycle = AWGAwaveform
9224 for i
in range(AWGACycles-1):
9225 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9226 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9227 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9229 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9230 duty1lab.config(text=
"%")
9231 phasealab.config(text =
"Slope Time")
9235 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, duty1lab
9236 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9237 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9238 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9246 if AWGAFreqvalue > 0.0:
9247 if AWG_2X.get() == 1:
9248 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9249 SamplesPermS = int((BaseSampleRate*2)/1000)
9250 if AWGAperiodvalue % 2 != 0:
9251 AWGAperiodvalue = AWGAperiodvalue + 1
9253 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
9254 SamplesPermS = int(BaseSampleRate/1000)
9256 AWGAperiodvalue = 0.0
9257 if AWG_Amp_Mode.get() == 1:
9258 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9259 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9261 MaxV = AWGAOffsetvalue
9262 MinV = AWGAAmplvalue
9264 if AWGAPhaseDelay.get() == 0:
9265 if AWGAPhasevalue > 0:
9266 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9268 AWGAdelayvalue = 0.0
9269 elif AWGAPhaseDelay.get() == 1:
9270 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9273 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9276 Remainder = int(AWGAperiodvalue - PulseWidth)
9279 UpStepValue = (MaxV - MinV) / PulseWidth
9280 DownStepValue = (MaxV - MinV) / Remainder
9282 for i
in range(PulseWidth):
9283 AWGAwaveform.append(SampleValue)
9284 SampleValue = SampleValue + UpStepValue
9285 for i
in range(Remainder):
9286 AWGAwaveform.append(SampleValue)
9287 SampleValue = SampleValue - DownStepValue
9288 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9289 if AWGABurstFlag.get() == 1:
9290 TempOneCycle = AWGAwaveform
9291 for i
in range(AWGACycles-1):
9292 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9293 TempDelay = int(AWGABurstDelay*SamplesPermS)
9294 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
9296 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9298 duty1lab.config(text =
"Symmetry")
9302 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, AWG_Amp_Mode
9303 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue
9304 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9305 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9313 if AWGAFreqvalue > 0.0:
9314 if AWG_2X.get() == 1:
9315 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9316 SamplesPermS = int((BaseSampleRate*2)/1000)
9317 if AWGAperiodvalue % 2 != 0:
9318 AWGAperiodvalue = AWGAperiodvalue + 1
9320 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9321 SamplesPermS = int(BaseSampleRate/1000)
9323 AWGAperiodvalue = 0.0
9324 if AWG_Amp_Mode.get() == 1:
9325 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9326 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9328 MaxV = AWGAOffsetvalue
9329 MinV = AWGAAmplvalue
9331 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue / 2.0)
9332 if AWGAPhaseDelay.get() == 0:
9333 DelayValue = int(AWGAperiodvalue*(AWGAPhasevalue/360))
9334 elif AWGAPhaseDelay.get() == 1:
9335 DelayValue = int(AWGAPhasevalue*SamplesPermS)
9336 for i
in range(DelayValue-PulseWidth):
9337 AWGAwaveform.append((MinV+MaxV)/2.0)
9338 for i
in range(PulseWidth):
9339 AWGAwaveform.append(MaxV)
9340 for i
in range(PulseWidth):
9341 AWGAwaveform.append(MinV)
9342 DelayValue = int(AWGAperiodvalue-DelayValue)
9343 for i
in range(DelayValue-PulseWidth):
9344 AWGAwaveform.append((MinV+MaxV)/2.0)
9345 if AWGABurstFlag.get() == 1:
9346 TempOneCycle = AWGAwaveform
9347 for i
in range(AWGACycles-1):
9348 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9349 TempDelay = int(AWGABurstDelay*SamplesPermS)
9350 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
9352 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9356 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
9357 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
9358 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9359 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9365 if AWGAFreqvalue > 0.0:
9366 if AWG_2X.get() == 1:
9367 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9368 SamplesPermS = int((BaseSampleRate*2)/1000)
9369 if AWGAperiodvalue % 2 != 0:
9370 AWGAperiodvalue = AWGAperiodvalue + 1
9372 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9373 SamplesPermS = int(BaseSampleRate/1000)
9375 AWGAperiodvalue = 0.0
9376 if AWG_Amp_Mode.get() == 1:
9377 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9378 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9380 if AWGAAmplvalue > AWGAOffsetvalue:
9381 MinV = AWGAOffsetvalue
9382 MaxV = AWGAAmplvalue
9384 MaxV = AWGAOffsetvalue
9385 MinV = AWGAAmplvalue
9387 AWGAwaveform = numpy.random.uniform(MinV, MaxV, int(AWGAperiodvalue))
9388 Mid = (MaxV+MinV)/2.0
9389 if AWGABurstFlag.get() == 1:
9390 TempOneCycle = AWGAwaveform
9391 for i
in range(AWGACycles-1):
9392 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9393 TempDelay = int(AWGABurstDelay*SamplesPermS)
9394 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
9396 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9400 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
9401 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
9402 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9403 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9409 if AWGAFreqvalue > 0.0:
9410 if AWG_2X.get() == 1:
9411 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9412 SamplesPermS = int((BaseSampleRate*2)/1000)
9413 if AWGAperiodvalue % 2 != 0:
9414 AWGAperiodvalue = AWGAperiodvalue + 1
9416 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9417 SamplesPermS = int(BaseSampleRate/1000)
9419 AWGAperiodvalue = 0.0
9420 if AWG_Amp_Mode.get() == 1:
9421 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9422 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9424 if AWGAAmplvalue > AWGAOffsetvalue:
9425 MinV = AWGAOffsetvalue
9426 MaxV = AWGAAmplvalue
9428 MaxV = AWGAOffsetvalue
9429 MinV = AWGAAmplvalue
9431 AWGAwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGAperiodvalue))
9432 Mid = (MaxV+MinV)/2.0
9433 if AWGABurstFlag.get() == 1:
9434 TempOneCycle = AWGAwaveform
9435 for i
in range(AWGACycles-1):
9436 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9437 TempDelay = int(AWGABurstDelay*SamplesPermS)
9438 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
9440 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9444 global AWGAMode, AWGAIOMode, AWGAModeLabel, DevID, session, devx, DevOne, CHA, HWRevOne
9447 if AWGAMode.get() == 0:
9449 elif AWGAMode.get() == 1:
9451 elif AWGAMode.get() == 2:
9453 if AWGAIOMode.get() > 0:
9455 if AWGAMode.get() == 0:
9459 label_txt = label_txt +
" Split I/O"
9460 label_txt = label_txt +
" Mode"
9461 AWGAModeLabel.config(text = label_txt )
9466 global AWGAAmplvalue, AWGAOffsetvalue
9467 global AWGAFreqvalue, AWGAPhasevalue, AWGAPhaseDelay
9468 global AWGADutyCyclevalue, FSweepMode, AWGARepeatFlag, AWGSync
9469 global AWGAWave, AWGAMode, AWGATerm, AWGAwaveform, AWGAIOMode
9470 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne, AWG_Amp_Mode
9471 global amp1lab, off1lab, AWGA2X, AWGA2X, AWGBWave, AWGBRepeatFlag
9480 if AWG_Amp_Mode.get() == 0:
9481 amp1lab.config(text =
"Min Ch A" )
9482 off1lab.config(text =
"Max Ch A" )
9484 amp1lab.config(text =
"Amp Ch A" )
9485 off1lab.config(text =
"Off Ch A" )
9487 if AWGAFreqvalue > 0.0:
9488 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
9490 AWGAperiodvalue = 0.0
9492 if AWGAPhaseDelay.get() == 0:
9493 if AWGAWave ==
'square':
9494 AWGAPhasevalue = AWGAPhasevalue + 270.0
9495 if AWGAPhasevalue > 359:
9496 AWGAPhasevalue = AWGAPhasevalue - 360
9497 if AWGAPhasevalue > 0:
9498 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9500 AWGAdelayvalue = 0.0
9501 elif AWGAPhaseDelay.get() == 1:
9502 AWGAdelayvalue = AWGAPhasevalue * 100
9504 if AWGATerm.get() == 0:
9505 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
9506 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
9507 elif AWGATerm.get() == 1:
9508 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
9509 devx.ctrl_transfer( 0x40, 0x50, 33, 0, 0, 0, 100)
9510 elif AWGATerm.get() == 2:
9511 devx.ctrl_transfer( 0x40, 0x50, 32, 0, 0, 0, 100)
9512 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
9514 if AWGAWave ==
'dc':
9515 if AWG_2X.get() == 2:
9516 AWGAWave ==
'arbitrary'
9517 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
9519 if AWGAMode.get() == 0:
9520 if AWGAIOMode.get() == 0:
9521 CHA.mode = Mode.SVMI
9523 CHA.mode = Mode.SVMI_SPLIT
9524 CHA.constant(AWGAOffsetvalue)
9526 if AWGAMode.get() == 1:
9527 if AWGAIOMode.get() == 0:
9528 CHA.mode = Mode.SIMV
9530 CHA.mode = Mode.SIMV_SPLIT
9531 CHA.constant(AWGAOffsetvalue/1000)
9533 if AWGAMode.get() == 2:
9534 if AWGAIOMode.get() == 0:
9535 CHA.mode = Mode.HI_Z
9537 CHA.mode = Mode.HI_Z_SPLIT
9539 if AWGAIOMode.get() > 0:
9542 CHA.mode = Mode.SIMV_SPLIT
9545 if AWGAMode.get() == 0:
9546 if AWGAIOMode.get() == 0:
9547 CHA.mode = Mode.SVMI
9549 CHA.mode = Mode.SVMI_SPLIT
9550 if AWGAMode.get() == 1:
9551 if AWGAIOMode.get() == 0:
9552 CHA.mode = Mode.SIMV
9554 CHA.mode = Mode.SIMV_SPLIT
9555 AWGAOffsetvalue = AWGAOffsetvalue/1000
9556 AWGAAmplvalue = AWGAAmplvalue/1000
9557 if AWGAMode.get() == 2:
9558 if AWGAIOMode.get() == 0:
9559 CHA.mode = Mode.HI_Z
9561 CHA.mode = Mode.HI_Z_SPLIT
9563 if AWG_Amp_Mode.get() == 1:
9564 MaxV = (AWGAOffsetvalue+AWGAAmplvalue)
9565 MinV = (AWGAOffsetvalue-AWGAAmplvalue)
9567 MaxV = AWGAOffsetvalue
9568 MinV = AWGAAmplvalue
9570 if AWGAWave ==
'sine':
9571 CHA.sine(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
9572 elif AWGAWave ==
'triangle':
9573 CHA.triangle(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
9574 elif AWGAWave ==
'sawtooth':
9575 CHA.sawtooth(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
9576 elif AWGAWave ==
'square':
9577 CHA.square(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue, AWGADutyCyclevalue)
9578 elif AWGAWave ==
'stairstep':
9579 CHA.stairstep(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
9580 elif AWGAWave ==
'arbitrary':
9581 if AWGSync.get() == 0:
9582 AWGARepeatFlag.set(1)
9583 if AWG_2X.get() == 2:
9584 AWGAWave ==
'arbitrary'
9585 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
9587 CHA.arbitrary(AWGAwaveform, AWGARepeatFlag.get())
9590 if AWGAIOMode.get() > 0:
9593 CHA.mode = Mode.SIMV_SPLIT
9596 global AWGAAmplEntry, AWGBAmplEntry, AWGAOffsetEntry, AWGBOffsetEntry, AWGAFreqEntry, AWGBFreqEntry
9597 global AWGAPhaseEntry, AWGBPhaseEntry, AWGADutyCycleEntry, AWGBDutyCycleEntry, AWGAShape, AWGBShape
9602 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
9603 AWGBOffsetvalue = float(eval(AWGAOffsetEntry.get()))
9604 AWGBAmplEntry.delete(0,
"end")
9605 AWGBAmplEntry.insert(0, AWGBOffsetvalue)
9606 AWGBOffsetEntry.delete(0,
"end")
9607 AWGBOffsetEntry.insert(0, AWGBAmplvalue)
9609 AWGBFreqvalue = float(eval(AWGAFreqEntry.get()))
9610 AWGBFreqEntry.delete(0,
"end")
9611 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9612 AWGBPhasevalue = float(eval(AWGAPhaseEntry.get()))
9613 AWGBPhaseEntry.delete(0,
"end")
9614 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
9615 AWGBDutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
9616 AWGBDutyCycleEntry.delete(0,
"end")
9617 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
9618 AWGBShape.set(AWGAShape.get())
9624 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
9626 if AWGBBurstFlag.get() == 1:
9627 AWGBCyclesString = askstring(
"AWG B Burst Mode",
"Current number of cycles " + str(AWGBCycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGBCycles), parent=awgwindow)
9628 if (AWGBCyclesString ==
None):
9630 AWGBCycles = int(AWGBCyclesString)
9631 AWGBDelayString = askstring(
"AWG B Burst Mode",
"Current Burst delay " + str(AWGBBurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGBBurstDelay), parent=awgwindow)
9632 if (AWGBDelayString ==
None):
9634 AWGBBurstDelay = float(AWGBDelayString)
9638 global AWGBAmplEntry, AWGBAmplvalue, AWGBMode, AWG_Amp_Mode
9641 AWGBAmplvalue = float(eval(AWGBAmplEntry.get()))
9642 if AWGBMode.get() == 0:
9643 if AWG_Amp_Mode.get() == 0:
9644 if AWGBAmplvalue > 5.00:
9645 AWGBAmplvalue = 5.00
9646 AWGBAmplEntry.delete(0,
"end")
9647 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9648 if AWGBAmplvalue < 0.00:
9649 AWGBAmplvalue = 0.00
9650 AWGBAmplEntry.delete(0,
"end")
9651 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9652 elif AWG_Amp_Mode.get() == 1:
9653 if AWGBAmplvalue > 2.5:
9655 AWGBAmplEntry.delete(0,
"end")
9656 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9657 if AWGBAmplvalue < -2.50:
9658 AWGBAmplvalue = -2.50
9659 AWGBAmplEntry.delete(0,
"end")
9660 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9661 elif AWGBMode.get() == 1:
9662 if AWGBAmplvalue > 200.00:
9663 AWGBAmplvalue = 200.00
9664 AWGBAmplEntry.delete(0,
"end")
9665 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9666 if AWGBAmplvalue < -200.00:
9667 AWGBAmplvalue = -200.00
9668 AWGBAmplEntry.delete(0,
"end")
9669 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9671 AWGBAmplEntry.delete(0,
"end")
9672 AWGBAmplEntry.insert(0, AWGBAmplvalue)
9675 global AWGBOffsetEntry, AWGBOffsetvalue, AWGBMode, AWG_Amp_Mode
9678 AWGBOffsetvalue = float(eval(AWGBOffsetEntry.get()))
9679 if AWGBMode.get() == 0:
9680 if AWGBOffsetvalue > 5.00:
9681 AWGBOffsetvalue = 5.00
9682 AWGBOffsetEntry.delete(0,
"end")
9683 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
9684 if AWGBOffsetvalue < 0.00:
9685 AWGBOffsetvalue = 0.00
9686 AWGBOffsetEntry.delete(0,
"end")
9687 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
9688 elif AWGBMode.get() == 1:
9689 if AWGBOffsetvalue > 200.00:
9690 AWGBOffsetvalue = 200.00
9691 AWGBOffsetEntry.delete(0,
"end")
9692 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
9693 if AWGBOffsetvalue < -200.00:
9694 AWGBOffsetvalue = -200.00
9695 AWGBOffsetEntry.delete(0,
"end")
9696 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
9698 AWGBOffsetEntry.delete(0,
"end")
9699 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
9702 global AWGBFreqEntry, AWGBFreqvalue, AWG_2X
9703 global BodeScreenStatus, BodeDisp
9706 AWGBFreqvalue = float(eval(AWGBFreqEntry.get()))
9708 AWGBFreqEntry.delete(0,
"end")
9709 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9710 if AWG_2X.get() == 2:
9711 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
9712 if AWGBFreqvalue > 90000:
9713 AWGBFreqvalue = 90000
9714 AWGBFreqEntry.delete(0,
"end")
9715 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9717 if AWGBFreqvalue > 50000:
9718 AWGBFreqvalue = 50000
9719 AWGBFreqEntry.delete(0,
"end")
9720 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9722 if AWGBFreqvalue > 25000:
9723 AWGBFreqvalue = 25000
9724 AWGBFreqEntry.delete(0,
"end")
9725 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9726 if AWGBFreqvalue < 0:
9728 AWGBFreqEntry.delete(0,
"end")
9729 AWGBFreqEntry.insert(0, AWGBFreqvalue)
9733 global AWGbPhaseDelay, phaseblab, awgbph, awgbdel
9735 if AWGBPhaseDelay.get() == 0:
9736 phaseblab.configure(text=
"Deg")
9737 awgbph.configure(style=
"WPhase.TRadiobutton")
9738 awgbdel.configure(style=
"GPhase.TRadiobutton")
9739 elif AWGBPhaseDelay.get() == 1:
9740 phaseblab.configure(text=
"mSec")
9741 awgbph.configure(style=
"GPhase.TRadiobutton")
9742 awgbdel.configure(style=
"WPhase.TRadiobutton")
9745 global AWGBPhaseEntry, AWGBPhasevalue
9748 AWGBPhasevalue = float(eval(AWGBPhaseEntry.get()))
9750 AWGBPhaseEntry.delete(0,
"end")
9751 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
9753 if AWGBPhasevalue > 360:
9754 AWGBPhasevalue = 360
9755 AWGBPhaseEntry.delete(0,
"end")
9756 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
9757 if AWGBPhasevalue < 0:
9759 AWGBPhaseEntry.delete(0,
"end")
9760 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
9763 global AWGBDutyCycleEntry, AWGBDutyCyclevalue
9766 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))/100
9768 AWGBDutyCycleEntry.delete(0,
"end")
9769 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
9771 if AWGBDutyCyclevalue > 1:
9772 AWGBDutyCyclevalue = 1
9773 AWGBDutyCycleEntry.delete(0,
"end")
9774 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue*100)
9775 if AWGBDutyCyclevalue < 0:
9776 AWGBDutyCyclevalue = 0
9777 AWGBDutyCycleEntry.delete(0,
"end")
9778 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
9782 global AWGBShape, AWGBWave, duty2lab, AWG_2X, CHA, CHB
9784 if AWGBShape.get() == 0:
9786 duty2lab.config(text=
"%")
9788 if AWGBShape.get() == 1:
9790 duty2lab.config(text=
"%")
9792 if AWGBShape.get() == 2:
9793 AWGBWave =
'triangle'
9794 duty2lab.config(text=
"%")
9796 if AWGBShape.get() == 3:
9797 AWGBWave =
'sawtooth'
9798 duty2lab.config(text=
"%")
9800 if AWGBShape.get() == 4:
9802 duty2lab.config(text=
"%")
9804 if AWGBShape.get() == 5:
9805 AWGBWave =
'stairstep'
9806 duty2lab.config(text=
"%")
9808 if AWGBShape.get() > 5:
9809 AWGBWave =
'arbitrary'
9810 if AWG_2X.get() == 1:
9812 AWGBWave =
'arbitrary'
9816 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X
9819 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9821 CSVFile = open(filename)
9825 csv_f = csv.reader(CSVFile, csv.excel)
9827 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9833 if len(row) > 1
and ColumnSel == 0:
9834 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
9835 ColumnNum = int(RequestColumn) - 1
9836 ColumnLen = str(len(row))
9841 if colnum == ColumnNum:
9842 AWGBwaveform.append(float(col))
9845 print(
'skipping non-numeric row', RowNum)
9847 AWGBwaveform = numpy.array(AWGBwaveform)
9849 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
9855 global AWG_2X, AWGB2X, AWGBwaveform
9857 if AWG_2X.get() == 2:
9860 AWGB2X = AWGBwaveform[::2]
9861 Tempwaveform = AWGBwaveform[1::2]
9862 AWGBwaveform = Tempwaveform
9865 global AWGBwaveform, AWGBLength, awgwindow
9866 global AWG_2X, AWGA2X
9869 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
9871 spf = wave.open(filename,
'r')
9873 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9876 if spf.getnchannels() == 2:
9877 showwarning(
"WARNING",
"Only mono files supported!", parent=awgwindow)
9880 Length = spf.getnframes()
9883 signal = spf.readframes(Length)
9884 WAVsignal = numpy.fromstring(signal,
'Int16')
9886 AWGBwaveform = (WAVsignal * 2.5 / 32768) + 2.5
9887 AWGBwaveform = numpy.array(AWGBwaveform)
9889 AWGBLength.config(text =
"L = " + str(len(AWGBwaveform)))
9894 global AWGBwaveform, AWGBLength, awgwindow
9896 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9897 numpy.savetxt(filename, AWGBwaveform, delimiter=
",", fmt=
'%2.4f')
9900 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
9901 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
9902 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
9903 global DFiltACoef, DFiltBCoef
9904 global AWG_2X, AWGA2X
9906 TempString = AWGBMathString
9907 AWGBMathString = askstring(
"AWG B Math Formula",
"Current Formula: " + AWGBMathString +
"\n\nNew Formula:\n", initialvalue=AWGBMathString, parent=awgwindow)
9908 if (AWGBMathString ==
None):
9909 AWGBMathString = TempString
9911 AWGBwaveform = eval(AWGBMathString)
9912 AWGBwaveform = numpy.array(AWGBwaveform)
9914 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
9918 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBFreqvalue, awgwindow
9920 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9922 Max_termStr = askstring(
"AWG B Fourier",
"\nEnter Max Harmonic:\n", parent=awgwindow)
9923 if (Max_termStr ==
None):
9925 Max_term = int(Max_termStr)
9930 if AWG_2X.get() == 1:
9931 TempRate = (BaseSampleRate*2)
9933 TempRate = BaseSampleRate
9935 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGBFreqvalue))
9937 while k <= Max_term:
9939 Harmonic = (math.sin(k*numpy.pi/2)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGBFreqvalue)))
9940 AWGBwaveform = AWGBwaveform + Harmonic
9942 if AWG_Amp_Mode.get() == 0:
9943 amplitude = (AWGBOffsetvalue-AWGBAmplvalue)/2
9944 offset = (AWGBOffsetvalue+AWGBAmplvalue)/2
9946 amplitude = AWGBAmplvalue
9947 offset = AWGBOffsetvalue
9948 AWGBwaveform = (AWGBwaveform * amplitude) + offset
9950 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
9951 duty2lab.config(text=
"Harmonics")
9955 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
9956 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay, AWGBMode
9957 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
9965 if AWGBFreqvalue < 10.0:
9971 if AWGBFreqvalue > 0.0:
9972 if AWG_2X.get() == 2:
9973 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
9975 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
9977 AWGBperiodvalue = 10.0
9979 if AWGBPhaseDelay.get() == 0:
9980 if AWGBPhasevalue > 0:
9981 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
9983 AWGBdelayvalue = 0.0
9984 elif AWGBPhaseDelay.get() == 1:
9985 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
9986 Cycles = int(32768/AWGBperiodvalue)
9989 RecLength = int(Cycles * AWGBperiodvalue)
9990 if RecLength % 2 != 0:
9991 RecLength = RecLength + 1
9993 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
9994 if AWGBMode.get() == 1:
9995 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2000.0
9996 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2000.0
9998 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2.0
9999 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2.0
10000 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10001 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10003 if AWG_2X.get() == 2:
10006 AWGB2X = AWGBwaveform[::2]
10007 Tempwaveform = AWGBwaveform[1::2]
10008 AWGBwaveform = Tempwaveform
10009 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10011 duty2lab.config(text=
"%")
10015 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength
10016 global AWGBDutyCyclevalue, AWGBFreqvalue, AWG_Amp_Mode
10017 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10025 if AWGBFreqvalue > 0.0:
10026 if AWG_2X.get() == 2:
10027 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10029 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10031 AWGBperiodvalue = 0.0
10032 if AWG_Amp_Mode.get() == 1:
10033 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10034 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10036 MaxV = AWGBOffsetvalue
10037 MinV = AWGBAmplvalue
10039 PulseWidth = int(AWGBDutyCyclevalue*100)
10040 PulseSamples = int(AWGBperiodvalue/PulseWidth)
10042 for i
in range(PulseSamples):
10043 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
10045 for j
in range(PulseWidth):
10047 AWGBwaveform.append(MaxV)
10049 AWGBwaveform.append(MinV)
10051 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10052 duty2lab.config(text=
"PWidth")
10056 global AWGBwaveform, AWGSampleRate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
10057 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay
10058 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10066 if AWGBFreqvalue > 0.0:
10067 if AWG_2X.get() == 1:
10068 AWGBperiodvalue = int((BaseSampleRate*2)/AWGBFreqvalue)
10069 if AWGBperiodvalue % 2 != 0:
10070 AWGBperiodvalue = AWGBperiodvalue + 1
10072 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10074 AWGBperiodvalue = 0.0
10075 if AWG_Amp_Mode.get() == 1:
10076 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10077 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10079 MaxV = AWGBOffsetvalue
10080 MinV = AWGBAmplvalue
10082 if AWGBPhaseDelay.get() == 0:
10083 if AWGBPhasevalue > 0:
10084 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10086 AWGBdelayvalue = 0.0
10087 elif AWGBPhaseDelay.get() == 1:
10088 AWGBdelayvalue = AWGBPhasevalue * SampleRate / 1000
10090 Cycles = int(AWGBDutyCyclevalue*100)
10091 NCycles = -1 * Cycles
10093 AWGBwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGBFreqvalue))
10094 amplitude = (MaxV-MinV) / 2.0
10095 offset = (MaxV+MinV) / 2.0
10096 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10097 Cycles = int(37500/AWGBperiodvalue)
10101 Extend = int((Cycles-1.0)*AWGBperiodvalue/2.0)
10102 AWGBwaveform = numpy.pad(AWGBwaveform, (Extend,Extend),
'wrap')
10103 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10105 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10107 duty2lab.config(text=
"Cycles")
10111 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10112 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10113 global AWG_Amp_Mode
10114 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10115 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10123 if AWGBFreqvalue > 0.0:
10124 if AWG_2X.get() == 2:
10125 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10126 SamplesPermS = int((BaseSampleRate*2)/1000)
10128 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10129 SamplesPermS = int(BaseSampleRate/1000)
10131 AWGBperiodvalue = 0.0
10132 if AWG_Amp_Mode.get() == 1:
10133 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10134 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10136 MaxV = AWGBOffsetvalue
10137 MinV = AWGBAmplvalue
10139 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10140 if SlopeValue <= 0:
10142 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10145 Remainder = int((AWGBperiodvalue - PulseWidth - SlopeValue)/2)
10148 PulseWidth = PulseWidth - SlopeValue
10151 StepAmp = (MaxV - MinV)/2
10152 StepOff = (MaxV + MinV)/2
10153 AWGBwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
10154 MidArray = numpy.ones(PulseWidth) * MinV
10155 AWGBwaveform = numpy.insert(AWGBwaveform, SlopeValue, MidArray)
10156 AWGBwaveform = numpy.pad(AWGBwaveform, (Remainder, Remainder),
'edge')
10157 if AWGBBurstFlag.get() == 1:
10158 TempOneCycle = AWGBwaveform
10159 for i
in range(AWGBCycles-1):
10160 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10161 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10162 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10164 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10165 duty2lab.config(text=
"%")
10166 phaseblab.config(text =
"Rise Time")
10170 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10171 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10172 global AWG_Amp_Mode
10173 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10174 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10182 if AWGBFreqvalue > 0.0:
10183 if AWG_2X.get() == 2:
10184 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10185 SamplesPermS = int((BaseSampleRate*2)/1000)
10187 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10188 SamplesPermS = int(BaseSampleRate/1000)
10190 AWGBperiodvalue = 0.0
10191 if AWG_Amp_Mode.get() == 1:
10192 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10193 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10195 MaxV = AWGBOffsetvalue
10196 MinV = AWGBAmplvalue
10198 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10199 if SlopeValue <= 0:
10201 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10204 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
10207 PulseWidth = PulseWidth - SlopeValue
10210 StepValue = (MaxV - MinV) / SlopeValue
10212 for i
in range(SlopeValue):
10213 AWGBwaveform.append(SampleValue)
10214 SampleValue = SampleValue + StepValue
10215 for i
in range(PulseWidth):
10216 AWGBwaveform.append(MaxV)
10217 for i
in range(SlopeValue):
10218 AWGBwaveform.append(SampleValue)
10219 SampleValue = SampleValue - StepValue
10220 for i
in range(Remainder):
10221 AWGBwaveform.append(MinV)
10222 if AWGBBurstFlag.get() == 1:
10223 TempOneCycle = AWGBwaveform
10224 for i
in range(AWGBCycles-1):
10225 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10226 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10227 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10229 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10230 duty2lab.config(text=
"%")
10231 phaseblab.config(text =
"Rise Time")
10235 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10236 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10237 global AWG_Amp_Mode
10238 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10239 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10247 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))
10249 AWGBDutyCycleEntry.delete(0,
"end")
10250 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10252 if AWGBFreqvalue > 0.0:
10253 if AWG_2X.get() == 2:
10254 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10255 SamplesPermS = int((BaseSampleRate*2)/1000)
10257 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10258 SamplesPermS = int(BaseSampleRate/1000)
10260 AWGBperiodvalue = 0.0
10261 if AWG_Amp_Mode.get() == 1:
10262 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10263 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10265 MaxV = AWGBOffsetvalue
10266 MinV = AWGBAmplvalue
10268 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10269 if SlopeValue <= 0:
10271 PulseWidth = int(AWGBDutyCyclevalue*SamplesPermS)
10274 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
10277 PulseWidth = PulseWidth - SlopeValue
10280 StepValue = (MaxV - MinV) / SlopeValue
10282 for i
in range(SlopeValue):
10283 AWGBwaveform.append(SampleValue)
10284 SampleValue = SampleValue + StepValue
10285 for i
in range(PulseWidth):
10286 AWGBwaveform.append(MaxV)
10287 for i
in range(SlopeValue):
10288 AWGBwaveform.append(SampleValue)
10289 SampleValue = SampleValue - StepValue
10290 for i
in range(Remainder):
10291 AWGBwaveform.append(MinV)
10292 if AWGBBurstFlag.get() == 1:
10293 TempOneCycle = AWGBwaveform
10294 for i
in range(AWGBCycles-1):
10295 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10296 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10297 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10299 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10300 duty2lab.config(text=
"Width mS")
10301 phaseblab.config(text =
"Rise Time")
10305 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10306 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10307 global AWG_Amp_Mode
10308 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10309 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10317 if AWGBFreqvalue > 0.0:
10318 if AWG_2X.get() == 2:
10319 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10320 SamplesPermS = int((BaseSampleRate*2)/1000)
10322 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10323 SamplesPermS = int(BaseSampleRate/1000)
10325 AWGBperiodvalue = 0.0
10326 if AWG_Amp_Mode.get() == 1:
10327 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10328 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10330 MaxV = AWGBOffsetvalue
10331 MinV = AWGBAmplvalue
10333 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10334 if SlopeValue <= 0:
10336 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10339 Remainder = int(AWGBperiodvalue - PulseWidth)
10342 PulseWidth = PulseWidth - SlopeValue
10345 StepValue = (MaxV - MinV) / SlopeValue
10347 for i
in range(SlopeValue):
10348 AWGBwaveform.append(SampleValue)
10349 SampleValue = SampleValue + StepValue
10350 for i
in range(PulseWidth):
10351 AWGBwaveform.append(MaxV)
10352 for i
in range(Remainder):
10353 AWGBwaveform.append(MinV)
10354 if AWGBBurstFlag.get() == 1:
10355 TempOneCycle = AWGBwaveform
10356 for i
in range(AWGBCycles-1):
10357 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10358 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10359 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10361 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10362 duty2lab.config(text=
"%")
10363 phaseblab.config(text =
"Slope Time")
10367 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10368 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10369 global AWG_Amp_Mode
10370 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10371 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10379 if AWGBFreqvalue > 0.0:
10380 if AWG_2X.get() == 2:
10381 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10382 SamplesPermS = int((BaseSampleRate*2)/1000)
10384 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10385 SamplesPermS = int(BaseSampleRate/1000)
10387 AWGBperiodvalue = 0.0
10388 if AWG_Amp_Mode.get() == 1:
10389 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10390 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10392 MaxV = AWGBOffsetvalue
10393 MinV = AWGBAmplvalue
10395 if AWGBPhaseDelay.get() == 0:
10396 if AWGBPhasevalue > 0:
10397 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10399 AWGBdelayvalue = 0.0
10400 elif AWGBPhaseDelay.get() == 1:
10401 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
10404 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10407 Remainder = int(AWGBperiodvalue - PulseWidth)
10410 UpStepValue = (MaxV - MinV) / PulseWidth
10411 DownStepValue = (MaxV - MinV) / Remainder
10413 for i
in range(PulseWidth):
10414 AWGBwaveform.append(SampleValue)
10415 SampleValue = SampleValue + UpStepValue
10416 for i
in range(Remainder):
10417 AWGBwaveform.append(SampleValue)
10418 SampleValue = SampleValue - DownStepValue
10419 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10420 if AWGBBurstFlag.get() == 1:
10421 TempOneCycle = AWGBwaveform
10422 for i
in range(AWGBCycles-1):
10423 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10424 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10425 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10427 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10429 duty2lab.config(text =
"Symmetry")
10433 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10434 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10435 global AWG_Amp_Mode
10436 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10437 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10445 if AWGBFreqvalue > 0.0:
10446 if AWG_2X.get() == 2:
10447 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10448 SamplesPermS = int((BaseSampleRate*2)/1000)
10450 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10451 SamplesPermS = int(BaseSampleRate/1000)
10453 AWGBperiodvalue = 0.0
10454 MaxV = AWGBOffsetvalue
10455 MinV = AWGBAmplvalue
10456 if AWG_Amp_Mode.get() == 1:
10457 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10458 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10460 MaxV = AWGBOffsetvalue
10461 MinV = AWGBAmplvalue
10463 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue / 2)
10464 if AWGBPhaseDelay.get() == 0:
10465 DelayValue = int(AWGBperiodvalue*(AWGBPhasevalue/360))
10466 elif AWGBPhaseDelay.get() == 1:
10467 DelayValue = int(AWGBPhasevalue*SamplesPermS)
10468 for i
in range(DelayValue-PulseWidth):
10469 AWGBwaveform.append((MinV+MaxV)/2)
10470 for i
in range(PulseWidth):
10471 AWGBwaveform.append(MaxV)
10472 for i
in range(PulseWidth):
10473 AWGBwaveform.append(MinV)
10474 DelayValue = int(AWGBperiodvalue-DelayValue)
10475 for i
in range(DelayValue-PulseWidth):
10476 AWGBwaveform.append((MinV+MaxV)/2)
10477 if AWGBBurstFlag.get() == 1:
10478 TempOneCycle = AWGBwaveform
10479 for i
in range(AWGBCycles-1):
10480 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10481 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10482 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10484 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10488 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
10489 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
10490 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10491 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10497 if AWGBFreqvalue > 0.0:
10498 if AWG_2X.get() == 2:
10499 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10500 SamplesPermS = int((BaseSampleRate*2)/1000)
10502 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10503 SamplesPermS = int(BaseSampleRate/1000)
10505 AWGBperiodvalue = 0.0
10507 if AWGBAmplvalue > AWGBOffsetvalue:
10508 MinV = AWGBOffsetvalue
10509 MaxV = AWGBAmplvalue
10511 MaxV = AWGBOffsetvalue
10512 MinV = AWGBAmplvalue
10513 if AWG_Amp_Mode.get() == 1:
10514 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10515 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10517 AWGBwaveform = numpy.random.uniform(MinV, MaxV, int(AWGBperiodvalue))
10518 Mid = (MaxV+MinV)/2
10519 if AWGBBurstFlag.get() == 1:
10520 TempOneCycle = AWGBwaveform
10521 for i
in range(AWGBCycles-1):
10522 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10523 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10524 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
10526 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10530 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
10531 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
10532 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10533 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10539 if AWGBFreqvalue > 0.0:
10540 if AWG_2X.get() == 2:
10541 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10542 SamplesPermS = int((BaseSampleRate*2)/1000)
10544 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10545 SamplesPermS = int(BaseSampleRate/1000)
10547 AWGBperiodvalue = 0.0
10548 if AWGBAmplvalue > AWGBOffsetvalue:
10549 MinV = AWGBOffsetvalue
10550 MaxV = AWGBAmplvalue
10552 MaxV = AWGBOffsetvalue
10553 MinV = AWGBAmplvalue
10554 if AWG_Amp_Mode.get() == 1:
10555 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10556 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10558 AWGBwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGBperiodvalue))
10559 Mid = (MaxV+MinV)/2
10560 if AWGBBurstFlag.get() == 1:
10561 TempOneCycle = AWGBwaveform
10562 for i
in range(AWGBCycles-1):
10563 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10564 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10565 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
10567 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10571 global AWGBMode, AWGBIOMode, AWGBModeLabel, DevID, devx, DevOne, CHB, HWRevOne
10573 if AWGBMode.get() == 0:
10575 elif AWGBMode.get() == 1:
10577 elif AWGBMode.get() == 2:
10579 if AWGBIOMode.get() > 0:
10580 if HWRevOne ==
"D":
10581 if AWGBMode.get() == 0:
10585 label_txt = label_txt +
" Split I/O"
10586 label_txt = label_txt +
" Mode"
10587 AWGBModeLabel.config(text = label_txt )
10592 global AWGBAmplvalue, AWGBOffsetvalue, AWGA2X, AWG_2X
10593 global AWGBFreqvalue, AWGBPhasevalue, AWGBPhaseDelay
10594 global AWGBDutyCyclevalue, FSweepMode, AWGBRepeatFlag, AWGSync
10595 global AWGBWave, AWGBMode, AWGBTerm, AWGBwaveform, AWGBIOMode
10596 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne
10597 global amp2lab, off2lab, AWG_Amp_Mode
10598 global AWGA2X, AWGB2X, AWGAWave, AWGARepeatFlag
10600 if AWG_Amp_Mode.get() == 0:
10601 amp2lab.config(text =
"Min Ch B" )
10602 off2lab.config(text =
"Max Ch B" )
10604 amp2lab.config(text =
"Amp Ch B" )
10605 off2lab.config(text =
"Off Ch B" )
10607 if AWG_2X.get() == 1:
10608 AWGBWave =
'arbitrary'
10609 if AWGBFreqvalue > 0.0:
10610 AWGBperiodvalue = AWGSAMPLErate/AWGBFreqvalue
10612 AWGBperiodvalue = 0.0
10614 if AWGBPhaseDelay.get() == 0:
10615 if AWGBWave ==
'square':
10616 AWGBPhasevalue = AWGBPhasevalue + 270.0
10617 if AWGBPhasevalue > 359:
10618 AWGBPhasevalue = AWGBPhasevalue - 360
10619 if AWGBPhasevalue > 0:
10620 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10622 AWGBdelayvalue = 0.0
10623 elif AWGBPhaseDelay.get() == 1:
10624 AWGBdelayvalue = AWGBPhasevalue * 100
10626 if AWGBTerm.get() == 0:
10627 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
10628 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
10629 elif AWGBTerm.get() == 1:
10630 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
10631 devx.ctrl_transfer( 0x40, 0x50, 38, 0, 0, 0, 100)
10632 elif AWGBTerm.get() == 2:
10633 devx.ctrl_transfer( 0x40, 0x50, 37, 0, 0, 0, 100)
10634 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
10636 if AWGBWave ==
'dc':
10637 if AWG_2X.get() == 1:
10638 AWGBWave ==
'arbitrary'
10639 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
10641 if AWGBMode.get() == 0:
10642 if AWGBIOMode.get() == 0:
10643 CHB.mode = Mode.SVMI
10645 CHB.mode = Mode.SVMI_SPLIT
10646 CHB.constant(AWGBOffsetvalue)
10647 if AWGBMode.get() == 1:
10648 if AWGBIOMode.get() == 0:
10649 CHB.mode = Mode.SIMV
10651 CHB.mode = Mode.SIMV_SPLIT
10652 CHB.constant(AWGBOffsetvalue/1000)
10653 if AWGBMode.get() == 2:
10654 if AWGBIOMode.get() == 0:
10655 CHB.mode = Mode.HI_Z
10657 CHB.mode = Mode.HI_Z_SPLIT
10659 if AWGBIOMode.get() > 0:
10660 if HWRevOne ==
"D":
10662 CHB.mode = Mode.SIMV_SPLIT
10665 if AWGBMode.get() == 0:
10666 if AWGBIOMode.get() == 0:
10667 CHB.mode = Mode.SVMI
10669 CHB.mode = Mode.SVMI_SPLIT
10670 if AWGBMode.get() == 1:
10671 if AWGBIOMode.get() == 0:
10672 CHB.mode = Mode.SIMV
10674 CHB.mode = Mode.SIMV_SPLIT
10675 AWGBOffsetvalue = AWGBOffsetvalue/1000
10676 AWGBAmplvalue = AWGBAmplvalue/1000
10677 if AWGBMode.get() == 2:
10678 if AWGBIOMode.get() == 0:
10679 CHB.mode = Mode.HI_Z
10681 CHB.mode = Mode.HI_Z_SPLIT
10683 if AWG_Amp_Mode.get() == 1:
10684 MaxV = (AWGBOffsetvalue+AWGBAmplvalue)
10685 MinV = (AWGBOffsetvalue-AWGBAmplvalue)
10687 MaxV = AWGBOffsetvalue
10688 MinV = AWGBAmplvalue
10690 if AWGBWave ==
'sine':
10691 CHB.sine(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
10692 elif AWGBWave ==
'triangle':
10693 CHB.triangle(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
10694 elif AWGBWave ==
'sawtooth':
10695 CHB.sawtooth(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
10696 elif AWGBWave ==
'square':
10697 CHB.square(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue, AWGBDutyCyclevalue)
10698 elif AWGBWave ==
'stairstep':
10699 CHB.stairstep(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
10700 elif AWGBWave ==
'arbitrary':
10701 if AWGSync.get() == 0:
10702 AWGBRepeatFlag.set(1)
10703 if AWG_2X.get() == 1:
10704 AWGBWave ==
'arbitrary'
10705 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
10707 CHB.arbitrary(AWGBwaveform, AWGBRepeatFlag.get())
10710 if AWGBIOMode.get() > 0:
10711 if HWRevOne ==
"D":
10713 CHB.mode = Mode.SIMV_SPLIT
10716 global session, CHA, CHB, AWGSync
10718 if (RUNstatus.get() == 1)
and AWGSync.get() == 0:
10719 if session.continuous:
10729 global AWGAMode, AWGBMode, AWGSync
10730 global CHA, CHB, discontloop, contloop, session
10750 global RUNstatus, AWGSync, session, CHA, CHB
10752 if (RUNstatus.get() == 1):
10753 if AWGSync.get() == 0:
10756 CHA.mode = Mode.HI_Z_SPLIT
10757 CHB.mode = Mode.HI_Z_SPLIT
10761 elif session.continuous:
10764 CHA.mode = Mode.HI_Z_SPLIT
10765 CHB.mode = Mode.HI_Z_SPLIT
10770 global CANVASwidthF, CANVASheightF, freqwindow
10773 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=freqwindow)
10774 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=freqwindow)
10775 if MarkerNum > 0
or ColorMode.get() > 0:
10776 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
10778 COLORtext =
"#000000"
10781 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
10783 COLORtext =
"#ffffff"
10787 print(
"Routine not made yet")
10790 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
10797 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
10805 global FreqTraceMode
10807 FreqTraceMode.set(1)
10808 if RUNstatus.get() == 0:
10810 if RUNstatus.get() == 2:
10815 global FreqTraceMode
10817 FreqTraceMode.set(2)
10818 if RUNstatus.get() == 0:
10820 if RUNstatus.get() == 2:
10824 global RUNstatus, TRACEaverage, FreqTraceMode, freqwindow
10826 FreqTraceMode.set(3)
10828 if RUNstatus.get() == 0:
10830 if RUNstatus.get() == 2:
10834 global FreqTraceMode, TRACEresetFreq
10836 if FreqTraceMode.get()==3:
10837 TRACEresetFreq =
True
10840 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
10841 global T1Fline, T2Fline, T1FRline, T2FRline, TFRMline, TFMline
10842 global T1Pline, T2Pline, T1PRline, T2PRline
10843 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
10844 global PeakxM, PeakyM, PeakMdb, PeakfreqM
10845 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
10846 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
10847 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
10849 if ShowC1_VdB.get() == 1:
10854 PeakfreqRA = PeakfreqA
10855 if ShowC2_VdB.get() == 1:
10860 PeakfreqRB = PeakfreqB
10861 if ShowC1_P.get() == 1:
10863 if ShowC2_P.get() == 1:
10865 if ShowMathSA.get() > 0:
10870 PeakfreqRM = PeakfreqM
10875 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
10876 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
10877 global TAFline, TBFline, TAFRline, TBFRline, TBPRMline, TBPMline
10878 global TAPline, TBPline, TAPRline, TBPRline
10879 global TIARline, TIAXline, TIAMagline, TIAAngline
10880 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
10881 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
10882 global PeakxM, PeakyM, PeakMdb, PeakfreqM
10883 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
10884 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
10885 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
10887 if ShowCA_VdB.get() == 1:
10892 PeakfreqRA = PeakfreqA
10893 if ShowCB_VdB.get() == 1:
10898 PeakfreqRB = PeakfreqB
10899 if ShowCA_P.get() == 1:
10901 if ShowCB_P.get() == 1:
10903 if ShowMathBP.get() > 0:
10904 TBPRMline = TBPMline
10908 PeakfreqRM = PeakfreqM
10909 if Show_Rseries.get() > 0:
10910 RefIARline = TIARline
10911 if Show_Xseries.get() > 0:
10912 RefIAXline = TIAXline
10913 if Show_Magnitude.get() > 0:
10914 RefIAMagline = TIAMagline
10915 if Show_Angle.get() > 0:
10916 RefIAAngline = TIAAngline
10920 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins, bodewindow
10921 global SAMPLErate, ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
10924 if ShowCA_VdB.get() == 1:
10925 TRACEsize = len(FSweepAdB)
10926 elif ShowCA_VdB.get() == 1:
10927 TRACEsize = len(FSweepBdB)
10931 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=bodewindow)
10934 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
10935 filename =
"Bode-" + tme
10936 filename = filename +
".csv"
10938 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
10939 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=bodewindow)
10940 DataFile = open(filename,
'a')
10941 HeaderString =
'Frequency-#, '
10942 if ShowCA_VdB.get() == 1:
10944 HeaderString = HeaderString +
'CA-dB, '
10946 HeaderString = HeaderString +
'CA-Mag, '
10947 if ShowCB_VdB.get() == 1:
10949 HeaderString = HeaderString +
'CB-dB, '
10951 HeaderString = HeaderString +
'CB-Mag, '
10952 if ShowCA_P.get() == 1:
10953 HeaderString = HeaderString +
'Phase A-B, '
10954 if ShowCB_P.get() == 1:
10955 HeaderString = HeaderString +
'Phase B-A, '
10956 HeaderString = HeaderString +
'\n'
10957 DataFile.write( HeaderString )
10960 while n < len(FSweepAdB):
10961 F = FBins[FStep[n]]
10963 if ShowCA_VdB.get() == 1:
10964 V = 10 * math.log10(float(FSweepAdB[n])) + 17
10967 txt = txt +
"," + str(V)
10968 if ShowCB_VdB.get() == 1:
10969 V = 10 * math.log10(float(FSweepBdB[n])) + 17
10972 txt = txt +
"," + str(V)
10973 if ShowCA_P.get() == 1:
10974 RelPhase = FSweepAPh[n]
10976 RelPhase = RelPhase - 360
10977 elif RelPhase < -180:
10978 RelPhase = RelPhase + 360
10979 txt = txt +
"," + str(RelPhase)
10980 if ShowCB_P.get() == 1:
10981 RelPhase = FSweepBPh[n]
10983 RelPhase = RelPhase - 360
10984 elif RelPhase < -180:
10985 RelPhase = RelPhase + 360
10986 txt = txt +
"," + str(RelPhase)
10988 DataFile.write(txt)
10994 global iawindow, FStep, FBins
10995 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
10997 if NetworkScreenStatus.get() > 0:
10998 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
10999 filename =
"Impedance-" + tme
11000 filename = filename +
".csv"
11002 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
11003 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=iawindow)
11004 DataFile = open(filename,
'a')
11005 HeaderString =
'Frequency, Series R, Seriec X, Series Z, Series Angle'
11006 HeaderString = HeaderString +
'\n'
11007 DataFile.write( HeaderString )
11010 while n < len(NSweepSeriesR):
11011 F = FBins[FStep[n]]
11012 txt = str(F) +
"," + str(NSweepSeriesR[n]) +
"," + str(NSweepSeriesX[n]) +
"," + str(NSweepSeriesMag[n]) +
"," + str(NSweepSeriesAng[n])
11014 DataFile.write(txt)
11021 global RUNstatus, PowerStatus, devx, PwrBt, freqwindow, session, AWGSync, contloop, discontloop
11022 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA, DevID, FWRevOne, StopFreqEntry
11023 global Two_X_Sample, ADC_Mux_Mode
11026 if DevID ==
"No Device":
11027 showwarning(
"WARNING",
"No Device Plugged In!")
11028 elif FWRevOne == 0.0:
11029 showwarning(
"WARNING",
"Out of data Firmware!")
11031 if PowerStatus == 0:
11033 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
11034 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
11036 if ShowC1_VdB.get() == 0
and ShowC2_VdB.get() == 0
and ShowMathSA.get() == 0
and ShowC1_P.get() == 0
and ShowC2_P.get() == 0:
11037 showwarning(
"WARNING",
"Select at least one trace first", parent=freqwindow)
11040 StopFrequency = float(StopFreqEntry.get())
11042 StopFreqEntry.delete(0,
"end")
11043 StopFreqEntry.insert(0,50000)
11044 StopFrequency = 50000
11045 if FWRevOne > 2.16:
11046 if StopFrequency >= 50000:
11047 Two_X_Sample.set(1)
11049 Two_X_Sample.set(0)
11050 ADC_Mux_Mode.set(0)
11058 global RUNstatus, session, AWGSync
11060 if (RUNstatus.get() == 1):
11062 CHA.mode = Mode.HI_Z_SPLIT
11063 CHB.mode = Mode.HI_Z_SPLIT
11064 if AWGSync.get() == 0:
11068 if session.continuous:
11076 elif (RUNstatus.get() == 2):
11078 elif (RUNstatus.get() == 3):
11080 elif (RUNstatus.get() == 4):
11088 DBlevel.set(DBlevel.get() - 1)
11090 if RUNstatus.get() == 0:
11097 DBlevel.set(DBlevel.get() + 1)
11099 if RUNstatus.get() == 0:
11106 DBlevel.set(DBlevel.get() - 10)
11108 if RUNstatus.get() == 0:
11115 DBlevel.set(DBlevel.get() + 10)
11117 if RUNstatus.get() == 0:
11121 global RUNstatus, SpectrumScreenStatus, IAScreenStatus
11122 global SMPfftpwrTwo, SMPfft, FFTwindow
11123 global TRACEresetFreq
11125 if FFTwindow.get() != 8:
11126 if (SMPfftpwrTwo.get() > 6):
11127 SMPfftpwrTwo.set(SMPfftpwrTwo.get() - 1)
11128 TRACEresetFreq =
True
11129 SMPfft = 2 ** int(SMPfftpwrTwo.get())
11131 if RUNstatus.get() == 0:
11132 if SpectrumScreenStatus.get() > 0:
11134 if IAScreenStatus.get() > 0:
11136 if RUNstatus.get() == 2:
11141 global SMPfftpwrTwo, SMPfft, FFTwindow
11142 global TRACEresetFreq
11144 if FFTwindow.get() != 8:
11145 if (SMPfftpwrTwo.get() < 16):
11146 SMPfftpwrTwo.set(SMPfftpwrTwo.get() + 1)
11147 TRACEresetFREQ =
True
11148 SMPfft = 2 ** int(SMPfftpwrTwo.get())
11150 if RUNstatus.get() == 0:
11151 if SpectrumScreenStatus.get() > 0:
11153 if IAScreenStatus.get() > 0:
11155 if RUNstatus.get() == 2:
11162 if (DBdivindex.get() >= 1):
11163 DBdivindex.set(DBdivindex.get() - 1)
11165 if RUNstatus.get() == 0:
11173 if (DBdivindex.get() < len(DBdivlist) - 1):
11174 DBdivindex.set(DBdivindex.get() + 1)
11176 if RUNstatus.get() == 0:
11180 global RUNstatus, LoopNum, PowerStatus, devx, PwrBt, bodewindow, session, AWGSync
11181 global ShowCA_VdB, ShowCB_P, ShowCB_VdB, ShowCB_P, ShowMathBP, contloop, discontloop
11182 global FBins, FStep, NSteps, FSweepMode, HScaleBP, CutDC
11183 global AWGAMode, AWGAShape, AWGBMode, AWGBShape
11184 global StartBodeEntry, StopBodeEntry, SweepStepBodeEntry, DevID, FWRevOne
11185 global AWGAFreqEntry, AWGBFreqEntry, Reset_Freq, AWGAIOMode, AWGBIOMode
11186 global Two_X_Sample, ADC_Mux_Mode, AWG_2X, ZEROstuffing, SAMPLErate
11187 global BeginIndex, EndIndex
11189 if DevID ==
"No Device":
11190 showwarning(
"WARNING",
"No Device Plugged In!")
11191 elif FWRevOne == 0.0:
11192 showwarning(
"WARNING",
"Out of data Firmware!")
11194 if PowerStatus == 0:
11196 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
11197 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
11199 if ShowCA_VdB.get() == 0
and ShowCB_VdB.get() == 0
and ShowMathBP.get() == 0:
11200 showwarning(
"WARNING",
"Select at least one trace first", parent=bodewindow)
11203 if ZEROstuffing.get() < 3:
11204 ZEROstuffing.set(3)
11207 EndFreq = float(StopBodeEntry.get())
11209 StopBodeEntry.delete(0,
"end")
11210 StopBodeEntry.insert(0,10000)
11212 if FWRevOne > 2.16:
11213 if EndFreq >= 20000:
11214 Two_X_Sample.set(1)
11215 FBins = numpy.linspace(0, 100000, num=16384)
11217 Two_X_Sample.set(0)
11218 FBins = numpy.linspace(0, 50000, num=16384)
11219 ADC_Mux_Mode.set(0)
11222 BeginFreq = float(StartBodeEntry.get())
11224 StartBodeEntry.delete(0,
"end")
11225 StartBodeEntry.insert(0,100)
11228 if FSweepMode.get() == 1:
11229 if AWGAMode.get() == 2:
11232 if Two_X_Sample.get() == 1:
11239 Reset_Freq = AWGAFreqEntry.get()
11240 if FSweepMode.get() == 2:
11241 if AWGBMode.get() == 2:
11244 if Two_X_Sample.get() == 1:
11251 Reset_Freq = AWGBFreqEntry.get()
11252 if FSweepMode.get() == 3:
11256 NSteps.set(float(SweepStepBodeEntry.get()))
11258 SweepStepBodeEntry.delete(0,
"end")
11259 SweepStepBodeEntry.insert(0, NSteps.get())
11261 if FSweepMode.get() > 0:
11263 NyquistFreq = SAMPLErate/2
11264 BeginIndex = int((BeginFreq/NyquistFreq)*16384)
11265 EndIndex = int((EndFreq/NyquistFreq)*16384)
11266 if NSteps.get() < 5:
11268 if HScaleBP.get() == 1:
11269 LogFStop = math.log10(EndIndex)
11271 LogFStart = math.log10(BeginIndex)
11274 FStep = numpy.logspace(LogFStart, LogFStop, num=NSteps.get(), base=10.0)
11276 FStep = numpy.linspace(BeginIndex, EndIndex, num=NSteps.get())
11281 global RUNstatus, session, AWGSync, FSweepMode, AWGAFreqEntry, AWGBFreqEntry, Reset_Freq
11283 if FSweepMode.get() == 1:
11284 AWGAFreqEntry.delete(0,
"end")
11285 AWGAFreqEntry.insert(0, Reset_Freq)
11286 if FSweepMode.get() == 2:
11287 AWGBFreqEntry.delete(0,
"end")
11288 AWGBFreqEntry.insert(0, Reset_Freq)
11290 if (RUNstatus.get() == 1):
11292 if AWGSync.get() == 0:
11294 elif (RUNstatus.get() == 2):
11296 elif (RUNstatus.get() == 3):
11298 elif (RUNstatus.get() == 4):
11306 DBlevelBP.set(DBlevelBP.get() - 1)
11308 if RUNstatus.get() == 0:
11315 DBlevelBP.set(DBlevelBP.get() + 1)
11317 if RUNstatus.get() == 0:
11324 DBlevelBP.set(DBlevelBP.get() - 10)
11326 if RUNstatus.get() == 0:
11333 DBlevelBP.set(DBlevelBP.get() + 10)
11335 if RUNstatus.get() == 0:
11339 global DBdivindexBP
11342 if (DBdivindexBP.get() >= 1):
11343 DBdivindexBP.set(DBdivindexBP.get() - 1)
11345 if RUNstatus.get() == 0:
11349 global DBdivindexBP
11353 if (DBdivindexBP.get() < len(DBdivlist) - 1):
11354 DBdivindexBP.set(DBdivindexBP.get() + 1)
11356 if RUNstatus.get() == 0:
11360 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11367 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11374 global FFTBuffA, FFTBuffB
11391 global FFTBuffA, FFTBuffB
11394 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
11409 global FFTBuffA, FFTBuffB
11410 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
11411 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
11412 global FFTmemoryB, FFTresultB
11413 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh
11414 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
11415 global FFTwindowshape, FFTbandwidth
11416 global AWGSAMPLErate, StartFreqEntry, StopFreqEntry, StartBodeEntry
11417 global SMPfft, LoopNum, IA_Ext_Conf
11418 global STARTsample, STOPsample
11419 global TRACEaverage, FreqTraceMode, FSweepMode
11420 global TRACEresetFreq, ZEROstuffing
11421 global SpectrumScreenStatus, IAScreenStatus, BodeScreenStatus
11422 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
11430 REX = numpy.array(FFTBuffA[0:SMPfft])
11436 REX = REX * FFTwindowshape[0:len(REX)]
11439 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
11440 fftsamples = ZEROstuffingvalue * SMPfft
11443 FFTmemoryA = FFTresultA
11444 if FreqTraceMode.get() == 3:
11445 PhaseMemoryA = PhaseA
11448 ALL = numpy.fft.fft(REX, n=fftsamples)
11449 PhaseA = numpy.angle(ALL, deg=
True)
11450 ALL = numpy.absolute(ALL)
11453 le = int(len(ALL) / 2)
11455 PhaseA = PhaseA[0:le]
11456 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
11457 Totalcorr = Totalcorr * Totalcorr
11458 FFTresultA = Totalcorr * ALL
11463 REX = numpy.array(FFTBuffB[0:SMPfft])
11470 REX = REX * FFTwindowshape
11474 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
11475 fftsamples = ZEROstuffingvalue * SMPfft
11478 FFTmemoryB = FFTresultB
11479 if FreqTraceMode.get() == 3:
11480 PhaseMemoryB = PhaseB
11482 ALL = numpy.fft.fft(REX, n=fftsamples)
11483 PhaseB = numpy.angle(ALL, deg=
True)
11484 ALL = numpy.absolute(ALL)
11487 le = int(len(ALL) / 2 )
11489 PhaseB = PhaseB[0:le]
11490 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
11491 Totalcorr = Totalcorr * Totalcorr
11492 FFTresultB = Totalcorr * ALL
11494 if IA_Ext_Conf.get() == 1:
11499 REX = numpy.array(FFTBuffA[0:SMPfft]-FFTBuffB[0:SMPfft])
11505 REX = REX * FFTwindowshape
11508 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
11509 fftsamples = ZEROstuffingvalue * SMPfft
11516 ALL = numpy.fft.fft(REX, n=fftsamples)
11517 PhaseAB = numpy.angle(ALL, deg=
True)
11518 ALL = numpy.absolute(ALL)
11523 PhaseAB = PhaseAB[:le]
11524 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
11525 Totalcorr = Totalcorr * Totalcorr
11526 FFTresultAB = Totalcorr * ALL
11528 TRACEsize = int(len(FFTresultB))
11529 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
11530 if SpectrumScreenStatus.get() > 0:
11532 StartFrequency = float(StartFreqEntry.get())
11534 StartFreqEntry.delete(0,
"end")
11535 StartFreqEntry.insert(0,100)
11536 StartFrequency = 100
11537 STARTsample = StartFrequency / Fsample
11540 if LoopNum.get() == 1:
11541 PhaseMemoryB = PhaseB
11546 if NetworkScreenStatus.get() > 0:
11549 NSweepSeriesMag = []
11550 NSweepSeriesAng = []
11551 if FreqTraceMode.get() == 1:
11552 if FSweepMode.get() == 1:
11553 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
11554 if ptmax > STARTsample:
11555 STARTsample = ptmax
11558 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
11560 if FSweepMode.get() == 2:
11561 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
11562 if ptmax > STARTsample:
11563 STARTsample = ptmax
11566 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
11569 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
11570 if FSweepMode.get() == 1:
11571 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
11572 if ptmax > STARTsample:
11573 STARTsample = ptmax
11576 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
11578 if FSweepMode.get() == 2:
11579 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
11580 if ptmax > STARTsample:
11581 STARTsample = ptmax
11584 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
11586 if len(FFTresultB) == len(FFTmemoryB):
11587 FFTresultB = numpy.maximum(FFTresultB, FFTmemoryB)
11588 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
11590 FFTresultB = FFTmemoryB + (FFTresultB - FFTmemoryB) / TRACEaverage.get()
11591 PhaseB = PhaseMemoryB +(PhaseB - PhaseMemoryB) / TRACEaverage.get()
11593 FFTmemoryB = FFTresultB
11594 PhaseMemoryB = PhaseB
11596 TRACEsize = int(len(FFTresultA))
11597 Fsample = float(AWGSAMPLErate / 2) / (TRACEsize - 1)
11598 if SpectrumScreenStatus.get() > 0:
11599 STARTsample = StartFrequency / Fsample
11602 if LoopNum.get() == 1:
11603 PhaseMemoryA = PhaseA
11604 if FreqTraceMode.get() == 1:
11605 if FSweepMode.get() == 1:
11606 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
11607 if ptmax > STARTsample:
11608 STARTsample = ptmax
11611 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
11613 if FSweepMode.get() == 2:
11614 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
11615 if ptmax > STARTsample:
11616 STARTsample = ptmax
11619 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
11622 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
11623 if FSweepMode.get() == 1:
11624 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
11625 if ptmax > STARTsample:
11626 STARTsample = ptmax
11629 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
11631 if FSweepMode.get() == 2:
11632 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
11633 if ptmax > STARTsample:
11634 STARTsample = ptmax
11637 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
11640 if len(FFTresultA) == len(FFTmemoryA):
11641 FFTresultA = numpy.maximum(FFTresultA, FFTmemoryA)
11642 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
11644 FFTresultA = FFTmemoryA + (FFTresultA - FFTmemoryA) / TRACEaverage.get()
11645 PhaseA = PhaseMemoryA +(PhaseA - PhaseMemoryA) / TRACEaverage.get()
11647 FFTmemoryA = FFTresultA
11648 PhaseMemoryA = PhaseA
11650 if FSweepMode.get() > 0
and BodeScreenStatus.get() > 0:
11651 FSweepAdB.append(numpy.amax(FFTresultA))
11652 FSweepBdB.append(numpy.amax(FFTresultB))
11653 FSweepAPh.append(PhaseA[numpy.argmax(FFTresultA)])
11654 FSweepBPh.append(PhaseB[numpy.argmax(FFTresultB)])
11656 TRACEresetFreq =
False
11659 global FFTmemoryA, FFTresultA
11660 global FFTmemoryB, FFTresultB
11661 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
11662 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep
11663 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
11664 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11665 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakIndexA, PeakIndexB
11666 global PeakfreqA, PeakfreqB, Two_X_Sample
11671 global AWGSAMPLErate, HScale, Fsample, SAMPLErate, BaseSampleRate
11672 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
11673 global STARTsample, STOPsample, LoopNum, FSweepMode
11674 global FreqTraceMode
11675 global T1Fline, T2Fline, TFMline, T1Pline, T2Pline
11682 StartFrequency = float(StartFreqEntry.get())
11684 StartFreqEntry.delete(0,
"end")
11685 StartFreqEntry.insert(0,100)
11686 StartFrequency = 100
11688 StopFrequency = float(StopFreqEntry.get())
11690 StopFreqEntry.delete(0,
"end")
11691 StopFreqEntry.insert(0,50000)
11692 StopFrequency = 50000
11693 if StartFrequency > StopFrequency :
11694 StopFreqEntry.delete(0,
"end")
11695 StopFreqEntry.insert(0,50000)
11696 StopFrequency = 50000
11697 if StopFrequency < StartFrequency :
11698 StopFreqEntry.delete(0,
"end")
11699 StopFreqEntry.insert(0,50000)
11700 StopFrequency = 50000
11702 Phasecenter = int(PhCenFreqEntry.get())
11703 RelPhaseCenter.set(Phasecenter)
11705 PhCenFreqEntry.delete(0,
"end")
11706 PhCenFreqEntry.insert(0,0)
11707 RelPhaseCenter.set(0)
11709 if ShowC1_VdB.get() == 1
or ShowMathSA.get() > 0:
11710 TRACEsize = len(FFTresultA)
11711 elif ShowC2_VdB.get() == 1
or ShowMathSA.get() > 0:
11712 TRACEsize = len(FFTresultB)
11715 if FSweepMode.get() > 0
and LoopNum.get() == NSteps.get():
11716 PhaseA = PhaseMemoryA
11717 PhaseB = PhaseMemoryB
11719 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
11720 Yc = float(Y0TF) + Yconv * (DBlevel.get())
11723 Yphconv = float(GRHF) / 360
11724 Yp = float(Y0TF) + Yphconv + 180
11726 Fpixel = (StopFrequency - StartFrequency) / GRWF
11727 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
11728 LogFStop = math.log10(StopFrequency)
11730 LogFStart = math.log10(StartFrequency)
11733 LogFpixel = (LogFStop - LogFStart) / GRWF
11734 STARTsample = StartFrequency / Fsample
11735 STARTsample = int(math.ceil(STARTsample))
11737 STOPsample = StopFrequency / Fsample
11738 STOPsample = int(math.floor(STOPsample))
11740 MAXsample = TRACEsize
11741 if STARTsample > (MAXsample - 1):
11742 STARTsample = MAXsample - 1
11744 if STOPsample > MAXsample:
11745 STOPsample = MAXsample
11753 PeakIndexA = PeakIndexB = n
11754 PeakdbA = PeakdbB = PeakMdb = -200
11755 while n <= STOPsample:
11757 if HScale.get() == 1:
11759 LogF = math.log10(F)
11760 x = X0LF + (LogF - LogFStart)/LogFpixel
11764 x = X0LF + (F - StartFrequency) / Fpixel
11765 if ShowC1_VdB.get() == 1:
11766 T1Fline.append(int(x + 0.5))
11768 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
11769 ya = Yc - Yconv * dbA
11778 PeakyA = int(ya + 0.5)
11779 PeakxA = int(x + 0.5)
11782 T1Fline.append(int(ya + 0.5))
11783 if ShowC2_VdB.get() == 1:
11784 T2Fline.append(int(x + 0.5))
11786 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
11787 yb = Yc - Yconv * dbB
11796 PeakyB = int(yb + 0.5)
11797 PeakxB = int(x + 0.5)
11800 T2Fline.append(int(yb + 0.5))
11801 if ShowC1_P.get() == 1:
11802 T1Pline.append(int(x + 0.5))
11803 if FSweepMode.get() > 0:
11804 RelPhase = PhaseMemoryA[n]-PhaseMemoryB[n]
11806 RelPhase = PhaseA[n]-PhaseB[n]
11807 RelPhase = RelPhase - Phasecenter
11809 RelPhase = RelPhase - 360
11810 elif RelPhase < -180:
11811 RelPhase = RelPhase + 360
11812 if Two_X_Sample.get() == 0:
11813 PhErr = 0.0018 * n * Fsample
11814 RelPhase = RelPhase + PhErr - 12.0
11816 RelPhase = RelPhase - 9.0
11817 ya = Yp - Yphconv * RelPhase
11818 T1Pline.append(int(ya + 0.5))
11819 if ShowC2_P.get() == 1:
11820 T2Pline.append(int(x + 0.5))
11821 if FSweepMode.get() > 0:
11822 RelPhase = PhaseMemoryB[n]-PhaseMemoryA[n]
11824 RelPhase = PhaseB[n]-PhaseA[n]
11825 RelPhase = RelPhase - Phasecenter
11827 RelPhase = RelPhase - 360
11828 elif RelPhase < -180:
11829 RelPhase = RelPhase + 360
11830 if Two_X_Sample.get() == 0:
11831 PhErr = 0.0018 * n * Fsample
11832 RelPhase = RelPhase - PhErr - 12.0
11834 RelPhase = RelPhase - 9.0
11835 ya = Yp - Yphconv * RelPhase
11836 T2Pline.append(int(ya + 0.5))
11837 if ShowMathSA.get() > 0:
11838 TFMline.append(int(x + 0.5))
11839 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
11840 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
11841 if ShowMathSA.get() == 1:
11843 elif ShowMathSA.get() == 2:
11845 yb = Yc - Yconv * MdB
11852 PeakyM = int(yb + 0.5)
11853 PeakxM = int(x + 0.5)
11855 TFMline.append(int(yb + 0.5))
11859 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins
11860 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
11861 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11862 global PeakxM, PeakyM, PeakMdb, PeakfreqM
11863 global PeakfreqA, PeakfreqB, Two_X_Sample, PhaseOffset1x, PhaseOffset2x
11864 global DBdivindexBP
11869 global AWGSAMPLErate, HScaleBP, RUNstatus, SAMPLErate, BaseSampleRate
11870 global StartBodeEntry, StopBodeEntry
11871 global STARTsample, STOPsample, LoopNum, FSweepMode
11872 global FreqTraceMode, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
11873 global TAFline, TBFline, TBPMline, TAPline, TBPline
11877 global ResScale, NetworkScreenStatus, Show_Rseries, NSweepSeriesR, Show_Xseries, NSweepSeriesX
11878 global Show_Magnitude, NSweepSeriesMag, Show_Angle, NSweepSeriesAng
11879 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
11883 if ShowCA_VdB.get() == 1
or ShowMathBP.get() > 0:
11884 TRACEsize = len(FStep)
11885 elif ShowCB_VdB.get() == 1
or ShowMathBP.get() > 0:
11886 TRACEsize = len(FStep)
11891 EndFreq = float(StopBodeEntry.get())
11893 StopBodeEntry.delete(0,
"end")
11894 StopBodeEntry.insert(0,10000)
11897 BeginFreq = float(StartBodeEntry.get())
11899 StartBodeEntry.delete(0,
"end")
11900 StartBodeEntry.insert(0,100)
11903 Phasecenter = int(PhCenBodeEntry.get())
11904 RelPhaseCenter.set(Phasecenter)
11906 PhCenBodeEntry.delete(0,
"end")
11907 PhCenBodeEntry.insert(0,0)
11908 RelPhaseCenter.set(0)
11911 Impedcenter = int(ImCenBodeEntry.get())
11912 ImpedanceCenter.set(Impedcenter)
11914 ImCenBodeEntry.delete(0,
"end")
11915 ImCenBodeEntry.insert(0,0)
11916 ImpedanceCenter.set(0)
11919 HalfSAMPLErate = SAMPLErate/2
11920 BeginIndex = int((BeginFreq/HalfSAMPLErate)*16384)
11921 EndIndex = int((EndFreq/HalfSAMPLErate)*16384)
11922 CurrentFreqX = X0LBP + 14
11923 if FSweepMode.get() > 0
and len(FSweepAdB) > 4:
11925 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
11926 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
11928 Ymax = Y0TBP + GRHBP
11929 Yphconv = float(GRHBP) / 360
11930 Yp = float(Y0TBP) + Yphconv + 180
11933 Fpixel = (EndFreq - BeginFreq) / GRWBP
11934 LogFStop = math.log10(EndFreq)
11936 LogFStart = math.log10(BeginFreq)
11939 LogFpixel = (LogFStop - LogFStart) / GRWBP
11953 for n
in range(len(FSweepAdB)):
11955 F = FBins[int(FStep[n])]
11957 F = FBins[int(FStep[0])]
11958 if F >= BeginFreq
and F <= EndFreq:
11959 if HScaleBP.get() == 1:
11961 LogF = math.log10(F)
11962 x = x1 + (LogF - LogFStart)/LogFpixel
11966 x = x1 + (F - BeginFreq) / Fpixel
11968 if ShowCA_VdB.get() == 1:
11969 TAFline.append(int(x + 0.5))
11971 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
11972 ya = Yc - Yconv * dbA
11981 PeakyA = int(ya + 0.5)
11982 PeakxA = int(x + 0.5)
11984 TAFline.append(int(ya + 0.5))
11985 if ShowCB_VdB.get() == 1:
11986 TBFline.append(int(x + 0.5))
11988 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
11989 yb = Yc - Yconv * dbB
11998 PeakyB = int(yb + 0.5)
11999 PeakxB = int(x + 0.5)
12001 TBFline.append(int(yb + 0.5))
12002 if ShowCA_P.get() == 1:
12003 TAPline.append(int(x + 0.5))
12004 RelPhase = FSweepAPh[n] - FSweepBPh[n]
12005 RelPhase = RelPhase - Phasecenter
12007 RelPhase = RelPhase - 360
12008 elif RelPhase < -180:
12009 RelPhase = RelPhase + 360
12010 if Two_X_Sample.get() == 0:
12012 RelPhase = RelPhase + PhErr - PhaseOffset1x
12014 RelPhase = RelPhase - PhaseOffset2x
12015 ya = Yp - Yphconv * RelPhase
12016 TAPline.append(int(ya + 0.5))
12017 if ShowCB_P.get() == 1:
12018 TBPline.append(int(x + 0.5))
12019 RelPhase = FSweepBPh[n] - FSweepAPh[n]
12020 RelPhase = RelPhase - Phasecenter
12022 RelPhase = RelPhase - 360
12023 elif RelPhase < -180:
12024 RelPhase = RelPhase + 360
12025 if Two_X_Sample.get() == 0:
12027 RelPhase = RelPhase - PhErr - PhaseOffset1x
12029 RelPhase = RelPhase - PhaseOffset2x
12030 ya = Yp - Yphconv * RelPhase
12031 TBPline.append(int(ya + 0.5))
12032 if ShowMathBP.get() > 0:
12033 TBPMline.append(int(x + 0.5))
12034 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
12035 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
12036 if ShowMathBP.get() == 1:
12038 elif ShowMathBP.get() == 2:
12040 yb = Yc - Yconv * MdB
12047 PeakyM = int(yb + 0.5)
12048 PeakxM = int(x + 0.5)
12050 TBPMline.append(int(yb + 0.5))
12052 if NetworkScreenStatus.get() > 0:
12053 ycenter = Y0TBP + (GRHBP/2)
12054 OhmsperPixel = float(ResScale.get())*Vdiv.get()/GRHBP
12056 for n
in range(len(NSweepSeriesR)):
12058 F = FBins[int(FStep[n])]
12060 F = FBins[int(FStep[0])]
12061 if F >= BeginFreq
and F <= EndFreq:
12062 if HScaleBP.get() == 1:
12064 LogF = math.log10(F)
12065 x = x1 + (LogF - LogFStart)/LogFpixel
12069 x = x1 + (F - BeginFreq) / Fpixel
12070 if Show_Rseries.get() == 1:
12071 TIARline.append(int(x + 0.5))
12072 y1 = ycenter - ((NSweepSeriesR[n]-Impedcenter) / OhmsperPixel)
12077 TIARline.append(y1)
12078 if Show_Xseries.get() == 1:
12079 TIAXline.append(int(x + 0.5))
12080 y1 = ycenter - ((NSweepSeriesX[n]-Impedcenter) / OhmsperPixel)
12085 TIAXline.append(y1)
12086 if Show_Magnitude.get() == 1:
12087 TIAMagline.append(int(x + 0.5))
12088 y1 = ycenter - ((NSweepSeriesMag[n]-Impedcenter) / OhmsperPixel)
12093 TIAMagline.append(y1)
12094 if Show_Angle.get() == 1:
12095 TIAAngline.append(int(x + 0.5))
12096 y1 = ycenter - Yphconv * (NSweepSeriesAng[n]-Phasecenter)
12101 TIAAngline.append(y1)
12104 global CANVASheightBP, CANVASwidthBP, SmoothCurvesBP
12105 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12106 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12107 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12108 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12109 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12111 global COLORsignalband, COLORtext
12112 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
12113 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
12114 global DBdivindexBP
12117 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
12124 global AWGSAMPLErate, HScaleBP, SAMPLErate, BaseSampleRate
12126 global StartBodeEntry, StopBodeEntry
12127 global ShowCA_P, ShowCB_P, ShowRA_VdB, ShowRB_VdB, ShowMarkerBP
12128 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP
12129 global ShowMathBP, BodeDisp, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
12130 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
12131 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, NetworkScreenStatus
12132 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
12133 global TAFline, TBFline, TAPline, TAFRline, TBFRline, TBPMline, TBPRMline
12134 global TAPRline, TBPRline
12135 global TRACEaverage
12136 global FreqTraceMode
12137 global Vdiv, ResScale
12138 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
12139 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
12146 EndFreq = float(StopBodeEntry.get())
12148 StopBodeEntry.delete(0,
"end")
12149 StopBodeEntry.insert(0,10000)
12152 BeginFreq = float(StartBodeEntry.get())
12154 StartBodeEntry.delete(0,
"end")
12155 StartBodeEntry.insert(0,100)
12158 Phasecenter = int(PhCenBodeEntry.get())
12159 RelPhaseCenter.set(Phasecenter)
12161 PhCenBodeEntry.delete(0,
"end")
12162 PhCenBodeEntry.insert(0,0)
12163 RelPhaseCenter.set(0)
12166 Impedcenter = int(ImCenBodeEntry.get())
12167 ImpedanceCenter.set(Impedcenter)
12169 ImCenBodeEntry.delete(0,
"end")
12170 ImCenBodeEntry.insert(0,0)
12171 ImpedanceCenter.set(0)
12178 while (i <= Vdiv.get()):
12179 y = Y0TBP + i * GRHBP/Vdiv.get()
12180 Dline = [x1,y,x2,y]
12181 if i == 0
or i == Vdiv.get():
12182 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12184 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12185 Vaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
12186 Vaxis_label = str(Vaxis_value)
12187 Bodeca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
12188 if ShowCA_P.get() == 1
or ShowCB_P.get() == 1
or Show_Angle.get() == 1:
12189 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get()))) + Phasecenter
12190 Vaxis_label = str(Vaxis_value)
12191 Bodeca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
12192 if NetworkScreenStatus.get() > 0:
12193 if Show_Rseries.get() == 1
or Show_Xseries.get() == 1
or Show_Magnitude.get() == 1:
12194 RperDiv = float(ResScale.get())
12195 Vaxis_value = ( (RperDiv * Vdiv.get()/2) - (i * RperDiv) ) + Impedcenter
12196 if Vaxis_value > 500
or Vaxis_value < -500:
12197 Vaxis_value = Vaxis_value/1000.0
12198 if Vaxis_value > 5
or Vaxis_value < -5:
12199 Vaxis_label =
' {0:.0f}'.format(Vaxis_value) +
'K'
12201 Vaxis_label =
' {0:.1f}'.format(Vaxis_value) +
'K'
12203 Vaxis_label =
' {0:.0f} '.format(Vaxis_value)
12204 Bodeca.create_text(x1-23, y, text=Vaxis_label, fill=COLORtrace5, anchor=
"e", font=(
"arial", FontSize ))
12210 if HScaleBP.get() == 1:
12212 LogFStop = math.log10(EndFreq)
12214 LogFStart = math.log10(BeginFreq)
12217 LogFpixel = (LogFStop - LogFStart) / GRWBP
12219 while F <= EndFreq:
12222 LogF = math.log10(F)
12223 x = x1 + (LogF - LogFStart)/LogFpixel
12226 Dline = [x,y1,x,y2]
12227 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
12228 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12229 axis_label = str(F)
12230 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
12232 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12249 Freqdiv = (EndFreq - BeginFreq) / 10
12251 x = x1 + i * GRWBP/10
12252 Dline = [x,y1,x,y2]
12253 if i == 0
or i == 10:
12254 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12256 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12257 axis_value = BeginFreq + (i * Freqdiv)
12258 axis_label = str(axis_value)
12259 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
12262 Fpixel = (EndFreq - BeginFreq) / GRWBP
12263 LogFStop = math.log10(EndFreq)
12265 LogFStart = math.log10(BeginFreq)
12268 LogFpixel = (LogFStop - LogFStart) / GRWBP
12269 if ShowBPCur.get() > 0:
12270 Dline = [BPCursor, Y0TBP, BPCursor, Y0TBP+GRHBP]
12271 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
12273 if HScaleBP.get() == 1:
12274 xfreq = 10**(((BPCursor-x1)*LogFpixel) + LogFStart)
12276 xfreq = ((BPCursor-x1)*Fpixel)+BeginFreq
12277 XFString =
' {0:.2f} '.format(xfreq)
12278 V_label = XFString +
" Hz"
12279 Bodeca.create_text(BPCursor+1, BdBCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
12281 if ShowBdBCur.get() > 0:
12282 Dline = [x1, BdBCursor, x1+GRWBP, BdBCursor]
12283 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
12284 if ShowBdBCur.get() == 1:
12286 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
12287 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
12288 yvdB = ((Yc-BdBCursor)/Yconv)
12289 VdBString =
' {0:.1f} '.format(yvdB)
12290 V_label = VdBString +
" dBV"
12293 Yconv = float(GRHBP) / 360.0
12295 yvdB = 180 + ((Yc-BdBCursor)/Yconv) + Phasecenter
12296 VdBString =
' {0:.1f} '.format(yvdB)
12297 V_label = VdBString +
" Deg"
12298 Bodeca.create_text(BPCursor+1, BdBCursor+5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
12300 SmoothBool = SmoothCurvesBP.get()
12302 if len(TAFline) > 4:
12304 if OverRangeFlagA == 1:
12305 Bodeca.create_line(TAFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12307 Bodeca.create_line(TAFline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12308 if ShowMarkerBP.get() == 1:
12309 Peak_label =
' {0:.2f} '.format(PeakdbA) +
',' +
' {0:.1f} '.format(PeakfreqA)
12310 Bodeca.create_text(PeakxA, PeakyA, text=Peak_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
12311 if len(TBFline) > 4:
12313 if OverRangeFlagB == 1:
12314 Bodeca.create_line(TBFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12316 Bodeca.create_line(TBFline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12317 if ShowMarkerBP.get() == 1:
12318 Peak_label =
' {0:.2f} '.format(PeakdbB) +
',' +
' {0:.1f} '.format(PeakfreqB)
12319 Bodeca.create_text(PeakxB, PeakyB, text=Peak_label, fill=COLORtrace2, anchor=
"w", font=(
"arial", FontSize ))
12320 if len(TAPline) > 4:
12322 Bodeca.create_line(TAPline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12323 if len(TBPline) > 4:
12325 Bodeca.create_line(TBPline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12326 if ShowCA_RdB.get() == 1
and len(TAFRline) > 4:
12327 Bodeca.create_line(TAFRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12328 if ShowMarkerBP.get() == 1:
12329 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
12330 Bodeca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"e", font=(
"arial", FontSize ))
12331 if ShowCB_RdB.get() == 1
and len(TBFRline) > 4:
12332 Bodeca.create_line(TBFRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12333 if ShowMarkerBP.get() == 1:
12334 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
12335 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"w", font=(
"arial", FontSize ))
12336 if ShowCA_RP.get() == 1
and len(TAPRline) > 4:
12337 Bodeca.create_line(TAPRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12338 if ShowCB_RP.get() == 1
and len(TBPRline) > 4:
12339 Bodeca.create_line(TBPRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12340 if ShowMathBP.get() > 0
and len(TBPMline) > 4:
12341 Bodeca.create_line(TBPMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12342 if ShowMarkerBP.get() == 1:
12343 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
12344 Bodeca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"w", font=(
"arial", FontSize ))
12345 if ShowRMathBP.get() == 1
and len(TBPRMline) > 4:
12346 Bodeca.create_line(TBPRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12347 if ShowMarkerBP.get() == 1:
12348 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
12349 Bodeca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"w", font=(
"arial", FontSize ))
12350 if Show_Rseries.get() == 1
and len(TIARline) > 4:
12351 Bodeca.create_line(TIARline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12352 if Show_Xseries.get() == 1
and len(TIAXline) > 4:
12353 Bodeca.create_line(TIAXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12354 if Show_Magnitude.get() == 1
and len(TIAMagline) > 4:
12355 Bodeca.create_line(TIAMagline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12356 if Show_Angle.get() == 1
and len(TIAAngline) > 4:
12357 Bodeca.create_line(TIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12358 if Show_RseriesRef.get() == 1
and len(RefIARline) > 4:
12359 Bodeca.create_line(RefIARline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12360 if Show_XseriesRef.get() == 1
and len(RefIAXline) > 4:
12361 Bodeca.create_line(RefIAXline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12362 if Show_MagnitudeRef.get() == 1
and len(RefIAMagline) > 4:
12363 Bodeca.create_line(RefIAMagline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12364 if Show_AngleRef.get() == 1
and len(RefIAAngline) > 4:
12365 Bodeca.create_line(RefIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12367 Dline = [CurrentFreqX, Y0TBP, CurrentFreqX, Y0TBP+GRHBP]
12368 Bodeca.create_line(Dline, dash=(2,2), fill=COLORgrid, width=GridWidth.get())
12369 if HScaleBP.get() == 1:
12370 xfreq = 10**(((CurrentFreqX-x1)*LogFpixel) + LogFStart)
12372 xfreq = ((CurrentFreqX-x1)*Fpixel)+BeginFreq
12373 XFString =
' {0:.0f} '.format(xfreq)
12374 V_label = XFString +
" Hz"
12375 Bodeca.create_text(CurrentFreqX, Y0TBP+GRHBP+1, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
12378 txt =
" Sample rate: " + str(SAMPLErate)
12379 txt = txt +
" FFT samples: " + str(SMPfft)
12381 txt = txt +
" " + FFTwindowname
12385 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12388 txt = str(BeginFreq) +
" to " + str(EndFreq) +
" Hz"
12389 txt = txt +
" " + str(DBdivlist[DBdivindexBP.get()]) +
" dB/div"
12390 txt = txt +
" Level: " + str(DBlevelBP.get()) +
" dB "
12391 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
12395 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12397 if FreqTraceMode.get() == 1:
12398 txt =
"Normal mode "
12400 if FreqTraceMode.get() == 2:
12401 txt =
"Peak hold mode "
12403 if FreqTraceMode.get() == 3:
12404 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
12406 if ZEROstuffing.get() > 0:
12407 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
12409 if (RUNstatus.get() == 0):
12410 txt = txt +
" Stopped "
12412 if BodeDisp.get() == 1:
12413 txt = txt +
" Running "
12415 txt = txt +
" Display off "
12416 if FSweepMode.get() > 0:
12417 txt = txt +
" Freq Step = " + str(LoopNum.get())
12420 IDtxt = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12424 global FFTBuffA, FFTBuffB
12427 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
12444 global PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
12447 global RsystemEntry
12450 global ImpedanceMagnitude
12451 global ImpedanceAngle
12452 global ImpedanceRseries, ImpedanceXseries
12455 DEG2RAD = (math.pi / 180.0)
12458 ResValue = float(RsystemEntry.get())
12462 VA = math.pow(10,(PeakdbA/20))
12463 VB = math.pow(10,(PeakdbB/20))
12464 VVangleCosine = math.cos(math.radians(PeakRelPhase))
12465 if IA_Ext_Conf.get() == 1:
12466 VAB = math.pow(10,(PeakdbAB/20))
12471 VI = math.sqrt(VA**2 + VZ**2 - 2*VA*VZ*VVangleCosine)
12472 costheta = (VA**2 + VI**2 - VZ**2)/(2 * VA * VI)
12473 Za = ResValue * VA / VI
12474 ImpedanceRseries = Za * costheta - ResValue
12475 ImpedanceMagnitude = ResValue * VZ / VI
12476 ImpedanceXseries = math.sqrt(ImpedanceMagnitude**2 - ImpedanceRseries**2)
12478 if(PeakRelPhase < 0.0):
12479 ImpedanceXseries = -ImpedanceXseries
12480 if IA_Ext_Conf.get() == 1:
12481 ImpedanceRseries = -ImpedanceRseries
12482 ImpedanceAngle = math.atan2(ImpedanceXseries, ImpedanceRseries) / DEG2RAD
12485 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
12486 global FFTmemoryB, FFTresultB
12487 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
12488 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
12489 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakphaseA, PeakphaseB
12490 global PeakfreqA, PeakfreqB, GainCorEntry, PhaseCorEntry, PhaseCorrection
12496 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
12497 global STARTsample, STOPsample, LoopNum, FSweepMode
12498 global TRACEmode, Two_X_Sample, IA_Ext_Conf
12499 global T1Vline, T2Vline, TMline, T1Pline, T2Pline
12503 global ImpedanceMagnitude
12504 global ImpedanceAngle
12505 global ImpedanceRseries, ImpedanceXseries
12508 TRACEsize = len(FFTresultA)
12509 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
12512 STARTsample = int(math.ceil(STARTsample))
12513 if Two_X_Sample.get() == 0:
12514 STOPsample = 45000 / Fsample
12516 STOPsample = 90000 / Fsample
12517 STOPsample = int(math.floor(STOPsample))
12520 GainCorrection = float(eval(GainCorEntry.get()))
12522 GainCorEntry.delete(0,END)
12523 GainCorEntry.insert(0, GainCorrection)
12526 PhaseCorrection = float(eval(PhaseCorEntry.get()))
12528 PhaseCorEntry.delete(0,END)
12529 PhaseCorEntry.insert(0, PhaseCorrection)
12531 MAXsample = TRACEsize
12532 if STARTsample > (MAXsample - 1):
12533 STARTsample = MAXsample - 1
12535 if STOPsample > MAXsample:
12536 STOPsample = MAXsample
12539 PeakfreqA = PeakfreqB = PeakfreqM = F = n * Fsample
12540 PeakphaseA = PhaseA[n]
12541 PeakphaseB = PhaseB[n]
12545 PeakdbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12546 PeakdbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12547 PeakMdb = PeakdbA - PeakdbB
12548 if IA_Ext_Conf.get() == 1:
12549 PeakdbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
12550 while n <= STOPsample:
12553 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12559 PeakphaseA = PhaseA[n]
12563 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12569 PeakphaseB = PhaseB[n]
12571 if IA_Ext_Conf.get() == 1:
12573 dbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
12576 if dbAB > PeakdbAB:
12578 PeakphaseAB = PhaseAB[n]
12579 RelPhase = PhaseA[n]-PhaseB[n]
12581 RelPhase = RelPhase - 360
12582 elif RelPhase < -180:
12583 RelPhase = RelPhase + 360
12584 if Two_X_Sample.get() == 0:
12585 PhErr = 0.0018 * n * Fsample
12586 RelPhase = RelPhase + PhErr - 12.0
12588 RelPhase = RelPhase - 9.0
12590 if IA_Ext_Conf.get() == 1:
12591 PeakRelPhase = PeakphaseAB-PeakphaseA
12593 PeakRelPhase = PeakphaseB-PeakphaseA
12595 if PeakRelPhase > 180:
12596 PeakRelPhase = PeakRelPhase - 360
12597 elif PeakRelPhase < -180:
12598 PeakRelPhase = PeakRelPhase + 360
12599 if Two_X_Sample.get() == 0:
12600 PhErr = 0.0018 * PeakSample * Fsample
12601 PeakRelPhase = PeakRelPhase + PhaseCorrection - PhErr
12603 PeakRelPhase = PeakRelPhase + PhaseCorrection
12604 PeakdbB = PeakdbB + GainCorrection
12609 global CANVASheightIA, CANVASwidthIA, IAca, TIAMline, TIAMRline
12610 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12611 global PeakxM, PeakyM, PeakMdb, PeakfreqM, Two_X_Sample
12612 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12613 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12614 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12615 global PeakphaseA, PeakphaseB, PeakRelPhase, PhaseCalEntry
12616 global SmoothCurvesBP, TRACEwidth, GridWidth
12617 global COLORsignalband, COLORtext, COLORgrid, IASweepSaved
12618 global COLORtrace1, COLORtrace2, COLORtrace5, COLORtrace6
12619 global ResScale, DisplaySeries
12620 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
12627 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
12629 global TRACEaverage
12630 global FreqTraceMode
12632 global ImpedanceMagnitude
12633 global ImpedanceAngle
12634 global ImpedanceRseries, ImpedanceXseries
12635 global LoopNum, NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
12637 if LoopNum.get() > 1:
12638 if NetworkScreenStatus.get() > 0:
12639 NSweepSeriesR.append(ImpedanceRseries)
12640 NSweepSeriesX.append(ImpedanceXseries)
12641 NSweepSeriesMag.append(ImpedanceMagnitude)
12642 NSweepSeriesAng.append(ImpedanceAngle)
12645 SmoothBool = SmoothCurvesBP.get()
12650 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
12651 OhmsperPixel = float(ResScale.get())/Radius
12652 TRadius = Radius * Vdiv.get()
12655 xright = 10 + xcenter + ( Vdiv.get() * Radius )
12656 while (i <= Vdiv.get()):
12657 x0 = xcenter - ( i * Radius )
12658 x1 = xcenter + ( i * Radius )
12659 y0 = ycenter - ( i * Radius )
12660 y1 = ycenter + ( i * Radius )
12661 ResTxt = float(ResScale.get()) * i
12662 IAca.create_oval ( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
12663 IAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
12664 IAca.create_text(xright, y0, text=str(ResTxt), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
12667 IAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=2)
12668 IAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=2)
12669 RAngle = math.radians(45)
12670 y = TRadius*math.sin(RAngle)
12671 x = TRadius*math.cos(RAngle)
12672 IAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
12673 IAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
12674 IAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
12675 IAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
12676 IAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
12677 IAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
12680 if IASweepSaved.get() > 0:
12681 if len(TIAMRline) > 4:
12682 IAca.create_line(TIAMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12684 x1 = xcenter + ( ImpedanceRseries / OhmsperPixel )
12688 x1 = xcenter - xright
12689 IAca.create_line(xcenter, ycenter, x1, ycenter, fill=COLORtrace1, width=TRACEwidth.get())
12690 y1 = ycenter - ( ImpedanceXseries / OhmsperPixel )
12694 y1 = ycenter - xright
12697 IAca.create_line(xcenter, ycenter, xcenter, y1, fill=COLORtrace6, width=TRACEwidth.get())
12698 MagRadius = ImpedanceMagnitude / OhmsperPixel
12699 y1 = ycenter - MagRadius*math.sin(math.radians(ImpedanceAngle))
12703 y1 = ycenter - xright
12704 x1 = xcenter + MagRadius*math.cos(math.radians(ImpedanceAngle))
12708 x1 = xcenter - xright
12709 IAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, width=TRACEwidth.get())
12712 if len(NSweepSeriesMag) > 2:
12714 while index < len(NSweepSeriesMag):
12715 MagRadius = NSweepSeriesMag[index] / OhmsperPixel
12716 y1 = ycenter - MagRadius*math.sin(math.radians(NSweepSeriesAng[index]))
12720 y1 = ycenter - xright
12721 x1 = xcenter + MagRadius*math.cos(math.radians(NSweepSeriesAng[index]))
12725 x1 = xcenter - xright
12726 TIAMline.append(x1)
12727 TIAMline.append(y1)
12729 IAca.create_line(TIAMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12731 if OverRangeFlagA == 1:
12734 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
12735 IAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
12736 if OverRangeFlagB == 1:
12739 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
12740 IAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
12743 txt =
" Sample rate: " + str(SAMPLErate)
12744 txt = txt +
" FFT samples: " + str(SMPfft)
12746 txt = txt +
" " + FFTwindowname
12750 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12752 x = X0LIA + GRWIA + 4
12754 txt =
"Gain " +
' {0:.2f} '.format(PeakdbB-PeakdbA) +
" dB"
12755 TXT9 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12757 txt =
"Phase " +
' {0:.2f} '.format(PeakRelPhase) +
" Degrees"
12758 TXT10 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12760 txt =
"Freq " +
' {0:.1f} '.format(PeakfreqA) +
" Hertz"
12761 TXT11 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12763 txt =
"Impedance Magnitude"
12764 TXT1 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12766 txt =
' {0:.1f} '.format(ImpedanceMagnitude)
12767 TXT2 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12769 txt =
"Impedance Angle"
12770 TXT3 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12772 txt =
' {0:.1f} '.format(ImpedanceAngle)
12773 TXT4 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12775 txt =
"Impedance R series"
12776 TXT5 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12778 txt =
' {0:.1f} '.format(ImpedanceRseries)
12779 TXT6 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12781 txt =
"Impedance X series"
12782 TXT7 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12784 txt =
' {0:.1f} '.format(ImpedanceXseries)
12785 TXT8 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
12787 if ImpedanceXseries < 0:
12790 Cseries = -1 / ( 2 * math.pi * PeakfreqA * ImpedanceXseries )
12793 Qseries = 1/(2*math.pi*PeakfreqA*Cseries*ImpedanceRseries)
12794 Cparallel = Cseries * (Qseries**2 / (1+Qseries**2))
12795 Cparallel = Cparallel * 1E6
12796 Rparallel = ImpedanceRseries * (1+Qseries**2)
12797 Cseries = Cseries * 1E6
12798 if DisplaySeries.get() == 0:
12799 txt =
"Series Capacitance"
12800 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12803 Cseries = Cseries * 1E3
12805 Cseries = Cseries * 1E3
12806 txt =
' {0:.1f} '.format(Cseries) +
"pF"
12808 txt =
' {0:.3f} '.format(Cseries) +
"nF"
12810 txt =
' {0:.3f} '.format(Cseries) +
"uF"
12811 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12814 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12817 Cparallel = Cparallel * 1E3
12819 Cparallel = Cparallel * 1E3
12820 txt =
"Capacitance " +
' {0:.1f} '.format(Cparallel) +
"pF"
12822 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"nF"
12824 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"uF"
12825 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12827 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
12828 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12830 dissp = abs(ImpedanceRseries/ImpedanceXseries) * 100
12831 txt =
'D = {0:.2f} '.format(dissp) +
" %"
12832 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12834 elif ImpedanceXseries > 0:
12837 Lseries = ImpedanceXseries / ( 2 * 3.14159 * PeakfreqA )
12840 Qseries = (2*math.pi*PeakfreqA*Lseries)/ImpedanceRseries
12841 Lparallel = Lseries * ((1+Qseries**2) / Qseries**2)
12842 Lparallel = Lparallel * 1E3
12843 Rparallel = ImpedanceRseries * (1+Qseries**2)
12844 Lseries = Lseries * 1E3
12845 if DisplaySeries.get() == 0:
12846 txt =
"Series Inductance"
12847 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12850 Lseries = Lseries * 1E3
12851 txt =
' {0:.2f} '.format(Lseries) +
"uH"
12853 txt =
' {0:.2f} '.format(Lseries) +
"mH"
12854 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12857 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12860 Lparallel = Lparallel * 1E3
12861 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"uH"
12863 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"mH"
12864 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12866 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
12867 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12869 qf = abs(ImpedanceXseries/ImpedanceRseries) * 100
12870 txt =
'Q = {0:.2f} '.format(qf)
12871 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
12873 if Two_X_Sample.get() == 0:
12874 txt =
"0.0 to 45000 Hz"
12876 txt =
"0.0 to 90000 Hz"
12877 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
12881 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12883 if FreqTraceMode.get() == 1:
12884 txt =
"Normal mode "
12886 if FreqTraceMode.get() == 2:
12887 txt =
"Peak hold mode "
12889 if FreqTraceMode.get() == 3:
12890 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
12892 if ZEROstuffing.get() > 0:
12893 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
12895 if (RUNstatus.get() == 0):
12896 txt = txt +
" Stopped "
12898 txt = txt +
" Running "
12900 IDtxt = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12903 global IAca, GRWIA, XOLIA, GRHIA, Y0TIA, CANVASwidthIA, CANVASheightIA, FontSize
12905 CANVASwidthIA = event.width - 4
12906 CANVASheightIA = event.height - 4
12907 GRWIA = CANVASwidthIA - (2 * X0LIA) - int(21.25 * FontSize)
12908 GRHIA = CANVASheightIA - Y0TIA - int(2.25 * FontSize)
12913 global iawindow, IAca, logo, IAScreenStatus, RsystemEntry, IADisp, AWGSync, IASource
12914 global COLORcanvas, CANVASwidthIA, CANVASheightIA, RevDate, AWGAMode, AWGAShape, AWGBMode
12915 global FFTwindow, CutDC, ColorMode, ResScale, GainCorEntry, PhaseCorEntry, DisplaySeries
12916 global GRWIA, X0LIA, GRHIA, Y0TIA, IA_Ext_Conf, DeBugMode, SWRev
12917 global NetworkScreenStatus, IASweepSaved
12919 if IAScreenStatus.get() == 0:
12920 IAScreenStatus.set(1)
12924 CANVASwidthIA = 170 + GRWIA + 2 * X0LIA
12925 CANVASheightIA = GRHIA + Y0TIA + 10
12930 iawindow = Toplevel()
12931 iawindow.title(
"Impedance Analyzer " + SWRev + RevDate)
12932 iawindow.protocol(
"WM_DELETE_WINDOW", DestroyIAScreen)
12933 frame2iar = Frame(iawindow, borderwidth=5, relief=RIDGE)
12934 frame2iar.pack(side=RIGHT, expand=NO, fill=BOTH)
12936 frame2ia = Frame(iawindow, borderwidth=5, relief=RIDGE)
12937 frame2ia.pack(side=TOP, expand=YES, fill=BOTH)
12939 IAca = Canvas(frame2ia, width=CANVASwidthIA, height=CANVASheightIA, background=COLORcanvas, cursor=
'cross')
12940 IAca.bind(
"<Configure>", IACaresize)
12941 IAca.bind(
"<Return>", DoNothing)
12942 IAca.bind(
"<space>", onCanvasSpaceBar)
12943 IAca.pack(side=TOP, expand=YES, fill=BOTH)
12947 dropmenu = Frame( frame2iar )
12948 dropmenu.pack(side=TOP)
12950 IAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
12951 IAFilemenu.menu = Menu(IAFilemenu, tearoff = 0 )
12952 IAFilemenu[
"menu"] = IAFilemenu.menu
12953 IAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
12954 IAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
12955 IAFilemenu.menu.add_command(label=
"Save V Cal", command=BSaveCal)
12956 IAFilemenu.menu.add_command(label=
"Load V Cal", command=BLoadCal)
12957 IAFilemenu.menu.add_command(label=
"Save Data", command=BSaveDataIA)
12958 IAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenIA)
12959 IAFilemenu.menu.add_command(label=
"Help", command=BHelp)
12960 IAFilemenu.pack(side=LEFT, anchor=W)
12962 IAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
12963 IAOptionmenu.menu = Menu(IAOptionmenu, tearoff = 0 )
12964 IAOptionmenu[
"menu"] = IAOptionmenu.menu
12965 IAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
12966 IAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
12967 IAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
12968 IAOptionmenu.menu.add_checkbutton(label=
'Sweep-on', variable=NetworkScreenStatus)
12969 IAOptionmenu.menu.add_checkbutton(label=
'Save Sweep', variable=IASweepSaved, command=BSaveIASweep)
12971 IAOptionmenu.menu.add_command(label=
"-Ext Config-", command=donothing)
12972 IAOptionmenu.menu.add_radiobutton(label=
'1', variable=IA_Ext_Conf, value=0)
12973 IAOptionmenu.menu.add_radiobutton(label=
'2', variable=IA_Ext_Conf, value=1)
12974 IAOptionmenu.menu.add_command(label=
"-Meas As-", command=donothing)
12975 IAOptionmenu.menu.add_radiobutton(label=
'Series', variable=DisplaySeries, value=0)
12976 IAOptionmenu.menu.add_radiobutton(label=
'Parallel', variable=DisplaySeries, value=1)
12977 IAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
12978 IAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
12979 IAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
12980 IAOptionmenu.pack(side=LEFT, anchor=W)
12982 rsemenu = Frame( frame2iar )
12983 rsemenu.pack(side=TOP)
12984 rseb2 = Button(rsemenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
12985 rseb2.pack(side=RIGHT)
12986 rseb3 = Button(rsemenu, text=
"Run", style=
"Run.TButton", command=BStartIA)
12987 rseb3.pack(side=RIGHT)
12989 IAFFTwindmenu = Menubutton(frame2iar, text=
"FFTwindow", style=
"W11.TButton")
12990 IAFFTwindmenu.menu = Menu(IAFFTwindmenu, tearoff = 0 )
12991 IAFFTwindmenu[
"menu"] = IAFFTwindmenu.menu
12992 IAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
12993 IAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
12994 IAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
12995 IAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
12996 IAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
12997 IAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
12998 IAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
12999 IAFFTwindmenu.pack(side=TOP)
13001 smpmenu = Frame( frame2iar )
13002 smpmenu.pack(side=TOP)
13003 smpb1 = Button(smpmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
13004 smpb1.pack(side=LEFT)
13005 smpb2 = Button(smpmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
13006 smpb2.pack(side=LEFT)
13008 rsystem = Frame( frame2iar )
13009 rsystem.pack(side=TOP)
13010 rsystemlab = Label(rsystem, text=
"Ext Res")
13011 rsystemlab.pack(side=LEFT, anchor=W)
13012 RsystemEntry = Entry(rsystem, width=7)
13013 RsystemEntry.bind(
'<MouseWheel>', onTextScroll)
13014 RsystemEntry.bind(
'<Key>', onTextKey)
13015 RsystemEntry.pack(side=LEFT, anchor=W)
13016 RsystemEntry.delete(0,
"end")
13017 RsystemEntry.insert(4,1000)
13019 ressb = Frame( frame2iar )
13020 ressb.pack(side=TOP)
13021 reslab = Label(ressb, text=
"Ohms/div ")
13022 reslab.pack(side=LEFT)
13023 ResScale = Spinbox(ressb, width=7, values=ResScalediv)
13024 ResScale.bind(
'<MouseWheel>', onSpinBoxScroll)
13025 ResScale.pack(side=LEFT)
13026 ResScale.delete(0,
"end")
13027 ResScale.insert(0,500)
13029 GainCor = Frame( frame2iar )
13030 GainCor.pack(side=TOP)
13031 GainCorlab = Label(GainCor, text=
"Gain Cor dB")
13032 GainCorlab.pack(side=LEFT, anchor=W)
13033 GainCorEntry = Entry(GainCor, width=7)
13034 GainCorEntry.bind(
'<MouseWheel>', onTextScroll)
13035 GainCorEntry.bind(
'<Key>', onTextKey)
13036 GainCorEntry.pack(side=LEFT, anchor=W)
13037 GainCorEntry.delete(0,
"end")
13038 GainCorEntry.insert(4,0.0)
13040 PhaseCor = Frame( frame2iar )
13041 PhaseCor.pack(side=TOP)
13042 PhaseCorlab = Label(PhaseCor, text=
"Phase Cor")
13043 PhaseCorlab.pack(side=LEFT, anchor=W)
13044 PhaseCorEntry = Entry(PhaseCor, width=7)
13045 PhaseCorEntry.bind(
'<MouseWheel>', onTextScroll)
13046 PhaseCorEntry.bind(
'<Key>', onTextKey)
13047 PhaseCorEntry.pack(side=LEFT, anchor=W)
13048 PhaseCorEntry.delete(0,
"end")
13049 PhaseCorEntry.insert(4,0.0)
13051 srclab = Label(frame2iar, text=
"Source")
13052 srclab.pack(side=TOP)
13053 extsrc1 = Radiobutton(frame2iar, text=
"Internal", variable=IASource, value=0, command=IASourceSet)
13054 extsrc1.pack(side=TOP)
13055 extsrc2 = Radiobutton(frame2iar, text=
"External", variable=IASource, value=1, command=IASourceSet)
13056 extsrc2.pack(side=TOP)
13058 dismiss1button = Button(frame2iar, text=
"Dismiss", style=
"W8.TButton", command=DestroyIAScreen)
13059 dismiss1button.pack(side=TOP)
13061 ADI1 = Label(frame2iar, image=logo, anchor=
"sw", compound=
"top")
13062 ADI1.pack(side=TOP)
13065 global iawindow, IAScreenStatus, IAca, IADisp
13067 IAScreenStatus.set(0)
13073 global TIAMline, TIAMRline, IASweepSaved
13075 if IASweepSaved.get() > 0:
13076 TIAMRline = TIAMline
13079 global nqpwindow, NqPca, logo, NqPScreenStatus, NqPDisp
13080 global COLORcanvas, CANVASwidthNqP, CANVASheightNqP, RevDate
13081 global GRWNqP, X0LNqP, GRHNqP, Y0TNqP, DeBugMode, SWRev
13082 global NetworkScreenStatus, NqPSweepSaved
13084 if NqPScreenStatus.get() == 0:
13085 NqPScreenStatus.set(1)
13087 CANVASwidthNqP = GRWNqP + (2 * X0LNqP)
13088 CANVASheightNqP = GRHNqP + Y0TNqP + 10
13089 nqpwindow = Toplevel()
13090 nqpwindow.title(
"Nyquist Plot " + SWRev + RevDate)
13091 nqpwindow.protocol(
"WM_DELETE_WINDOW", DestroyNqPScreen)
13095 frame2nqp = Frame(nqpwindow, borderwidth=5, relief=RIDGE)
13096 frame2nqp.pack(side=TOP, expand=YES, fill=BOTH)
13098 NqPca = Canvas(frame2nqp, width=CANVASwidthNqP, height=CANVASheightNqP, background=COLORcanvas, cursor=
'cross')
13099 NqPca.bind(
"<Configure>", NqPCaresize)
13100 NqPca.bind(
"<Return>", DoNothing)
13101 NqPca.bind(
"<space>", onCanvasSpaceBar)
13102 NqPca.pack(side=TOP, expand=YES, fill=BOTH)
13105 global nqpwindow, NqPScreenStatus, NqPca, NqPDisp
13107 NqPScreenStatus.set(0)
13109 nqpwindow.destroy()
13112 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, FontSize
13114 CANVASwidthNqP = event.width - 4
13115 CANVASheightNqP = event.height - 4
13116 GRWNqP = CANVASwidthNqP - (2 * X0LNqP)
13117 GRHNqP = CANVASheightNqP - Y0TNqP - int(1.25 * FontSize)
13122 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, COLORtrace1
13123 global COLORgrid, GridWidth, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
13124 global FSweepAdB, FSweepBdB, FSweepBPh, FSweepAPh, ShowMathBP, NqPline, Two_X_Sample, TRACEwidth
13125 global Vdiv, FBins, FStep
13130 SmoothBool = SmoothCurvesBP.get()
13135 Radius = (GRWNqP-X0LNqP)/(1 + Vdiv.get() * 2)
13136 dBperPixel = float(DBdivlist[DBdivindexBP.get()])/Radius
13137 TRadius = Radius * Vdiv.get()
13139 x2 = X0LNqP + GRWNqP
13140 xright = 10 + xcenter + ( Vdiv.get() * Radius )
13141 while (i <= Vdiv.get()):
13142 x0 = xcenter - ( i * Radius )
13143 x1 = xcenter + ( i * Radius )
13144 y0 = ycenter - ( i * Radius )
13145 y1 = ycenter + ( i * Radius )
13146 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
13147 NqPca.create_oval ( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
13148 NqPca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
13149 NqPca.create_text(xright, y0, text=str(dBaxis_value), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13152 NqPca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=2)
13153 NqPca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=2)
13154 RAngle = math.radians(45)
13155 y = TRadius*math.sin(RAngle)
13156 x = TRadius*math.cos(RAngle)
13157 NqPca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13158 NqPca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13159 NqPca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
13160 NqPca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13161 NqPca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
13162 NqPca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
13166 if len(FSweepAdB) > 4:
13167 for index
in range(len(FSweepAdB)):
13168 if index < len(FStep):
13169 F = FBins[int(FStep[index])]
13171 F = FBins[int(FStep[0])]
13173 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
13174 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
13175 if ShowMathBP.get() == 1:
13177 elif ShowMathBP.get() == 2:
13179 MagRadius = (-MdB / dBperPixel) + (DBlevelBP.get()/dBperPixel)
13181 RelPhase = FSweepBPh[index] - FSweepAPh[index]
13183 RelPhase = RelPhase - 360
13184 elif RelPhase < -180:
13185 RelPhase = RelPhase + 360
13186 if Two_X_Sample.get() == 0:
13188 RelPhase = RelPhase - PhErr
13190 RelPhase = RelPhase
13191 y1 = ycenter - MagRadius*math.sin(math.radians(RelPhase))
13195 y1 = ycenter - xright
13196 x1 = xcenter + MagRadius*math.cos(math.radians(RelPhase ))
13200 x1 = xcenter - xright
13203 NqPca.create_line(NqPline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13206 global NiCScreenStatus, NiCDisp
13207 global nicwindow, NiCca, logo, SWRev
13208 global COLORcanvas, CANVASwidthNic, CANVASheightNic, RevDate
13209 global GRWNiC, X0LNiC, GRHNiC, Y0TNiC, DeBugMode
13210 global NetworkScreenStatus, NiCSweepSaved
13212 if NiCScreenStatus.get() == 0:
13213 NiCScreenStatus.set(1)
13215 CANVASwidthNic = GRWNiC + 18 + X0LNiC
13216 CANVASheightNic = GRHNiC + 60
13217 nicwindow = Toplevel()
13218 nicwindow.title(
"Nichols Plot " + SWRev + RevDate)
13219 nicwindow.protocol(
"WM_DELETE_WINDOW", DestroyNiCScreen)
13223 frame2nic = Frame(nicwindow, borderwidth=5, relief=RIDGE)
13224 frame2nic.pack(side=TOP, expand=YES, fill=BOTH)
13226 NiCca = Canvas(frame2nic, width=CANVASwidthNic, height=CANVASheightNic, background=COLORcanvas, cursor=
'cross')
13227 NiCca.bind(
"<Configure>", NiCCaresize)
13228 NiCca.bind(
"<Return>", DoNothing)
13229 NiCca.bind(
"<space>", onCanvasSpaceBar)
13230 NiCca.pack(side=TOP, expand=YES, fill=BOTH)
13233 global nicwindow, NiCScreenStatus, NiCca, NiCDisp
13235 NiCScreenStatus.set(0)
13237 nicwindow.destroy()
13240 global NiCca, GRWNiC, XOLNiC, GRHNiC, Y0TNiC, CANVASwidthNic, CANVASheightNic, FontSize
13242 CANVASwidthNic = event.width - 4
13243 CANVASheightNic = event.height - 4
13244 GRWNiC = CANVASwidthNic - int(2.25 * FontSize) - X0LNiC
13245 GRHNiC = CANVASheightNic - int(7.5 * FontSize)
13250 global NiCline, NiCca, CANVASwidthNic, CANVASheightNic, X0LNiC, GRWNiC, Y0TNiC, GRHNiC, X0TNiC
13251 global COLORzeroline, GridWidth, COLORgrid, FSweepAdB, FSweepBdB, Two_X_Sample, ShowMathBP
13252 global FSweepBPh, FSweepAPh, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
13253 global Vdiv, FBins, FStep, PhCenBodeEntry, RelPhaseCenter
13257 Ymax = Y0TNiC + GRHNiC
13259 Xmax = X0LNiC + GRWNiC
13261 Phasecenter = int(PhCenBodeEntry.get())
13262 RelPhaseCenter.set(Phasecenter)
13264 PhCenBodeEntry.delete(0,
"end")
13265 PhCenBodeEntry.insert(0,0)
13266 RelPhaseCenter.set(0)
13270 SmoothBool = SmoothCurvesBP.get()
13275 x2 = X0TNiC = X0LNiC + GRWNiC
13276 mg_siz = GRWNiC/10.0
13277 mg_inc = mg_siz/5.0
13278 DegPerDiv = 360 / 10
13279 while (i < Vdiv.get()+1):
13280 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
13281 y = Y0TNiC + i * GRHNiC/Vdiv.get()
13282 Dline = [x1,y,x2,y]
13283 if dBaxis_value == 0:
13284 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
13289 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
13290 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13294 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13295 dBaxis_label = str(dBaxis_value)
13296 NiCca.create_text(x1-3, y, text=dBaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
13302 y2 = Y0TNiC + GRHNiC
13303 mg_siz = GRHNiC/10.0
13304 mg_inc = mg_siz/5.0
13307 x = X0LNiC + i * GRWNiC/10.0
13308 Dline = [x,y1,x,y2]
13309 axis_value = Phasecenter - 180 + (i * DegPerDiv)
13310 axis_label = str(axis_value)
13311 if ( axis_value == 0):
13312 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
13317 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
13318 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13322 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13323 NiCca.create_text(x, y2+3, text=axis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
13327 Yconv = float(GRHNiC) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
13328 Yc = float(Y0TNiC) + Yconv * (DBlevelBP.get())
13329 Xphconv = float(GRWNiC / 360.0)
13330 Xp = float(X0LNiC) + Xphconv * 180.0
13334 if len(FSweepAdB) > 4:
13336 for index
in range(len(FSweepAdB)):
13337 if index < len(FStep):
13338 F = FBins[int(FStep[index])]
13340 F = FBins[int(FStep[0])]
13342 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
13343 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
13344 if ShowMathBP.get() == 1:
13346 elif ShowMathBP.get() == 2:
13348 yb = Yc - Yconv * MdB
13354 RelPhase = FSweepBPh[index] - FSweepAPh[index]
13355 RelPhase = RelPhase - Phasecenter
13357 RelPhase = RelPhase - 360
13358 elif RelPhase < -180:
13359 RelPhase = RelPhase + 360
13360 if Two_X_Sample.get() == 0:
13362 RelPhase = RelPhase - PhErr
13364 RelPhase = RelPhase
13365 xa = Xp + Xphconv * RelPhase
13370 NiCline.append(int(xa + 0.5))
13371 NiCline.append(int(yb + 0.5))
13372 NiCca.create_line(NiCline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13375 global FFTBuffA, FFTBuffB
13378 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13394 global FFTBuffA, FFTBuffB
13397 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13413 global FFTmemoryA, FFTresultA
13414 global FFTmemoryB, FFTresultB
13415 global PhaseA, PhaseB, freqwindow
13416 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, ShowC1_VdB, ShowC2_VdB
13419 if ShowC1_VdB.get() == 1:
13420 TRACEsize = len(FFTresultA)
13421 elif ShowC2_VdB.get() == 1:
13422 TRACEsize = len(FFTresultB)
13426 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=freqwindow)
13428 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
13429 filename =
"Spectrum-" + tme
13430 filename = filename +
".csv"
13432 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
13433 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=freqwindow)
13434 DataFile = open(filename,
'a')
13435 HeaderString =
'Frequency-#, '
13436 if ShowC1_VdB.get() == 1:
13438 HeaderString = HeaderString +
'CA-dB, '
13440 HeaderString = HeaderString +
'CA-Mag, '
13441 if ShowC2_VdB.get() == 1:
13443 HeaderString = HeaderString +
'CB-dB, '
13445 HeaderString = HeaderString +
'CB-Mag, '
13446 if ShowC1_P.get() == 1:
13447 HeaderString = HeaderString +
'Phase A-B, '
13448 if ShowC2_P.get() == 1:
13449 HeaderString = HeaderString +
'Phase B-A, '
13450 HeaderString = HeaderString +
'\n'
13451 DataFile.write( HeaderString )
13453 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13456 while n < TRACEsize:
13459 if ShowC1_VdB.get() == 1:
13460 V = 10 * math.log10(float(FFTresultA[n])) + 17
13463 txt = txt +
"," + str(V)
13464 if ShowC2_VdB.get() == 1:
13465 V = 10 * math.log10(float(FFTresultB[n])) + 17
13468 txt = txt +
"," + str(V)
13469 if ShowC1_P.get() == 1:
13470 RelPhase = PhaseA[n]-PhaseB[n]
13472 RelPhase = RelPhase - 360
13473 elif RelPhase < -180:
13474 RelPhase = RelPhase + 360
13475 txt = txt +
"," + str(RelPhase)
13476 if ShowC2_P.get() == 1:
13477 RelPhase = PhaseB[n]-PhaseA[n]
13479 RelPhase = RelPhase - 360
13480 elif RelPhase < -180:
13481 RelPhase = RelPhase + 360
13482 txt = txt +
"," + str(RelPhase)
13484 DataFile.write(txt)
13491 global CANVASheightF, CANVASwidthF, SmoothCurvesSA
13492 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13493 global PeakxM, PeakyM, PeakMdb, PeakfreqM
13494 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
13495 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
13496 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM, PeakIndexA, PeakIndexB, Fsample
13498 global COLORsignalband, COLORtext
13499 global COLORtrace1, COLORtrace2
13500 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
13504 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
13511 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SingleShotSA, HScale, HarmonicMarkers
13513 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
13514 global ShowC1_P, ShowC2_P, ShowRA_VdB, ShowRB_VdB, ShowMarker
13515 global ShowRA_P, ShowRB_P, ShowMathSA, FreqDisp
13516 global ShowFCur, ShowdBCur, FCursor, dBCursor
13517 global T1Fline, T2Fline, T1Pline, T1FRline, T2FRline, TFMline, TFRMline
13518 global T1PRline, T2PRline
13519 global TRACEaverage
13520 global FreqTraceMode
13527 StartFrequency = float(StartFreqEntry.get())
13529 StartFreqEntry.delete(0,
"end")
13530 StartFreqEntry.insert(0,100)
13531 StartFrequency = 100
13533 StopFrequency = float(StopFreqEntry.get())
13535 StopFreqEntry.delete(0,
"end")
13536 StopFreqEntry.insert(0,10000)
13537 StopFrequency = 10000
13539 Phasecenter = int(PhCenFreqEntry.get())
13540 RelPhaseCenter.set(Phasecenter)
13542 PhCenFreqEntry.delete(0,
"end")
13543 PhCenFreqEntry.insert(0,0)
13544 RelPhaseCenter.set(0)
13550 while (i <= Vdiv.get()):
13551 y = Y0TF + i * GRHF/Vdiv.get()
13552 Dline = [x1,y,x2,y]
13553 if i == 0
or i == Vdiv.get():
13554 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13556 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13557 Vaxis_value = (DBlevel.get() - (i * DBdivlist[DBdivindex.get()]))
13558 Vaxis_label = str(Vaxis_value)
13559 Freqca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
13560 if ShowC1_P.get() == 1
or ShowC2_P.get() == 1:
13561 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get())))
13562 Vaxis_value = Vaxis_value + Phasecenter
13563 Vaxis_label = str(Vaxis_value)
13564 Freqca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
13570 if HScale.get() == 1:
13572 LogFStop = math.log10(StopFrequency)
13574 LogFStart = math.log10(StartFrequency)
13577 LogFpixel = (LogFStop - LogFStart) / GRWF
13579 while F <= StopFrequency:
13580 if F >= StartFrequency:
13582 LogF = math.log10(F)
13583 x = X0LF + (LogF - LogFStart)/LogFpixel
13586 Dline = [x,y1,x,y2]
13587 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
13588 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13589 axis_label = str(F)
13590 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
13592 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13609 Freqdiv = (StopFrequency - StartFrequency) / 10
13611 x = X0LF + i * GRWF/10.0
13612 Dline = [x,y1,x,y2]
13613 if i == 0
or i == 10:
13614 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13616 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13617 axis_value = (StartFrequency + (i * Freqdiv))
13618 axis_label = str(axis_value)
13619 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
13622 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
13623 Yc = float(Y0TF) + Yconv * (DBlevel.get())
13624 Fpixel = (StopFrequency - StartFrequency) / GRWF
13625 if ShowFCur.get() > 0:
13626 Dline = [FCursor, Y0TF, FCursor, Y0TF+GRHF]
13627 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
13629 if HScale.get() == 1:
13630 LogFStop = math.log10(StopFrequency)
13632 LogFStart = math.log10(StartFrequency)
13635 LogFpixel = (LogFStop - LogFStart) / GRWF
13636 xfreq = 10**(((FCursor-X0LF)*LogFpixel) + LogFStart)
13638 Fpixel = (StopFrequency - StartFrequency) / GRWF
13639 xfreq = ((FCursor-X0LF)*Fpixel)+StartFrequency
13640 XFString =
' {0:.2f} '.format(xfreq)
13641 V_label = XFString +
" Hz"
13642 Freqca.create_text(FCursor+1, dBCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
13644 if ShowdBCur.get() > 0:
13645 Dline = [X0LF, dBCursor, X0LF+GRWF, dBCursor]
13646 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
13648 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
13649 Yc = float(Y0TF) + Yconv * (DBlevel.get())
13650 yvdB = ((Yc-dBCursor)/Yconv)
13651 VdBString =
' {0:.1f} '.format(yvdB)
13652 V_label = VdBString +
" dBV"
13653 Freqca.create_text(FCursor+1, dBCursor+5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
13655 SmoothBool = SmoothCurvesSA.get()
13657 if len(T1Fline) > 4:
13659 if OverRangeFlagA == 1:
13660 Freqca.create_line(T1Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13662 Freqca.create_line(T1Fline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13663 if ShowMarker.get() > 0:
13665 while k <= HarmonicMarkers.get():
13667 dbA = (10 * math.log10(float(FFTresultA[PeakIndexA*k])) + 17)
13668 FreqA = k*PeakIndexA*Fsample
13669 if ShowMarker.get() == 2
and k > 1:
13670 Peak_label =
' {0:.2f} '.format(dbA - PeakdbA) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
13672 Peak_label =
' {0:.2f} '.format(dbA) +
',' +
' {0:.1f} '.format(FreqA)
13673 if HScale.get() == 1:
13675 LogF = math.log10(FreqA)
13676 xA = X0LF + int((LogF - LogFStart)/LogFpixel)
13680 xA = X0LF+int((FreqA - StartFrequency)/Fpixel)
13681 yA = Yc - Yconv * dbA
13682 Freqca.create_text(xA, yA, text=Peak_label, fill=COLORtrace1, anchor=
"s", font=(
"arial", FontSize ))
13686 if len(T2Fline) > 4:
13688 if OverRangeFlagB == 1:
13689 Freqca.create_line(T2Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13691 Freqca.create_line(T2Fline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13692 if ShowMarker.get() > 0:
13694 while k <= HarmonicMarkers.get():
13696 dbB = (10 * math.log10(float(FFTresultB[PeakIndexB*k])) + 17)
13697 FreqB = k*PeakIndexB*Fsample
13698 if ShowMarker.get() == 2
and k > 1:
13699 Peak_label =
' {0:.2f} '.format(dbB - PeakdbB) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
13701 Peak_label =
' {0:.2f} '.format(dbB) +
',' +
' {0:.1f} '.format(FreqB)
13702 if HScale.get() == 1:
13704 LogF = math.log10(FreqB)
13705 xB = X0LF + int((LogF - LogFStart)/LogFpixel)
13709 xB = X0LF+int((FreqB - StartFrequency)/Fpixel)
13710 yB = Yc - Yconv * dbB
13711 Freqca.create_text(xB, yB, text=Peak_label, fill=COLORtrace2, anchor=
"s", font=(
"arial", FontSize ))
13715 if len(T1Pline) > 4:
13717 Freqca.create_line(T1Pline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13718 if len(T2Pline) > 4:
13720 Freqca.create_line(T2Pline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13721 if ShowRA_VdB.get() == 1
and len(T1FRline) > 4:
13722 Freqca.create_line(T1FRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13723 if ShowMarker.get() == 1:
13724 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
13725 Freqca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"s", font=(
"arial", FontSize ))
13726 if ShowRB_VdB.get() == 1
and len(T2FRline) > 4:
13727 Freqca.create_line(T2FRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13728 if ShowMarker.get() == 1:
13729 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
13730 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"s", font=(
"arial", FontSize ))
13731 if ShowRA_P.get() == 1
and len(T1PRline) > 4:
13732 Freqca.create_line(T1PRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13733 if ShowRB_P.get() == 1
and len(T2PRline) > 4:
13734 Freqca.create_line(T2PRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13735 if ShowMathSA.get() > 0
and len(TFMline) > 4:
13736 Freqca.create_line(TFMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13737 if ShowMarker.get() ==1:
13738 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
13739 Freqca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"s", font=(
"arial", FontSize ))
13740 if ShowRMath.get() == 1
and len(TFRMline) > 4:
13741 Freqca.create_line(TFRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13742 if ShowMarker.get() ==1:
13743 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
13744 Freqca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"s", font=(
"arial", FontSize ))
13747 txt =
" Sample rate: " + str(SAMPLErate)
13748 txt = txt +
" FFT samples: " + str(SMPfft)
13750 txt = txt +
" " + FFTwindowname
13754 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13757 txt = str(StartFrequency) +
" to " + str(StopFrequency) +
" Hz"
13758 txt = txt +
" " + str(DBdivlist[DBdivindex.get()]) +
" dB/div"
13759 txt = txt +
" Level: " + str(DBlevel.get()) +
" dB "
13760 if FFTwindow.get() < 7:
13761 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
13763 txt = txt +
" FFT Bandwidth = ???"
13767 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13769 if FreqTraceMode.get() == 1:
13770 txt =
"Normal mode "
13772 if FreqTraceMode.get() == 2:
13773 txt =
"Peak hold mode "
13775 if FreqTraceMode.get() == 3:
13776 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
13778 if ZEROstuffing.get() > 0:
13779 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
13781 if (RUNstatus.get() == 0)
and (SingleShotSA.get() == 0):
13782 txt = txt +
" Stopped "
13783 elif SingleShotSA.get() == 1:
13784 txt = txt +
" Single Shot Trace "
13786 if FreqDisp.get() == 1:
13787 txt = txt +
" Running "
13789 txt = txt +
" Display off "
13792 IDtxt = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13795 global SMPfft, FFTwindow
13796 global SMPfftpwrTwo, BodeDisp
13797 global TRACEresetFreq, FreqTraceMode, LoopNum, FSweepMode, FSweepCont
13800 if BodeDisp.get() == 0:
13801 if FFTwindow.get() != 8:
13802 SMPfft = 2 ** int(SMPfftpwrTwo.get())
13805 if FreqTraceMode.get() == 1
and TRACEresetFreq ==
False:
13806 TRACEresetFreq =
True
13807 if FreqTraceMode.get() == 2
and LoopNum.get() == 1
and FSweepMode.get() > 0
and FSweepCont.get() == 0
and BodeDisp.get() >0:
13808 TRACEresetFreq =
True
13811 global FFTbandwidth
13813 global FFTwindowname
13814 global FFTwindowshape
13815 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
13817 global LastWindow, LastSMPfft
13819 if LastWindow == FFTwindow.get()
and LastSMPfft == SMPfft:
13823 FFTwindowname =
"No such window"
13826 if FFTwindow.get() == 0:
13827 FFTwindowname =
" Rectangular (no) window (B=1) "
13830 if FFTwindow.get() == 1:
13831 FFTwindowname =
" Cosine window (B=1.24) "
13834 if FFTwindow.get() == 2:
13835 FFTwindowname =
" Triangular window (B=1.33) "
13838 if FFTwindow.get() == 3:
13839 FFTwindowname =
" Hann window (B=1.5) "
13842 if FFTwindow.get() == 4:
13843 FFTwindowname =
" Blackman window (B=1.73) "
13846 if FFTwindow.get() == 5:
13847 FFTwindowname =
" Nuttall window (B=2.02) "
13850 if FFTwindow.get() == 6:
13851 FFTwindowname =
" Flat top window (B=3.77) "
13854 if FFTwindow.get() == 7:
13855 FFTwindowname = FFTUserWindowString
13858 FFTwindowshape = eval(FFTUserWindowString)
13860 FFTwindowshape = numpy.ones(SMPfft)
13861 print(
"Filling FFT window with Ones")
13862 elif FFTwindow.get() == 8:
13863 FFTwindowname =
"Window Shape From file"
13866 FFTbandwidth = int(FFTbw * SAMPLErate / float(SMPfft))
13868 FFTwindowshape = numpy.ones(SMPfft)
13872 if FFTwindow.get() == 1:
13873 w = math.sin(math.pi * n / (SMPfft - 1))
13874 FFTwindowshape[n] = w * 1.571
13876 if FFTwindow.get() == 2:
13877 w = (2.0 / SMPfft) * ((SMPfft/ 2.0) - abs(n - (SMPfft - 1) / 2.0))
13878 FFTwindowshape[n] = w * 2.0
13880 if FFTwindow.get() == 3:
13881 w = 0.5 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1))
13882 FFTwindowshape[n] = w * 2.000
13884 if FFTwindow.get() == 4:
13885 w = 0.42 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.08 * math.cos(4 * math.pi * n / (SMPfft - 1))
13886 FFTwindowshape[n] = w * 2.381
13888 if FFTwindow.get() == 5:
13889 w = 0.355768 - 0.487396 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.144232 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.012604 * math.cos(6 * math.pi * n / (SMPfft - 1))
13890 FFTwindowshape[n] = w * 2.811
13892 if FFTwindow.get() == 6:
13893 w = 1.0 - 1.93 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 1.29 * math.cos(4 * math.pi * n / (SMPfft - 1))- 0.388 * math.cos(6 * math.pi * n / (SMPfft - 1)) + 0.032 * math.cos(8 * math.pi * n / (SMPfft - 1))
13894 FFTwindowshape[n] = w * 1.000
13896 LastWindow = FFTwindow.get()
13897 LastSMPfft = SMPfft
13900 global FFTUserWindowString, freqwindow
13902 TempString = FFTUserWindowString
13903 FFTUserWindowString = askstring(
"User FFT Window",
"Current User Window: " + FFTUserWindowString +
"\n\nNew Window:\n", initialvalue=FFTUserWindowString, parent=freqwindow)
13904 if (FFTUserWindowString ==
None):
13905 FFTUserWindowString = TempString
13908 global FFTwindowshape, SMPfft, LastSMPfft, FFTwindow, LastWindow
13911 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=freqwindow)
13913 CSVFile = open(filename)
13914 csv_f = csv.reader(CSVFile)
13915 FFTwindowshape = []
13918 FFTwindowshape.append(float(row[0]))
13920 print(
'skipping non-numeric row')
13921 FFTwindowshape = numpy.array(FFTwindowshape)
13923 SMPfft = len(FFTwindowshape)
13924 LastSMPfft = SMPfft
13925 LastWindow = FFTwindow.get()
13928 showwarning(
"WARNING",
"No such file found or wrong format!")
13931 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
13935 if RUNstatus.get() == 0:
13937 Freqca.bind_all(
'<MouseWheel>', onCanvasFreqClickScroll)
13940 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
13941 if event.widget == Freqca:
13942 ShiftKeyDwn = event.state & 1
13943 if ShowFCur.get() > 0
and ShiftKeyDwn == 0:
13944 FCursor = FCursor + event.delta/100
13945 elif ShowdBCur.get() > 0
or ShiftKeyDwn == 1:
13946 dBCursor = dBCursor - event.delta/100
13947 if RUNstatus.get() == 0:
13956 global Freqca, MarkerLoc, SAMPLErate, BaseSampleRate
13957 global COLORgrid, COLORtext, HScale, ShowC1_VdB, ShowC2_VdB
13958 global COLORtrace1, COLORtrace2, StartFreqEntry, StopFreqEntry
13959 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF
13961 if (RUNstatus.get() == 0):
13962 MarkerFreqNum = MarkerFreqNum + 1
13963 COLORmarker = COLORgrid
13964 if ShowC1_VdB.get() == 1:
13965 COLORmarker = COLORtrace1
13966 elif ShowC2_VdB.get() == 1:
13967 COLORmarker = COLORtrace2
13969 StartFrequency = float(StartFreqEntry.get())
13971 StartFreqEntry.delete(0,
"end")
13972 StartFreqEntry.insert(0,100)
13973 StartFrequency = 100
13975 StopFrequency = float(StopFreqEntry.get())
13977 StopFreqEntry.delete(0,
"end")
13978 StopFreqEntry.insert(0,100)
13979 StopFrequency = 100
13981 Freqca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
13982 Freqca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
13983 Freqca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
13985 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
13986 Yc = float(Y0TF) + Yconv * (DBlevel.get())
13987 Yphconv = float(GRHF) / 360
13988 Yp = float(Y0TF) + Yphconv + 180
13990 if HScale.get() == 1:
13991 LogFStop = math.log10(StopFrequency)
13993 LogFStart = math.log10(StartFrequency)
13996 LogFpixel = (LogFStop - LogFStart) / GRWF
13997 xfreq = 10**(((event.x-X0LF)*LogFpixel) + LogFStart)
13999 Fpixel = (StopFrequency - StartFrequency) / GRWF
14000 xfreq = ((event.x-X0LF)*Fpixel)+StartFrequency
14002 yvdB = ((Yc-event.y)/Yconv)
14003 VdBString =
' {0:.1f} '.format(yvdB)
14004 XFString =
' {0:.2f} '.format(xfreq)
14005 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
14006 if MarkerFreqNum > 1:
14007 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
14008 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
14009 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
14011 y = Y0TF + 3 + (MarkerFreqNum*10)
14013 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
14014 x = X0LF + GRWF - 5
14015 y = Y0TF + 3 + (MarkerFreqNum*10)
14017 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
14019 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
14021 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
14022 x = X0LF + GRWF - 5
14023 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
14025 Freqca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
14031 if ShowC1_VdB.get() == 0:
14038 if ShowC2_VdB.get() == 0:
14045 if ShowC1_P.get() == 0:
14052 if ShowC2_P.get() == 0:
14059 if ShowMarker.get() == 0:
14066 if ShowRA_VdB.get() == 0:
14073 if ShowRB_VdB.get() == 0:
14107 if ShowFCur.get() == 0:
14114 if ShowdBCur.get() == 1:
14121 if ShowdBCur.get() == 2:
14127 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus, Bodeca
14130 BdBCursor = event.y
14131 if RUNstatus.get() == 0:
14133 Bodeca.bind_all(
'<MouseWheel>', onCanvasBodeClickScroll)
14136 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus
14139 shift_key = event.state & 1
14140 if ShowBPCur.get() > 0
and shift_key == 0:
14141 BPCursor = BPCursor + event.delta/100
14142 elif ShowBdBCur.get() > 0
or shift_key == 1:
14143 BdBCursor = BdBCursor - event.delta/100
14144 if RUNstatus.get() == 0:
14153 global Bodeca, MarkerLoc, SAMPLErate
14154 global COLORgrid, COLORtext, HScaleBP, ShowCA_VdB, ShowCB_VdB, DBdivindexBP
14155 global COLORtrace1, COLORtrace2, COLORtrace6, StartBodeEntry, StopBodeEntry, DBlevelBP
14156 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF, Vdiv
14158 if (RUNstatus.get() == 0):
14159 MarkerFreqNum = MarkerFreqNum + 1
14160 COLORmarker = COLORtrace6
14161 if ShowCA_VdB.get() == 1:
14162 COLORmarker = COLORtrace1
14163 elif ShowCB_VdB.get() == 1:
14164 COLORmarker = COLORtrace2
14166 EndFreq = float(StopBodeEntry.get())
14168 StopBodeEntry.delete(0,
"end")
14169 StopBodeEntry.insert(0,10000)
14172 BeginFreq = float(StartBodeEntry.get())
14174 StartBodeEntry.delete(0,
"end")
14175 StartBodeEntry.insert(0,100)
14178 Bodeca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
14179 Bodeca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
14180 Bodeca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
14182 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14183 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
14184 Yphconv = float(GRHBP) / 360
14185 Yp = float(Y0TBP) + Yphconv + 180
14189 if HScaleBP.get() == 1:
14190 LogFStop = math.log10(EndFreq)
14192 LogFStart = math.log10(BeginFreq)
14195 LogFpixel = (LogFStop - LogFStart) / GRWBP
14196 xfreq = 10**(((event.x-x1)*LogFpixel) + LogFStart)
14198 Fpixel = (EndFreq - BeginFreq) / GRWBP
14199 xfreq = ((event.x-x1)*Fpixel)+BeginFreq
14201 yvdB = ((Yc-event.y)/Yconv)
14202 VdBString =
' {0:.1f} '.format(yvdB)
14203 XFString =
' {0:.2f} '.format(xfreq)
14204 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
14205 if MarkerFreqNum > 1:
14206 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
14207 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
14208 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
14210 y = Y0TBP + 3 + (MarkerFreqNum*10)
14212 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
14214 y = Y0TBP + 3 + (MarkerFreqNum*10)
14216 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
14218 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
14220 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
14222 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
14224 Bodeca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
14230 if ShowCA_VdB.get() == 0:
14237 if ShowCB_VdB.get() == 0:
14244 if ShowCA_P.get() == 0:
14251 if ShowCB_P.get() == 0:
14257 global ShowMarkerBP
14258 if ShowMarkerBP.get() == 0:
14259 ShowMarkerBP.set(1)
14261 ShowMarkerBP.set(0)
14265 if ShowRA_VdB.get() == 0:
14272 if ShowRB_VdB.get() == 0:
14294 if ShowBPCur.get() == 0:
14301 if ShowBdBCur.get() == 1:
14308 if ShowBdBCur.get() == 2:
14330 button = event.widget
14331 cursor_position = button.index(INSERT)
14332 Pos = cursor_position
14333 OldVal = button.get()
14334 OldValfl = float(OldVal)
14336 Dot = OldVal.find (
".")
14337 Decimals = Len - Dot - 1
14340 Step = 10**(Len - Pos)
14342 Step = 10**(Dot - Pos)
14344 Step = 10**(Dot - Pos + 1)
14345 if event.delta > 0:
14346 NewVal = OldValfl + Step
14348 NewVal = OldValfl - Step
14349 FormatStr =
"{0:." + str(Decimals) +
"f}"
14350 NewStr = FormatStr.format(NewVal)
14351 NewDot = NewStr.find (
".")
14352 NewPos = Pos + NewDot - Dot
14354 NewLen = len(NewStr)
14355 NewPos = Pos + NewLen - Len
14356 button.delete(0, END)
14357 button.insert(0, NewStr)
14358 button.icursor(NewPos)
14378 button = event.widget
14379 cursor_position = button.index(INSERT)
14380 NewPos = cursor_position -1
14381 OldVal = button.get()
14382 OldDigit = OldVal[NewPos]
14383 if platform.system() ==
"Windows":
14384 if event.keycode == 38:
14385 NewDigit = int(OldDigit) + 1
14386 elif event.keycode == 40:
14387 NewDigit = int(OldDigit) - 1
14390 elif platform.system() ==
"Linux":
14391 if event.keycode == 111:
14392 NewDigit = int(OldDigit) + 1
14393 elif event.keycode == 116:
14394 NewDigit = int(OldDigit) - 1
14397 if OldDigit ==
".":
14401 button.delete(NewPos)
14402 button.insert(NewPos,NewDigit)
14403 NewPos = cursor_position-2
14406 CarryDigit = OldVal[NewPos]
14407 if CarryDigit ==
".":
14408 NewPos = cursor_position-3
14409 CarryDigit = OldVal[NewPos]
14410 NewDigit = int(CarryDigit) + 1
14413 button.delete(NewPos)
14414 button.insert(NewPos,NewDigit)
14417 button.delete(NewPos)
14418 button.insert(NewPos,NewDigit)
14419 NewPos = cursor_position-2
14422 CarryDigit = OldVal[NewPos]
14423 if CarryDigit ==
".":
14424 NewPos = cursor_position-3
14425 CarryDigit = OldVal[NewPos]
14426 NewDigit = int(CarryDigit) - 1
14429 button.delete(NewPos)
14430 button.insert(NewPos,NewDigit)
14432 button.delete(NewPos)
14433 button.insert(NewPos,NewDigit)
14436 spbox = event.widget
14437 if event.delta > 0:
14438 spbox.invoke(
'buttonup')
14440 spbox.invoke(
'buttondown')
14444 global AWGAMode, AWGATerm, AWGAShape, AWGSync, awgwindow, AWGAPhaseDelay, AWGBPhaseDelay
14445 global AWGBMode, AWGBTerm, AWGBShape, AWGScreenStatus, AWGARepeatFlag, AWGBRepeatFlag
14446 global AWGABurstFlag, AWGBBurstFlag
14447 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGAPhaseEntry, AWGADutyCycleEntry
14448 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBPhaseEntry, AWGBDutyCycleEntry
14449 global AWGALength, AWGBLength, RevDate, phasealab, phaseblab, AWGAModeLabel, AWGBModeLabel
14450 global AWGAIOMode, AWGBIOMode, duty1lab, duty2lab, awgaph, awgadel, awgbph, awgbdel
14451 global AwgLayout, AWG_Amp_Mode, awgsync, SWRev
14452 global amp1lab, amp2lab, off1lab, off2lab, Reset_Freq, AWG_2X, BisCompA, FWRevOne
14454 if AWGScreenStatus.get() == 0:
14455 AWGScreenStatus.set(1)
14457 awgwindow = Toplevel()
14458 awgwindow.title(
"AWG Controls " + SWRev + RevDate)
14459 awgwindow.resizable(FALSE,FALSE)
14460 awgwindow.geometry(
'+0+100')
14461 awgwindow.protocol(
"WM_DELETE_WINDOW", DestroyAWGScreen)
14463 frame2 = LabelFrame(awgwindow, text=
"AWG CH A", style=
"A10R1.TLabelframe")
14464 frame3 = LabelFrame(awgwindow, text=
"AWG CH B", style=
"A10R2.TLabelframe")
14466 if AwgLayout ==
"Horz":
14467 frame2.pack(side=LEFT, expand=1, fill=X)
14468 frame3.pack(side=LEFT, expand=1, fill=X)
14470 frame2.pack(side=TOP, expand=1, fill=Y)
14471 frame3.pack(side=TOP, expand=1, fill=Y)
14474 AWGAMode = IntVar(0)
14475 AWGAIOMode = IntVar(0)
14476 AWGATerm = IntVar(0)
14477 AWGAShape = IntVar(0)
14478 AWGARepeatFlag = IntVar(0)
14479 AWGABurstFlag = IntVar(0)
14480 AWGBBurstFlag = IntVar(0)
14482 AWGSync = IntVar(0)
14484 awg1eb = Frame( frame2 )
14485 awg1eb.pack(side=TOP)
14486 ModeAMenu = Menubutton(awg1eb, text=
"Mode", style=
"W5.TButton")
14487 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
14488 ModeAMenu[
"menu"] = ModeAMenu.menu
14489 ModeAMenu.menu.add_command(label=
"-Mode-", command=donothing)
14490 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
14491 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
14492 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
14493 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
14494 ModeAMenu.menu.add_separator()
14495 ModeAMenu.menu.add_command(label=
"-Term-", command=donothing)
14496 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
14497 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
14498 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
14499 ModeAMenu.pack(side=LEFT, anchor=W)
14500 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", style=
"W5.TButton")
14501 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
14502 ShapeAMenu[
"menu"] = ShapeAMenu.menu
14503 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
14504 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
14505 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
14506 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
14507 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
14508 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
14509 ShapeAMenu.menu.add_separator()
14510 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
14511 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
14512 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
14513 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
14514 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
14515 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
14516 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
14517 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
14518 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
14519 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
14520 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
14521 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
14522 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
14523 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
14524 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
14525 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
14526 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
14527 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
14528 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
14529 ShapeAMenu.pack(side=LEFT, anchor=W)
14531 AWGAModeLabel = Label(frame2, text=
"AWG A Mode")
14532 AWGAModeLabel.pack(side=TOP)
14534 awg1ampl = Frame( frame2 )
14535 awg1ampl.pack(side=TOP)
14536 AWGAAmplEntry = Entry(awg1ampl, width=5)
14537 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
14538 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
14539 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
14540 AWGAAmplEntry.pack(side=LEFT, anchor=W)
14541 AWGAAmplEntry.delete(0,
"end")
14542 AWGAAmplEntry.insert(0,0.0)
14543 amp1lab = Label(awg1ampl)
14544 amp1lab.pack(side=LEFT, anchor=W)
14546 awg1off = Frame( frame2 )
14547 awg1off.pack(side=TOP)
14548 AWGAOffsetEntry = Entry(awg1off, width=5)
14549 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
14550 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
14551 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
14552 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
14553 AWGAOffsetEntry.delete(0,
"end")
14554 AWGAOffsetEntry.insert(0,0.0)
14555 off1lab = Label(awg1off)
14556 off1lab.pack(side=LEFT, anchor=W)
14557 if AWG_Amp_Mode.get() == 0:
14558 amp1lab.config(text =
"Min Ch A" )
14559 off1lab.config(text =
"Max Ch A" )
14561 amp1lab.config(text =
"Amp Ch A" )
14562 off1lab.config(text =
"Off Ch A" )
14564 awg1freq = Frame( frame2 )
14565 awg1freq.pack(side=TOP)
14566 AWGAFreqEntry = Entry(awg1freq, width=7)
14567 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
14568 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
14569 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
14570 AWGAFreqEntry.pack(side=LEFT, anchor=W)
14571 AWGAFreqEntry.delete(0,
"end")
14572 AWGAFreqEntry.insert(0,100.0)
14573 freq1lab = Label(awg1freq, text=
"Freq Ch A")
14574 freq1lab.pack(side=LEFT, anchor=W)
14576 AWGAPhaseDelay = IntVar(0)
14577 awgadelay = Frame( frame2 )
14578 awgadelay.pack(side=TOP)
14579 awgaph = Radiobutton(awgadelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGAPhaseDelay, value=0, command=BAWGAPhaseDelay)
14580 awgaph.pack(side=LEFT, anchor=W)
14581 awgadel = Radiobutton(awgadelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGAPhaseDelay, value=1, command=BAWGAPhaseDelay)
14582 awgadel.pack(side=LEFT, anchor=W)
14584 awg1phase = Frame( frame2 )
14585 awg1phase.pack(side=TOP)
14586 AWGAPhaseEntry = Entry(awg1phase, width=5)
14587 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
14588 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
14589 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
14590 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
14591 AWGAPhaseEntry.delete(0,
"end")
14592 AWGAPhaseEntry.insert(0,0)
14593 phasealab = Label(awg1phase, text=
"Deg")
14594 phasealab.pack(side=LEFT, anchor=W)
14596 awg1dc = Frame( frame2 )
14597 awg1dc.pack(side=TOP)
14598 AWGADutyCycleEntry = Entry(awg1dc, width=5)
14599 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
14600 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
14601 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
14602 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
14603 AWGADutyCycleEntry.delete(0,
"end")
14604 AWGADutyCycleEntry.insert(0,50)
14605 duty1lab = Label(awg1dc, text=
"%")
14606 duty1lab.pack(side=LEFT, anchor=W)
14608 AWGALength = Label(frame2, text=
"Length")
14609 AWGALength.pack(side=TOP)
14611 if FWRevOne > 2.16:
14612 awg2x1 = Radiobutton(frame2, text=
"Both CH 1X", variable=AWG_2X, value=0, command=BAWG2X)
14613 awg2x1.pack(side=TOP)
14614 awg2x2 = Radiobutton(frame2, text=
"CH A 2X", variable=AWG_2X, value=1, command=BAWG2X)
14615 awg2x2.pack(side=TOP)
14616 awg2x3 = Radiobutton(frame2, text=
"CH B 2X", variable=AWG_2X, value=2, command=BAWG2X)
14617 awg2x3.pack(side=TOP)
14619 awgsync = Checkbutton(frame2, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
14620 awgsync.pack(side=TOP)
14623 AWGBMode = IntVar(0)
14624 AWGBIOMode = IntVar(0)
14625 AWGBTerm = IntVar(0)
14626 AWGBShape = IntVar(0)
14627 AWGBRepeatFlag = IntVar(0)
14629 awg2eb = Frame( frame3 )
14630 awg2eb.pack(side=TOP)
14631 ModeBMenu = Menubutton(awg2eb, text=
"Mode", style=
"W5.TButton")
14632 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
14633 ModeBMenu[
"menu"] = ModeBMenu.menu
14634 ModeBMenu.menu.add_command(label=
"-Mode-", command=donothing)
14635 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
14636 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
14637 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
14638 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
14639 ModeBMenu.menu.add_separator()
14640 ModeBMenu.menu.add_command(label=
"-Term-", command=donothing)
14641 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
14642 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
14643 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
14644 ModeBMenu.pack(side=LEFT, anchor=W)
14645 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", style=
"W5.TButton")
14646 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
14647 ShapeBMenu[
"menu"] = ShapeBMenu.menu
14648 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
14649 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
14650 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
14651 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
14652 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
14653 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
14654 ShapeBMenu.menu.add_separator()
14655 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
14656 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
14657 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
14658 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
14659 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
14660 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
14661 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
14662 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
14663 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
14664 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
14665 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
14666 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
14667 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
14668 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
14669 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
14670 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
14671 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
14672 ShapeBMenu.pack(side=LEFT, anchor=W)
14674 AWGBModeLabel = Label(frame3, text=
"AWG A Mode")
14675 AWGBModeLabel.pack(side=TOP)
14677 awg2ampl = Frame( frame3 )
14678 awg2ampl.pack(side=TOP)
14679 AWGBAmplEntry = Entry(awg2ampl, width=5)
14680 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
14681 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
14682 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
14683 AWGBAmplEntry.pack(side=LEFT, anchor=W)
14684 AWGBAmplEntry.delete(0,
"end")
14685 AWGBAmplEntry.insert(0,0.0)
14686 amp2lab = Label(awg2ampl)
14687 amp2lab.pack(side=LEFT, anchor=W)
14689 awg2off = Frame( frame3 )
14690 awg2off.pack(side=TOP)
14691 AWGBOffsetEntry = Entry(awg2off, width=5)
14692 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
14693 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
14694 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
14695 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
14696 AWGBOffsetEntry.delete(0,
"end")
14697 AWGBOffsetEntry.insert(0,0.0)
14698 off2lab = Label(awg2off)
14699 off2lab.pack(side=LEFT, anchor=W)
14700 if AWG_Amp_Mode.get() == 0:
14701 amp2lab.config(text =
"Min Ch B" )
14702 off2lab.config(text =
"Max Ch B" )
14704 amp2lab.config(text =
"Amp Ch B" )
14705 off2lab.config(text =
"Off Ch B" )
14707 awg2freq = Frame( frame3 )
14708 awg2freq.pack(side=TOP)
14709 AWGBFreqEntry = Entry(awg2freq, width=7)
14710 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
14711 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
14712 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
14713 AWGBFreqEntry.pack(side=LEFT, anchor=W)
14714 AWGBFreqEntry.delete(0,
"end")
14715 AWGBFreqEntry.insert(0,100.0)
14716 freq2lab = Label(awg2freq, text=
"Freq Ch B")
14717 freq2lab.pack(side=LEFT, anchor=W)
14719 AWGBPhaseDelay = IntVar(0)
14720 awgbdelay = Frame( frame3 )
14721 awgbdelay.pack(side=TOP)
14722 awgbph = Radiobutton(awgbdelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGBPhaseDelay, value=0, command=BAWGBPhaseDelay)
14723 awgbph.pack(side=LEFT, anchor=W)
14724 awgbdel = Radiobutton(awgbdelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGBPhaseDelay, value=1, command=BAWGBPhaseDelay)
14725 awgbdel.pack(side=LEFT, anchor=W)
14727 awg2phase = Frame( frame3 )
14728 awg2phase.pack(side=TOP)
14729 AWGBPhaseEntry = Entry(awg2phase, width=5)
14730 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
14731 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
14732 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
14733 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
14734 AWGBPhaseEntry.delete(0,
"end")
14735 AWGBPhaseEntry.insert(0,0)
14736 phaseblab = Label(awg2phase, text=
"Deg")
14737 phaseblab.pack(side=LEFT, anchor=W)
14739 awg2dc = Frame( frame3 )
14740 awg2dc.pack(side=TOP)
14741 AWGBDutyCycleEntry = Entry(awg2dc, width=5)
14742 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
14743 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
14744 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
14745 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
14746 AWGBDutyCycleEntry.delete(0,
"end")
14747 AWGBDutyCycleEntry.insert(0,50)
14748 duty2lab = Label(awg2dc, text=
"%")
14749 duty2lab.pack(side=LEFT, anchor=W)
14751 AWGBLength = Label(frame3, text=
"Length")
14752 AWGBLength.pack(side=TOP)
14754 BisCompA = IntVar(0)
14756 bcompa = Checkbutton(frame3, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
14757 bcompa.pack(side=TOP)
14758 if FWRevOne > 2.16:
14759 awgsync = Checkbutton(frame3, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
14760 awgsync.pack(side=TOP)
14762 dismissbutton = Button(frame3, text=
"Minimize", style=
"W8.TButton", command=DestroyAWGScreen)
14763 dismissbutton.pack(side=TOP)
14765 awgwindow.deiconify()
14768 global AWG_2X, devx, AWGAIOMode, AWGBIOMode, BisCompA
14771 if AWG_2X.get() == 0:
14772 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
14773 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
14774 elif AWG_2X.get() == 1:
14775 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
14776 devx.ctrl_transfer(0x40, 0x25, 0x0, 0, 0, 0, 100)
14777 if AWGBIOMode.get() == 0:
14778 devx.ctrl_transfer(0x40, 0x51, 40, 0, 0, 0, 100)
14779 devx.ctrl_transfer(0x40, 0x51, 52, 0, 0, 0, 100)
14781 elif AWG_2X.get() == 2:
14782 devx.ctrl_transfer(0x40, 0x24, 0x1, 0, 0, 0, 100)
14783 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
14784 if AWGAIOMode.get() == 0:
14785 devx.ctrl_transfer(0x40, 0x51, 35, 0, 0, 0, 100)
14786 devx.ctrl_transfer(0x40, 0x51, 51, 0, 0, 0, 100)
14790 global awgwindow, AWGScreenStatus
14793 awgwindow.iconify()
14796 global MuxScreenStatus, muxwindow, RevDate, DacScreenStatus, DigScreenStatus
14797 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
14798 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, SyncButton
14799 global CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab, CHBlab, CHBofflab
14800 global CHB_Cofflab, CHB_Dofflab, awgsync, SWRev
14801 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb, MuxSync, hipulseimg, lowpulseimg, DualMuxMode
14803 if MuxScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0:
14804 MuxScreenStatus.set(1)
14808 muxwindow = Toplevel()
14809 muxwindow.title(
"CH-B Mux " + SWRev + RevDate)
14810 muxwindow.resizable(FALSE,FALSE)
14811 muxwindow.protocol(
"WM_DELETE_WINDOW", DestroyMuxScreen)
14813 frameM = LabelFrame(muxwindow, text=
"CH B Mux", style=
"A10B.TLabel")
14814 frameM.pack(side=LEFT, expand=1, fill=Y)
14817 frameA = Frame(frameM)
14818 frameA.pack(side=TOP)
14819 cba = Checkbutton(frameA, text=
'CB-A', variable=Show_CBA, command=UpdateTimeTrace)
14820 cba.pack(side=LEFT, anchor=W)
14821 CHB_Asb = Spinbox(frameA, width=4, values=CHvpdiv, command=UpdateTimeTrace)
14822 CHB_Asb.bind(
'<MouseWheel>', onSpinBoxScroll)
14823 CHB_Asb.pack(side=LEFT)
14824 CHB_Asb.delete(0,
"end")
14825 CHB_Asb.insert(0,0.5)
14827 CHB_Alab = Button(frameA, text=
"CB-A V/Div", style=
"Rtrace2.TButton", command=SetScaleMuxA)
14828 CHB_Alab.pack(side=LEFT)
14829 CHB_APosEntry = Entry(frameA, width=5)
14830 CHB_APosEntry.bind(
'<MouseWheel>', onTextScroll)
14831 CHB_APosEntry.bind(
'<Key>', onTextKey)
14832 CHB_APosEntry.pack(side=LEFT)
14833 CHB_APosEntry.delete(0,
"end")
14834 CHB_APosEntry.insert(0,2.5)
14835 CHB_Aofflab = Button(frameA, text=
"CB-A Pos", style=
"Rtrace2.TButton", command=SetMuxAPoss)
14836 CHB_Aofflab.pack(side=LEFT)
14838 frameB = Frame(frameM)
14839 frameB.pack(side=TOP)
14840 cbb = Checkbutton(frameB, text=
'CB-B', variable=Show_CBB, command=UpdateTimeTrace)
14841 cbb.pack(side=LEFT, anchor=W)
14842 CHB_Bsb = Spinbox(frameB, width=4, values=CHvpdiv, command=UpdateTimeTrace)
14843 CHB_Bsb.bind(
'<MouseWheel>', onSpinBoxScroll)
14844 CHB_Bsb.pack(side=LEFT)
14845 CHB_Bsb.delete(0,
"end")
14846 CHB_Bsb.insert(0,0.5)
14847 CHB_Blab = Button(frameB, text=
"CB-B V/Div", style=
"Rtrace6.TButton", command=SetScaleMuxB)
14848 CHB_Blab.pack(side=LEFT)
14849 CHB_BPosEntry = Entry(frameB, width=5)
14850 CHB_BPosEntry.bind(
'<MouseWheel>', onTextScroll)
14851 CHB_BPosEntry.bind(
'<Key>', onTextKey)
14852 CHB_BPosEntry.pack(side=LEFT)
14853 CHB_BPosEntry.delete(0,
"end")
14854 CHB_BPosEntry.insert(0,2.5)
14855 CHB_Bofflab = Button(frameB, text=
"CB-B Pos", style=
"Rtrace6.TButton", command=SetMuxBPoss)
14856 CHB_Bofflab.pack(side=LEFT)
14858 frameC = Frame(frameM)
14859 frameC.pack(side=TOP)
14860 cbc = Checkbutton(frameC, text=
'CB-C', variable=Show_CBC, command=UpdateTimeTrace)
14861 cbc.pack(side=LEFT, anchor=W)
14862 CHB_Csb = Spinbox(frameC, width=4, values=CHvpdiv, command=UpdateTimeTrace)
14863 CHB_Csb.bind(
'<MouseWheel>', onSpinBoxScroll)
14864 CHB_Csb.pack(side=LEFT)
14865 CHB_Csb.delete(0,
"end")
14866 CHB_Csb.insert(0,0.5)
14868 CHB_Clab = Button(frameC, text=
"CB-C V/Div", style=
"Rtrace7.TButton", command=SetScaleMuxC)
14869 CHB_Clab.pack(side=LEFT)
14870 CHB_CPosEntry = Entry(frameC, width=5)
14871 CHB_CPosEntry.bind(
'<MouseWheel>', onTextScroll)
14872 CHB_CPosEntry.bind(
'<Key>', onTextKey)
14873 CHB_CPosEntry.pack(side=LEFT)
14874 CHB_CPosEntry.delete(0,
"end")
14875 CHB_CPosEntry.insert(0,2.5)
14876 CHB_Cofflab = Button(frameC, text=
"CB-C Pos", style=
"Rtrace7.TButton", command=SetMuxCPoss)
14877 CHB_Cofflab.pack(side=LEFT)
14879 frameD = Frame(frameM)
14880 frameD.pack(side=TOP)
14881 cbd = Checkbutton(frameD, text=
'CB-D', variable=Show_CBD, command=UpdateTimeTrace)
14882 cbd.pack(side=LEFT, anchor=W)
14883 CHB_Dsb = Spinbox(frameD, width=4, values=CHvpdiv, command=UpdateTimeTrace)
14884 CHB_Dsb.bind(
'<MouseWheel>', onSpinBoxScroll)
14885 CHB_Dsb.pack(side=LEFT)
14886 CHB_Dsb.delete(0,
"end")
14887 CHB_Dsb.insert(0,0.5)
14888 CHB_Dlab = Button(frameD, text=
"CB-D V/Div", style=
"Rtrace4.TButton", command=SetScaleMuxD)
14889 CHB_Dlab.pack(side=LEFT)
14890 CHB_DPosEntry = Entry(frameD, width=5)
14891 CHB_DPosEntry.bind(
'<MouseWheel>', onTextScroll)
14892 CHB_DPosEntry.bind(
'<Key>', onTextKey)
14893 CHB_DPosEntry.pack(side=LEFT)
14894 CHB_DPosEntry.delete(0,
"end")
14895 CHB_DPosEntry.insert(0,2.5)
14896 CHB_Dofflab = Button(frameD, text=
"CB-D Pos", style=
"Rtrace4.TButton", command=SetMuxDPoss)
14897 CHB_Dofflab.pack(side=LEFT)
14898 frameE = Frame(frameM)
14899 frameE.pack(side=TOP)
14901 MuxSync = IntVar(0)
14902 muxenab = Checkbutton(frameE, text=
"Mux-Enb", variable=MuxEnb)
14903 muxenab.pack(side=LEFT)
14904 SyncButton = Checkbutton(frameE, compound=TOP, image=hipulseimg, variable=MuxSync, command=SyncImage)
14905 SyncButton.pack(side=LEFT)
14906 dismissbutton = Button(frameE, text=
"Dismiss", style=
"W8.TButton", command=DestroyMuxScreen)
14907 dismissbutton.pack(side=LEFT)
14908 frameF = Frame(frameM)
14909 frameF.pack(side=TOP)
14910 dmx = Checkbutton(frameF, text=
'Dual Mux Split I/O mode', variable=DualMuxMode, command=SetDualMuxMode)
14911 dmx.pack(side=LEFT)
14913 CHBlab.config(style=
"SGray.TButton")
14914 CHBofflab.config(style=
"SGray.TButton")
14917 global AWGAIOMode, AWGBIOMode, ShowC1_V, DualMuxMode, CHAlab, CHAofflab
14918 global CHB_Clab, CHB_Dlab, CHB_Cofflab, CHB_Dofflab
14920 if DualMuxMode.get() == 1:
14924 CHB_Clab.config(text=
"CA-C V/Div")
14925 CHB_Dlab.config(text=
"CA-D V/Div")
14926 CHB_Cofflab.config(text=
"CA-C Pos")
14927 CHB_Dofflab.config(text=
"CA-D Pos")
14930 CHAlab.config(style=
"SGray.TButton")
14931 CHAofflab.config(style=
"SGray.TButton")
14934 CHB_Clab.config(text=
"CB-C V/Div")
14935 CHB_Dlab.config(text=
"CB-D V/Div")
14936 CHB_Cofflab.config(text=
"CB-C Pos")
14937 CHB_Dofflab.config(text=
"CB-D Pos")
14939 CHAlab.config(style=
"Rtrace1.TButton")
14940 CHAofflab.config(style=
"Rtrace1.TButton")
14943 global MuxSync, hipulseimg, lowpulseimg, SyncButton
14945 if MuxSync.get() == 0:
14946 SyncButton.config(image=hipulseimg)
14948 SyncButton.config(image=lowpulseimg)
14951 global muxwindow, awgsync, MuxScreenStatus, CHAlab, CHAofflab, CHBlab, CHBofflab
14953 MuxScreenStatus.set(0)
14954 awgsync.config(state=NORMAL)
14956 CHBlab.config(style=
"Rtrace2.TButton")
14957 CHBofflab.config(style=
"Rtrace2.TButton")
14958 CHAlab.config(style=
"Rtrace1.TButton")
14959 CHAofflab.config(style=
"Rtrace1.TButton")
14960 muxwindow.destroy()
14963 global Bodeca, GRWBP, XOLBP, GRHBP, Y0TBP, CANVASwidthBP, CANVASheightBP, FontSize
14965 CANVASwidthBP = event.width - 4
14966 CANVASheightBP = event.height - 4
14967 GRWBP = CANVASwidthBP - (2 * X0LBP)
14968 GRHBP = CANVASheightBP - int(10 * FontSize)
14972 global FStepSync, DevOne
14974 if FStepSync.get() == 0:
14975 Tval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
14976 elif FStepSync.get() == 1:
14977 devx.ctrl_transfer( 0x40, 0x50, 0, 0, 0, 0, 100)
14978 elif FStepSync.get() == 2:
14979 devx.ctrl_transfer( 0x40, 0x51, 0, 0, 0, 0, 100)
14982 global FSweepSync, DevOne
14984 if FSweepSync.get() == 0:
14985 Tval = devx.ctrl_transfer( 0xc0, 0x91, 1, 0, 0, 1, 100)
14986 elif FSweepSync.get() == 1:
14987 devx.ctrl_transfer( 0x40, 0x50, 1, 0, 0, 0, 100)
14988 elif FSweepSync.get() == 2:
14989 devx.ctrl_transfer( 0x40, 0x51, 1, 0, 0, 0, 100)
14992 global BDSweepFile, FileSweepFreq, FileSweepAmpl
14994 if BDSweepFile.get() > 0:
14996 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent = bodewindow)
14998 CSVFile = open(filename)
14999 csv_f = csv.reader(CSVFile)
15004 FileSweepFreq.append(float(row[0]))
15005 FileSweepAmpl.append(float(row[1]))
15007 print(
'skipping non-numeric row')
15008 FileSweepFreq = numpy.array(FileSweepFreq)
15009 FileSweepAmpl = numpy.array(FileSweepAmpl)
15010 MaxAmpl = numpy.amax(FileSweepAmpl)
15012 s = askstring(
"Normalize Max Amplitude",
"Max Amplitude = " + str(MaxAmpl) +
"\n\n Enter New Max value:\n in dB", parent = bodewindow)
15021 NormAmpl = MaxAmpl - v
15024 FileSweepAmpl = FileSweepAmpl - NormAmpl
15026 StopBodeEntry.delete(0,
"end")
15027 StopBodeEntry.insert(0,FileSweepFreq[len(FileSweepFreq)-1])
15028 StartBodeEntry.delete(0,
"end")
15029 StartBodeEntry.insert(0,FileSweepFreq[0])
15030 SweepStepBodeEntry.delete(0,
"end")
15031 SweepStepBodeEntry.insert(0,len(FileSweepFreq))
15033 showwarning(
"WARNING",
"No such file found or wrong format!", parent = bodewindow)
15037 global logo, SmoothCurvesBP, CutDC, bodewindow, SWRev
15038 global CANVASwidthBP, CANVASheightBP, FFTwindow, CutDC, AWGAMode, AWGAShape, AWGBMode
15039 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp, RelPhaseCenter
15040 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP, PhCenBodeEntry
15041 global BPSweepMode, BPSweepCont, Bodeca, BodeScreenStatus, RevDate, SweepStepBodeEntry
15042 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
15043 global GRWBP, GRHBP, X0LBP, FStepSync, FSweepSync, BDSweepFile, MinigenScreenStatus
15044 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, ImpedanceCenter, ImCenBodeEntry
15045 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
15047 if BodeScreenStatus.get() == 0:
15048 BodeScreenStatus.set(1)
15051 CANVASwidthBP = GRWBP + 2 * X0LBP
15052 CANVASheightBP = GRHBP + 80
15057 bodewindow = Toplevel()
15058 bodewindow.title(
"Bode Plotter " + SWRev + RevDate)
15059 bodewindow.protocol(
"WM_DELETE_WINDOW", DestroyBodeScreen)
15060 frame2bp = Frame(bodewindow, borderwidth=5, relief=RIDGE)
15061 frame2bp.pack(side=RIGHT, expand=NO, fill=BOTH)
15063 frame2b = Frame(bodewindow, borderwidth=5, relief=RIDGE)
15064 frame2b.pack(side=TOP, expand=YES, fill=BOTH)
15066 Bodeca = Canvas(frame2b, width=CANVASwidthBP, height=CANVASheightBP, background=COLORcanvas, cursor=
'cross')
15067 Bodeca.bind(
'<Configure>', BodeCaresize)
15068 Bodeca.bind(
'<1>', onCanvasBodeLeftClick)
15069 Bodeca.bind(
'<3>', onCanvasBodeRightClick)
15070 Bodeca.bind(
"<Up>", onCanvasUpArrow)
15071 Bodeca.bind(
"<Down>", onCanvasDownArrow)
15072 Bodeca.bind(
"<Left>", onCanvasLeftArrow)
15073 Bodeca.bind(
"<Right>", onCanvasRightArrow)
15074 Bodeca.bind(
"<space>", onCanvasSpaceBar)
15075 Bodeca.bind(
"1", onCanvasBdOne)
15076 Bodeca.bind(
"2", onCanvasBdTwo)
15077 Bodeca.bind(
"3", onCanvasBdThree)
15078 Bodeca.bind(
"4", onCanvasBdFour)
15079 Bodeca.bind(
"5", onCanvasBdFive)
15080 Bodeca.bind(
"6", onCanvasBdSix)
15081 Bodeca.bind(
"7", onCanvasBdSeven)
15082 Bodeca.bind(
"8", onCanvasBdEight)
15083 Bodeca.bind(
"9", onCanvasBdNine)
15084 Bodeca.bind(
"0", onCanvasBdZero)
15085 Bodeca.bind(
"f", onCanvasShowBPcur)
15086 Bodeca.bind(
"d", onCanvasShowBdBcur)
15087 Bodeca.bind(
"h", onCanvasShowPdBcur)
15088 Bodeca.bind(
"s", onCanvasBdSnap)
15089 Bodeca.pack(side=TOP, expand=YES, fill=BOTH)
15092 dropmenu = Frame( frame2bp )
15093 dropmenu.pack(side=TOP)
15095 BodeFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15096 BodeFilemenu.menu = Menu(BodeFilemenu, tearoff = 0 )
15097 BodeFilemenu[
"menu"] = BodeFilemenu.menu
15098 BodeFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigBP)
15099 BodeFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigBP)
15100 BodeFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenBP)
15101 BodeFilemenu.menu.add_command(label=
"Save Data", command=BCSVfile)
15102 BodeFilemenu.pack(side=LEFT, anchor=W)
15104 BodeOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15105 BodeOptionmenu.menu = Menu(BodeOptionmenu, tearoff = 0 )
15106 BodeOptionmenu[
"menu"] = BodeOptionmenu.menu
15107 BodeOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15108 BodeOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesBP)
15109 BodeOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15110 BodeOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceBP)
15111 BodeOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
15112 BodeOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
15113 BodeOptionmenu.menu.add_command(label=
"-Step Sync Pulse-", command=donothing)
15114 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FStepSync, value=0, command=BStepSync)
15115 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FStepSync, value=1, command=BStepSync)
15116 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FStepSync, value=2, command=BStepSync)
15117 BodeOptionmenu.menu.add_command(label=
"-Sweep Sync Pulse-", command=donothing)
15118 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FSweepSync, value=0, command=BSweepSync)
15119 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FSweepSync, value=1, command=BSweepSync)
15120 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FSweepSync, value=2, command=BSweepSync)
15121 BodeOptionmenu.pack(side=LEFT, anchor=W)
15123 RUNframe = Frame( frame2bp )
15124 RUNframe.pack(side=TOP)
15125 sbode = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopBP)
15126 sbode.pack(side=LEFT)
15127 rbode = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartBP)
15128 rbode.pack(side=LEFT)
15130 BodeFFTwindmenu = Menubutton(frame2bp, text=
"FFTwindow", style=
"W11.TButton")
15131 BodeFFTwindmenu.menu = Menu(BodeFFTwindmenu, tearoff = 0 )
15132 BodeFFTwindmenu[
"menu"] = BodeFFTwindmenu.menu
15133 BodeFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15134 BodeFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15135 BodeFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15136 BodeFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15137 BodeFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15138 BodeFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15139 BodeFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15140 BodeFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
15141 BodeFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
15142 BodeFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
15143 BodeFFTwindmenu.pack(side=TOP)
15145 tracemenu = Frame( frame2bp )
15146 tracemenu.pack(side=TOP)
15149 BodeShowmenu = Menubutton(tracemenu, text=
"Curves", style=
"W7.TButton")
15150 BodeShowmenu.menu = Menu(BodeShowmenu, tearoff = 0 )
15151 BodeShowmenu[
"menu"] = BodeShowmenu.menu
15152 BodeShowmenu.menu.add_command(label=
"-Show-", command=donothing)
15153 BodeShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllBP)
15154 BodeShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneBP)
15155 BodeShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowCA_VdB, command=UpdateBodeAll)
15156 BodeShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowCB_VdB, command=UpdateBodeAll)
15157 BodeShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowCA_P, command=UpdateBodeAll)
15158 BodeShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowCB_P, command=UpdateBodeAll)
15159 BodeShowmenu.menu.add_command(label=
"-Math-", command=donothing)
15160 BodeShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathBP, value=0, command=UpdateBodeAll)
15161 BodeShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathBP, value=1, command=UpdateBodeAll)
15162 BodeShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathBP, value=2, command=UpdateBodeAll)
15163 BodeShowmenu.menu.add_command(label=
"-Impedance-", command=donothing)
15164 BodeShowmenu.menu.add_checkbutton(label=
'Series R', variable=Show_Rseries, command=UpdateBodeAll)
15165 BodeShowmenu.menu.add_checkbutton(label=
'Series X', variable=Show_Xseries, command=UpdateBodeAll)
15166 BodeShowmenu.menu.add_checkbutton(label=
'Series Mag', variable= Show_Magnitude, command=UpdateBodeAll)
15167 BodeShowmenu.menu.add_checkbutton(label=
'Series Ang', variable=Show_Angle, command=UpdateBodeAll)
15168 BodeShowmenu.menu.add_separator()
15169 BodeShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowCA_RdB, command=UpdateBodeAll)
15170 BodeShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowCB_RdB, command=UpdateBodeAll)
15171 BodeShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowCA_RP, command=UpdateBodeAll)
15172 BodeShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowCB_RP, command=UpdateBodeAll)
15173 BodeShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMathBP, command=UpdateBodeAll)
15174 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series R', variable=Show_RseriesRef, command=UpdateBodeAll)
15175 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series X', variable=Show_XseriesRef, command=UpdateBodeAll)
15176 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Mag', variable=Show_MagnitudeRef, command=UpdateBodeAll)
15177 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Ang', variable=Show_AngleRef, command=UpdateBodeAll)
15178 BodeShowmenu.pack(side=LEFT, anchor=W)
15180 BodeMarkmenu = Menubutton(tracemenu, text=
"Cursors", style=
"W7.TButton")
15181 BodeMarkmenu.menu = Menu(BodeMarkmenu, tearoff = 0 )
15182 BodeMarkmenu[
"menu"] = BodeMarkmenu.menu
15183 BodeMarkmenu.menu.add_command(label=
"-Cursors&Markers-", command=donothing)
15184 BodeMarkmenu.menu.add_checkbutton(label=
'Marker [5]', variable=ShowMarkerBP, command=UpdateBodeAll)
15185 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor', variable=ShowBPCur)
15186 BodeMarkmenu.menu.add_checkbutton(label=
'dB Cursor', variable=ShowBdBCur)
15187 BodeMarkmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowBdBCur, value=0)
15188 BodeMarkmenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowBdBCur, value=1)
15189 BodeMarkmenu.menu.add_radiobutton(label=
'Phase Cursor [h]', variable=ShowBdBCur, value=2)
15190 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowBPCur)
15191 BodeMarkmenu.pack(side=LEFT, anchor=W)
15194 HScaleBP = IntVar(0)
15196 HzScale = Frame( frame2bp )
15197 HzScale.pack(side=TOP)
15198 rb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScaleBP, value=0, command=UpdateBodeTrace )
15199 rb1.pack(side=LEFT)
15200 rb2 = Radiobutton(HzScale, text=
"Log F", variable=HScaleBP, value=1, command=UpdateBodeTrace )
15201 rb2.pack(side=LEFT)
15203 DBrange = Frame( frame2bp )
15204 DBrange.pack(side=TOP)
15205 bd3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2BP)
15206 bd3.pack(side=LEFT)
15207 bd4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1BP)
15208 bd4.pack(side=LEFT)
15210 LVBrange = Frame( frame2bp )
15211 LVBrange.pack(side=TOP)
15212 bd5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4BP)
15213 bd5.pack(side=LEFT)
15214 bd6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3BP)
15215 bd6.pack(side=LEFT)
15217 LVSrange = Frame( frame2bp )
15218 LVSrange.pack(side=TOP)
15219 bd7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2BP)
15220 bd7.pack(side=LEFT)
15221 bd8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1BP)
15222 bd8.pack(side=LEFT)
15224 PhaseCenter = Frame( frame2bp )
15225 PhaseCenter.pack(side=TOP)
15226 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
15227 PhCenlab.pack(side=LEFT)
15228 PhCenBodeEntry = Entry(PhaseCenter, width=5)
15229 PhCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
15230 PhCenBodeEntry.bind(
'<Key>', onTextKey)
15231 PhCenBodeEntry.pack(side=LEFT)
15232 PhCenBodeEntry.delete(0,
"end")
15233 PhCenBodeEntry.insert(0,RelPhaseCenter.get())
15235 ImpedCenter = Frame( frame2bp )
15236 ImpedCenter.pack(side=TOP)
15237 ImCenlab = Label(ImpedCenter, text=
"Center Imped on")
15238 ImCenlab.pack(side=LEFT)
15239 ImCenBodeEntry = Entry(ImpedCenter, width=5)
15240 ImCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
15241 ImCenBodeEntry.bind(
'<Key>', onTextKey)
15242 ImCenBodeEntry.pack(side=LEFT)
15243 ImCenBodeEntry.delete(0,
"end")
15244 ImCenBodeEntry.insert(0,ImpedanceCenter.get())
15246 FSweepmenu = Label(frame2bp, text=
"-Sweep Gen-", style=
"A10B.TLabel")
15247 FSweepmenu.pack(side=TOP)
15249 Frange1 = Frame( frame2bp )
15250 Frange1.pack(side=TOP)
15251 startfreqlab = Label(Frange1, text=
"Startfreq")
15252 startfreqlab.pack(side=LEFT)
15253 StartBodeEntry = Entry(Frange1, width=5)
15254 StartBodeEntry.bind(
'<MouseWheel>', onTextScroll)
15255 StartBodeEntry.bind(
'<Key>', onTextKey)
15256 StartBodeEntry.pack(side=LEFT)
15257 StartBodeEntry.delete(0,
"end")
15258 StartBodeEntry.insert(0,10)
15260 Frange2 = Frame( frame2bp )
15261 Frange2.pack(side=TOP)
15262 stopfreqlab = Label(Frange2, text=
"Stopfreq")
15263 stopfreqlab.pack(side=LEFT)
15264 StopBodeEntry = Entry(Frange2, width=5)
15265 StopBodeEntry.bind(
'<MouseWheel>', onStopBodeScroll)
15266 StopBodeEntry.bind(
'<Key>', onTextKey)
15267 StopBodeEntry.pack(side=LEFT)
15268 StopBodeEntry.delete(0,
"end")
15269 StopBodeEntry.insert(0,10000)
15271 sgrb1 = Radiobutton(frame2bp, text=
'None', variable=FSweepMode, value=0)
15272 sgrb1.pack(side=TOP)
15273 Frange4 = Frame( frame2bp )
15274 Frange4.pack(side=TOP)
15275 sgrb2 = Radiobutton(Frange4, text=
'CH-A', variable=FSweepMode, value=1)
15276 sgrb2.pack(side=LEFT)
15277 sgrb3 = Radiobutton(Frange4, text=
'CH-B', variable=FSweepMode, value=2)
15278 sgrb3.pack(side=LEFT)
15279 if MinigenScreenStatus.get() > 0:
15280 sgrb1 = Radiobutton(frame2bp, text=
'MinGen', variable=FSweepMode, value=3)
15281 sgrb1.pack(side=TOP)
15282 ffcb = Checkbutton(frame2bp, text=
'Sweep From File', variable=BDSweepFile, command=BDSweepFromFile)
15283 ffcb.pack(side=TOP)
15284 Frange3 = Frame( frame2bp )
15285 Frange3.pack(side=TOP)
15286 sweepsteplab = Label(Frange3, text=
"Sweep Steps")
15287 sweepsteplab.pack(side=LEFT)
15288 SweepStepBodeEntry = Entry(Frange3, width=5)
15289 SweepStepBodeEntry.bind(
'<MouseWheel>', onTextScroll)
15290 SweepStepBodeEntry.bind(
'<Key>', onTextKey)
15291 SweepStepBodeEntry.pack(side=LEFT)
15292 SweepStepBodeEntry.delete(0,
"end")
15293 SweepStepBodeEntry.insert(0,100)
15295 sgrb5 = Radiobutton(frame2bp, text=
'Single', variable=FSweepCont, value=0)
15296 sgrb5.pack(side=TOP)
15297 sgrb6 = Radiobutton(frame2bp, text=
'Continuous', variable=FSweepCont, value=1)
15298 sgrb6.pack(side=TOP)
15299 Plotsframe = Frame( frame2bp )
15300 Plotsframe.pack(side=TOP)
15301 nyquistplotbutton = Button(Plotsframe, text=
"Polar Plot", style=
"W9.TButton", command=MakeNyquistPlot)
15302 nyquistplotbutton.pack(side=LEFT)
15303 nicholsplotbutton = Button(Plotsframe, text=
"Rect Plot", style=
"W8.TButton", command=MakeNicPlot)
15304 nicholsplotbutton.pack(side=LEFT)
15305 bodismiss1button = Button(frame2bp, text=
"Dismiss", style=
"W8.TButton", command=DestroyBodeScreen)
15306 bodismiss1button.pack(side=TOP)
15308 ADI2 = Label(frame2bp, image=logo, anchor=
"sw", compound=
"top")
15309 ADI2.pack(side=TOP)
15310 if ShowBallonHelp > 0:
15315 bd5_tip =
CreateToolTip(bd5,
'Increase Ref Level by 10 dB')
15316 bd6_tip =
CreateToolTip(bd6,
'Decrease Ref Level by 10 dB')
15319 bodismiss1button_tip =
CreateToolTip(bodismiss1button,
'Dismiss Bode Plot window')
15322 global bodewindow, BodeScreenStatus, ca, FSweepMode
15324 BodeScreenStatus.set(0)
15328 bodewindow.destroy()
15329 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
15332 global Freqca, GRWF, XOLF, GRHF, Y0TF, CANVASwidthF, CANVASheightF, FontSize
15334 CANVASwidthF = event.width - 4
15335 CANVASheightF = event.height - 4
15336 GRWF = CANVASwidthF - (2 * X0LF)
15337 GRHF = CANVASheightF - int(10 * FontSize)
15342 global logo, SmoothCurvesSA, CutDC, SingleShotSA, FFTwindow, freqwindow, SmoothCurvesSA
15343 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMarker, FreqDisp
15344 global ShowRA_VdB, ShowRA_P, ShowRB_VdB, ShowRB_P, ShowMathSA, SWRev, SingleShotSA
15345 global ShowRMath, FSweepMode, FSweepCont, Freqca, SpectrumScreenStatus, RevDate
15346 global HScale, StopFreqEntry, StartFreqEntry, ShowFCur, ShowdBCur, FCursor, dBCursor
15347 global CANVASwidthF, GRWF, X0LF, CANVASheightF, GRHF, FontSize, PhCenFreqEntry, RelPhaseCenter
15349 if SpectrumScreenStatus.get() == 0:
15350 SpectrumScreenStatus.set(1)
15353 CANVASwidthF = GRWF + 2 * X0LF
15354 CANVASheightF = GRHF + int(10 * FontSize)
15355 freqwindow = Toplevel()
15356 freqwindow.title(
"Spectrum Analyzer " + SWRev + RevDate)
15357 freqwindow.protocol(
"WM_DELETE_WINDOW", DestroySpectrumScreen)
15358 frame2fr = Frame(freqwindow, borderwidth=5, relief=RIDGE)
15359 frame2fr.pack(side=RIGHT, expand=NO, fill=BOTH)
15361 frame2f = Frame(freqwindow, borderwidth=5, relief=RIDGE)
15362 frame2f.pack(side=TOP, expand=YES, fill=BOTH)
15364 Freqca = Canvas(frame2f, width=CANVASwidthF, height=CANVASheightF, background=COLORcanvas, cursor=
'cross')
15365 Freqca.bind(
'<Configure>', FreqCaresize)
15366 Freqca.bind(
'<1>', onCanvasFreqLeftClick)
15367 Freqca.bind(
'<3>', onCanvasFreqRightClick)
15368 Freqca.bind(
"<Up>", onCanvasUpArrow)
15369 Freqca.bind(
"<Down>", onCanvasDownArrow)
15370 Freqca.bind(
"<Left>", onCanvasLeftArrow)
15371 Freqca.bind(
"<Right>", onCanvasRightArrow)
15372 Freqca.bind(
"<space>", onCanvasSpaceBar)
15373 Freqca.bind(
"1", onCanvasSAOne)
15374 Freqca.bind(
"2", onCanvasSATwo)
15375 Freqca.bind(
"3", onCanvasSAThree)
15376 Freqca.bind(
"4", onCanvasSAFour)
15377 Freqca.bind(
"5", onCanvasSAFive)
15378 Freqca.bind(
"6", onCanvasSASix)
15379 Freqca.bind(
"7", onCanvasSASeven)
15380 Freqca.bind(
"8", onCanvasSAEight)
15381 Freqca.bind(
"9", onCanvasSANine)
15382 Freqca.bind(
"0", onCanvasSAZero)
15383 Freqca.bind(
"a", onCanvasSAAverage)
15384 Freqca.bind(
"n", onCanvasSANormal)
15385 Freqca.bind(
"p", onCanvasSAPeak)
15386 Freqca.bind(
"r", onCanvasSAReset)
15387 Freqca.bind(
"f", onCanvasShowFcur)
15388 Freqca.bind(
"d", onCanvasShowdBcur)
15389 Freqca.bind(
"h", onCanvasShowPcur)
15390 Freqca.bind(
"s", onCanvasSASnap)
15391 Freqca.pack(side=TOP, expand=YES, fill=BOTH)
15393 dropmenu = Frame( frame2fr )
15394 dropmenu.pack(side=TOP)
15396 SAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
15397 SAFilemenu.menu = Menu(SAFilemenu, tearoff = 0 )
15398 SAFilemenu[
"menu"] = SAFilemenu.menu
15399 SAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigSA)
15400 SAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigSA)
15401 SAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenSA)
15402 SAFilemenu.menu.add_command(label=
"Save Data", command=STOREcsvfile)
15403 SAFilemenu.pack(side=LEFT, anchor=W)
15405 SAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
15406 SAOptionmenu.menu = Menu(SAOptionmenu, tearoff = 0 )
15407 SAOptionmenu[
"menu"] = SAOptionmenu.menu
15408 SAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
15409 SAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
15410 SAOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesSA)
15411 SAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
15412 SAOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceSA)
15413 SAOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
15414 SAOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
15415 SAOptionmenu.pack(side=LEFT, anchor=W)
15417 RUNframe = Frame( frame2fr )
15418 RUNframe.pack(side=TOP)
15419 sb = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopSA)
15421 rb = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartSA)
15424 Modeframe = Frame( frame2fr )
15425 Modeframe.pack(side=TOP)
15426 Modemenu = Menubutton(Modeframe, text=
"Mode", style=
"W5.TButton")
15427 Modemenu.menu = Menu(Modemenu, tearoff = 0 )
15428 Modemenu[
"menu"] = Modemenu.menu
15429 Modemenu.menu.add_command(label=
"Normal mode [n]", command=BNormalmode)
15430 Modemenu.menu.add_command(label=
"Peak hold [p]", command=BPeakholdmode)
15431 Modemenu.menu.add_command(label=
"Average [a]", command=BAveragemode)
15432 Modemenu.menu.add_command(label=
"Reset Average [r]", command=BResetFreqAvg)
15433 Modemenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShotSA)
15434 Modemenu.pack(side=LEFT)
15436 SAFFTwindmenu = Menubutton(Modeframe, text=
"FFTwindow", style=
"W11.TButton")
15437 SAFFTwindmenu.menu = Menu(SAFFTwindmenu, tearoff = 0 )
15438 SAFFTwindmenu[
"menu"] = SAFFTwindmenu.menu
15439 SAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
15440 SAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
15441 SAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
15442 SAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
15443 SAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
15444 SAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
15445 SAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
15446 SAFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
15447 SAFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
15448 SAFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
15449 SAFFTwindmenu.pack(side=LEFT)
15451 SamplesMenu = Frame( frame2fr )
15452 SamplesMenu.pack(side=TOP)
15453 bless = Button(SamplesMenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
15454 bless.pack(side=LEFT)
15455 bmore = Button(SamplesMenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
15456 bmore.pack(side=LEFT)
15459 ShowC1_VdB = IntVar(0)
15460 ShowC1_P = IntVar(0)
15461 ShowC2_VdB = IntVar(0)
15462 ShowC2_P = IntVar(0)
15463 ShowMarker = IntVar(0)
15464 ShowRA_VdB = IntVar(0)
15465 ShowRA_P = IntVar(0)
15466 ShowRB_VdB = IntVar(0)
15467 ShowRB_P = IntVar(0)
15468 ShowMathSA = IntVar(0)
15469 ShowRMath = IntVar(0)
15471 SAShowmenu = Menubutton(frame2fr, text=
"Curves", style=
"W7.TButton")
15472 SAShowmenu.menu = Menu(SAShowmenu, tearoff = 0 )
15473 SAShowmenu[
"menu"] = SAShowmenu.menu
15474 SAShowmenu.menu.add_command(label=
"-Show-", command=donothing)
15475 SAShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllSA)
15476 SAShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneSA)
15477 SAShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowC1_VdB, command=UpdateFreqAll)
15478 SAShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowC2_VdB, command=UpdateFreqAll)
15479 SAShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowC1_P, command=UpdateFreqAll)
15480 SAShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowC2_P, command=UpdateFreqAll)
15481 SAShowmenu.menu.add_radiobutton(label=
'Markers Off', variable=ShowMarker, value=0, command=UpdateFreqAll)
15482 SAShowmenu.menu.add_radiobutton(label=
'Markers [5]', variable=ShowMarker, value=1, command=UpdateFreqAll)
15483 SAShowmenu.menu.add_radiobutton(label=
'Delta Markers', variable=ShowMarker, value=2, command=UpdateFreqAll)
15484 SAShowmenu.menu.add_separator()
15485 SAShowmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowdBCur, value=0)
15486 SAShowmenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowdBCur, value=1)
15487 SAShowmenu.menu.add_radiobutton(label=
'Phase Cursor [h]', variable=ShowdBCur, value=2)
15488 SAShowmenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowFCur)
15489 SAShowmenu.menu.add_separator()
15490 SAShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathSA, value=0, command=UpdateFreqAll)
15491 SAShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathSA, value=1, command=UpdateFreqAll)
15492 SAShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathSA, value=2, command=UpdateFreqAll)
15493 SAShowmenu.menu.add_separator()
15494 SAShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowRA_VdB, command=UpdateFreqAll)
15495 SAShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowRB_VdB, command=UpdateFreqAll)
15496 SAShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowRA_P, command=UpdateFreqAll)
15497 SAShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowRB_P, command=UpdateFreqAll)
15498 SAShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMath, command=UpdateFreqAll)
15499 SAShowmenu.pack(side=TOP)
15501 Frange1 = Frame( frame2fr )
15502 Frange1.pack(side=TOP)
15503 startfreqlab = Label(Frange1, text=
"Startfreq")
15504 startfreqlab.pack(side=LEFT)
15505 StartFreqEntry = Entry(Frange1, width=5)
15506 StartFreqEntry.bind(
'<MouseWheel>', onTextScroll)
15507 StartFreqEntry.bind(
'<Key>', onTextKey)
15508 StartFreqEntry.pack(side=LEFT)
15509 StartFreqEntry.delete(0,
"end")
15510 StartFreqEntry.insert(0,10)
15512 Frange2 = Frame( frame2fr )
15513 Frange2.pack(side=TOP)
15514 stopfreqlab = Label(Frange2, text=
"Stopfreq")
15515 stopfreqlab.pack(side=LEFT)
15516 StopFreqEntry = Entry(Frange2, width=7)
15517 StopFreqEntry.bind(
'<MouseWheel>', onStopfreqScroll)
15518 StopFreqEntry.bind(
'<Key>', onTextKey)
15519 StopFreqEntry.pack(side=LEFT)
15520 StopFreqEntry.delete(0,
"end")
15521 StopFreqEntry.insert(0,10000)
15524 HzScale = Frame( frame2fr )
15525 HzScale.pack(side=TOP)
15526 rb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScale, value=0, command=UpdateFreqTrace )
15527 rb1.pack(side=LEFT)
15528 rb2 = Radiobutton(HzScale, text=
"Log F", variable=HScale, value=1, command=UpdateFreqTrace )
15529 rb2.pack(side=LEFT)
15531 PhaseCenter = Frame( frame2fr )
15532 PhaseCenter.pack(side=TOP)
15533 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
15534 PhCenlab.pack(side=LEFT)
15535 PhCenFreqEntry = Entry(PhaseCenter, width=5)
15536 PhCenFreqEntry.bind(
'<MouseWheel>', onTextScroll)
15537 PhCenFreqEntry.bind(
'<Key>', onTextKey)
15538 PhCenFreqEntry.pack(side=LEFT)
15539 PhCenFreqEntry.delete(0,
"end")
15540 PhCenFreqEntry.insert(0,RelPhaseCenter.get())
15542 DBrange = Frame( frame2fr )
15543 DBrange.pack(side=TOP)
15544 b3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2)
15546 b4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1)
15549 LVBrange = Frame( frame2fr )
15550 LVBrange.pack(side=TOP)
15551 b5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4)
15553 b6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3)
15556 LVSrange = Frame( frame2fr )
15557 LVSrange.pack(side=TOP)
15558 b7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2)
15560 b8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1)
15563 sadismiss1button = Button(frame2fr, text=
"Dismiss", style=
"W8.TButton", command=DestroySpectrumScreen)
15564 sadismiss1button.pack(side=TOP)
15566 ADI2 = Label(frame2fr, image=logo, anchor=
"sw", compound=
"top")
15567 ADI2.pack(side=TOP)
15568 if ShowBallonHelp > 0:
15579 sadismiss1button_tip =
CreateToolTip(sadismiss1button,
'Dismiss Spectrum Analyzer window')
15582 global freqwindow, SpectrumScreenStatus, ca
15584 SpectrumScreenStatus.set(0)
15587 freqwindow.destroy()
15588 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
15591 global XYca, GRWXY, XOLXY, GRHXY, Y0TXY, CANVASwidthXY, CANVASheightXY, FontSize
15592 global YminXY, YmaxXY, XminXY, XmaxXY
15594 CANVASwidthXY = event.width - 4
15595 CANVASheightXY = event.height - 4
15596 GRWXY = CANVASwidthXY - int(2.25 * FontSize) - X0LXY
15597 GRHXY = CANVASheightXY - int(10 * FontSize)
15599 YmaxXY = Y0TXY + GRHXY
15601 XmaxXY = X0LXY + GRWXY
15606 global logo, CANVASwidthXY, CANVASheightXY, Xsignal, Ysignal, ShowRXY
15607 global XYScreenStatus, MarkerXYScale, XYca, xywindow, RevDate, SWRev, XYDisp
15608 global CHAsbxy, CHBsbxy, CHAxylab, CHBxylab, CHAVPosEntryxy, CHBVPosEntryxy
15609 global CHAIsbxy, CHBIsbxy, CHAIPosEntryxy, CHBIPosEntryxy, ScreenXYrefresh
15610 global YminXY, Y0TXY, YmaxXY, GRHXY, XminXY, X0LXY, XmaxXY, X0LXY, GRWXY, CANVASwidthXY, CANVASheightXY
15612 if XYScreenStatus.get() == 0:
15613 XYScreenStatus.set(1)
15617 YmaxXY = Y0TXY + GRHXY
15619 XmaxXY = X0LXY + GRWXY
15620 CANVASwidthXY = GRWXY + 18 + X0LXY
15621 CANVASheightXY = GRHXY + 80
15622 xywindow = Toplevel()
15623 xywindow.title(
"X-Y Plot " + SWRev + RevDate)
15624 xywindow.protocol(
"WM_DELETE_WINDOW", DestroyXYScreen)
15625 frame2xyr = Frame(xywindow, borderwidth=5, relief=RIDGE)
15626 frame2xyr.pack(side=RIGHT, expand=NO, fill=BOTH)
15628 frame2xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
15629 frame2xy.pack(side=TOP, expand=YES, fill=BOTH)
15631 frame3xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
15632 frame3xy.pack(side=TOP, expand=NO, fill=BOTH)
15634 frame4xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
15635 frame4xy.pack(side=TOP, expand=NO, fill=BOTH)
15637 XYca = Canvas(frame2xy, width=CANVASwidthXY, height=CANVASheightXY, background=COLORcanvas, cursor=
'cross')
15638 XYca.bind(
'<Configure>', XYcaresize)
15639 XYca.bind(
'<1>', onCanvasXYLeftClick)
15640 XYca.bind(
'<3>', onCanvasXYRightClick)
15641 XYca.bind(
"<Motion>",onCanvasMouse_xy)
15642 XYca.bind(
'<MouseWheel>', onCanvasXYScrollClick)
15643 XYca.bind(
"<Up>", onCanvasUpArrow)
15644 XYca.bind(
"<Down>", onCanvasDownArrow)
15645 XYca.bind(
"<Left>", onCanvasLeftArrow)
15646 XYca.bind(
"<Right>", onCanvasRightArrow)
15647 XYca.bind(
"<space>", onCanvasSpaceBar)
15648 XYca.bind(
"a", onCanvasAverage)
15649 XYca.pack(side=TOP, fill=BOTH, expand=YES)
15651 RUNframe = Frame( frame2xyr )
15652 RUNframe.pack(side=TOP)
15653 sbxy = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStop)
15654 sbxy.pack(side=LEFT)
15655 rbxy = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStart)
15656 rbxy.pack(side=LEFT)
15658 mathbt = Button(frame2xyr, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
15659 mathbt.pack(side=TOP)
15662 AxisLabX = Label(frame2xyr, text =
"-X Axis-", style=
"A10R1.TLabelframe.Label")
15663 AxisLabX.pack(side=TOP)
15664 chaxmenu = Frame( frame2xyr )
15665 chaxmenu.pack(side=TOP)
15666 rbx2 = Radiobutton(chaxmenu, text=
'CA-V', variable=Xsignal, value=1, command=UpdateXYTrace)
15667 rbx2.pack(side=LEFT, anchor=W)
15668 rbx3 = Radiobutton(chaxmenu, text=
'CA-I', variable=Xsignal, value=2, command=UpdateXYTrace)
15669 rbx3.pack(side=LEFT, anchor=W)
15670 chbxmenu = Frame( frame2xyr )
15671 chbxmenu.pack(side=TOP)
15672 rbx4 = Radiobutton(chbxmenu, text=
'CB-V', variable=Xsignal, value=3, command=UpdateXYTrace)
15673 rbx4.pack(side=LEFT, anchor=W)
15674 rbx5 = Radiobutton(chbxmenu, text=
'CB-I', variable=Xsignal, value=4, command=UpdateXYTrace)
15675 rbx5.pack(side=LEFT, anchor=W)
15676 rbx7 = Radiobutton(frame2xyr, text=
'Histogram CA-V', variable=Xsignal, value=6, command=BHistAsPercent)
15677 rbx7.pack(side=TOP)
15678 rbx8 = Radiobutton(frame2xyr, text=
'Histogram CB-V', variable=Xsignal, value=7, command=BHistAsPercent)
15679 rbx8.pack(side=TOP)
15680 rbx6 = Radiobutton(frame2xyr, text=
'Math', variable=Xsignal, value=5, command=UpdateXYTrace)
15681 rbx6.pack(side=TOP)
15683 AxisLabY = Label(frame2xyr, text =
"-Y Axis-", style=
"A10R2.TLabelframe.Label")
15684 AxisLabY.pack(side=TOP)
15685 chaymenu = Frame( frame2xyr )
15686 chaymenu.pack(side=TOP)
15687 rby2 = Radiobutton(chaymenu, text=
'CA-V', variable=Ysignal, value=1, command=UpdateXYTrace)
15688 rby2.pack(side=LEFT, anchor=W)
15689 rby3 = Radiobutton(chaymenu, text=
'CA-I', variable=Ysignal, value=2, command=UpdateXYTrace)
15690 rby3.pack(side=LEFT, anchor=W)
15691 chbymenu = Frame( frame2xyr )
15692 chbymenu.pack(side=TOP)
15693 rby4 = Radiobutton(chbymenu, text=
'CB-V', variable=Ysignal, value=3, command=UpdateXYTrace)
15694 rby4.pack(side=LEFT, anchor=W)
15695 rby5 = Radiobutton(chbymenu, text=
'CB-I', variable=Ysignal, value=4, command=UpdateXYTrace)
15696 rby5.pack(side=LEFT, anchor=W)
15697 rby6 = Radiobutton(frame2xyr, text=
'Math', variable=Ysignal, value=5, command=UpdateXYTrace)
15698 rby6.pack(side=TOP)
15700 cursormenu = Frame( frame2xyr )
15701 cursormenu.pack(side=TOP)
15702 cb1 = Checkbutton(cursormenu, text=
'X-Cur', variable=ShowXCur)
15703 cb1.pack(side=LEFT, anchor=W)
15704 cb2 = Checkbutton(cursormenu, text=
'Y-Cur', variable=ShowYCur)
15705 cb2.pack(side=LEFT, anchor=W)
15706 cb3 = Checkbutton(frame2xyr, text=
'RX-Y', variable=ShowRXY, command=UpdateXYTrace)
15708 cb4 = Checkbutton(frame2xyr, text=
'Persistance', variable=ScreenXYrefresh, command=UpdateXYTrace)
15711 snapbutton = Button(frame2xyr, style=
"W8.TButton", text=
"SnapShot", command=BSnapShot)
15712 snapbutton.pack(side=TOP)
15713 savebutton = Button(frame2xyr, style=
"W11.TButton", text=
"Save Screen", command=BSaveScreenXY)
15714 savebutton.pack(side=TOP)
15715 dismissxybutton = Button(frame2xyr, style=
"W7.TButton", text=
"Dismiss", command=DestroyXYScreen)
15716 dismissxybutton.pack(side=TOP)
15717 ADI1xy = Label(frame2xyr, image=logo, anchor=
"sw", compound=
"top")
15718 ADI1xy.pack(side=TOP)
15721 MarkerXYScale = IntVar(0)
15722 MarkerXYScale.set(1)
15724 CHAsbxy = Spinbox(frame3xy, width=4, values=CHvpdiv)
15725 CHAsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
15726 CHAsbxy.pack(side=LEFT)
15727 CHAsbxy.delete(0,
"end")
15728 CHAsbxy.insert(0,0.5)
15729 CHAxylab = Button(frame3xy, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetXYScaleA)
15730 CHAxylab.pack(side=LEFT)
15732 CHAVPosEntryxy = Entry(frame3xy, width=5)
15733 CHAVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
15734 CHAVPosEntryxy.bind(
'<Key>', onTextKey)
15735 CHAVPosEntryxy.pack(side=LEFT)
15736 CHAVPosEntryxy.delete(0,
"end")
15737 CHAVPosEntryxy.insert(0,2.5)
15738 CHAofflabxy = Button(frame3xy, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetXYVAPoss)
15739 CHAofflabxy.pack(side=LEFT)
15741 CHAIsbxy = Spinbox(frame3xy, width=4, values=CHipdiv)
15742 CHAIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
15743 CHAIsbxy.pack(side=LEFT)
15744 CHAIsbxy.delete(0,
"end")
15745 CHAIsbxy.insert(0,50.0)
15746 CHAIlabxy = Label(frame3xy, text=
"CA mA/Div", style=
"Strace3.TButton")
15747 CHAIlabxy.pack(side=LEFT)
15749 CHAIPosEntryxy = Entry(frame3xy, width=5)
15750 CHAIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
15751 CHAIPosEntryxy.bind(
'<Key>', onTextKey)
15752 CHAIPosEntryxy.pack(side=LEFT)
15753 CHAIPosEntryxy.delete(0,
"end")
15754 CHAIPosEntryxy.insert(0,0.0)
15755 CHAIofflabxy = Button(frame3xy, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetXYIAPoss)
15756 CHAIofflabxy.pack(side=LEFT)
15758 CHBsbxy = Spinbox(frame4xy, width=4, values=CHvpdiv)
15759 CHBsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
15760 CHBsbxy.pack(side=LEFT)
15761 CHBsbxy.delete(0,
"end")
15762 CHBsbxy.insert(0,0.5)
15764 CHBxylab = Button(frame4xy, text=
"CB V/Div", style=
"Strace2.TButton", command=SetXYScaleB)
15765 CHBxylab.pack(side=LEFT)
15767 CHBVPosEntryxy = Entry(frame4xy, width=5)
15768 CHBVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
15769 CHBVPosEntryxy.bind(
'<Key>', onTextKey)
15770 CHBVPosEntryxy.pack(side=LEFT)
15771 CHBVPosEntryxy.delete(0,
"end")
15772 CHBVPosEntryxy.insert(0,2.5)
15773 CHBofflabxy = Button(frame4xy, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetXYVBPoss)
15774 CHBofflabxy.pack(side=LEFT)
15776 CHBIsbxy = Spinbox(frame4xy, width=4, values=CHipdiv)
15777 CHBIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
15778 CHBIsbxy.pack(side=LEFT)
15779 CHBIsbxy.delete(0,
"end")
15780 CHBIsbxy.insert(0,50.0)
15781 CHBIlabxy = Label(frame4xy, text=
"CB mA/Div", style=
"Strace4.TButton")
15782 CHBIlabxy.pack(side=LEFT)
15784 CHBIPosEntryxy = Entry(frame4xy, width=5)
15785 CHBIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
15786 CHBIPosEntryxy.bind(
'<Key>', onTextKey)
15787 CHBIPosEntryxy.pack(side=LEFT)
15788 CHBIPosEntryxy.delete(0,
"end")
15789 CHBIPosEntryxy.insert(0,0.0)
15790 CHBIofflabxy = Button(frame4xy, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetXYIBPoss)
15791 CHBIofflabxy.pack(side=LEFT)
15793 if ShowBallonHelp > 0:
15801 snapbutton_tip =
CreateToolTip(snapbutton,
'Take snap shot of current trace')
15802 savebutton_tip =
CreateToolTip(savebutton,
'Save current trace to EPS file')
15803 dismissxybutton_tip =
CreateToolTip(dismissxybutton,
'Diamiss X-Y plot window')
15804 CHAxylab_tip =
CreateToolTip(CHAxylab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
15805 CHBxylab_tip =
CreateToolTip(CHBxylab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
15806 CHAxyofflab_tip =
CreateToolTip(CHAofflabxy,
'Set CHA-V position to DC average of signal')
15807 CHBxyofflab_tip =
CreateToolTip(CHBofflabxy,
'Set CHB-V position to DC average of signal')
15808 CHAIxyofflab_tip =
CreateToolTip(CHAIofflabxy,
'Set CHA-I position to DC average of signal')
15809 CHBIxyofflab_tip =
CreateToolTip(CHBIofflabxy,
'Set CHB-I position to DC average of signal')
15812 global xywindow, XYScreenStatus, ca, XYDisp
15814 XYScreenStatus.set(0)
15818 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
15823 global DevID, devx, CHA, CHB, RevDate, OnBoardRes, AD584act, FWRevOne
15824 global discontloop, contloop, session, AWGSync, SWRev
15827 if FWRevOne < 2.06:
15828 showwarning(
"WARNING",
"Out of date Firmware Revision!")
15830 calwindow = Toplevel()
15831 calwindow.title(
"ALM1000 Calibration tool " + SWRev + RevDate)
15833 prlab = Label(calwindow, text=
"Channel Gain / Offset calibration")
15834 prlab.grid(row=0, column=0, columnspan=2, sticky=W)
15835 labelA0 = Label(calwindow, style=
"A12B.TLabel")
15836 labelA0.grid(row=1, column=0, columnspan=2, sticky=W)
15837 labelA0.config(text =
"CA gnd Volts")
15838 labelAMax = Label(calwindow, style=
"A12B.TLabel")
15839 labelAMax.grid(row=2, column=0, columnspan=2, sticky=W)
15840 labelAMax.config(text =
"CA 584 Volts")
15841 labelAMin = Label(calwindow, style=
"A12B.TLabel")
15842 labelAMin.grid(row=3, column=0, columnspan=2, sticky=W)
15843 labelAMin.config(text =
"CA 5V Src I ")
15844 labelB0 = Label(calwindow, style=
"A12B.TLabel")
15845 labelB0.grid(row=4, column=0, columnspan=2, sticky=W)
15846 labelB0.config(text =
"CA gnd Volts")
15847 labelBMax = Label(calwindow, style=
"A12B.TLabel")
15848 labelBMax.grid(row=5, column=0, columnspan=2, sticky=W)
15849 labelBMax.config(text =
"CB 584 Volts")
15850 labelBMin = Label(calwindow, style=
"A12B.TLabel")
15851 labelBMin.grid(row=6, column=0, columnspan=2, sticky=W)
15852 labelBMin.config(text =
"CB 5V Src I ")
15853 labelAB = Label(calwindow, style=
"A12B.TLabel")
15854 labelAB.grid(row=7, column=0, columnspan=2, sticky=W)
15855 labelAB.config(text =
"CA 0V Src I")
15856 labelBA = Label(calwindow, style=
"A12B.TLabel")
15857 labelBA.grid(row=8, column=0, columnspan=2, sticky=W)
15858 labelBA.config(text =
"CA 0V Src I")
15859 labelSIA0 = Label(calwindow, style=
"A12B.TLabel")
15860 labelSIA0.grid(row=9, column=0, columnspan=2, sticky=W)
15861 labelSIA0.config(text =
"CA 2.5 Src 0 I")
15862 labelSIA = Label(calwindow, style=
"A12B.TLabel")
15863 labelSIA.grid(row=10, column=0, columnspan=2, sticky=W)
15864 labelSIA.config(text =
"CA 50 Src 100 ")
15865 labelSIAN = Label(calwindow, style=
"A12B.TLabel")
15866 labelSIAN.grid(row=11, column=0, columnspan=2, sticky=W)
15867 labelSIAN.config(text =
"CA 50 Src -45")
15868 labelSIB0 = Label(calwindow, style=
"A12B.TLabel")
15869 labelSIB0.grid(row=12, column=0, columnspan=2, sticky=W)
15870 labelSIB0.config(text =
"CB 2.5 Src 0 I")
15871 labelSIB = Label(calwindow, style=
"A12B.TLabel")
15872 labelSIB.grid(row=13, column=0, columnspan=2, sticky=W)
15873 labelSIB.config(text =
"CB 50 Src 100 ")
15874 labelSIBN = Label(calwindow, style=
"A12B.TLabel")
15875 labelSIBN.grid(row=14, column=0, columnspan=2, sticky=W)
15876 labelSIBN.config(text =
"CB 50 Src -45")
15878 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
15879 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
15882 if session.continuous:
15883 print(
"ending session")
15886 if askyesno(
"Reset Calibration",
"Do You Need To Reset Default Calibration?", parent=calwindow):
15889 devx.write_calibration(
"calib_default.txt")
15892 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Default Cal File",
"*.txt")], parent=calwindow)
15893 devx.write_calibration(filename)
15896 devidstr = DevID[17:31]
15897 filename =
"calib" + devidstr +
".txt"
15898 if os.path.isfile(filename):
15899 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?", parent=calwindow):
15900 devx.write_calibration(filename)
15902 calwindow.destroy()
15905 if askyesno(
"Continue?",
"Continure with self calibration?", parent=calwindow):
15908 calwindow.destroy()
15911 CalFile = open(filename,
"w")
15913 CHA.mode = Mode.HI_Z
15914 CHB.mode = Mode.HI_Z
15915 devx.ctrl_transfer( 0x40, 0x50, 34, 0, 0, 0, 100)
15916 devx.ctrl_transfer( 0x40, 0x50, 39, 0, 0, 0, 100)
15918 ADsignal1 = devx.get_samples(1010)
15921 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
15922 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
15923 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
15924 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
15925 RequestVRef = askstring(
"External Reference",
"Enter External Reference Voltage", initialvalue=AD584act, parent=root)
15927 AD584act = float(RequestVRef)*1.0
15930 showinfo(
"CONNECT",
"Connect External Voltage to both CHA and CHB inputs.", parent=calwindow)
15933 CHA.mode = Mode.HI_Z
15934 CHB.mode = Mode.HI_Z
15935 ADsignal1 = devx.get_samples(1010)
15936 CHA584Raw = CHB584Raw = 0.0
15938 for index
in range(1000):
15939 CHA584Raw += ADsignal1[index+10][0][0]
15940 CHB584Raw += ADsignal1[index+10][1][0]
15942 CHA584Raw = CHA584Raw / 1000.0
15943 CHB584Raw = CHB584Raw / 1000.0
15944 VString =
"Extern A Volts " +
' {0:.4f} '.format(CHA584Raw)
15945 labelAMax.config(text = VString)
15946 VString =
"Extern B Volts " +
' {0:.4f} '.format(CHB584Raw)
15947 labelBMax.config(text = VString)
15948 Lower = AD584act - 0.3
15949 Upper = AD584act + 0.3
15950 if CHA584Raw < Lower
or CHA584Raw > Upper
or CHB584Raw < Lower
or CHB584Raw > Upper:
15951 if askyesno(
"CONNECT",
"Did not get good data from Ref V check connections!\n Abort(Y) or Try again(N)", parent=calwindow):
15952 CHA.mode = Mode.HI_Z
15953 CHB.mode = Mode.HI_Z
15956 calwindow.destroy()
15961 showinfo(
"DISCONNECT",
"Disconnect everything from CHA and CHB pins.", parent=calwindow)
15962 CHAGndRaw = CHBGndRaw = CHAI0gRaw = CHBI0gRaw = 0.0
15964 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
15965 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
15966 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
15967 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
15968 CHA.mode = Mode.HI_Z
15969 CHB.mode = Mode.HI_Z
15970 ADsignal1 = devx.get_samples(1010)
15972 for index
in range(1000):
15973 CHAGndRaw += ADsignal1[index+10][0][0]
15974 CHBGndRaw += ADsignal1[index+10][1][0]
15975 CHAI0gRaw += ADsignal1[index+10][0][1]
15976 CHBI0gRaw += ADsignal1[index+10][1][1]
15978 CHAGndRaw = CHAGndRaw / 1000.0
15979 CHAI0gRaw = CHAI0gRaw / 1000.0
15980 CHBGndRaw = CHBGndRaw / 1000.0
15981 CHBI0gRaw = CHBI0gRaw / 1000.0
15982 VString =
"CA gnd Volts " +
' {0:.4f} '.format(CHAGndRaw)
15983 labelA0.config(text = VString)
15984 VString =
"CB gnd Volts " +
' {0:.4f} '.format(CHBGndRaw)
15985 labelB0.config(text = VString)
15986 CHA2p5Raw = CHB2p5Raw = CHAI02p5Raw = CHBI02p5Raw = 0.0
15988 CHA.mode = Mode.HI_Z
15989 CHB.mode = Mode.HI_Z
15990 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
15991 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
15992 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
15993 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
15994 ADsignal1 = devx.get_samples(1010)
15996 for index
in range(1000):
15997 CHA2p5Raw += ADsignal1[index+10][0][0]
15998 CHB2p5Raw += ADsignal1[index+10][1][0]
15999 CHAI02p5Raw += ADsignal1[index+10][0][1]
16000 CHBI02p5Raw += ADsignal1[index+10][1][1]
16002 CHA2p5Raw = CHA2p5Raw / 1000.0
16003 CHAI02p5Raw = CHAI02p5Raw / 1000.0
16004 CHB2p5Raw = CHB2p5Raw / 1000.0
16005 CHBI02p5Raw = CHBI02p5Raw / 1000.0
16007 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
16008 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16009 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
16010 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16011 CHA.mode = Mode.SVMI
16013 CHB.mode = Mode.SVMI
16015 ADsignal1 = devx.get_samples(1010)
16016 CHAF0vRaw = CHBF0vRaw = CHAI0F0Raw = CHBI0F0Raw = 0.0
16018 for index
in range(1000):
16019 CHAF0vRaw += ADsignal1[index+10][0][0]
16020 CHBF0vRaw += ADsignal1[index+10][1][0]
16021 CHAI0F0Raw += ADsignal1[index+10][0][1]
16022 CHBI0F0Raw += ADsignal1[index+10][1][1]
16024 CHAF0vRaw = CHAF0vRaw / 1000.0
16025 CHAI0F0Raw = CHAI0F0Raw / 1000.0
16026 CHBF0vRaw = CHBF0vRaw / 1000.0
16027 CHBI0F0Raw = CHBI0F0Raw / 1000.0
16029 CHA.mode = Mode.SVMI
16031 CHB.mode = Mode.SVMI
16033 ADsignal1 = devx.get_samples(1010)
16034 CHAF25vRaw = CHAI0F25Raw = CHBF25vRaw = CHBI0F25Raw = 0.0
16036 for index
in range(1000):
16037 CHAF25vRaw += ADsignal1[index+10][0][0]
16038 CHBF25vRaw += ADsignal1[index+10][1][0]
16039 CHAI0F25Raw += ADsignal1[index+10][0][1]
16040 CHBI0F25Raw += ADsignal1[index+10][1][1]
16042 CHAF25vRaw = CHAF25vRaw / 1000.0
16043 CHAI0F25Raw = CHAI0F25Raw / 1000.0
16044 CHBF25vRaw = CHBF25vRaw / 1000.0
16045 CHBI0F25Raw = CHBI0F25Raw / 1000.0
16048 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
16049 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
16050 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
16051 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
16052 CHA.mode = Mode.SVMI
16054 CHB.mode = Mode.SVMI
16056 ADsignal1 = devx.get_samples(1010)
16057 CHASr5vRaw = CHAISr5vRaw = CHBSr5vRaw = CHBISr5vRaw = 0.0
16058 for index
in range(1000):
16059 CHASr5vRaw += ADsignal1[index+10][0][0]
16060 CHBSr5vRaw += ADsignal1[index+10][1][0]
16061 CHAISr5vRaw += ADsignal1[index+10][0][1]
16062 CHBISr5vRaw += ADsignal1[index+10][1][1]
16064 CHASr5vRaw = CHASr5vRaw / 1000.0
16065 CHAISr5vRaw = CHAISr5vRaw / 1000.0
16066 CHBSr5vRaw = CHBSr5vRaw / 1000.0
16067 CHBISr5vRaw = CHBISr5vRaw / 1000.0
16068 VString =
"CA 5V Src I " +
' {0:.4f} '.format(CHAISr5vRaw)
16069 labelAMin.config(text = VString)
16070 VString =
"CB 5V Src I " +
' {0:.4f} '.format(CHBISr5vRaw)
16071 labelBMin.config(text = VString)
16073 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
16074 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16075 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
16076 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16077 CHA.mode = Mode.SVMI
16078 CHA.constant(0.001)
16079 CHB.mode = Mode.SVMI
16080 CHB.constant(0.001)
16081 ADsignal1 = devx.get_samples(1010)
16082 CHASr0vRaw = CHAISr0vRaw = CHBSr0vRaw = CHBISr0vRaw = 0.0
16083 for index
in range(1000):
16084 CHASr0vRaw += ADsignal1[index+10][0][0]
16085 CHBSr0vRaw += ADsignal1[index+10][1][0]
16086 CHAISr0vRaw += ADsignal1[index+10][0][1]
16087 CHBISr0vRaw += ADsignal1[index+10][1][1]
16089 CHASr0vRaw = CHASr0vRaw / 1000.0
16090 CHAISr0vRaw = CHAISr0vRaw / 1000.0
16091 CHBSr0vRaw = CHBSr0vRaw / 1000.0
16092 CHBISr0vRaw = CHBISr0vRaw / 1000.0
16093 VString =
"CA 0V Src I " +
' {0:.4f} '.format(CHAISr0vRaw)
16094 labelAB.config(text = VString)
16095 VString =
"CB 0V Src I " +
' {0:.4f} '.format(CHBISr0vRaw)
16096 labelBA.config(text = VString)
16099 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
16100 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16101 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
16102 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16103 CHA.mode = Mode.SIMV
16105 CHB.mode = Mode.SIMV
16107 ADsignal1 = devx.get_samples(1010)
16108 CHAVSr0iRaw = CHAISr0iRaw = CHBVSr0iRaw = CHBISr0iRaw = 0.0
16109 for index
in range(1000):
16110 CHAVSr0iRaw += ADsignal1[index+10][0][0]
16111 CHBVSr0iRaw += ADsignal1[index+10][1][0]
16112 CHAISr0iRaw += ADsignal1[index+10][0][1]
16113 CHBISr0iRaw += ADsignal1[index+10][1][1]
16115 CHAVSr0iRaw = CHAVSr0iRaw / 1000.0
16116 CHAISr0iRaw = CHAISr0iRaw / 1000.0
16117 CHBVSr0iRaw = CHBVSr0iRaw / 1000.0
16118 CHBISr0iRaw = CHBISr0iRaw / 1000.0
16119 VString =
"CA 2.5 Src 0 I" +
' {0:.4f} '.format(CHAISr0iRaw)
16120 labelSIA0.config(text = VString)
16121 VString =
"CB 2.5 Src 0 I" +
' {0:.4f} '.format(CHBISr0iRaw)
16122 labelSIB0.config(text = VString)
16125 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
16126 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16127 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
16128 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16129 CHA.mode = Mode.SIMV
16130 CHA.constant(0.045)
16131 CHB.mode = Mode.SIMV
16132 CHB.constant(0.045)
16133 ADsignal1 = devx.get_samples(1010)
16134 CHAVSr100Raw = CHAISr100Raw = CHBVSr100Raw = CHBISr100Raw = 0.0
16135 for index
in range(1000):
16136 CHAVSr100Raw += ADsignal1[index+10][0][0]
16137 CHBVSr100Raw += ADsignal1[index+10][1][0]
16138 CHAISr100Raw += ADsignal1[index+10][0][1]
16139 CHBISr100Raw += ADsignal1[index+10][1][1]
16141 CHAVSr100Raw = CHAVSr100Raw / 1000.0
16142 CHAISr100Raw = CHAISr100Raw / 1000.0
16143 CHBVSr100Raw = CHBVSr100Raw / 1000.0
16144 CHBISr100Raw = CHBISr100Raw / 1000.0
16145 VString =
"CA 50 Src +45 " +
' {0:.4f} '.format(CHAVSr100Raw)
16146 labelSIA.config(text = VString)
16147 VString =
"CB 50 Src +45 " +
' {0:.4f} '.format(CHBVSr100Raw)
16148 labelSIB.config(text = VString)
16151 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
16152 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16153 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
16154 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16155 CHA.mode = Mode.SIMV
16156 CHA.constant(-0.045)
16157 CHB.mode = Mode.SIMV
16158 CHB.constant(-0.045)
16159 ADsignal1 = devx.get_samples(1010)
16160 CHAVSrN45Raw = CHAISrN45Raw = CHBVSrN45Raw = CHBISrN45Raw = 0.0
16161 for index
in range(1000):
16162 CHAVSrN45Raw += ADsignal1[index+10][0][0]
16163 CHBVSrN45Raw += ADsignal1[index+10][1][0]
16164 CHAISrN45Raw += ADsignal1[index+10][0][1]
16165 CHBISrN45Raw += ADsignal1[index+10][1][1]
16167 CHAVSrN45Raw = CHAVSrN45Raw / 1000.0
16168 CHAISrN45Raw = CHAISrN45Raw / 1000.0
16169 CHBVSrN45Raw = CHBVSrN45Raw / 1000.0
16170 CHBISrN45Raw = CHBISrN45Raw / 1000.0
16171 VString =
"CA 50 Src -45 " +
' {0:.4f} '.format(CHAVSrN45Raw)
16172 labelSIAN.config(text = VString)
16173 VString =
"CB 50 Src -45 " +
' {0:.4f} '.format(CHBVSrN45Raw)
16174 labelSIBN.config(text = VString)
16176 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
16177 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
16178 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
16179 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
16182 CHAF25V = CHAF25vRaw * ( AD584act / CHA584Raw )
16183 CHBF25V = CHBF25vRaw * ( AD584act / CHB584Raw )
16185 CHASr5v = CHASr5vRaw * ( AD584act / CHA584Raw )
16186 CHBSr5v = CHBSr5vRaw * ( AD584act / CHB584Raw )
16188 CHA2p5 = CHA2p5Raw * ( AD584act / CHA584Raw )
16190 CHB2p5 = CHB2p5Raw * ( AD584act / CHB584Raw )
16193 CHAActSrI = CHASr5v / OnBoardRes
16194 CHBActSrI = CHBSr5v / OnBoardRes
16196 CHAActSnkI = CHASr0vRaw - CHA2p5 / OnBoardRes
16197 CHBActSnkI = CHBSr0vRaw - CHB2p5 / OnBoardRes
16199 CHASr0i = CHAVSr0iRaw * ( AD584act / CHA584Raw )
16200 CHASr0iAct = CHASr0i / OnBoardRes
16201 CHASr100 = CHAVSr100Raw * ( AD584act / CHA584Raw )
16202 CHASrI100Act = (CHASr100 - CHA2p5) / OnBoardRes
16203 CHASrN45 = CHAVSrN45Raw * ( AD584act / CHA584Raw )
16204 CHASrIN45Act = (CHASrN45 - CHA2p5) / OnBoardRes
16206 CHBSr0i = CHBVSr0iRaw * ( AD584act / CHB584Raw )
16207 CHBSr0iAct = CHBSr0i / OnBoardRes
16208 CHBSr100 = CHBVSr100Raw * ( AD584act / CHB584Raw )
16209 CHBSrI100Act = (CHBSr100 - CHB2p5) / OnBoardRes
16210 CHBSrN45 = CHBVSrN45Raw * ( AD584act / CHB584Raw )
16211 CHBSrIN45Act = (CHBSrN45 - CHB2p5) / OnBoardRes
16214 CalFile.write(
'# Channel A, measure V\n')
16215 CalFile.write(
'</>\n')
16216 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAGndRaw) +
'>\n')
16217 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHA584Raw) +
'>\n')
16218 CalFile.write(
'<>\n')
16219 CalFile.write(
'\n')
16221 CalFile.write(
'# Channel A, measure I\n')
16222 CalFile.write(
'</>\n')
16223 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAI02p5Raw) +
'>\n')
16224 CalFile.write(
'<' +
'{0:.4f}'.format(CHAActSrI) +
', ' +
'{0:.4f}'.format(CHAISr5vRaw) +
'>\n')
16226 CalFile.write(
'<' +
'{0:.4f}'.format(-CHAActSrI) +
', ' +
'{0:.4f}'.format(-CHAISr5vRaw) +
'>\n')
16227 CalFile.write(
'<>\n')
16228 CalFile.write(
'\n')
16230 CalFile.write(
'# Channel A, source V\n')
16231 CalFile.write(
'</>\n')
16232 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAF0vRaw) +
'>\n')
16233 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
16234 CalFile.write(
'<>\n')
16235 CalFile.write(
'\n')
16237 CalFile.write(
'# Channel A, source I\n')
16238 CalFile.write(
'</>\n')
16239 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAISr0iRaw) +
'>\n')
16240 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHASrI100Act) +
'>\n')
16241 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHASrIN45Act) +
'>\n')
16242 CalFile.write(
'<>\n')
16243 CalFile.write(
'\n')
16245 CalFile.write(
'# Channel B, measure V\n')
16246 CalFile.write(
'</>\n')
16247 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBGndRaw) +
'>\n')
16248 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHB584Raw) +
'>\n')
16249 CalFile.write(
'<>\n')
16250 CalFile.write(
'\n')
16252 CalFile.write(
'# Channel B, measure I\n')
16253 CalFile.write(
'</>\n')
16254 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBI02p5Raw) +
'>\n')
16255 CalFile.write(
'<' +
'{0:.4f}'.format(CHBActSrI) +
', ' +
'{0:.4f}'.format(CHBISr5vRaw) +
'>\n')
16257 CalFile.write(
'<' +
'{0:.4f}'.format(-CHBActSrI) +
', ' +
'{0:.4f}'.format(-CHBISr5vRaw) +
'>\n')
16258 CalFile.write(
'<>\n')
16259 CalFile.write(
'\n')
16261 CalFile.write(
'# Channel B, source V\n')
16262 CalFile.write(
'</>\n')
16263 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBF0vRaw) +
'>\n')
16264 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
16265 CalFile.write(
'<>\n')
16266 CalFile.write(
'\n')
16268 CalFile.write(
'# Channel B source I\n')
16269 CalFile.write(
'</>\n')
16270 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBISr0iRaw) +
'>\n')
16271 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHBSrI100Act) +
'>\n')
16272 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHBSrIN45Act) +
'>\n')
16273 CalFile.write(
'<>\n')
16276 showinfo(
"Finish",
"Successfully measured cal factors!", parent=calwindow)
16277 if askyesno(
"Write cal",
"Write Cal Data to Board?", parent=calwindow):
16278 devx.write_calibration(filename)
16282 CHA.mode = Mode.HI_Z_SPLIT
16283 CHB.mode = Mode.HI_Z_SPLIT
16287 calwindow.destroy()
16290 global cal, DevID, devx
16292 devidstr = DevID[17:31]
16293 filename =
"calib" + devidstr +
"test.txt"
16294 if os.path.isfile(filename):
16295 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?"):
16298 if askyesno(
"Continue?",
"Continure with save calibration file?"):
16301 calwindow.destroy()
16304 CalFile = open(filename,
"w")
16308 CalFile.write(
'# Channel A, measure V\n')
16309 CalFile.write(
'</>\n')
16310 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[0][0]) +
'>\n')
16311 CHAgp = (5.0/cal[0][1])+cal[0][0]
16312 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16313 CalFile.write(
'<>\n')
16314 CalFile.write(
'\n')
16316 CalFile.write(
'# Channel A, measure I\n')
16317 CalFile.write(
'</>\n')
16318 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[1][0]) +
'>\n')
16319 CHAgp = (0.1/cal[0][1])+cal[1][0]
16320 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16321 CHAgn = (-0.1/cal[0][2])+cal[1][0]
16322 CalFile.write(
'<-0.1000' +
'{0:.5f}'.format(CHAgn) +
'>\n')
16323 CalFile.write(
'<>\n')
16324 CalFile.write(
'\n')
16326 CalFile.write(
'# Channel A, source V\n')
16327 CalFile.write(
'</>\n')
16328 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[2][0]) +
'>\n')
16329 CHAgp = (5.0/cal[2][1])+cal[2][0]
16330 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16331 CalFile.write(
'<>\n')
16332 CalFile.write(
'\n')
16334 CalFile.write(
'# Channel A, source I\n')
16335 CalFile.write(
'</>\n')
16336 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[3][0]) +
'>\n')
16337 CHAgp = (0.1/cal[3][1])+cal[3][0]
16338 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16339 CHAgn = (-0.1/cal[3][2])+cal[3][0]
16340 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
16341 CalFile.write(
'<>\n')
16342 CalFile.write(
'\n')
16344 CalFile.write(
'# Channel B, measure V\n')
16345 CalFile.write(
'</>\n')
16346 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[4][0]) +
'>\n')
16347 CHAgp = (5.0/cal[4][1])+cal[4][0]
16348 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16349 CalFile.write(
'<>\n')
16350 CalFile.write(
'\n')
16352 CalFile.write(
'# Channel B, measure I\n')
16353 CalFile.write(
'</>\n')
16354 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[5][0]) +
'>\n')
16355 CHAgp = (0.1/cal[5][1])+cal[5][0]
16356 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16357 CHAgn = (-0.1/cal[5][2])+cal[5][0]
16358 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
16359 CalFile.write(
'<>\n')
16360 CalFile.write(
'\n')
16362 CalFile.write(
'# Channel B, source V\n')
16363 CalFile.write(
'</>\n')
16364 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[6][0]) +
'>\n')
16365 CHAgp = (5.0/cal[6][1])+cal[6][0]
16366 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16367 CalFile.write(
'<>\n')
16368 CalFile.write(
'\n')
16370 CalFile.write(
'# Channel B source I\n')
16371 CalFile.write(
'</>\n')
16372 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[7][0]) +
'>\n')
16373 CHAgp = (0.1/cal[7][1])+cal[7][0]
16374 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
16375 CHAgn = (-0.1/cal[7][2])+cal[7][0]
16376 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
16377 CalFile.write(
'<>\n')
16383 global devx, PIO_0, PIO_1, PIO_2, PIO_3, SCLKPort, SDATAPort, SLATCHPort
16385 binstr = bin(DValue)
16386 binlen = len(binstr)
16387 datastr = binstr[2:binlen]
16388 datalen = len(datastr)
16390 datastr = str.rjust(datastr , 16 ,
'0')
16391 datalen = len(datastr)
16393 devx.ctrl_transfer(0x40, 0x50, SLATCHPort.get(), 0, 0, 0, 100)
16394 while i < datalen+1:
16396 D1code = 0x50 + int(datastr[i-1])
16397 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
16398 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
16399 devx.ctrl_transfer(0x40, 0x50, SCLKPort.get(), 0, 0, 0, 100)
16400 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
16402 devx.ctrl_transfer(0x40, 0x51, SLATCHPort.get(), 0, 0, 0, 100)
16413 global FminEntry, HtMulEntry, MinigenFout, MinigenMode
16414 global Two28, mclk, EnableHSsampling, MinigenScreenStatus
16416 if MinigenScreenStatus.get() == 0:
16419 MinigenMode.set(40)
16422 MulX = float(eval(HtMulEntry.get()))
16426 if EnableHSsampling > 0:
16427 HtMulEntry.delete(0,END)
16428 HtMulEntry.insert(0, MulX)
16430 FminE = float(eval(FminEntry.get()))*1000
16432 if EnableHSsampling > 0:
16433 FminEntry.delete(0,END)
16434 FminEntry.insert(0, FminE/1000)
16438 Fmin = FminE - (FminE/MulX)
16440 MinigenFout.delete(0,
"end")
16441 MinigenFout.insert(0,Fmin)
16446 global MinigenFclk, MinigenFout, MinigenMode
16447 global Two28, SCLKPort, SDATAPort, SLATCHPort
16449 DValue = 8192 + MinigenMode.get()
16452 fout = float(eval(MinigenFout.get()))
16454 MinigenFout.delete(0,
"end")
16455 MinigenFout.insert(0,100)
16457 mclk = float(eval(MinigenFclk.get()))*1000000
16459 MingenFclk.delete(0,
"end")
16460 MinigenFclk.insert(0,16)
16461 Freg = int((fout*Two28)/mclk)
16462 Foutstr = bin(Freg)
16463 Foutlen = len(Foutstr)
16464 datastr = Foutstr[2:Foutlen]
16465 datalen = len(datastr)
16467 datastr = str.rjust(datastr , 28 ,
'0')
16468 datalen = len(datastr)
16469 Fmsb =
'0b01' + datastr[0:14]
16470 Flsb =
'0b01' + datastr[14:]
16471 FValue = int(eval(Flsb))
16473 FValue = int(eval(Fmsb))
16478 global RevDate, minigenwindow, MinigenMode, MinigenScreenStatus, MinigenFclk, MinigenFout, SWRev
16479 global SCLKPort, SDATAPort, SLATCHPort
16480 global GenericSerialStatus
16481 global PIO_0, PIO_1, PIO_2, PIO_3
16483 if GenericSerialStatus.get() == 1:
16484 GenericSerialStatus.set(0)
16486 if MinigenScreenStatus.get() == 0:
16487 MinigenScreenStatus.set(1)
16488 minigenwindow = Toplevel()
16489 minigenwindow.title(
"-AD983x DDS- " + SWRev + RevDate)
16490 minigenwindow.resizable(FALSE,FALSE)
16491 minigenwindow.protocol(
"WM_DELETE_WINDOW", DestroyMinigenScreen)
16493 MinigenMode = IntVar(0)
16494 mgb1 = Radiobutton(minigenwindow, text=
"Sine", variable=MinigenMode, value=0, command=BSendMG )
16495 mgb1.grid(row=1, column=0, sticky=W)
16496 mgb2 = Radiobutton(minigenwindow, text=
"Triangle", variable=MinigenMode, value=2, command=BSendMG )
16497 mgb2.grid(row=1, column=1, columnspan=2, sticky=W)
16498 mgb3 = Radiobutton(minigenwindow, text=
"Square", variable=MinigenMode, value=40, command=BSendMG )
16499 mgb3.grid(row=2, column=0, sticky=W)
16500 mgb4 = Radiobutton(minigenwindow, text=
"Square/2", variable=MinigenMode, value=32, command=BSendMG )
16501 mgb4.grid(row=2, column=1, columnspan=2, sticky=W)
16502 f0lab = Label(minigenwindow, text=
"Mclk in MHz")
16503 f0lab.grid(row=3, column=0, columnspan=2, sticky=W)
16504 MinigenFclk = Entry(minigenwindow, width=5)
16505 MinigenFclk.grid(row=3, column=1, columnspan=2, sticky=W, padx=6)
16506 MinigenFclk.delete(0,
"end")
16507 MinigenFclk.insert(0,16)
16508 f1lab = Label(minigenwindow, text=
"Output Freq")
16509 f1lab.grid(row=4, column=0, columnspan=2, sticky=W)
16510 MinigenFout = Entry(minigenwindow, width=8)
16511 MinigenFout.bind(
'<MouseWheel>', onMiniGenScroll)
16512 MinigenFout.grid(row=4, column=1, columnspan=2, sticky=W)
16513 MinigenFout.delete(0,
"end")
16514 MinigenFout.insert(0,100)
16515 bsn1 = Button(minigenwindow, text=
'UpDate', style=
"W7.TButton", command=BSendMG)
16516 bsn1.grid(row=5, column=0, sticky=W, pady=4)
16517 dismissmgbutton = Button(minigenwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyMinigenScreen)
16518 dismissmgbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
16520 label3 = Label(minigenwindow,text=
"SCLK PI/O Port ")
16521 label3.grid(row=6, column=0, sticky=W)
16522 sclk1 = Radiobutton(minigenwindow, text=
"0", variable=SCLKPort, value=PIO_0)
16523 sclk1.grid(row=6, column=1, sticky=W)
16524 sclk2 = Radiobutton(minigenwindow, text=
"1", variable=SCLKPort, value=PIO_1)
16525 sclk2.grid(row=6, column=2, sticky=W)
16526 sclk3 = Radiobutton(minigenwindow, text=
"2", variable=SCLKPort, value=PIO_2)
16527 sclk3.grid(row=6, column=3, sticky=W)
16528 sclk4 = Radiobutton(minigenwindow, text=
"3", variable=SCLKPort, value=PIO_3)
16529 sclk4.grid(row=6, column=4, sticky=W)
16531 label4 = Label(minigenwindow,text=
"SData PI/O Port ")
16532 label4.grid(row=7, column=0, sticky=W)
16533 sdat1 = Radiobutton(minigenwindow, text=
"0", variable=SDATAPort, value=PIO_0)
16534 sdat1.grid(row=7, column=1, sticky=W)
16535 sdat2 = Radiobutton(minigenwindow, text=
"1", variable=SDATAPort, value=PIO_1)
16536 sdat2.grid(row=7, column=2, sticky=W)
16537 sdat3 = Radiobutton(minigenwindow, text=
"2", variable=SDATAPort, value=PIO_2)
16538 sdat3.grid(row=7, column=3, sticky=W)
16539 sdat4 = Radiobutton(minigenwindow, text=
"3", variable=SDATAPort, value=PIO_3)
16540 sdat4.grid(row=7, column=4, sticky=W)
16542 label5 = Label(minigenwindow,text=
"FSync PI/O Port ")
16543 label5.grid(row=8, column=0, sticky=W)
16544 slth1 = Radiobutton(minigenwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
16545 slth1.grid(row=8, column=1, sticky=W)
16546 slth2 = Radiobutton(minigenwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
16547 slth2.grid(row=8, column=2, sticky=W)
16548 slth3 = Radiobutton(minigenwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
16549 slth3.grid(row=8, column=3, sticky=W)
16550 slth4 = Radiobutton(minigenwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
16551 slth4.grid(row=8, column=4, sticky=W)
16556 global minigenwindow, MinigenScreenStatus
16558 MinigenScreenStatus.set(0)
16559 minigenwindow.destroy()
16562 global ETSStatus, ETSDisp
16570 global PIO_0, PIO_1, PIO_2, PIO_3
16572 binstr = bin(D1Value)
16573 binlen = len(binstr)
16574 data1str = binstr[2:binlen]
16575 datalen = len(data1str)
16577 data1str = str.rjust(data1str , 16 ,
'0')
16578 datalen = len(data1str)
16580 binstr = bin(D2Value)
16581 binlen = len(binstr)
16582 data2str = binstr[2:binlen]
16583 datalen = len(data2str)
16585 data2str = str.rjust(data2str , 16 ,
'0')
16586 datalen = len(data2str)
16593 devx.ctrl_transfer(0x40, 0x50, 0, 0, 0, 0, 100)
16594 while i < datalen+1:
16596 D1code = 0x50 + int(data1str[i-1])
16597 D2code = 0x50 + int(data2str[i-1])
16598 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
16599 devx.ctrl_transfer(0x40, D2code, PIO_2, 0, 0, 0, 100)
16600 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
16601 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
16602 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
16604 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
16607 global DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry, REFEntry
16610 RefValue = float(eval(REFEntry.get()))
16614 D1Value = float(eval(DAC1Entry.get()))
16617 D1Code = int((D1Value/RefValue)*255)
16620 D1Code = D1Code + 0x2000
16622 D2Value = float(eval(DAC2Entry.get()))
16625 D2Code = int((D2Value/RefValue)*255)
16628 D2Code = D2Code + 0x2400
16630 D3Value = float(eval(DAC3Entry.get()))
16633 D3Code = int((D3Value/RefValue)*255)
16636 D3Code = D3Code + 0x2000
16638 D4Value = float(eval(DAC4Entry.get()))
16641 D4Code = int((D4Value/RefValue)*255)
16644 D4Code = D4Code + 0x2400
16651 global da1window, DA1ScreenStatus, DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry
16652 global REFEntry, RevDate, SWRev
16654 if DA1ScreenStatus.get() == 0:
16655 DA1ScreenStatus.set(1)
16656 da1window = Toplevel()
16657 da1window.title(
"-DA1 PMOD- " + SWRev + RevDate)
16658 da1window.resizable(FALSE,FALSE)
16659 da1window.protocol(
"WM_DELETE_WINDOW", DestroyDA1Screen)
16661 d1lab = Label(da1window, text=
"DAC A1 output")
16662 d1lab.grid(row=0, column=0, columnspan=1, sticky=W)
16663 DAC1Entry = Entry(da1window, width=5)
16664 DAC1Entry.grid(row=0, column=1, sticky=W)
16665 DAC1Entry.delete(0,
"end")
16666 DAC1Entry.insert(0,0)
16667 d2lab = Label(da1window, text=
"DAC B1 output")
16668 d2lab.grid(row=1, column=0, columnspan=1, sticky=W)
16669 DAC2Entry = Entry(da1window, width=5)
16670 DAC2Entry.grid(row=1, column=1, sticky=W)
16671 DAC2Entry.delete(0,
"end")
16672 DAC2Entry.insert(0,0)
16674 d3lab = Label(da1window, text=
"DAC A2 output")
16675 d3lab.grid(row=2, column=0, columnspan=1, sticky=W)
16676 DAC3Entry = Entry(da1window, width=5)
16677 DAC3Entry.grid(row=2, column=1, sticky=W)
16678 DAC3Entry.delete(0,
"end")
16679 DAC3Entry.insert(0,0)
16681 d4lab = Label(da1window, text=
"DAC B2 output")
16682 d4lab.grid(row=3, column=0, columnspan=1, sticky=W)
16683 DAC4Entry = Entry(da1window, width=5)
16684 DAC4Entry.grid(row=3, column=1, sticky=W)
16685 DAC4Entry.delete(0,
"end")
16686 DAC4Entry.insert(0,0)
16688 d5lab = Label(da1window, text=
"Reference V")
16689 d5lab.grid(row=4, column=0, columnspan=1, sticky=W)
16690 REFEntry = Entry(da1window, width=5)
16691 REFEntry.grid(row=4, column=1, sticky=W)
16692 REFEntry.delete(0,
"end")
16693 REFEntry.insert(0,3.3)
16695 bsn1 = Button(da1window, text=
'UpDate', style=
"W7.TButton", command=BSendDA1)
16696 bsn1.grid(row=5, column=0, sticky=W)
16697 dismissdabutton = Button(da1window, text=
"Dismiss", style=
"W8.TButton", command=DestroyDA1Screen)
16698 dismissdabutton.grid(row=5, column=1, sticky=W, pady=4)
16702 global da1window, DA1ScreenStatus
16704 DA1ScreenStatus.set(0)
16705 da1window.destroy()
16708 global devx, SingleDualPot
16709 global PIO_0, PIO_1, PIO_2, PIO_3
16711 binstr = bin(DValue)
16712 binlen = len(binstr)
16713 datastr = binstr[2:binlen]
16714 datalen = len(datastr)
16715 if SingleDualPot.get() == 0:
16717 datastr = str.rjust(datastr , 10 ,
'0')
16718 datalen = len(datastr)
16719 if SingleDualPot.get() == 1:
16721 datastr = str.rjust(datastr , 8 ,
'0')
16722 datalen = len(datastr)
16723 if SingleDualPot.get() == 2:
16725 datastr = str.rjust(datastr , 8 ,
'0')
16726 datalen = len(datastr)
16728 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
16729 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
16730 while i < datalen+1:
16735 D1code = 0x50 + int(datastr[i-1])
16736 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
16737 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
16738 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
16740 devx.ctrl_transfer(0x40, 0x51, 0, 0, 0, 0, 100)
16743 global DigPot1, DigPot2, DigPot3, DigPot4, SendPot1, SendPot2, SendPot3, SendPot4
16744 global SingleDualPot
16746 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
16748 if SingleDualPot.get() == 2:
16751 DValue1 = DigPot1.get()
16752 if DValue1 > NumTaps:
16757 DValue2 = DigPot2.get()
16758 if DValue2 > NumTaps:
16763 DValue3 = DigPot3.get()
16764 if DValue3 > NumTaps:
16769 DValue4 = DigPot4.get()
16770 if DValue4 > NumTaps:
16774 if SendPot1.get() > 0:
16776 if SendPot2.get() > 0:
16778 if SendPot3.get() > 0:
16780 if SendPot4.get() > 0:
16784 global SingleDualPot, DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
16786 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
16787 DPotlabel.config(text=
"Enter number from 0 to 255")
16788 DigPot1.config(from_=0, to=255, length=256)
16789 DigPot2.config(from_=0, to=255, length=256)
16790 DigPot3.config(from_=0, to=255, length=256)
16791 DigPot4.config(from_=0, to=255, length=256)
16792 if SingleDualPot.get() == 2:
16793 DPotlabel.config(text=
"Enter number from 0 to 63")
16794 DigPot1.config(from_=0, to=63, length=64)
16795 DigPot2.config(from_=0, to=63, length=64)
16796 DigPot3.config(from_=0, to=63, length=64)
16797 DigPot4.config(from_=0, to=63, length=64)
16801 global digpotwindow, DigPotScreenStatus, DigPot1, DigPot2, DigPot3, DigPot4, RevDate
16802 global SendPot1, SendPot2, SendPot3, SendPot4, SingleDualPot, SWRev
16803 global DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
16805 if DigPotScreenStatus.get() == 0:
16806 DigPotScreenStatus.set(1)
16807 digpotwindow = Toplevel()
16808 digpotwindow.title(
"Digital Potentiometer " + SWRev + RevDate)
16809 digpotwindow.resizable(FALSE,FALSE)
16810 digpotwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigPotScreen)
16812 SendPot1 = IntVar(0)
16814 SendPot2 = IntVar(0)
16816 SendPot3 = IntVar(0)
16818 SendPot4 = IntVar(0)
16820 DPotlabel = Label(digpotwindow,text=
"Enter number from 0 to 255", style=
"A12B.TLabel")
16821 DPotlabel.grid(row=0, column=0, columnspan=3, sticky=W)
16823 SingleDualPot = IntVar(0)
16824 SingleDualPot.set(0)
16825 CompMenu = Menubutton(digpotwindow, text=
"Sel Comp.", style=
"W8.TButton")
16826 CompMenu.menu = Menu(CompMenu, tearoff = 0 )
16827 CompMenu[
"menu"] = CompMenu.menu
16828 CompMenu.menu.add_radiobutton(label=
"AD840X", variable=SingleDualPot, value=0, command=UpdatePotSlider)
16829 CompMenu.menu.add_radiobutton(label=
"AD5160", variable=SingleDualPot, value=1, command=UpdatePotSlider)
16830 CompMenu.menu.add_radiobutton(label=
"AD5203", variable=SingleDualPot, value=2, command=UpdatePotSlider)
16831 CompMenu.grid(row=1, column=0, columnspan=2, sticky=W)
16832 lab1 = Checkbutton(digpotwindow,text=
"Pot 1", pady=0, variable=SendPot1)
16833 lab1.grid(row=2, column=0, sticky=W)
16834 DigPot1 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
16835 DigPot1.grid(row=3, column=0, columnspan=3, sticky=W)
16836 lab2 = Checkbutton(digpotwindow,text=
"Pot 2", pady=0, variable=SendPot2)
16837 lab2.grid(row=4, column=0, sticky=W)
16838 DigPot2 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
16839 DigPot2.grid(row=5, column=0, columnspan=3, sticky=W)
16840 lab3 = Checkbutton(digpotwindow,text=
"Pot 3", pady=0, variable=SendPot3)
16841 lab3.grid(row=6, column=0, sticky=W)
16842 DigPot3 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
16843 DigPot3.grid(row=7, column=0, columnspan=3, sticky=W)
16844 lab4 = Checkbutton(digpotwindow,text=
"Pot 4", pady=0, variable=SendPot4)
16845 lab4.grid(row=8, column=0, sticky=W)
16846 DigPot4 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
16847 DigPot4.grid(row=9, column=0, columnspan=3, sticky=W)
16848 dismissdpbutton = Button(digpotwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigPotScreen)
16849 dismissdpbutton.grid(row=10, column=0, sticky=W, pady=4)
16852 global digpotwindow, DigPotScreenStatus
16854 DigPotScreenStatus.set(0)
16855 digpotwindow.destroy()
16858 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
16859 global NumBitsEntry, DataBitsEntry, devx, SerDirection, DValue, NumBits, AD5626SerialStatus, AD5626Entry
16861 if AD5626SerialStatus.get() == 0:
16863 DValue = int(eval(DataBitsEntry.get()))
16869 NumBits = int(NumBitsEntry.get())
16876 DValue = int(eval(AD5626Entry.get())*1000)
16879 AD5626Entry.delete(0,
"end")
16880 AD5626Entry.insert(0,
'0.000')
16883 AD5626Entry.delete(0,
"end")
16884 AD5626Entry.insert(0,DValue/1000.0)
16887 AD5626Entry.delete(0,
"end")
16888 AD5626Entry.insert(0,
'0.000')
16891 binstr = bin(DValue)
16892 binlen = len(binstr)
16893 datastr = binstr[2:binlen]
16894 datalen = len(datastr)
16895 if datalen < NumBits:
16896 datastr = str.rjust(datastr , NumBits ,
'0')
16897 datalen = len(datastr)
16898 if SLatchPhase.get() == 0:
16904 if AD5626SerialStatus.get() > 0:
16907 if SClockPhase.get() == 0:
16913 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
16914 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
16916 while i < datalen+1:
16917 if SerDirection.get() == 1:
16918 D1code = 0x50 + int(datastr[datalen-i])
16920 D1code = 0x50 + int(datastr[i-1])
16921 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
16922 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
16923 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
16925 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
16926 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
16927 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
16928 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
16932 global ad5626window, AD5626SerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
16933 global GenericSerialStatus, AD5626Entry, SerDirection, SWRev
16934 global PIO_0, PIO_1, PIO_2, PIO_3
16936 if GenericSerialStatus.get() == 1:
16937 GenericSerialStatus.set(0)
16939 if AD5626SerialStatus.get() == 0:
16940 AD5626SerialStatus.set(1)
16941 ad5626window = Toplevel()
16942 ad5626window.title(
"AD5626 Output " + SWRev + RevDate)
16943 ad5626window.resizable(FALSE,FALSE)
16944 ad5626window.protocol(
"WM_DELETE_WINDOW", DestroyAD5626Screen)
16946 SLatchPhase = IntVar(0)
16948 SClockPhase = IntVar(0)
16950 SerDirection = IntVar(0)
16951 SerDirection.set(0)
16953 label2 = Label(ad5626window,text=
"Enter Output Volts")
16954 label2.grid(row=1, column=0, columnspan=1, sticky=W)
16955 AD5626Entry = Entry(ad5626window, width=10)
16956 AD5626Entry.bind(
'<MouseWheel>', onAD5626Scroll)
16957 AD5626Entry.grid(row=1, column=1, columnspan=3, sticky=W)
16958 AD5626Entry.delete(0,
"end")
16959 AD5626Entry.insert(0,
'0.000')
16961 label3 = Label(ad5626window,text=
"SCLK PI/O Port ")
16962 label3.grid(row=2, column=0, columnspan=1, sticky=W)
16963 sclk1 = Radiobutton(ad5626window, text=
"0", variable=SCLKPort, value=PIO_0)
16964 sclk1.grid(row=2, column=1, sticky=W)
16965 sclk2 = Radiobutton(ad5626window, text=
"1", variable=SCLKPort, value=PIO_1)
16966 sclk2.grid(row=2, column=2, sticky=W)
16967 sclk3 = Radiobutton(ad5626window, text=
"2", variable=SCLKPort, value=PIO_2)
16968 sclk3.grid(row=2, column=3, sticky=W)
16969 sclk4 = Radiobutton(ad5626window, text=
"3", variable=SCLKPort, value=PIO_3)
16970 sclk4.grid(row=2, column=4, sticky=W)
16972 label4 = Label(ad5626window,text=
"SData PI/O Port ")
16973 label4.grid(row=3, column=0, columnspan=1, sticky=W)
16974 sdat1 = Radiobutton(ad5626window, text=
"0", variable=SDATAPort, value=PIO_0)
16975 sdat1.grid(row=3, column=1, sticky=W)
16976 sdat2 = Radiobutton(ad5626window, text=
"1", variable=SDATAPort, value=PIO_1)
16977 sdat2.grid(row=3, column=2, sticky=W)
16978 sdat3 = Radiobutton(ad5626window, text=
"2", variable=SDATAPort, value=PIO_2)
16979 sdat3.grid(row=3, column=3, sticky=W)
16980 sdat4 = Radiobutton(ad5626window, text=
"3", variable=SDATAPort, value=PIO_3)
16981 sdat4.grid(row=3, column=4, sticky=W)
16983 label5 = Label(ad5626window,text=
"Latch PI/O Port ")
16984 label5.grid(row=4, column=0, columnspan=1, sticky=W)
16985 slth1 = Radiobutton(ad5626window, text=
"0", variable=SLATCHPort, value=PIO_0)
16986 slth1.grid(row=4, column=1, sticky=W)
16987 slth2 = Radiobutton(ad5626window, text=
"1", variable=SLATCHPort, value=PIO_1)
16988 slth2.grid(row=4, column=2, sticky=W)
16989 slth3 = Radiobutton(ad5626window, text=
"2", variable=SLATCHPort, value=PIO_2)
16990 slth3.grid(row=4, column=3, sticky=W)
16991 slth4 = Radiobutton(ad5626window, text=
"3", variable=SLATCHPort, value=PIO_3)
16992 slth4.grid(row=4, column=4, sticky=W)
16994 bsn1 = Button(ad5626window, text=
'Send', style=
"W5.TButton", command=BSendGS)
16995 bsn1.grid(row=5, column=0, sticky=W)
16996 dismissgsbutton = Button(ad5626window, text=
"Dismiss", style=
"W8.TButton", command=DestroyAD5626Screen)
16997 dismissgsbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
17004 global ad5626window, AD5626SerialStatus
17006 AD5626SerialStatus.set(0)
17007 ad5626window.destroy()
17010 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
17011 global NumBitsEntry, DataBitsEntry, SerDirection, RevDate, SWRev
17012 global PIO_0, PIO_1, PIO_2, PIO_3
17014 if GenericSerialStatus.get() == 0:
17015 GenericSerialStatus.set(1)
17016 serialwindow = Toplevel()
17017 serialwindow.title(
"Generic Serial Output " + SWRev + RevDate)
17018 serialwindow.resizable(FALSE,FALSE)
17019 serialwindow.protocol(
"WM_DELETE_WINDOW", DestroyGenericSerialScreen)
17021 SCLKPort = IntVar(0)
17022 SCLKPort.set(PIO_2)
17023 SDATAPort = IntVar(0)
17024 SDATAPort.set(PIO_1)
17025 SLATCHPort = IntVar(0)
17026 SLATCHPort.set(PIO_0)
17027 SLatchPhase = IntVar(0)
17028 SClockPhase = IntVar(0)
17029 SerDirection = IntVar(0)
17030 label = Label(serialwindow,text=
"Enter number of Bits")
17031 label.grid(row=1, column=0, columnspan=2, sticky=W)
17032 NumBitsEntry = Entry(serialwindow, width=3)
17033 NumBitsEntry.grid(row=1, column=2, sticky=W)
17034 NumBitsEntry.delete(0,
"end")
17035 NumBitsEntry.insert(0,8)
17037 label2 = Label(serialwindow,text=
"Enter Data Word")
17038 label2.grid(row=2, column=0, columnspan=1, sticky=W)
17039 DataBitsEntry = Entry(serialwindow, width=10)
17040 DataBitsEntry.grid(row=2, column=1, columnspan=3, sticky=W)
17041 DataBitsEntry.delete(0,
"end")
17042 DataBitsEntry.insert(0,0)
17044 label3 = Label(serialwindow,text=
"SCLK PI/O Port ")
17045 label3.grid(row=3, column=0, columnspan=1, sticky=W)
17046 sclk1 = Radiobutton(serialwindow, text=
"0", variable=SCLKPort, value=PIO_0)
17047 sclk1.grid(row=3, column=1, sticky=W)
17048 sclk2 = Radiobutton(serialwindow, text=
"1", variable=SCLKPort, value=PIO_1)
17049 sclk2.grid(row=3, column=2, sticky=W)
17050 sclk3 = Radiobutton(serialwindow, text=
"2", variable=SCLKPort, value=PIO_2)
17051 sclk3.grid(row=3, column=3, sticky=W)
17052 sclk4 = Radiobutton(serialwindow, text=
"3", variable=SCLKPort, value=PIO_3)
17053 sclk4.grid(row=3, column=4, sticky=W)
17055 label4 = Label(serialwindow,text=
"SData PI/O Port ")
17056 label4.grid(row=4, column=0, columnspan=1, sticky=W)
17057 sdat1 = Radiobutton(serialwindow, text=
"0", variable=SDATAPort, value=PIO_0)
17058 sdat1.grid(row=4, column=1, sticky=W)
17059 sdat2 = Radiobutton(serialwindow, text=
"1", variable=SDATAPort, value=PIO_1)
17060 sdat2.grid(row=4, column=2, sticky=W)
17061 sdat3 = Radiobutton(serialwindow, text=
"2", variable=SDATAPort, value=PIO_2)
17062 sdat3.grid(row=4, column=3, sticky=W)
17063 sdat4 = Radiobutton(serialwindow, text=
"3", variable=SDATAPort, value=PIO_3)
17064 sdat4.grid(row=4, column=4, sticky=W)
17066 label5 = Label(serialwindow,text=
"Latch PI/O Port ")
17067 label5.grid(row=5, column=0, columnspan=1, sticky=W)
17068 slth1 = Radiobutton(serialwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
17069 slth1.grid(row=5, column=1, sticky=W)
17070 slth2 = Radiobutton(serialwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
17071 slth2.grid(row=5, column=2, sticky=W)
17072 slth3 = Radiobutton(serialwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
17073 slth3.grid(row=5, column=3, sticky=W)
17074 slth4 = Radiobutton(serialwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
17075 slth4.grid(row=5, column=4, sticky=W)
17077 label6 = Label(serialwindow,text=
"Latch Phase ")
17078 label6.grid(row=6, column=0, columnspan=1, sticky=W)
17079 sph1 = Radiobutton(serialwindow, text=
"0", variable=SLatchPhase, value=0)
17080 sph1.grid(row=6, column=1, sticky=W)
17081 sph2 = Radiobutton(serialwindow, text=
"1", variable=SLatchPhase, value=1)
17082 sph2.grid(row=6, column=2, sticky=W)
17084 label7 = Label(serialwindow,text=
"Clock Phase ")
17085 label7.grid(row=7, column=0, columnspan=1, sticky=W)
17086 sph7 = Radiobutton(serialwindow, text=
"0", variable=SClockPhase, value=0)
17087 sph7.grid(row=7, column=1, sticky=W)
17088 sph8 = Radiobutton(serialwindow, text=
"1", variable=SClockPhase, value=1)
17089 sph8.grid(row=7, column=2, sticky=W)
17091 sdir1 = Radiobutton(serialwindow, text=
"LSB First", variable=SerDirection, value=0 )
17092 sdir1.grid(row=8, column=0, sticky=W)
17093 sdir2 = Radiobutton(serialwindow, text=
"MSB First", variable=SerDirection, value=1 )
17094 sdir2.grid(row=8, column=1, columnspan=2, sticky=W)
17096 bsn1 = Button(serialwindow, text=
'Send', style=
"W5.TButton", command=BSendGS)
17097 bsn1.grid(row=9, column=0, sticky=W)
17098 dismissgsbutton = Button(serialwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyGenericSerialScreen)
17099 dismissgsbutton.grid(row=9, column=1, columnspan=2, sticky=W, pady=4)
17102 global serialwindow, GenericSerialStatus
17104 GenericSerialStatus.set(0)
17105 serialwindow.destroy()
17109 global digfltwindow, DigFiltStatus, RevDate, SWRev
17110 global DigFiltA, DigFiltB, DifFiltALength, DifFiltBLength, DifFiltAFile, DifFiltBFile
17111 global DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
17113 if DigFiltStatus.get() == 0:
17114 DigFiltStatus.set(1)
17115 digfltwindow = Toplevel()
17116 digfltwindow.title(
"Digital Filter " + SWRev + RevDate)
17117 digfltwindow.resizable(FALSE,FALSE)
17118 digfltwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigFiltScreen)
17120 frame2 = LabelFrame(digfltwindow, text=
"CH A Filter", style=
"A10R1.TLabelframe")
17121 frame3 = LabelFrame(digfltwindow, text=
"CH B Filter", style=
"A10R2.TLabelframe")
17122 frame2.pack(side=LEFT, expand=1, fill=X)
17123 frame3.pack(side=LEFT, expand=1, fill=X)
17125 digfilta = Frame( frame2 )
17126 digfilta.pack(side=TOP)
17129 lab1 = Checkbutton(digfilta,text=
"Filter CH A", variable=DigFiltA)
17130 lab1.grid(row=0, column=0, columnspan=2, sticky=W)
17131 lab3 = Checkbutton(digfilta,text=
"Box Car", variable=DigFiltABoxCar, command=BuildBoxCarA)
17132 lab3.grid(row=1, column=0, sticky=W)
17133 BCALenEntry = Entry(digfilta, width=3)
17134 BCALenEntry.bind(
"<Return>", onRetDigFiltA)
17135 BCALenEntry.bind(
'<MouseWheel>', onDigFiltAScroll)
17137 BCALenEntry.grid(row=1, column=1, sticky=W)
17138 BCALenEntry.delete(0,
"end")
17139 BCALenEntry.insert(0,2)
17140 bcalab = Label(digfilta, text=
"Length")
17141 bcalab.grid(row=1, column=2, sticky=W)
17142 DifFiltALength = Label(digfilta, text=
"Length = 0 ")
17143 DifFiltALength.grid(row=2, column=0, sticky=W)
17144 DifFiltAFile = Label(digfilta, text=
"File Name, none ")
17145 DifFiltAFile.grid(row=3, column=0, sticky=W)
17146 cald = Button(digfilta, text=
'Load CH A Filter Coef', command=BLoadDFiltA)
17147 cald.grid(row=4, column=0, columnspan=2, sticky=W)
17148 camath = Button(digfilta, text=
'CH A Filter formula', command=BDFiltAMath)
17149 camath.grid(row=5, column=0, columnspan=2, sticky=W)
17151 digfiltb = Frame( frame3 )
17152 digfiltb.pack(side=TOP)
17153 lab2 = Checkbutton(digfiltb,text=
"Filter CH B", variable=DigFiltB)
17154 lab2.grid(row=0, column=0, columnspan=2, sticky=W)
17155 lab4 = Checkbutton(digfiltb,text=
"Box Car", variable=DigFiltBBoxCar, command=BuildBoxCarB)
17156 lab4.grid(row=1, column=0, sticky=W)
17157 BCBLenEntry = Entry(digfiltb, width=3)
17158 BCBLenEntry.bind(
"<Return>", onRetDigFiltB)
17159 BCBLenEntry.bind(
'<MouseWheel>', onDigFiltBScroll)
17161 BCBLenEntry.grid(row=1, column=1, sticky=W)
17162 BCBLenEntry.delete(0,
"end")
17163 BCBLenEntry.insert(0,2)
17164 DifFiltBLength = Label(digfiltb,text=
"Length = 0 ")
17165 DifFiltBLength.grid(row=2, column=0, sticky=W)
17166 DifFiltBFile = Label(digfiltb,text=
"File Name, none ")
17167 DifFiltBFile.grid(row=3, column=0, sticky=W)
17168 camath.grid(row=8, column=0, sticky=W)
17169 cbld = Button(digfiltb, text=
'Load CH B Filter Coef', command=BLoadDFiltB)
17170 cbld.grid(row=4, column=0, sticky=W)
17171 cbmath = Button(digfiltb, text=
'CH B Filter formula', command=BDFiltBMath)
17172 cbmath.grid(row=5, column=0, sticky=W)
17173 dismissdfbutton = Button(digfiltb, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigFiltScreen)
17174 dismissdfbutton.grid(row=6, column=0, columnspan=1, sticky=W)
17184 global BCALenEntry, DFiltACoef, DigFiltABoxCar, DifFiltALength
17186 if DigFiltABoxCar.get() == 0:
17189 FLength = int(BCALenEntry.get())
17195 for n
in range(FLength):
17196 DFiltACoef.append(float(1.0/FLength))
17198 DFiltACoef = numpy.array(DFiltACoef)
17199 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
17209 global BCBLenEntry, DFiltBCoef, DigFiltBBoxCar, DifFiltBLength
17211 if DigFiltBBoxCar.get() == 0:
17214 FLength = int(BCBLenEntry.get())
17220 for n
in range(FLength):
17221 DFiltBCoef.append(float(1.0/FLength))
17223 DFiltBCoef = numpy.array(DFiltBCoef)
17224 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
17227 global digfltwindow, DigFiltStatus
17229 DigFiltStatus.set(0)
17230 digfltwindow.destroy()
17233 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile
17236 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
17238 CSVFile = open(filename)
17239 csv_f = csv.reader(CSVFile)
17241 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
17247 DFiltACoef.append(float(row[0]))
17249 print(
'skipping non-numeric row')
17250 DFiltACoef = numpy.array(DFiltACoef)
17251 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
17252 DifFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
17256 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile, DigFilterAString
17258 TempString = DigFilterAString
17259 DigFilterAString = askstring(
"CH A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=DigFilterAString, parent=digfltwindow)
17260 if (DigFilterAString ==
None):
17261 DigFilterAString = TempString
17263 DFiltACoef = eval(DigFilterAString)
17264 DFiltACoef = numpy.array(DFiltACoef)
17265 coefsum = numpy.sum(DFiltACoef)
17266 DFiltACoef = DFiltACoef / coefsum
17267 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
17268 DifFiltAFile.config(text =
"Using Filter A formula" )
17271 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile
17274 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
17276 CSVFile = open(filename)
17277 csv_f = csv.reader(CSVFile)
17279 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
17285 DFiltBCoef.append(float(row[0]))
17287 print(
'skipping non-numeric row')
17288 DFiltBCoef = numpy.array(DFiltBCoef)
17289 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
17290 DifFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
17294 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile, DigFilterBString
17296 TempString = DigFilterBString
17297 DigFilterBString = askstring(
"CH B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=DigFilterBString, parent=digfltwindow)
17298 if (DigFilterBString ==
None):
17299 DigFilterBString = TempString
17301 DFiltBCoef = eval(DigFilterBString)
17302 DFiltBCoef = numpy.array(DFiltBCoef)
17303 coefsum = numpy.sum(DFiltBCoef)
17304 DFiltBCoef = DFiltBCoef / coefsum
17305 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
17306 DifFiltBFile.config(text =
"Using Filter B formula" )
17309 global commandwindow, CommandStatus, ExecString, LastCommand, RevDate, SWRev
17311 if CommandStatus.get() == 0:
17312 CommandStatus.set(1)
17313 commandwindow = Toplevel()
17314 commandwindow.title(
"Command Line " + SWRev + RevDate)
17315 commandwindow.resizable(FALSE,FALSE)
17316 commandwindow.protocol(
"WM_DELETE_WINDOW", DestroyCommandScreen)
17317 toplab = Label(commandwindow,text=
"Command Line Interface ", style=
"A12B.TLabel")
17318 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
17319 cl1 = Label(commandwindow,text=
"Last command:")
17320 cl1.grid(row=1, column=0, sticky=W)
17321 LastCommand = Label(commandwindow,text=
" ")
17322 LastCommand.grid(row=2, column=0, columnspan=4, sticky=W)
17323 ExecString = Entry(commandwindow, width=40)
17324 ExecString.bind(
"<Return>", RExecuteFromString)
17325 ExecString.grid(row=3, column=0, columnspan=4, sticky=W)
17326 ExecString.delete(0,
"end")
17327 ExecString.insert(0,
"global ; ")
17328 executeclbutton = Button(commandwindow, text=
"Execute", style=
"W8.TButton", command=BExecuteFromString)
17329 executeclbutton.grid(row=4, column=0, sticky=W, pady=8)
17331 dismissclbutton = Button(commandwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyCommandScreen)
17332 dismissclbutton.grid(row=4, column=1, sticky=W, pady=7)
17335 global commandwindow, CommandStatus
17337 CommandStatus.set(0)
17338 commandwindow.destroy()
17345 global ExecString, LastCommand
17348 exec( ExecString.get() )
17349 LastCommand.config(text = ExecString.get() )
17351 LastCommand.config(text =
"Syntax Error Encountered" )
17355 global ca, GRW, XOL, GRH, Y0T, CANVASwidth, CANVASheight, FontSize
17358 CANVASwidth = event.width - 4
17359 CANVASheight = event.height - 4
17360 GRW = CANVASwidth - (2 * X0L)
17361 GRH = CANVASheight - (Y0T + (FontSize * 7))
17365 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
17366 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
17367 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
17368 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
17369 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
17370 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
17372 ValueText =
' {0:.4f} '.format(eval(ChaMeasString1))
17373 ChaValue1.config(text = ValueText)
17374 ValueText =
' {0:.4f} '.format(eval(ChaMeasString2))
17375 ChaValue2.config(text = ValueText)
17376 ValueText =
' {0:.4f} '.format(eval(ChaMeasString3))
17377 ChaValue3.config(text = ValueText)
17378 ValueText =
' {0:.4f} '.format(eval(ChaMeasString4))
17379 ChaValue4.config(text = ValueText)
17380 ValueText =
' {0:.4f} '.format(eval(ChaMeasString5))
17381 ChaValue5.config(text = ValueText)
17382 ValueText =
' {0:.4f} '.format(eval(ChaMeasString6))
17383 ChaValue6.config(text = ValueText)
17384 ValueText =
' {0:.4f} '.format(eval(ChbMeasString1))
17385 ChbValue1.config(text = ValueText)
17386 ValueText =
' {0:.4f} '.format(eval(ChbMeasString2))
17387 ChbValue2.config(text = ValueText)
17388 ValueText =
' {0:.4f} '.format(eval(ChbMeasString3))
17389 ChbValue3.config(text = ValueText)
17390 ValueText =
' {0:.4f} '.format(eval(ChbMeasString4))
17391 ChbValue4.config(text = ValueText)
17392 ValueText =
' {0:.4f} '.format(eval(ChbMeasString5))
17393 ChbValue5.config(text = ValueText)
17394 ValueText =
' {0:.4f} '.format(eval(ChbMeasString6))
17395 ChbValue6.config(text = ValueText)
17398 global measurewindow, MeasureStatus, RevDate, SWRev
17399 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
17400 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
17401 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
17402 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
17403 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
17404 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
17406 if MeasureStatus.get() == 0:
17407 MeasureStatus.set(1)
17408 measurewindow = Toplevel()
17409 measurewindow.title(
"Measurements " + SWRev + RevDate)
17410 measurewindow.resizable(FALSE,FALSE)
17411 measurewindow.protocol(
"WM_DELETE_WINDOW", DestroyMeasureScreen)
17412 toplab = Label(measurewindow,text=
"Measurements ", style=
"A12B.TLabel")
17413 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
17414 ChaLab1 = Label(measurewindow,text=ChaLableSrring1, style=
"A10B.TLabel")
17415 ChaLab1.grid(row=1, column=0, columnspan=1, sticky=W)
17416 ChaValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17417 ChaValue1.grid(row=1, column=1, columnspan=1, sticky=W)
17418 ChaLab2 = Label(measurewindow,text=ChaLableSrring2, style=
"A10B.TLabel")
17419 ChaLab2.grid(row=1, column=2, columnspan=1, sticky=W)
17420 ChaValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17421 ChaValue2.grid(row=1, column=3, columnspan=1, sticky=W)
17422 ChaLab3 = Label(measurewindow,text=ChaLableSrring3, style=
"A10B.TLabel")
17423 ChaLab3.grid(row=2, column=0, columnspan=1, sticky=W)
17424 ChaValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17425 ChaValue3.grid(row=2, column=1, columnspan=1, sticky=W)
17426 ChaLab4 = Label(measurewindow,text=ChaLableSrring4, style=
"A10B.TLabel")
17427 ChaLab4.grid(row=2, column=2, columnspan=1, sticky=W)
17428 ChaValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17429 ChaValue4.grid(row=2, column=3, columnspan=1, sticky=W)
17430 ChaLab5 = Label(measurewindow,text=ChaLableSrring5, style=
"A10B.TLabel")
17431 ChaLab5.grid(row=3, column=0, columnspan=1, sticky=W)
17432 ChaValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17433 ChaValue5.grid(row=3, column=1, columnspan=1, sticky=W)
17434 ChaLab6 = Label(measurewindow,text=ChaLableSrring6, style=
"A10B.TLabel")
17435 ChaLab6.grid(row=3, column=2, columnspan=1, sticky=W)
17436 ChaValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17437 ChaValue6.grid(row=3, column=3, columnspan=1, sticky=W)
17439 ChbLab1 = Label(measurewindow,text=ChbLableSrring1, style=
"A10B.TLabel")
17440 ChbLab1.grid(row=4, column=0, columnspan=1, sticky=W)
17441 ChbValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17442 ChbValue1.grid(row=4, column=1, columnspan=1, sticky=W)
17443 ChbLab2 = Label(measurewindow,text=ChbLableSrring2, style=
"A10B.TLabel")
17444 ChbLab2.grid(row=4, column=2, columnspan=1, sticky=W)
17445 ChbValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17446 ChbValue2.grid(row=4, column=3, columnspan=1, sticky=W)
17447 ChbLab3 = Label(measurewindow,text=ChbLableSrring3, style=
"A10B.TLabel")
17448 ChbLab3.grid(row=5, column=0, columnspan=1, sticky=W)
17449 ChbValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17450 ChbValue3.grid(row=5, column=1, columnspan=1, sticky=W)
17451 ChbLab4 = Label(measurewindow,text=ChbLableSrring4, style=
"A10B.TLabel")
17452 ChbLab4.grid(row=5, column=2, columnspan=1, sticky=W)
17453 ChbValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17454 ChbValue4.grid(row=5, column=3, columnspan=1, sticky=W)
17455 ChbLab5 = Label(measurewindow,text=ChbLableSrring5, style=
"A10B.TLabel")
17456 ChbLab5.grid(row=6, column=0, columnspan=1, sticky=W)
17457 ChbValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17458 ChbValue5.grid(row=6, column=1, columnspan=1, sticky=W)
17459 ChbLab6 = Label(measurewindow,text=ChbLableSrring6, style=
"A10B.TLabel")
17460 ChbLab6.grid(row=6, column=2, columnspan=1, sticky=W)
17461 ChbValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
17462 ChbValue6.grid(row=6, column=3, columnspan=1, sticky=W)
17465 global measurewindow, MeasureStatus
17467 MeasureStatus.set(0)
17468 measurewindow.destroy()
17471 global boardwindow, BoardStatus, session, devx, dev0, dev1, dev2, MultipleBoards
17472 global RevDate, BrdSel, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
17474 if len(session.devices) > 1
and MultipleBoards.get() > 0:
17475 if BoardStatus.get() == 0:
17477 boardwindow = Toplevel()
17478 boardwindow.title(
"Select Board " + RevDate)
17479 boardwindow.resizable(FALSE,FALSE)
17480 boardwindow.protocol(
"WM_DELETE_WINDOW", DestroyBoardScreen)
17481 toplab = Label(boardwindow,text=
"- Select ALM1000 -", style=
"A12B.TLabel")
17482 toplab.pack(side=TOP)
17483 for idx, devx
in enumerate(session.devices):
17484 BrdText =
"Board # " + str(idx)
17486 devx.set_led(0b010)
17487 FWRevOne = float(devx.fwver)
17488 HWRevOne = devx.hwver
17490 brd = Radiobutton(boardwindow, text=BrdText, style=
"Run.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
17492 devx.set_led(0b100)
17493 FWRevTwo = float(devx.fwver)
17494 HWRevTwo = devx.hwver
17496 brd = Radiobutton(boardwindow, text=BrdText, style=
"Stop.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
17498 devx.set_led(0b001)
17499 FWRevThree = float(devx.fwver)
17500 HWRevThree = devx.hwver
17502 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
17504 dev3 = session.devices[3]
17505 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
17508 devx = session.devices[0]
17512 FWRevOne = float(devx.fwver)
17513 HWRevOne = devx.hwver
17515 FWRevOne =
"Before 2.06"
17517 dev0 = session.devices[0]
17520 global boardwindow, BoardStatus
17523 boardwindow.destroy()
17526 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples, AWGSAMPLErate
17527 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree, SAMPLErate, MultipleBoards
17529 if DevID ==
"No Device" or DevID ==
"m1k":
17531 session = Session(ignore_dataflow=
True, sample_rate=SAMPLErate, queue_size=MaxSamples)
17534 if not session.devices:
17535 print(
'No Device plugged IN!')
17536 DevID =
"No Device"
17538 bcon.configure(text=
"Recon", style=
"RConn.TButton")
17540 session.configure(sample_rate=SAMPLErate)
17544 bcon.configure(text=
"Conn", style=
"GConn.TButton")
17545 devx.set_adc_mux(0)
17546 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
17547 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
17555 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, RUNstatus, FWRevOne, HWRevOne
17556 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7, cal, SAMPLErate, MaxSamples
17557 global IgnoreFirmwareCheck, SDATAPort, SCLKPort, SLATCHPort
17559 if RUNstatus.get() == 1:
17563 if BrdSel.get() == 0:
17565 session.remove(dev1)
17566 print(
"Removing dev1")
17568 print(
"Skipping dev1")
17570 session.remove(dev2)
17571 print(
"Removing dev2")
17573 print(
"Skipping dev2")
17577 if BrdSel.get() == 1:
17579 session.remove(dev0)
17580 print(
"Removing dev0")
17582 print(
"Skipping dev0")
17584 session.remove(dev2)
17585 print(
"Removing dev2")
17587 print(
"Skipping dev2")
17591 DevID = devx.serial
17593 FWRevOne = float(devx.fwver)
17594 HWRevOne = str(devx.hwver)
17595 print( FWRevOne, HWRevOne)
17596 print(
"Session sample rate: " + str(session.sample_rate))
17598 if IgnoreFirmwareCheck == 0:
17599 if FWRevOne < 2.17:
17600 showwarning(
"WARNING",
"This ALICE version Requires Firmware version > 2.16")
17602 cal = devx.calibration
17603 CHA = devx.channels[
'A']
17604 CHA.mode = Mode.HI_Z_SPLIT
17605 CHB = devx.channels[
'B']
17606 CHB.mode = Mode.HI_Z_SPLIT
17619 devx.set_adc_mux(0)
17620 if devx.hwver ==
"F":
17621 print(
"Rev F Board I/O ports set")
17640 SDATAPort.set(PIO_1)
17641 SCLKPort.set(PIO_2)
17642 SLATCHPort.set(PIO_0)
17645 global SAMPLErate, AWGSAMPLErate, BaseSampleRate, session, ETSStatus, etssrlab, RevDate
17646 global Two_X_Sample, ADC_Mux_Mode, SampleRatewindow, SampleRateStatus, BaseRatesb
17647 global Alternate_Sweep_Mode, DeBugMode, FWRevOne, SWRev, SampRateList
17649 if SampleRateStatus.get() == 0:
17650 SampleRateStatus.set(1)
17651 SampleRatewindow = Toplevel()
17652 SampleRatewindow.title(
"Set Sample Rate " + SWRev + RevDate)
17653 SampleRatewindow.resizable(FALSE,FALSE)
17654 SampleRatewindow.protocol(
"WM_DELETE_WINDOW", DestroySampleRate)
17655 frame1 = Frame(SampleRatewindow, borderwidth=5, relief=RIDGE)
17656 frame1.grid(row=0, column=0, sticky=W)
17658 BaseRATE = Frame( frame1 )
17659 BaseRATE.grid(row=0, column=0, sticky=W)
17660 baseratelab = Label(BaseRATE, text=
"Base Sample Rate", style=
"A10B.TLabel")
17661 baseratelab.pack(side=LEFT)
17662 BaseRatesb = Spinbox(BaseRATE, width=6, values=SampRateList, command=SetSampleRate)
17663 BaseRatesb.bind(
'<MouseWheel>', onSrateScroll)
17664 BaseRatesb.bind(
"<Return>", onRetSrate)
17665 BaseRatesb.pack(side=LEFT)
17666 BaseRatesb.delete(0,
"end")
17667 BaseRatesb.insert(0,BaseSampleRate)
17676 if FWRevOne > 2.16:
17677 twoX = Checkbutton(frame1, text=
"Double Sample Rate", variable=Two_X_Sample, command=SetADC_Mux )
17678 twoX.grid(row=1, column=0, sticky=W)
17679 muxlab1 = Label(frame1, text=
"ADC MUX Modes", style=
"A10B.TLabel")
17680 muxlab1.grid(row=2, column=0, sticky=W)
17681 AltSweep = Checkbutton(frame1, text=
"Alternate Sweep Mode", variable=Alternate_Sweep_Mode )
17682 AltSweep.grid(row=3, column=0, sticky=W)
17683 chabuttons = Frame( frame1 )
17684 chabuttons.grid(row=4, column=0, sticky=W)
17685 muxrb1 = Radiobutton(chabuttons, text=
"VA and VB", variable=ADC_Mux_Mode, value=0, command=SetADC_Mux )
17686 muxrb1.pack(side=LEFT)
17687 muxrb2 = Radiobutton(chabuttons, text=
"IA and IB", variable=ADC_Mux_Mode, value=1, command=SetADC_Mux )
17688 muxrb2.pack(side=LEFT)
17689 chcbuttons = Frame( frame1 )
17690 chcbuttons.grid(row=5, column=0, sticky=W)
17691 muxrb5 = Radiobutton(chcbuttons, text=
"VA and IA", variable=ADC_Mux_Mode, value=4, command=SetADC_Mux )
17692 muxrb5.pack(side=LEFT)
17693 muxrb6 = Radiobutton(chcbuttons, text=
"VB and IB", variable=ADC_Mux_Mode, value=5, command=SetADC_Mux )
17694 muxrb6.pack(side=LEFT)
17697 chbbuttons = Frame( frame1 )
17698 chbbuttons.grid(row=nextrow, column=0, sticky=W)
17699 muxrb3 = Radiobutton(chbbuttons, text=
"VA and IB", variable=ADC_Mux_Mode, value=2, command=SetADC_Mux )
17700 muxrb3.pack(side=LEFT)
17701 muxrb4 = Radiobutton(chbbuttons, text=
"VB and IA", variable=ADC_Mux_Mode, value=3, command=SetADC_Mux )
17702 muxrb4.pack(side=LEFT)
17703 nextrow = nextrow + 1
17705 sratedismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySampleRate)
17706 sratedismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
17709 global SampleRatewindow, SampleRateStatus
17711 SampleRateStatus.set(0)
17712 SampleRatewindow.destroy()
17726 global SAMPLErate, BaseSampleRate, AWGSAMPLErate, session, ETSStatus, etssrlab, BaseRatesb
17727 global Two_X_Sample, ADC_Mux_Mode, rtsrlab, RUNstatus
17731 if (RUNstatus.get() == 1):
17735 NewRate = int(BaseRatesb.get())
17736 if NewRate <= 100000:
17737 BaseSampleRate = NewRate
17739 BaseSampleRate = 100000
17740 BaseRatesb.delete(0,
"end")
17741 BaseRatesb.insert(0,BaseSampleRate)
17742 SAMPLErate = BaseSampleRate
17745 session.configure(sample_rate=BaseSampleRate)
17751 sample_time = 1.0 / BaseSampleRate
17752 M1K_timer_clock = 48e6
17753 m_sam_per = round(sample_time * M1K_timer_clock) / 2
17754 if (m_sam_per < m_min_per):
17755 m_sam_per = m_min_per
17756 elif (m_sam_per > m_max_per):
17757 m_sam_per = m_max_per;
17759 sample_time = m_sam_per / M1K_timer_clock
17761 BaseSampleRate = int(round((1.0 / sample_time) / 2.0))
17762 SAMPLErate = BaseSampleRate
17763 AWGSAMPLErate = BaseSampleRate
17764 if ETSStatus.get() > 0:
17765 SRstring =
"RT Sample Rate = " + str(BaseSampleRate)
17766 rtsrlab.config(text=SRstring)
17768 BaseRatesb.delete(0,
"end")
17769 BaseRatesb.insert(0,BaseSampleRate)
17771 if (WasRunning == 1):
17776 global StopFreqEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
17780 StopFrequency = float(StopFreqEntry.get())
17782 StopFreqEntry.delete(0,
"end")
17783 StopFreqEntry.insert(0,50000)
17784 StopFrequency = 50000
17785 if FWRevOne > 2.16:
17786 if StopFrequency >= 50000:
17787 Two_X_Sample.set(1)
17788 ADC_Mux_Mode.set(0)
17791 Two_X_Sample.set(0)
17792 ADC_Mux_Mode.set(0)
17796 global StopBodeEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
17800 StopFrequency = float(StopBodeEntry.get())
17802 StopBodeEntry.delete(0,
"end")
17803 StopBodeEntry.insert(0,20000)
17804 StopFrequency = 20000
17805 if FWRevOne > 2.16:
17806 if StopFrequency >= 20000:
17807 Two_X_Sample.set(1)
17808 ADC_Mux_Mode.set(0)
17811 Two_X_Sample.set(0)
17812 ADC_Mux_Mode.set(0)
17816 global devx, SAMPLErate, BaseSampleRate, Two_X_Sample, ADC_Mux_Mode, CHA, CHB
17817 global v1_adc_conf, i1_adc_conf, v2_adc_conf, i2_adc_conf
17819 if Two_X_Sample.get() == 1:
17820 if ADC_Mux_Mode.get() == 0:
17821 devx.set_adc_mux(1)
17822 elif ADC_Mux_Mode.get() == 1:
17823 devx.set_adc_mux(2)
17824 elif ADC_Mux_Mode.get() == 2:
17826 devx.set_adc_mux(2)
17828 devx.set_adc_mux(7)
17829 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
17830 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
17831 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
17832 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
17834 elif ADC_Mux_Mode.get() == 3:
17837 devx.set_adc_mux(7)
17838 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
17839 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
17840 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
17841 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
17843 elif ADC_Mux_Mode.get() == 4:
17845 devx.set_adc_mux(4)
17846 elif ADC_Mux_Mode.get() == 5:
17848 devx.set_adc_mux(5)
17849 SAMPLErate = BaseSampleRate * 2
17851 devx.set_adc_mux(0)
17852 SAMPLErate = BaseSampleRate
17855 global ADC_Mux_Mode, Alternate_Sweep_Mode, ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
17857 if ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
17858 ADC_Mux_Mode.set(0)
17859 Alternate_Sweep_Mode.set(1)
17860 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 0:
17861 ADC_Mux_Mode.set(0)
17862 Alternate_Sweep_Mode.set(1)
17863 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
17864 ADC_Mux_Mode.set(0)
17865 Alternate_Sweep_Mode.set(1)
17866 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
17867 ADC_Mux_Mode.set(0)
17868 Alternate_Sweep_Mode.set(1)
17869 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
17870 ADC_Mux_Mode.set(0)
17871 Alternate_Sweep_Mode.set(1)
17873 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
17874 ADC_Mux_Mode.set(1)
17875 Alternate_Sweep_Mode.set(0)
17876 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
17877 ADC_Mux_Mode.set(1)
17878 Alternate_Sweep_Mode.set(0)
17879 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
17880 ADC_Mux_Mode.set(1)
17881 Alternate_Sweep_Mode.set(0)
17882 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
17883 ADC_Mux_Mode.set(4)
17884 Alternate_Sweep_Mode.set(0)
17885 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
17886 ADC_Mux_Mode.set(5)
17887 Alternate_Sweep_Mode.set(0)
17889 ADC_Mux_Mode.set(0)
17890 Alternate_Sweep_Mode.set(0)
17895 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples
17896 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
17899 if askyesno(
"Update current firmware",
"Flash new firmware to current device:\n(Yes) or (No)?"):
17900 filename = askopenfilename(defaultextension =
".bin", filetypes=[(
"Binary",
"*.bin")])
17905 print(
"Cancel current session.")
17907 print( session.cancelled)
17909 print(
"Waiting 5...")
17911 print(
"Put board in Samba mode and flash firmware.")
17912 session.flash_firmware(filename)
17914 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
17923 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
17924 showwarning(
"Exit ALICE",
"Must Exit Program: \n Restart ALICE to continue.")
17936 global OhmDisp, OhmStatus, ohmwindow, RevDate, RMode, OhmA0, OhmA1, OhmRunStatus
17937 global CHATestVEntry, CHATestREntry, SWRev, AWGSync
17939 if OhmStatus.get() == 0:
17944 ohmwindow = Toplevel()
17945 ohmwindow.title(
"DC Ohmmeter " + SWRev + RevDate)
17946 ohmwindow.resizable(FALSE,FALSE)
17947 ohmwindow.protocol(
"WM_DELETE_WINDOW", DestroyOhmScreen)
17948 frame1 = Frame(ohmwindow, borderwidth=5, relief=RIDGE)
17949 frame1.grid(row=0, column=0, sticky=W)
17951 buttons = Frame( frame1 )
17952 buttons.grid(row=0, column=0, sticky=W)
17953 rb1 = Radiobutton(buttons, text=
"Stop", style=
"Stop.TRadiobutton", variable=OhmRunStatus, value=0, command=BStop )
17954 rb1.pack(side=LEFT)
17955 rb2 = Radiobutton(buttons, text=
"Run", style=
"Run.TRadiobutton", variable=OhmRunStatus, value=1, command=BStartOhm )
17956 rb2.pack(side=LEFT)
17958 OhmA0 = Label(frame1, style=
"A16B.TLabel")
17959 OhmA0.grid(row=1, column=0, columnspan=2, sticky=W)
17960 OhmA0.config(text =
"0.000 Ohms")
17962 OhmA1 = Label(frame1, style=
"A12B.TLabel")
17963 OhmA1.grid(row=2, column=0, columnspan=2, sticky=W)
17964 OhmA1.config(text =
"Meas 0.00 mA 0.00 V")
17966 TestVA = Frame( frame1 )
17967 TestVA.grid(row=3, column=0, sticky=W)
17968 chatestvlab = Label(TestVA, text=
"Test Voltage", style=
"A10B.TLabel")
17969 chatestvlab.pack(side=LEFT)
17970 CHATestVEntry = Entry(TestVA, width=6)
17971 CHATestVEntry.pack(side=LEFT)
17972 CHATestVEntry.bind(
'<MouseWheel>', onTextScroll)
17973 CHATestVEntry.delete(0,
"end")
17974 CHATestVEntry.insert(0,5.0)
17978 TestMode = Frame( frame1 )
17979 TestMode.grid(row=4, column=0, sticky=W)
17980 modelab = Label(TestMode, text=
"Known Res", style=
"A10B.TLabel")
17981 modelab.pack(side=LEFT)
17982 rm3 = Radiobutton(TestMode, text=
"Ext", variable=RMode, value=0)
17983 rm3.pack(side=LEFT)
17984 rm4 = Radiobutton(TestMode, text=
"Int", variable=RMode, value=1)
17985 rm4.pack(side=LEFT)
17987 TestRA = Frame( frame1 )
17988 TestRA.grid(row=5, column=0, sticky=W)
17989 chatestrlab = Label(TestRA, text=
"Known Res", style=
"A10B.TLabel")
17990 chatestrlab.pack(side=LEFT)
17991 CHATestREntry = Entry(TestRA, width=6)
17992 CHATestREntry.pack(side=LEFT)
17993 CHATestREntry.bind(
'<MouseWheel>', onTextScroll)
17994 CHATestREntry.delete(0,
"end")
17995 CHATestREntry.insert(0,50.0)
17997 ohmdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOhmScreen)
17998 ohmdismissclbutton.grid(row=6, column=0, sticky=W, pady=7)
18001 global ohmwindow, OhmStatus, OhmDisp
18006 ohmwindow.destroy()
18009 global FMulXEntry, MulXEntry, etswindow, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate
18010 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, enb1, rtsrlab, etssrlab, RevDate, SWRev
18013 if ETSStatus.get() == 0:
18014 BaseFreq = (-10, -15, -20, -25, -30, -35, -40, -45, -50, -60, -70, -80, -90, -100)
18017 etswindow = Toplevel()
18018 etswindow.title(
"ETS Controls " + SWRev + RevDate)
18019 etswindow.resizable(FALSE,FALSE)
18020 etswindow.protocol(
"WM_DELETE_WINDOW", DestroyETSScreen)
18021 frame1 = Frame(etswindow, borderwidth=5, relief=RIDGE)
18022 frame1.grid(row=0, column=0, sticky=W)
18024 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
18025 rtsrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
18026 rtsrlab.grid(row=1, column=0, sticky=W)
18027 ESRstring =
"ET Sample Rate = " + str(SAMPLErate)
18028 etssrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
18029 etssrlab.grid(row=2, column=0, sticky=W)
18030 etssrbutton = Button(frame1, text=
"Set RT Sample Rate", command=MakeSampleRateMenu)
18031 etssrbutton.grid(row=3, column=0, sticky=W, pady=7)
18032 enb1 = Checkbutton(frame1,text=
"Enable ETS", variable=ETSDisp, command=ETSCheckBox)
18033 enb1.grid(row=4, column=0, sticky=W)
18035 Divx = Frame( frame1 )
18036 Divx.grid(row=5, column=0, sticky=W)
18037 DivXEntry = Entry(Divx, width=6)
18038 DivXEntry.bind(
'<MouseWheel>', ETSscroll)
18039 DivXEntry.pack(side=RIGHT)
18040 DivXEntry.delete(0,
"end")
18041 DivXEntry.insert(0,2)
18042 divxlab = Label( Divx, text =
"Divide Factor")
18043 divxlab.pack(side=RIGHT)
18045 FOffEntry = Label(frame1, text=
"Samples")
18046 FOffEntry.grid(row=6, column=0, sticky=W)
18047 MulXEntry = Label( frame1, text =
"Rec Len Mul")
18048 MulXEntry.grid(row=7, column=0, sticky=W)
18050 eqivsamplerate = Label(frame1, text=
"MHz", style=
"A10B.TLabel")
18051 eqivsamplerate.grid(row=8, column=0, sticky=W)
18053 FConv = Frame( frame1 )
18054 FConv.grid(row=9, column=0, sticky=W)
18055 FMulXEntry = Entry(FConv, width=3)
18056 FMulXEntry.bind(
'<MouseWheel>', ETSscroll)
18057 FMulXEntry.pack(side=RIGHT)
18058 FMulXEntry.delete(0,
"end")
18059 FMulXEntry.insert(0,1)
18060 fminlab = Label( FConv, text =
"Freq Multiplier")
18061 fminlab.pack(side=RIGHT)
18063 FminDisp = Label(frame1, text=
"32768 Hz", style=
"A10B.TLabel")
18064 FminDisp.grid(row=10, column=0, sticky=W)
18066 mgloadbutton = Button(frame1, text=
"Load to MinGen", command=MGLoad)
18067 mgloadbutton.grid(row=11, column=0, sticky=W)
18069 dirlab = Label(frame1, text=
"Sample Data Order", style=
"A10B.TLabel")
18070 dirlab.grid(row=12, column=0, sticky=W)
18071 DataMode = Frame( frame1 )
18072 DataMode.grid(row=13, column=0, sticky=W)
18073 dm3 = Radiobutton(DataMode, text=
"Forward", variable=ETSDir, value=0)
18074 dm3.pack(side=LEFT)
18075 dm4 = Radiobutton(DataMode, text=
"Reverse", variable=ETSDir, value=1)
18076 dm4.pack(side=LEFT)
18077 tclab = Label(frame1, text=
"CH B Time Shift", style=
"A10B.TLabel")
18078 tclab.grid(row=14, column=0, sticky=W)
18079 TSMode = Frame( frame1 )
18080 TSMode.grid(row=15, column=0, sticky=W)
18081 ETSts = Entry(TSMode, width=6)
18082 ETSts.bind(
'<MouseWheel>', ETSscroll)
18083 ETSts.pack(side=RIGHT)
18084 ETSts.delete(0,
"end")
18086 ETStslab = Label( TSMode, text =
"Factor")
18087 ETStslab.pack(side=RIGHT)
18089 etsdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyETSScreen)
18090 etsdismissclbutton.grid(row=16, column=0, sticky=W, pady=7)
18095 global etswindow, ETSStatus, ETSDisp
18100 etswindow.destroy()
18103 global MinigenFout, Fmin, ETSDir
18105 MinigenFout.delete(0,
"end")
18106 if ETSDir.get() == 0:
18107 MinigenFout.insert(0,Fmin+20)
18109 MinigenFout.insert(0,Fmin-20)
18117 global FMulXEntry, MulXEntry, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate, MaxETSrecord
18118 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, DivX, FOff, MulX, Fmin, FMul, SAMPLErate, TIMEdiv
18119 global FminEntry, HtMulEntry, Two_X_Sample
18122 MaxETSrecord = int(SAMPLErate * 10 * TIMEdiv / 1000.0)
18124 MaxETSrecord = int(SAMPLErate * 20 * TIMEdiv / 1000.0)
18125 if (MaxETSrecord*100) > MaxSamples:
18126 MaxETSrecord = MaxSamples / 100
18128 DivX = float(eval(DivXEntry.get()))
18133 DivXEntry.delete(0,END)
18134 DivXEntry.insert(0, DivX)
18136 DivXEntry.delete(0,END)
18137 DivXEntry.insert(0, DivX)
18140 MinFreq = eval(FminEntry.get()) * 1000
18142 FminEntry.delete(0,END)
18143 FminEntry.insert(0, 25)
18146 MulX = (DivX*SAMPLErate)/(100*FOff)
18147 while MulX > MaxETSrecord:
18149 MulX = (DivX*SAMPLErate)/(100*FOff)
18151 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
18152 MulXEntry.config(text = SRstring)
18153 SRstring =
"Offset = " + str(FOff) +
" samples"
18154 FOffEntry.config(text = SRstring)
18155 baseFreq = SAMPLErate/DivX
18157 FMul = float(eval(FMulXEntry.get()))
18160 FMulXEntry.delete(0,END)
18161 FMulXEntry.insert(0, int(FMul))
18164 FMulXEntry.delete(0,END)
18165 FMulXEntry.insert(0, int(FMul))
18167 FMulXEntry.delete(0,END)
18168 FMulXEntry.insert(0, int(FMul))
18169 FreqMin = baseFreq * FMul
18170 SRstring =
"Multiplied Freq = " +
' {0:.1f} '.format(FreqMin) +
" Hz"
18171 FminDisp.config(text = SRstring)
18172 SRstring =
"Base Frequency = " +
' {0:.2f} '.format(baseFreq) +
" Hz"
18173 eqivsamplerate.config(text = SRstring)
18176 TscaleX = int((MinFreq)/(DivX * (MinFreq - FreqMin)))
18184 TscaleX = abs(TscaleX)
18185 if Two_X_Sample.get() == 0:
18186 ToffsetX = TscaleX/10.0
18190 ETSts.delete(0,
"end")
18191 ETSts.insert(0,ToffsetX)
18193 HtMulEntry.delete(0,END)
18194 HtMulEntry.insert(0, TscaleX)
18195 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
18196 rtsrlab.config(text=SRstring)
18197 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
18198 etssrlab.config(text=SRstring)
18205 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
18206 global Settingswindow, SettingsStatus, SettingsDisp, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
18207 global AWG_Amp_Mode, SWRev
18208 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
18209 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
18210 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
18211 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
18213 if SettingsStatus.get() == 0:
18214 Settingswindow = Toplevel()
18215 Settingswindow.title(
"Settings " + SWRev + RevDate)
18216 Settingswindow.resizable(FALSE,FALSE)
18217 Settingswindow.protocol(
"WM_DELETE_WINDOW", DestroySettings)
18218 frame1 = Frame(Settingswindow, borderwidth=5, relief=RIDGE)
18219 frame1.grid(row=0, column=0, sticky=W)
18221 zstlab = Label(frame1, text=
"FFT Zero Stuffing", style=
"A10B.TLabel")
18222 zstlab.grid(row=0, column=0, sticky=W)
18223 zstMode = Frame( frame1 )
18224 zstMode.grid(row=0, column=1, sticky=W)
18225 ZSTuff = Entry(zstMode, width=4)
18226 ZSTuff.bind(
'<MouseWheel>', Settingsscroll)
18227 ZSTuff.bind(
'<Key>', onTextKey)
18228 ZSTuff.pack(side=RIGHT)
18229 ZSTuff.delete(0,
"end")
18230 ZSTuff.insert(0,ZEROstuffing.get())
18232 Avglab = Label(frame1, text=
"Number Traces to Average", style=
"A10B.TLabel")
18233 Avglab.grid(row=1, column=0, sticky=W)
18234 AvgMode = Frame( frame1 )
18235 AvgMode.grid(row=1, column=1, sticky=W)
18236 TAvg = Entry(AvgMode, width=4)
18237 TAvg.bind(
'<MouseWheel>', Settingsscroll)
18238 TAvg.bind(
'<Key>', onTextKey)
18239 TAvg.pack(side=RIGHT)
18240 TAvg.delete(0,
"end")
18241 TAvg.insert(0,TRACEaverage.get())
18243 HarMlab = Label(frame1, text=
"Number of Harmonic Markers", style=
"A10B.TLabel")
18244 HarMlab.grid(row=2, column=0, sticky=W)
18245 HarMMode = Frame( frame1 )
18246 HarMMode.grid(row=2, column=1, sticky=W)
18247 HarMon = Entry(HarMMode, width=4)
18248 HarMon.bind(
'<MouseWheel>', Settingsscroll)
18249 HarMon.bind(
'<Key>', onTextKey)
18250 HarMon.pack(side=RIGHT)
18251 HarMon.delete(0,
"end")
18252 HarMon.insert(0,HarmonicMarkers.get())
18254 Vdivlab = Label(frame1, text=
"Number Vertical Div (SA, Bode)", style=
"A10B.TLabel")
18255 Vdivlab.grid(row=3, column=0, sticky=W)
18256 VdivMode = Frame( frame1 )
18257 VdivMode.grid(row=3, column=1, sticky=W)
18258 VDivE = Entry(VdivMode, width=4)
18259 VDivE.bind(
'<MouseWheel>', Settingsscroll)
18260 VDivE.bind(
'<Key>', onTextKey)
18261 VDivE.pack(side=RIGHT)
18262 VDivE.delete(0,
"end")
18263 VDivE.insert(0,Vdiv.get())
18265 Twdthlab = Label(frame1, text=
"Trace Width in Pixels", style=
"A10B.TLabel")
18266 Twdthlab.grid(row=4, column=0, sticky=W)
18267 TwdthMode = Frame( frame1 )
18268 TwdthMode.grid(row=4, column=1, sticky=W)
18269 TwdthE = Entry(TwdthMode, width=4)
18270 TwdthE.bind(
'<MouseWheel>', Settingsscroll)
18271 TwdthE.bind(
'<Key>', onTextKey)
18272 TwdthE.pack(side=RIGHT)
18273 TwdthE.delete(0,
"end")
18274 TwdthE.insert(0,TRACEwidth.get())
18276 Gwdthlab = Label(frame1, text=
"Grid Width in Pixels", style=
"A10B.TLabel")
18277 Gwdthlab.grid(row=5, column=0, sticky=W)
18278 GwdthMode = Frame( frame1 )
18279 GwdthMode.grid(row=5, column=1, sticky=W)
18280 GwdthE = Entry(GwdthMode, width=4)
18281 GwdthE.bind(
'<MouseWheel>', Settingsscroll)
18282 GwdthE.bind(
'<Key>', onTextKey)
18283 GwdthE.pack(side=RIGHT)
18284 GwdthE.delete(0,
"end")
18285 GwdthE.insert(0,GridWidth.get())
18287 AwgAmplrb1 = Radiobutton(frame1, text=
"AWG Min/Max", variable=AWG_Amp_Mode, value=0, command=UpdateAWGWin)
18288 AwgAmplrb1.grid(row=6, column=0, sticky=W)
18289 AwgAmplrb2 = Radiobutton(frame1, text=
"AWG Amp/Off ", variable=AWG_Amp_Mode, value=1, command=UpdateAWGWin)
18290 AwgAmplrb2.grid(row=6, column=1, sticky=W)
18292 cha_Rcomplab = Label(frame1, text=
"CHA Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
18293 cha_Rcomplab.grid(row=7, column=0, sticky=W)
18294 cha_RcomplabMode = Frame( frame1 )
18295 cha_RcomplabMode.grid(row=7, column=1, sticky=W)
18296 cha_TC1Entry = Entry(cha_RcomplabMode, width=5)
18297 cha_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
18298 cha_TC1Entry.bind(
'<Key>', onTextKey)
18299 cha_TC1Entry.pack(side=LEFT)
18300 cha_TC1Entry.delete(0,
"end")
18301 cha_TC1Entry.insert(0,CHA_TC1.get())
18302 cha_A1Entry = Entry(cha_RcomplabMode, width=5)
18303 cha_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
18304 cha_A1Entry.bind(
'<Key>', onTextKey)
18305 cha_A1Entry.pack(side=LEFT)
18306 cha_A1Entry.delete(0,
"end")
18307 cha_A1Entry.insert(0,CHA_A1.get())
18309 cha_Ccomplab = Label(frame1, text=
"CHA Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
18310 cha_Ccomplab.grid(row=8, column=0, sticky=W)
18311 cha_CcomplabMode = Frame( frame1 )
18312 cha_CcomplabMode.grid(row=8, column=1, sticky=W)
18313 cha_TC2Entry = Entry(cha_CcomplabMode, width=5)
18314 cha_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
18315 cha_TC2Entry.bind(
'<Key>', onTextKey)
18316 cha_TC2Entry.pack(side=LEFT)
18317 cha_TC2Entry.delete(0,
"end")
18318 cha_TC2Entry.insert(0,CHA_TC2.get())
18319 cha_A2Entry = Entry(cha_CcomplabMode, width=5)
18320 cha_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
18321 cha_A2Entry.bind(
'<Key>', onTextKey)
18322 cha_A2Entry.pack(side=LEFT)
18323 cha_A2Entry.delete(0,
"end")
18324 cha_A2Entry.insert(0,CHA_A2.get())
18326 chb_Rcomplab = Label(frame1, text=
"CHB Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
18327 chb_Rcomplab.grid(row=9, column=0, sticky=W)
18328 chb_RcomplabMode = Frame( frame1 )
18329 chb_RcomplabMode.grid(row=9, column=1, sticky=W)
18330 chb_TC1Entry = Entry(chb_RcomplabMode, width=5)
18331 chb_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
18332 chb_TC1Entry.bind(
'<Key>', onTextKey)
18333 chb_TC1Entry.pack(side=LEFT)
18334 chb_TC1Entry.delete(0,
"end")
18335 chb_TC1Entry.insert(0,CHB_TC1.get())
18336 chb_A1Entry = Entry(chb_RcomplabMode, width=5)
18337 chb_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
18338 chb_A1Entry.bind(
'<Key>', onTextKey)
18339 chb_A1Entry.pack(side=LEFT)
18340 chb_A1Entry.delete(0,
"end")
18341 chb_A1Entry.insert(0,CHB_A1.get())
18343 chb_Ccomplab = Label(frame1, text=
"CHB Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
18344 chb_Ccomplab.grid(row=10, column=0, sticky=W)
18345 chb_CcomplabMode = Frame( frame1 )
18346 chb_CcomplabMode.grid(row=10, column=1, sticky=W)
18347 chb_TC2Entry = Entry(chb_CcomplabMode, width=5)
18348 chb_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
18349 chb_TC2Entry.bind(
'<Key>', onTextKey)
18350 chb_TC2Entry.pack(side=LEFT)
18351 chb_TC2Entry.delete(0,
"end")
18352 chb_TC2Entry.insert(0,CHB_TC2.get())
18353 chb_A2Entry = Entry(chb_CcomplabMode, width=5)
18354 chb_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
18355 chb_A2Entry.bind(
'<Key>', onTextKey)
18356 chb_A2Entry.pack(side=LEFT)
18357 chb_A2Entry.delete(0,
"end")
18358 chb_A2Entry.insert(0,CHB_A2.get())
18360 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
18361 Settingsdismissbutton.grid(row=11, column=0, sticky=W, pady=7)
18369 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
18370 global Settingswindow, SettingsStatus, SettingsDisp, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
18371 global CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
18372 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
18373 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
18374 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
18377 GW = int(eval(GwdthE.get()))
18380 GwdthE.delete(0,END)
18381 GwdthE.insert(0, int(GW))
18384 GwdthE.delete(0,END)
18385 GwdthE.insert(0, int(GW))
18387 GwdthE.delete(0,END)
18388 GwdthE.insert(0, GridWidth.get())
18391 TW = int(eval(TwdthE.get()))
18394 TwdthE.delete(0,END)
18395 TwdthE.insert(0, int(TW))
18398 TwdthE.delete(0,END)
18399 TwdthE.insert(0, int(TW))
18401 TwdthE.delete(0,END)
18402 TwdthE.insert(0, TRACEwidth.get())
18406 TA = int(eval(TAvg.get()))
18410 TAvg.insert(0, int(TA))
18414 TAvg.insert(0, int(TA))
18417 TAvg.insert(0, TRACEaverage.get())
18418 TRACEaverage.set(TA)
18421 VDv = int(eval(VDivE.get()))
18424 VDivE.delete(0,END)
18425 VDivE.insert(0, int(VDv))
18428 VDivE.delete(0,END)
18429 VDivE.insert(0, int(VDv))
18431 VDivE.delete(0,END)
18432 VDivE.insert(0, Vdiv.get())
18436 HM = int(eval(HarMon.get()))
18439 HarMon.delete(0,END)
18440 HarMon.insert(0, int(HM))
18443 HarMon.delete(0,END)
18444 HarMon.insert(0, int(HM))
18446 HarMon.delete(0,END)
18447 HarMon.insert(0, HarmonicMarkers.get())
18448 HarmonicMarkers.set(HM)
18451 ZST = int(eval(ZSTuff.get()))
18454 ZSTuff.delete(0,END)
18455 ZSTuff.insert(0, int(ZST))
18458 ZSTuff.delete(0,END)
18459 ZSTuff.insert(0, int(ZST))
18461 ZSTuff.delete(0,END)
18462 ZSTuff.insert(0, ZEROstuffing.get())
18463 ZEROstuffing.set(ZST)
18466 TC1A = float(cha_TC1Entry.get())
18470 cha_TC1Entry.delete(0,END)
18471 cha_TC1Entry.insert(0, TC1A)
18473 cha_TC1Entry.delete(0,END)
18474 cha_TC1Entry.insert(0, CHA_TC1.get())
18476 TC2A = float(cha_TC2Entry.get())
18480 cha_TC2Entry.delete(0,END)
18481 cha_TC2Entry.insert(0, TC2A)
18483 cha_TC2Entry.delete(0,END)
18484 cha_TC2Entry.insert(0, CHA_TC2.get())
18487 Gain1A = float(cha_A1Entry.get())
18490 cha_A1Entry.delete(0,END)
18491 cha_A1Entry.insert(0, CHA_A1.get())
18493 Gain2A = float(cha_A2Entry.get())
18496 cha_A2Entry.delete(0,END)
18497 cha_A2Entry.insert(0, CHA_A2.get())
18500 TC1B = float(chb_TC1Entry.get())
18504 chb_TC1Entry.delete(0, END)
18505 chb_TC1Entry.insert(0, TC1B)
18507 chb_TC1Entry.delete(0,END)
18508 chb_TC1Entry.insert(0, CHB_TC1.get())
18510 TC2B = float(chb_TC2Entry.get())
18514 chb_TC2Entry.delete(0, END)
18515 chb_TC2Entry.insert(0, TC2B)
18517 chb_TC2Entry.delete(0,END)
18518 chb_TC2Entry.insert(0, CHB_TC2.get())
18521 Gain1B = float(chb_A1Entry.get())
18524 chb_A1Entry.delete(0,END)
18525 chb_A1Entry.insert(0, CHB_A1.get())
18527 Gain2B = float(chb_A2Entry.get())
18530 chb_A2Entry.delete(0,END)
18531 chb_A2Entry.insert(0, CHB_A2.get())
18534 global Settingswindow, SettingsStatus, SettingsDisp
18536 SettingsStatus.set(0)
18539 Settingswindow.destroy()
18542 global MouseX, MouseY, MouseWidget
18544 MouseWidget = event.widget
18545 MouseX, MouseY = event.x, event.y
18548 TgInput = IntVar(0)
18549 SingleShot = IntVar(0)
18550 ManualTrigger = IntVar(0)
18551 AutoLevel = IntVar(0)
18552 ShowC1_V = IntVar(0)
18555 ShowC1_V = IntVar(0)
18556 ShowC1_I = IntVar(0)
18557 ShowC2_V = IntVar(0)
18558 ShowC2_I = IntVar(0)
18559 ShowAV_I = IntVar(0)
18560 ShowBV_I = IntVar(0)
18561 ShowRA_V = IntVar(0)
18562 ShowRA_I = IntVar(0)
18563 ShowRB_V = IntVar(0)
18564 ShowRB_I = IntVar(0)
18565 ShowMath = IntVar(0)
18566 Show_MathX = IntVar(0)
18567 Show_MathY = IntVar(0)
18568 AutoCenterA = IntVar(0)
18569 AutoCenterB = IntVar(0)
18570 SmoothCurves = IntVar(0)
18572 TRACEmodeTime = IntVar(0)
18573 TRACEmodeTime.set(0)
18574 ColorMode = IntVar(0)
18575 DecimateOption = IntVar(0)
18576 MathTrace = IntVar(0)
18578 MeasDCV1 = IntVar(0)
18579 MeasMinV1 = IntVar(0)
18580 MeasMaxV1 = IntVar(0)
18581 MeasMidV1 = IntVar(0)
18582 MeasPPV1 = IntVar(0)
18583 MeasRMSV1 = IntVar(0)
18584 MeasRMSVA_B = IntVar(0)
18585 MeasDCI1 = IntVar(0)
18586 MeasMinI1 = IntVar(0)
18587 MeasMaxI1 = IntVar(0)
18588 MeasMidI1 = IntVar(0)
18589 MeasPPI1 = IntVar(0)
18590 MeasRMSI1 = IntVar(0)
18591 MeasDiffAB = IntVar(0)
18592 MeasDCV2 = IntVar(0)
18593 MeasMinV2 = IntVar(0)
18594 MeasMaxV2 = IntVar(0)
18595 MeasMidV2 = IntVar(0)
18596 MeasPPV2 = IntVar(0)
18597 MeasRMSV2 = IntVar(0)
18598 MeasDCI2 = IntVar(0)
18599 MeasMinI2 = IntVar(0)
18600 MeasMaxI2 = IntVar(0)
18601 MeasMidI2 = IntVar(0)
18602 MeasPPI2 = IntVar(0)
18603 MeasRMSI2 = IntVar(0)
18604 MeasDiffBA = IntVar(0)
18605 MeasUserA = IntVar(0)
18606 MeasAHW = IntVar(0)
18607 MeasALW = IntVar(0)
18608 MeasADCy = IntVar(0)
18609 MeasAPER = IntVar(0)
18610 MeasAFREQ = IntVar(0)
18611 MeasBHW = IntVar(0)
18612 MeasBLW = IntVar(0)
18613 MeasBDCy = IntVar(0)
18614 MeasBPER = IntVar(0)
18615 MeasBFREQ = IntVar(0)
18616 MeasPhase = IntVar(0)
18617 MeasTopV1 = IntVar(0)
18618 MeasBaseV1 = IntVar(0)
18619 MeasTopV2 = IntVar(0)
18620 MeasBaseV2 = IntVar(0)
18621 MeasUserB = IntVar(0)
18622 MeasDelay = IntVar(0)
18623 TimeDisp = IntVar(0)
18626 FreqDisp = IntVar(0)
18627 BodeDisp = IntVar(0)
18629 OhmDisp = IntVar(0)
18630 BodeScreenStatus = IntVar(0)
18631 BodeScreenStatus.set(0)
18632 DigScreenStatus = IntVar(0)
18633 DigScreenStatus.set(0)
18634 DacScreenStatus = IntVar(0)
18635 DacScreenStatus.set(0)
18636 MuxScreenStatus = IntVar(0)
18637 MuxScreenStatus.set(0)
18638 DualMuxMode = IntVar(0)
18639 MinigenScreenStatus = IntVar(0)
18640 MinigenScreenStatus.set(0)
18641 DA1ScreenStatus = IntVar(0)
18642 DA1ScreenStatus.set(0)
18643 DigPotScreenStatus = IntVar(0)
18644 DigPotScreenStatus.set(0)
18645 GenericSerialStatus = IntVar(0)
18646 GenericSerialStatus.set(0)
18647 AD5626SerialStatus = IntVar(0)
18648 AD5626SerialStatus.set(0)
18649 DigFiltStatus = IntVar(0)
18650 DigFiltStatus.set(0)
18651 CommandStatus = IntVar(0)
18652 CommandStatus.set(0)
18653 MeasureStatus = IntVar(0)
18654 MeasureStatus.set(0)
18655 MarkerScale = IntVar(0)
18657 SettingsStatus = IntVar(0)
18658 CHA_RC_HP = IntVar(0)
18659 CHB_RC_HP = IntVar(0)
18661 frame2r = Frame(root, borderwidth=5, relief=RIDGE)
18662 frame2r.pack(side=RIGHT, fill=BOTH, expand=NO)
18664 frame1 = Frame(root, borderwidth=5, relief=RIDGE)
18665 frame1.pack(side=TOP, fill=BOTH, expand=NO)
18667 frame2 = Frame(root, borderwidth=5, relief=RIDGE)
18668 frame2.pack(side=TOP, fill=BOTH, expand=YES)
18670 frame3 = Frame(root, borderwidth=5, relief=RIDGE)
18671 frame3.pack(side=TOP, fill=BOTH, expand=NO)
18673 root.style.configure(
"W3.TButton", width=3, relief=RAISED)
18674 root.style.configure(
"W4.TButton", width=4, relief=RAISED)
18675 root.style.configure(
"W5.TButton", width=5, relief=RAISED)
18676 root.style.configure(
"W7.TButton", width=7, relief=RAISED)
18677 root.style.configure(
"W8.TButton", width=8, relief=RAISED)
18678 root.style.configure(
"W9.TButton", width=9, relief=RAISED)
18679 root.style.configure(
"W10.TButton", width=10, relief=RAISED)
18680 root.style.configure(
"W11.TButton", width=11, relief=RAISED)
18681 root.style.configure(
"W16.TButton", width=16, relief=RAISED)
18682 root.style.configure(
"W17.TButton", width=17, relief=RAISED)
18683 root.style.configure(
"Stop.TButton", background=
"red", width=4, relief=RAISED)
18684 root.style.configure(
"Run.TButton", background=
"green", width=4, relief=RAISED)
18685 root.style.configure(
"Pwr.TButton", background=
"green", width=7, relief=RAISED)
18686 root.style.configure(
"PwrOff.TButton", background=
"red", width=7, relief=RAISED)
18687 root.style.configure(
"RConn.TButton", background=
"red", width=5, relief=RAISED)
18688 root.style.configure(
"GConn.TButton", background=
"green", width=5, relief=RAISED)
18689 root.style.configure(
"Rtrace1.TButton", background=COLORtrace1, width=7, relief=RAISED)
18690 root.style.configure(
"Strace1.TButton", background=COLORtrace1, width=7, relief=SUNKEN)
18691 root.style.configure(
"Rtrace2.TButton", background=COLORtrace2, width=7, relief=RAISED)
18692 root.style.configure(
"Strace2.TButton", background=COLORtrace2, width=7, relief=SUNKEN)
18693 root.style.configure(
"Rtrace3.TButton", background=COLORtrace3, width=7, relief=RAISED)
18694 root.style.configure(
"Strace3.TButton", background=COLORtrace3, width=7, relief=SUNKEN)
18695 root.style.configure(
"Rtrace4.TButton", background=COLORtrace4, width=7, relief=RAISED)
18696 root.style.configure(
"Strace4.TButton", background=COLORtrace4, width=7, relief=SUNKEN)
18697 root.style.configure(
"Rtrace6.TButton", background=COLORtrace6, width=7, relief=RAISED)
18698 root.style.configure(
"Strace6.TButton", background=COLORtrace6, width=7, relief=SUNKEN)
18699 root.style.configure(
"Rtrace7.TButton", background=COLORtrace7, width=7, relief=RAISED)
18700 root.style.configure(
"Strace7.TButton", background=COLORtrace7, width=7, relief=SUNKEN)
18701 root.style.configure(
"RGray.TButton", background=
"#808080", width=7, relief=RAISED)
18702 root.style.configure(
"SGray.TButton", background=
"#808080", width=7, relief=SUNKEN)
18703 root.style.configure(
"A10R1.TLabelframe.Label", foreground=COLORtraceR1, font=(
'Arial', 10,
'bold'))
18704 root.style.configure(
"A10R1.TLabelframe", borderwidth=5, relief=RIDGE)
18705 root.style.configure(
"A10R2.TLabelframe.Label", foreground=COLORtraceR2, font=(
'Arial', 10,
'bold'))
18706 root.style.configure(
"A10R2.TLabelframe", borderwidth=5, relief=RIDGE)
18707 root.style.configure(
"A10B.TLabel", foreground=COLORcanvas, font=
"Arial 10 bold")
18708 root.style.configure(
"A10R.TLabel", foreground=
"red", font=
"Arial 10 bold")
18709 root.style.configure(
"A10G.TLabel", foreground=
"green", font=
"Arial 10 bold")
18710 root.style.configure(
"A12B.TLabel", foreground=COLORcanvas, font=
"Arial 12 bold")
18711 root.style.configure(
"A16B.TLabel", foreground=COLORcanvas, font=
"Arial 16 bold")
18712 root.style.configure(
"Stop.TRadiobutton", background=
"red")
18713 root.style.configure(
"Run.TRadiobutton", background=
"green")
18714 root.style.configure(
"Disab.TCheckbutton", indicatorcolor=
"red")
18715 root.style.configure(
"Enab.TCheckbutton", indicatorcolor=
"green")
18716 root.style.configure(
"WPhase.TRadiobutton", width=5, background=
"white", indicatorcolor=(
"red",
"green"))
18717 root.style.configure(
"GPhase.TRadiobutton", width=5, background=
"gray", indicatorcolor=(
"red",
"green"))
18720 Triggermenu = Menubutton(frame1, text=
"Trigger", style=
"W7.TButton")
18721 Triggermenu.menu = Menu(Triggermenu, tearoff = 0 )
18722 Triggermenu[
"menu"] = Triggermenu.menu
18723 Triggermenu.menu.add_radiobutton(label=
'None', variable=TgInput, value=0)
18724 Triggermenu.menu.add_radiobutton(label=
'CA-V', variable=TgInput, value=1)
18725 Triggermenu.menu.add_radiobutton(label=
'CA-I', variable=TgInput, value=2)
18726 Triggermenu.menu.add_radiobutton(label=
'CB-V', variable=TgInput, value=3)
18727 Triggermenu.menu.add_radiobutton(label=
'CB-I', variable=TgInput, value=4)
18728 Triggermenu.menu.add_radiobutton(label=
'Math', variable=TgInput, value=5)
18729 Triggermenu.menu.add_radiobutton(label=
'MathX', variable=TgInput, value=6)
18730 Triggermenu.menu.add_radiobutton(label=
'MathY', variable=TgInput, value=7)
18731 Triggermenu.menu.add_checkbutton(label=
'Auto Level', variable=AutoLevel)
18732 Triggermenu.menu.add_checkbutton(label=
'Manual Trgger', variable=ManualTrigger)
18733 Triggermenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShot)
18734 Triggermenu.pack(side=LEFT)
18736 Edgemenu = Menubutton(frame1, text=
"Edge", style=
"W5.TButton")
18737 Edgemenu.menu = Menu(Edgemenu, tearoff = 0 )
18738 Edgemenu[
"menu"] = Edgemenu.menu
18739 Edgemenu.menu.add_radiobutton(label=
'Rising [+]', variable=TgEdge, value=0)
18740 Edgemenu.menu.add_radiobutton(label=
'Falling [-]', variable=TgEdge, value=1)
18741 Edgemenu.pack(side=LEFT)
18743 tlab = Label(frame1, text=
"Trig Level")
18744 tlab.pack(side=LEFT)
18745 TRIGGERentry = Entry(frame1, width=5)
18746 TRIGGERentry.bind(
'<MouseWheel>', onTextScroll)
18747 TRIGGERentry.bind(
"<Return>", BTriglevel)
18748 TRIGGERentry.bind(
'<Key>', onTextKey)
18749 TRIGGERentry.pack(side=LEFT)
18750 TRIGGERentry.delete(0,
"end")
18751 TRIGGERentry.insert(0,0.0)
18753 tgb = Button(frame1, text=
"50%", style=
"W4.TButton", command=BTrigger50p)
18754 tgb.pack(side=LEFT)
18756 hldlab = Button(frame1, text=
"Hold Off", style=
"W8.TButton", command=IncHoldOff)
18757 hldlab.pack(side=LEFT)
18758 HoldOffentry = Entry(frame1, width=4)
18759 HoldOffentry.bind(
'<MouseWheel>', onTextScroll)
18760 HoldOffentry.bind(
"<Return>", BHoldOff)
18761 HoldOffentry.bind(
'<Key>', onTextKey)
18762 HoldOffentry.pack(side=LEFT)
18763 HoldOffentry.delete(0,
"end")
18764 HoldOffentry.insert(0,0.0)
18766 hozlab = Button(frame1, text=
"Horz Pos", style=
"W8.TButton", command=SetTriggerPoss)
18767 hozlab.pack(side=LEFT)
18768 HozPossentry = Entry(frame1, width=4)
18769 HozPossentry.bind(
'<MouseWheel>', onTextScroll)
18770 HozPossentry.bind(
"<Return>", BHozPoss)
18771 HozPossentry.bind(
'<Key>', onTextKey)
18772 HozPossentry.pack(side=LEFT)
18773 HozPossentry.delete(0,
"end")
18774 HozPossentry.insert(0,0.0)
18776 bexit = Button(frame1, text=
"Exit", style=
"W4.TButton", command=Bcloseexit)
18777 bexit.pack(side=RIGHT)
18778 bstop = Button(frame1, text=
"Stop", style=
"Stop.TButton", command=BStop)
18779 bstop.pack(side=RIGHT)
18780 brun = Button(frame1, text=
"Run", style=
"Run.TButton", command=BStart)
18781 brun.pack(side=RIGHT)
18782 PwrBt = Button(frame1, text=
"PWR-ON", style=
"Pwr.TButton", command=BPower)
18783 PwrBt.pack(side=RIGHT)
18785 Showmenu = Menubutton(frame1, text=
"Curves", style=
"W7.TButton")
18786 Showmenu.menu = Menu(Showmenu, tearoff = 0 )
18787 Showmenu[
"menu"] = Showmenu.menu
18788 Showmenu.menu.add_command(label=
"-Show-", foreground=
"blue", command=donothing)
18789 Showmenu.menu.add_command(label=
"All", command=BShowCurvesAll)
18790 Showmenu.menu.add_command(label=
"None", command=BShowCurvesNone)
18791 Showmenu.menu.add_checkbutton(label=
'CA-V [1]', variable=ShowC1_V, command=TraceSelectADC_Mux)
18792 Showmenu.menu.add_checkbutton(label=
'CA-I [3]', variable=ShowC1_I, command=TraceSelectADC_Mux)
18793 Showmenu.menu.add_checkbutton(label=
'CB-V [2]', variable=ShowC2_V, command=TraceSelectADC_Mux)
18794 Showmenu.menu.add_checkbutton(label=
'CB-I [4]', variable=ShowC2_I, command=TraceSelectADC_Mux)
18795 Showmenu.menu.add_checkbutton(label=
'Math-X', variable=Show_MathX, command=UpdateTimeTrace)
18796 Showmenu.menu.add_checkbutton(label=
'Math-Y', variable=Show_MathY, command=UpdateTimeTrace)
18797 Showmenu.menu.add_command(label=
"-Auto Vert Center-", foreground=
"blue", command=donothing)
18798 Showmenu.menu.add_checkbutton(label=
'Center CA-V', variable=AutoCenterA)
18799 Showmenu.menu.add_checkbutton(label=
'Center CB-V', variable=AutoCenterB)
18800 Showmenu.menu.add_command(label=
"-Input HP Comp-", foreground=
"blue", command=donothing)
18801 Showmenu.menu.add_checkbutton(label=
'Comp CA-V', variable=CHA_RC_HP)
18802 Showmenu.menu.add_checkbutton(label=
'Comp CB-V', variable=CHB_RC_HP)
18803 Showmenu.menu.add_separator()
18804 Showmenu.menu.add_checkbutton(label=
'RA-V', variable=ShowRA_V, command=UpdateTimeTrace)
18805 Showmenu.menu.add_checkbutton(label=
'RA-I', variable=ShowRA_I, command=UpdateTimeTrace)
18806 Showmenu.menu.add_checkbutton(label=
'RB-V', variable=ShowRB_V, command=UpdateTimeTrace)
18807 Showmenu.menu.add_checkbutton(label=
'RB-I', variable=ShowRB_I, command=UpdateTimeTrace)
18808 Showmenu.menu.add_checkbutton(label=
'RMath', variable=ShowMath, command=UpdateTimeTrace)
18809 Showmenu.menu.add_separator()
18810 Showmenu.menu.add_checkbutton(label=
'T Cursor [t]', variable=ShowTCur, command=UpdateTimeTrace)
18811 Showmenu.menu.add_checkbutton(label=
'V Cursor [v]', variable=ShowVCur, command=UpdateTimeTrace)
18812 Showmenu.pack(side=RIGHT)
18814 if ShowBallonHelp > 0:
18818 hldlab_tip =
CreateToolTip(hldlab,
'Increment Hold Off setting by one time division')
18819 hozlab_tip =
CreateToolTip(hozlab,
'When triggering, set trigger point to center of screen')
18827 if EnableHSsampling > 0:
18828 fminlab2 = Label(frame1, text=
"KHz")
18829 fminlab2.pack(side=RIGHT)
18830 FminEntry = Entry(frame1, width=4)
18831 FminEntry.bind(
'<MouseWheel>', onFminScroll)
18832 FminEntry.bind(
"<Return>", SetAD9833)
18833 FminEntry.pack(side=RIGHT)
18834 FminEntry.delete(0,
"end")
18835 FminEntry.insert(0,25)
18836 fminlab = Label(frame1, text=
"Fmin")
18837 fminlab.pack(side=RIGHT)
18839 HtMulEntry = Entry(frame1, width=4)
18840 HtMulEntry.bind(
'<MouseWheel>', onMulXScroll)
18841 HtMulEntry.bind(
"<Return>", SetAD9833)
18842 HtMulEntry.pack(side=RIGHT)
18843 HtMulEntry.delete(0,
"end")
18844 HtMulEntry.insert(0,1)
18845 mulxlab = Label( frame1, text =
"Mul X")
18846 mulxlab.pack(side=RIGHT)
18849 TMsb = Spinbox(frame1, width=5, values= TMpdiv, command=BTime)
18850 TMsb.bind(
'<MouseWheel>', onSpinBoxScroll)
18851 TMsb.pack(side=RIGHT)
18852 TMsb.delete(0,
"end")
18854 TMlab = Label(frame1, text=
"Time mS/Div")
18855 TMlab.pack(side=RIGHT)
18857 ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas, cursor=
'cross')
18859 ca.bind(
'<Configure>', CAresize)
18860 ca.bind(
'<1>', onCanvasClickLeft)
18861 ca.bind(
'<3>', onCanvasClickRight)
18862 ca.bind(
"<Motion>",onCanvasMouse_xy)
18863 ca.bind(
"<Up>", onCanvasUpArrow)
18864 ca.bind(
"<Down>", onCanvasDownArrow)
18865 ca.bind(
"<Left>", onCanvasLeftArrow)
18866 ca.bind(
"<Right>", onCanvasRightArrow)
18867 ca.bind(
"<space>", onCanvasSpaceBar)
18868 ca.bind(
"1", onCanvasOne)
18869 ca.bind(
"2", onCanvasTwo)
18870 ca.bind(
"3", onCanvasThree)
18871 ca.bind(
"4", onCanvasFour)
18872 ca.bind(
"5", onCanvasFive)
18873 ca.bind(
"6", onCanvasSix)
18874 ca.bind(
"7", onCanvasSeven)
18875 ca.bind(
"8", onCanvasEight)
18876 ca.bind(
"9", onCanvasNine)
18877 ca.bind(
"0", onCanvasZero)
18878 ca.bind(
"a", onCanvasAverage)
18879 ca.bind(
"t", onCanvasShowTcur)
18880 ca.bind(
"v", onCanvasShowVcur)
18881 ca.bind(
"s", onCanvasSnap)
18882 ca.bind(
"+", onCanvasTrising)
18883 ca.bind(
"-", onCanvasTfalling)
18885 ca.pack(side=TOP, fill=BOTH, expand=YES)
18888 dropmenu = Frame( frame2r )
18889 dropmenu.pack(side=TOP)
18890 bcon = Button(dropmenu, text=
"Recon", style=
"RConn.TButton", command=ConnectDevice)
18891 bcon.pack(side=LEFT, anchor=W)
18893 Filemenu = Menubutton(dropmenu, text=
"File", style=
"W4.TButton")
18894 Filemenu.menu = Menu(Filemenu, tearoff = 0 )
18895 Filemenu[
"menu"] = Filemenu.menu
18896 Filemenu.menu.add_command(label=
"Save Config", command=BSaveConfigTime)
18897 Filemenu.menu.add_command(label=
"Load Config", command=BLoadConfigTime)
18898 Filemenu.menu.add_command(label=
"Save Adj", command=BSaveCal)
18899 Filemenu.menu.add_command(label=
"Load Adj", command=BLoadCal)
18900 Filemenu.menu.add_command(label=
"Save Screen", command=BSaveScreen)
18901 Filemenu.menu.add_command(label=
"Save To CSV", command=BSaveData)
18902 Filemenu.menu.add_command(label=
"Load From CSV", command=BReadData)
18903 Filemenu.menu.add_command(label=
"Save PWL Data", command=BSaveChannelData)
18904 Filemenu.menu.add_command(label=
"Help", command=BHelp)
18905 Filemenu.menu.add_command(label=
"About", command=BAbout)
18906 Filemenu.pack(side=LEFT, anchor=W)
18908 Optionmenu = Menubutton(dropmenu, text=
"Options", style=
"W7.TButton")
18909 Optionmenu.menu = Menu(Optionmenu, tearoff = 0 )
18910 Optionmenu[
"menu"] = Optionmenu.menu
18911 Optionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
18912 Optionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
18913 Optionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurves, command=UpdateTimeTrace)
18914 Optionmenu.menu.add_checkbutton(label=
'Z-O-Hold', variable=ZOHold, command=UpdateTimeTrace)
18915 Optionmenu.menu.add_checkbutton(label=
'Decimate', variable=DecimateOption)
18916 Optionmenu.menu.add_checkbutton(label=
'Gated Meas', variable=MeasGateStatus)
18917 Optionmenu.menu.add_checkbutton(label=
'Trace Avg [a]', variable=TRACEmodeTime)
18918 Optionmenu.menu.add_checkbutton(label=
'Persistance', variable=ScreenTrefresh)
18919 Optionmenu.menu.add_command(label=
'Set Marker Location', command=BSetMarkerLocation)
18920 Optionmenu.menu.add_command(label=
"SnapShot [s]", command=BSnapShot)
18921 Optionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
18922 Optionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
18923 Optionmenu.menu.add_command(label=
"Run Self Cal", command=SelfCalibration)
18924 if AllowFlashFirmware == 1:
18925 Optionmenu.menu.add_command(label=
"Save Cal Settings", command=Save_Cal_file)
18926 Optionmenu.menu.add_command(label=
"Update Firmware", command=UpdateFirmware)
18927 Optionmenu.pack(side=LEFT, anchor=W)
18929 dropmenu2 = Frame( frame2r )
18930 dropmenu2.pack(side=TOP)
18932 mathbt = Button(dropmenu2, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
18933 mathbt.pack(side=RIGHT, anchor=W)
18935 measlab = Label(dropmenu2, text=
"Meas")
18936 measlab.pack(side=LEFT, anchor=W)
18937 MeasmenuA = Menubutton(dropmenu2, text=
"CA", style=
"W3.TButton")
18938 MeasmenuA.menu = Menu(MeasmenuA, tearoff = 0 )
18939 MeasmenuA[
"menu"] = MeasmenuA.menu
18940 MeasmenuA.menu.add_command(label=
"-CA-V-", command=donothing)
18941 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCV1)
18942 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinV1)
18943 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxV1)
18944 MeasmenuA.menu.add_checkbutton(label=
'Base', variable=MeasBaseV1)
18945 MeasmenuA.menu.add_checkbutton(label=
'Top', variable=MeasTopV1)
18946 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidV1)
18947 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPV1)
18948 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV1)
18949 MeasmenuA.menu.add_checkbutton(label=
'CA-CB', variable=MeasDiffAB)
18950 MeasmenuA.menu.add_checkbutton(label=
'CA-CB RMS', variable=MeasRMSVA_B)
18951 MeasmenuA.menu.add_checkbutton(label=
'User', variable=MeasUserA, command=BUserAMeas)
18952 MeasmenuA.menu.add_separator()
18954 MeasmenuA.menu.add_command(label=
"-CA-I-", command=donothing)
18955 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCI1)
18956 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinI1)
18957 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxI1)
18958 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidI1)
18959 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPI1)
18960 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI1)
18961 MeasmenuA.menu.add_separator()
18963 MeasmenuA.menu.add_command(label=
"CA-Time", command=donothing)
18964 MeasmenuA.menu.add_checkbutton(label=
'H-Width', variable=MeasAHW)
18965 MeasmenuA.menu.add_checkbutton(label=
'L-Width', variable=MeasALW)
18966 MeasmenuA.menu.add_checkbutton(label=
'DutyCyle', variable=MeasADCy)
18967 MeasmenuA.menu.add_checkbutton(label=
'Period', variable=MeasAPER)
18968 MeasmenuA.menu.add_checkbutton(label=
'Freq', variable=MeasAFREQ)
18969 MeasmenuA.menu.add_checkbutton(label=
'A-B Phase', variable=MeasPhase)
18971 MeasmenuA.pack(side=LEFT)
18973 MeasmenuB = Menubutton(dropmenu2, text=
"CB", style=
"W3.TButton")
18974 MeasmenuB.menu = Menu(MeasmenuB, tearoff = 0 )
18975 MeasmenuB[
"menu"] = MeasmenuB.menu
18976 MeasmenuB.menu.add_command(label=
"-CB-V-", command=donothing)
18977 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCV2)
18978 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinV2)
18979 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxV2)
18980 MeasmenuB.menu.add_checkbutton(label=
'Base', variable=MeasBaseV2)
18981 MeasmenuB.menu.add_checkbutton(label=
'Top', variable=MeasTopV2)
18982 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidV2)
18983 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPV2)
18984 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV2)
18985 MeasmenuB.menu.add_checkbutton(label=
'CB-CA', variable=MeasDiffBA)
18986 MeasmenuB.menu.add_checkbutton(label=
'User', variable=MeasUserB, command=BUserBMeas)
18987 MeasmenuB.menu.add_separator()
18989 MeasmenuB.menu.add_command(label=
"-CB-I-", command=donothing)
18990 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCI2)
18991 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinI2)
18992 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxI2)
18993 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidI2)
18994 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPI2)
18995 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI2)
18996 MeasmenuB.menu.add_separator()
18998 MeasmenuB.menu.add_command(label=
"CB-Time", command=donothing)
18999 MeasmenuB.menu.add_checkbutton(label=
'H-Width', variable=MeasBHW)
19000 MeasmenuB.menu.add_checkbutton(label=
'L-Width', variable=MeasBLW)
19001 MeasmenuB.menu.add_checkbutton(label=
'DutyCyle', variable=MeasBDCy)
19002 MeasmenuB.menu.add_checkbutton(label=
'Period', variable=MeasBPER)
19003 MeasmenuB.menu.add_checkbutton(label=
'Freq', variable=MeasBFREQ)
19004 MeasmenuB.menu.add_checkbutton(label=
'B-A Delay', variable=MeasDelay)
19005 MeasmenuB.pack(side=LEFT)
19007 BuildAWGScreen = Button(frame2r, text=
"AWG Window", style=
"W16.TButton", command=MakeAWGWindow)
19008 BuildAWGScreen.pack(side=TOP)
19010 timebtn = Frame( frame2r )
19011 timebtn.pack(side=TOP)
19012 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
19013 ckb1.pack(side=LEFT)
19014 timelab = Label(timebtn, text=
"Time Plot")
19015 timelab.pack(side=LEFT)
19016 xybtn = Frame( frame2r )
19017 xybtn.pack(side=TOP)
19018 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
19019 ckb2.pack(side=LEFT)
19020 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
19021 BuildXYScreen.pack(side=TOP)
19023 freqbtn = Frame( frame2r )
19024 freqbtn.pack(side=TOP)
19025 ckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
19026 ckb3.pack(side=LEFT)
19027 BuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
19028 BuildSpectrumScreen.pack(side=LEFT)
19030 bodebtn = Frame( frame2r )
19031 bodebtn.pack(side=TOP)
19032 ckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
19033 ckb5.pack(side=LEFT)
19034 BuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
19035 BuildBodeScreen.pack(side=LEFT)
19037 impdbtn = Frame( frame2r )
19038 impdbtn.pack(side=TOP)
19039 ckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
19040 ckb4.pack(side=LEFT)
19041 BuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
19042 BuildIAScreen.pack(side=LEFT)
19044 dcohmbtn = Frame( frame2r )
19045 dcohmbtn.pack(side=TOP)
19046 ckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
19047 ckb6.pack(side=LEFT)
19048 BuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
19049 BuildOhmScreen.pack(side=LEFT)
19050 if ShowBallonHelp > 0:
19054 BuildSpectrumScreen_tip =
CreateToolTip(BuildSpectrumScreen,
'Open spectrum analyzer window')
19059 DigScreenStatus = IntVar(0)
19060 DigScreenStatus.set(0)
19061 BuildDigScreen = Button(frame2r, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
19062 BuildDigScreen.pack(side=TOP)
19065 if EnablePIODACMode > 0:
19066 BuildDacScreen = Button(frame2r, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
19067 BuildDacScreen.pack(side=TOP)
19068 if EnableMuxMode > 0:
19069 BuildMuxScreen = Button(frame2r, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
19070 BuildMuxScreen.pack(side=TOP)
19071 if EnableMinigenMode > 0:
19072 BuildMinigenScreen = Button(frame2r, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
19073 BuildMinigenScreen.pack(side=TOP)
19074 if EnablePmodDA1Mode > 0:
19075 BuildDA1Screen = Button(frame2r, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
19076 BuildDA1Screen.pack(side=TOP)
19077 if EnableDigPotMode >0:
19078 BuildDigPotScreen = Button(frame2r, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
19079 BuildDigPotScreen.pack(side=TOP)
19080 if EnableGenericSerialMode >0:
19081 GenericSerialScreen = Button(frame2r, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
19082 GenericSerialScreen.pack(side=TOP)
19083 if EnableAD5626SerialMode >0:
19084 AD5626SerialScreen = Button(frame2r, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
19085 AD5626SerialScreen.pack(side=TOP)
19086 if EnableDigitalFilter >0:
19087 DigFiltScreen = Button(frame2r, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
19088 DigFiltScreen.pack(side=TOP)
19089 if EnableCommandInterface > 0:
19090 CommandLineScreen = Button(frame2r, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
19091 CommandLineScreen.pack(side=TOP)
19092 if EnableMeasureScreen > 0:
19093 MeasureScreen = Button(frame2r, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
19094 MeasureScreen.pack(side=TOP)
19095 if EnableETSScreen > 0:
19096 ETSScreen = Button(frame2r, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
19097 ETSScreen.pack(side=TOP)
19099 prlab = Label(frame2r, text=
"Adjust Gain / Offset")
19100 prlab.pack(side=TOP)
19102 ProbeA = Frame( frame2r )
19103 ProbeA.pack(side=TOP)
19104 gain1lab = Label(ProbeA, text=
"CA-V")
19105 gain1lab.pack(side=LEFT)
19106 CHAVGainEntry = Entry(ProbeA, width=5)
19107 CHAVGainEntry.bind(
'<MouseWheel>', onTextScroll)
19108 CHAVGainEntry.bind(
'<Key>', onTextKey)
19109 CHAVGainEntry.pack(side=LEFT)
19110 CHAVGainEntry.delete(0,
"end")
19111 CHAVGainEntry.insert(0,1.0)
19112 CHAVOffsetEntry = Entry(ProbeA, width=5)
19113 CHAVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
19114 CHAVOffsetEntry.bind(
'<Key>', onTextKey)
19115 CHAVOffsetEntry.pack(side=LEFT)
19116 CHAVOffsetEntry.delete(0,
"end")
19117 CHAVOffsetEntry.insert(0,0.0)
19119 ProbeB = Frame( frame2r )
19120 ProbeB.pack(side=TOP)
19121 gain2lab = Label(ProbeB, text=
"CB-V")
19122 gain2lab.pack(side=LEFT)
19123 CHBVGainEntry = Entry(ProbeB, width=5)
19124 CHBVGainEntry.bind(
'<MouseWheel>', onTextScroll)
19125 CHBVGainEntry.bind(
'<Key>', onTextKey)
19126 CHBVGainEntry.pack(side=LEFT)
19127 CHBVGainEntry.delete(0,
"end")
19128 CHBVGainEntry.insert(0,1.0)
19129 CHBVOffsetEntry = Entry(ProbeB, width=5)
19130 CHBVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
19131 CHBVOffsetEntry.bind(
'<Key>', onTextKey)
19132 CHBVOffsetEntry.pack(side=LEFT)
19133 CHBVOffsetEntry.delete(0,
"end")
19134 CHBVOffsetEntry.insert(0,0.0)
19136 ProbeAI = Frame( frame2r )
19137 ProbeAI.pack(side=TOP)
19138 gainailab = Label(ProbeAI, text=
"CA-I")
19139 gainailab.pack(side=LEFT)
19140 CHAIGainEntry = Entry(ProbeAI, width=5)
19141 CHAIGainEntry.bind(
'<MouseWheel>', onTextScroll)
19142 CHAIGainEntry.bind(
'<Key>', onTextKey)
19143 CHAIGainEntry.pack(side=LEFT)
19144 CHAIGainEntry.delete(0,
"end")
19145 CHAIGainEntry.insert(0,1.0)
19146 CHAIOffsetEntry = Entry(ProbeAI, width=5)
19147 CHAIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
19148 CHAIOffsetEntry.bind(
'<Key>', onTextKey)
19149 CHAIOffsetEntry.pack(side=LEFT)
19150 CHAIOffsetEntry.delete(0,
"end")
19151 CHAIOffsetEntry.insert(0,0.0)
19153 ProbeBI = Frame( frame2r )
19154 ProbeBI.pack(side=TOP)
19155 gainbilab = Label(ProbeBI, text=
"CB-I")
19156 gainbilab.pack(side=LEFT)
19157 CHBIGainEntry = Entry(ProbeBI, width=5)
19158 CHBIGainEntry.bind(
'<MouseWheel>', onTextScroll)
19159 CHBIGainEntry.bind(
'<Key>', onTextKey)
19160 CHBIGainEntry.pack(side=LEFT)
19161 CHBIGainEntry.delete(0,
"end")
19162 CHBIGainEntry.insert(0,1.0)
19163 CHBIOffsetEntry = Entry(ProbeBI, width=5)
19164 CHBIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
19165 CHBIOffsetEntry.bind(
'<Key>', onTextKey)
19166 CHBIOffsetEntry.pack(side=LEFT)
19167 CHBIOffsetEntry.delete(0,
"end")
19168 CHBIOffsetEntry.insert(0,0.0)
19171 R0lGODlhdAAxAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
19172 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
19173 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
19174 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
19175 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
19176 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
19177 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
19178 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
19179 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
19180 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
19181 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
19182 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
19183 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
19184 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAB0ADEA
19185 AAj/AP8JHEiwoMGDCBMqXMiwocOHEBlSS5WKIUWJfqj9S+XnokGPEUOKdEito0WNCC9OpEbtz7+V
19186 HyuOnEnzI6yMEylWpNgx50aOGkt6LElUoB9VPFHyTAXrYipVNaOSTOWzEEuqA61SXTnxH06ZK7EK
19187 5Ap2J9WdKKWqRVjyJ1c/1ZbqvPnyrKqS215mzEiwo8yfer22XUs4Zse9V31mPFuxbdKxjAU65Si5
19188 8Vm+hTNXrvuWKFKdjs8WJEqR5V63bkP/1bx28E+rK28ihckRayHQnH/yVdUTMtB/1fywHj7TI0iR
19189 x4krd7g0bcjSy6NLn069uvXr2LNr3/6Sip/vU777//EOXjx5P+G/nw/vnCA18gXFOy+JWfL31V6/
19190 s001ZQqK8AdN1B8KJiVETX9TMIGggv0xmOCCEDbYX3sDoTdhXwi6199qFjJRUIMB3iEhgs7x56CC
19191 wrH134r+tcjiiy7G+B+FL7nIYYsp1ojCX9SwuFqLBh343xQc+bGiUjhyhCNbLTbR4oBTODlkk09S
19192 iQKNBz7Z139OotQjkQPxx2WO/3D5kZNUDDSRk8IJOUVabqoo45ww1tkijejt+N9fUM64kX9/GQne
19193 lQMBWdCRGs6Yyp4FFYllhIVM6aCkCFL65kGAHshEjhZa2NiGAlWzJzUK8pngaAmSKVAh/fHWX0Rf
19194 sv+oSnB01iprkIwOWKF//wzIEqBG8drrf4USS9CiYBYEy39/GCrQHzpZFWCVhOoFpZSVRkktheg1
19195 MRaoXhGLbEaM9tpEinmiNGSj4CaaipNTqKltuaPBOF+ftt6JKgpUnGUoFcIaGR6wX371X4rOjnXw
19196 R3tSYexLL+L37YgUmhjhgxSjijHGGln4rYMVoXdihr2eqiETdxhEooUUtuuevQEiayeL7eU5p3B5
19197 ZmXjsHRWlLBAWgA7ULME/rPsqxjuOC2X/tE4VrfUztuef6oCKXDSRBb8MoBc6gSalD1BDVW4E5rW
19198 osQQx+i0mgLbOd/CSWeJwtY7pvvhjLWmDWOOJc3/jHaWHDckd4TOsawxePEeuyGJ7O44opbWDukH
19199 LB8hOGFtAcI4dkNEx7g5d+6xtBBLa8s7ZbUk/XF66aBLFau+D/GntntbwdQo6bXnHmTu83FFO+6k
19200 wxm8QoAzyDrbI186UPIF/vk4in6UStA2DKaC4q4OKp98qsFmnPnsC21jM8zF3izZzB1RTRDRfrBa
19201 dMl1alSrcPgOmVeQVpYuYNRSOtf/RFDbSaaCJzop9cVJFOkPzs6mF3iVjEheo0qzmvAHpcCtXuA7
19202 iJjy5ZyE2Wwi9IpPub4ULzFlhIFP25P6DCKwzQlJVRML3EEstDFLOYdBH7qcyxQ3hUJIJkE7ORip
19203 /5CmptJcEENMQNv3bkW7mc3pcz8bl8xilKN1ka0i7HMfDMsHo42wqIdiWVqlSmSlbGHLVwTRleII
19204 tMFrccpPVnxXeGSnxH+csUk/tFJ96Aa7kuTLbWl82PnmKLn06OeHOxKTTExowoTgCD3i6UvbVqix
19205 wMlue5i80PKIuKoN0VEhCJLd2KzHnushxJSjuySFXnewP3IwkIkrH0WYpRCBkewfWnSTc1TRyvfF
19206 RwuqEtgqy3gt/hkTdXYUVl0cqEiFyE5ozlugL+GXpS32pwkdjNIqncjNWnXwYBZaEVSm+CIyQekv
19207 jYTffaDkpjqpzpOym6a8HmepKk2KcAS5J+OcV0JDAIXJioPMEZQaxJd6Kkqfe1RTNxfquWNRBFo6
19208 oV0qbvNQ6BQxjP/4TOGSpBSKUDQVEH2awHrTupKa9KQoTWl0AgIAOw==
19210 logo = PhotoImage(data=ADIlogo)
19211 ADI1 = Label(frame2r, image=logo, anchor=
"sw", compound=
"top")
19212 ADI1.pack(side=TOP)
19216 CHAsb = Spinbox(frame3, width=4, values=CHvpdiv, command=BCHAlevel)
19217 CHAsb.bind(
'<MouseWheel>', onSpinBoxScroll)
19218 CHAsb.pack(side=LEFT)
19219 CHAsb.delete(0,
"end")
19220 CHAsb.insert(0,0.5)
19222 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
19223 CHAlab.pack(side=LEFT)
19225 CHAVPosEntry = Entry(frame3, width=5)
19226 CHAVPosEntry.bind(
"<Return>", BOffsetA)
19227 CHAVPosEntry.bind(
'<MouseWheel>', onTextScroll)
19228 CHAVPosEntry.bind(
'<Key>', onTextKey)
19229 CHAVPosEntry.pack(side=LEFT)
19230 CHAVPosEntry.delete(0,
"end")
19231 CHAVPosEntry.insert(0,2.5)
19232 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
19233 CHAofflab.pack(side=LEFT)
19235 CHAIsb = Spinbox(frame3, width=4, values=CHipdiv, command=BCHAIlevel)
19236 CHAIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
19237 CHAIsb.pack(side=LEFT)
19238 CHAIsb.delete(0,
"end")
19239 CHAIsb.insert(0,50.0)
19240 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
19241 CHAIlab.pack(side=LEFT)
19243 CHAIPosEntry = Entry(frame3, width=5)
19244 CHAIPosEntry.bind(
"<Return>", BIOffsetA)
19245 CHAIPosEntry.bind(
'<MouseWheel>', onTextScroll)
19246 CHAIPosEntry.bind(
'<Key>', onTextKey)
19247 CHAIPosEntry.pack(side=LEFT)
19248 CHAIPosEntry.delete(0,
"end")
19249 CHAIPosEntry.insert(0,0.0)
19250 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
19251 CHAIofflab.pack(side=LEFT)
19253 CHBsb = Spinbox(frame3, width=4, values=CHvpdiv, command=BCHBlevel)
19254 CHBsb.bind(
'<MouseWheel>', onSpinBoxScroll)
19255 CHBsb.pack(side=LEFT)
19256 CHBsb.delete(0,
"end")
19257 CHBsb.insert(0,0.5)
19259 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
19260 CHBlab.pack(side=LEFT)
19262 CHBVPosEntry = Entry(frame3, width=5)
19263 CHBVPosEntry.bind(
"<Return>", BOffsetB)
19264 CHBVPosEntry.bind(
'<MouseWheel>', onTextScroll)
19265 CHBVPosEntry.bind(
'<Key>', onTextKey)
19266 CHBVPosEntry.pack(side=LEFT)
19267 CHBVPosEntry.delete(0,
"end")
19268 CHBVPosEntry.insert(0,2.5)
19269 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
19270 CHBofflab.pack(side=LEFT)
19272 CHBIsb = Spinbox(frame3, width=4, values=CHipdiv, command=BCHBIlevel)
19273 CHBIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
19274 CHBIsb.pack(side=LEFT)
19275 CHBIsb.delete(0,
"end")
19276 CHBIsb.insert(0,50.0)
19277 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
19278 CHBIlab.pack(side=LEFT)
19280 CHBIPosEntry = Entry(frame3, width=5)
19281 CHBIPosEntry.bind(
"<Return>", BIOffsetB)
19282 CHBIPosEntry.bind(
'<MouseWheel>', onTextScroll)
19283 CHBIPosEntry.bind(
'<Key>', onTextKey)
19284 CHBIPosEntry.pack(side=LEFT)
19285 CHBIPosEntry.delete(0,
"end")
19286 CHBIPosEntry.insert(0,0.0)
19287 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
19288 CHBIofflab.pack(side=LEFT)
19290 if ShowBallonHelp > 0:
19291 CHAlab_tip =
CreateToolTip(CHAlab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
19292 CHBlab_tip =
CreateToolTip(CHBlab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
19293 CHAIlab_tip =
CreateToolTip(CHAIlab,
'Select CHA-I vertical range/position axis to be used for markers and drawn color')
19294 CHBIlab_tip =
CreateToolTip(CHBIlab,
'Select CHB-I vertical range/position axis to be used for markers and drawn color')
19295 CHAofflab_tip =
CreateToolTip(CHAofflab,
'Set CHA-V position to DC average of signal')
19296 CHBofflab_tip =
CreateToolTip(CHBofflab,
'Set CHB-V position to DC average of signal')
19297 CHAIofflab_tip =
CreateToolTip(CHAIofflab,
'Set CHA-I position to DC average of signal')
19298 CHBIofflab_tip =
CreateToolTip(CHBIofflab,
'Set CHB-I position to DC average of signal')
19300 root.geometry(
'+300+0')
19301 root.protocol(
"WM_DELETE_WINDOW", Bcloseexit)
19303 if not numpy_found:
19305 showwarning(
"WARNING",
"Numpy not found!")
19310 BoardStatus = IntVar(0)
19324 showwarning(
"WARNING",
"Pysmu not found!")