27 from time
import gmtime, strftime
28 if sys.version_info[0] == 2:
34 from tkFileDialog
import askopenfilename
35 from tkFileDialog
import asksaveasfilename
36 from tkSimpleDialog
import askstring
37 from tkMessageBox
import *
38 if sys.version_info[0] == 3:
40 import urllib.request, urllib.error, urllib.parse
44 from tkinter.filedialog
import askopenfilename
45 from tkinter.filedialog
import asksaveasfilename
46 from tkinter.simpledialog
import askstring
59 RevDate =
"(5 Dec 2020)"
61 Version_url =
'https://github.com/analogdevicesinc/alice/releases/download/1.3.9/alice-desktop-1.3-setup.exe'
64 R0lGODlhIAAgAHAAACH5BAEAAAIALAAAAAAgACAAgQAAAP///wAAAAAAAAJJhI+py+0PYwtBWkDp
65 hTnv2XlfEobjUZZnmn4se72vJMtcbYN4ruz44uORgiodsfI4Im++2M5VW81OmBbVULxiRVrUsgsO
70 root.title(
"ALICE DeskTop " + SWRev + RevDate +
": ALM1000 Oscilloscope")
71 img = PhotoImage(data=TBicon)
72 root.call(
'wm',
'iconphoto', root._w,
'-default', img)
73 print(
"Windowing System is " + str(root.tk.call(
'tk',
'windowingsystem')))
117 MouseX = MouseY = -10
118 MouseCAV = MouseCAI = MouseCBV = MouseCBI = MouseMuxA = MouseMuxB = MouseMuxC = MouseMuxD = -10
120 COLORframes =
"#000080"
121 COLORcanvas =
"#000000"
122 COLORgrid =
"#808080"
123 COLORzeroline =
"#0000ff"
124 COLORtrace1 =
"#00ff00"
125 COLORtrace2 =
"#ff8000"
126 COLORtrace3 =
"#00ffff"
127 COLORtrace4 =
"#ffff00"
128 COLORtrace5 =
"#ff00ff"
129 COLORtrace6 =
"#C80000"
130 COLORtrace7 =
"#8080ff"
131 COLORtraceR1 =
"#008000"
132 COLORtraceR2 =
"#905000"
133 COLORtraceR3 =
"#008080"
134 COLORtraceR4 =
"#808000"
135 COLORtraceR5 =
"#800080"
136 COLORtraceR6 =
"#800000"
137 COLORtraceR7 =
"#4040a0"
138 COLORtext =
"#ffffff"
139 COLORtrigger =
"#ff0000"
140 COLORsignalband =
"#ff0000"
141 ButtonGreen =
"#00ff00"
142 ButtonRed =
"#ff0000"
145 ColorMode = IntVar(0)
148 ButtonText =
"#000000"
153 LocalLanguage =
"English"
160 BaseSampleRate = 100000
161 AWGSAMPLErate = BaseSampleRate
162 SAMPLErate = BaseSampleRate
170 MathString =
"VBuffA[t] + VBuffB[t]"
172 MathXString =
"VBuffA[t]"
174 MathYString =
"VBuffB[t]"
176 UserAString =
"MaxV1-VATop"
177 UserALabel =
"OverShoot"
178 UserBString =
"MinV2-VBBase"
179 UserBLabel =
"UnderShoot"
183 AWGAMathString =
"(VBuffA + VBuffB)/2"
184 AWGBMathString =
"(VBuffA + VBuffB)/2"
185 AWGAcsvFile =
"examplea.csv"
186 AWGBcsvFile =
"exampleb.csv"
187 AWGAwavFile =
"examplea.wav"
188 AWGBwavFile =
"exampleb.wav"
189 FFTUserWindowString =
"numpy.kaiser(SMPfft, 14) * 3"
190 DigFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
191 DigFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
192 ChaMeasString1 =
"DCV1"
193 ChaMeasString2 =
"DCI1"
194 ChaMeasString3 =
"SV1"
195 ChaMeasString4 =
"MaxV1-MinV1"
196 ChaMeasString5 =
"MaxI1-MinI1"
197 ChaMeasString6 =
"math.sqrt(SV1**2 - DCV1**2)"
198 ChbMeasString1 =
"DCV2"
199 ChbMeasString2 =
"DCI2"
200 ChbMeasString3 =
"SV2"
201 ChbMeasString4 =
"MaxV2-MinV2"
202 ChbMeasString5 =
"MaxI2-MinI2"
203 ChbMeasString6 =
"math.sqrt(SV2**2 - DCV2**2)"
204 ChaLableSrring1 =
"CHA-DCV "
205 ChaLableSrring2 =
"CHA-DCI "
206 ChaLableSrring3 =
"CHA-TRMS "
207 ChaLableSrring4 =
"CHA-VP-P "
208 ChaLableSrring5 =
"CHA-IP-P "
209 ChaLableSrring6 =
"CHA-ACRMS "
210 ChbLableSrring1 =
"CHB-DCV "
211 ChbLableSrring2 =
"CHB-DCI "
212 ChbLableSrring3 =
"CHB-TRMS "
213 ChbLableSrring4 =
"CHB-VP-P "
214 ChbLableSrring5 =
"CHB-IP-P "
215 ChbLableSrring6 =
"CHB-ACRMS "
216 LabelPlotText = IntVar(0)
217 PlotLabelText =
"Custom Plot Label"
219 GridWidth = IntVar(0)
221 TRACEwidth = IntVar(0)
223 TRACEaverage = IntVar(0)
227 LPFTrigger = IntVar(0)
228 Trigger_LPF_length = IntVar(0)
229 Trigger_LPF_length.set(10)
230 HarmonicMarkers = IntVar(0)
231 HarmonicMarkers.set(3)
232 AWGShowAdvanced = IntVar(0)
233 AWGShowAdvanced.set(0)
234 AWG_Amp_Mode = IntVar(0)
236 AWGA_Ext_Gain = DoubleVar(0)
237 AWGA_Ext_Gain.set(1.0)
238 AWGA_Ext_Offset = DoubleVar(0)
239 AWGA_Ext_Offset.set(0.0)
240 AWGB_Ext_Gain = DoubleVar(0)
241 AWGB_Ext_Gain.set(1.0)
242 AWGB_Ext_Offset = DoubleVar(0)
243 AWGB_Ext_Offset.set(0.0)
245 Two_X_Sample = IntVar(0)
247 ADC_Mux_Mode = IntVar(0)
249 Last_ADC_Mux_Mode = 0
250 Alternate_Sweep_Mode = IntVar(0)
251 Alternate_Sweep_Mode.set(0)
253 ZEROstuffing = IntVar(0)
255 FFTwindow = IntVar(0)
258 RelPhaseCorrection = 15
259 RelPhaseCenter = IntVar(0)
260 RelPhaseCenter.set(0)
261 ImpedanceCenter = IntVar(0)
262 ImpedanceCenter.set(0)
263 MultipleBoards = IntVar(0)
264 MultipleBoards.set(0)
265 IgnoreFirmwareCheck = 0
268 EnablePhaseAnalizer = 1
269 EnableSpectrumAnalizer = 1
270 EnableBodePlotter = 1
271 EnableImpedanceAnalizer = 1
274 EnableCommandInterface = 0
277 EnableMinigenMode = 0
278 EnablePmodDA1Mode = 0
280 EnableGenericSerialMode = 0
281 EnableAD5626SerialMode = 0
282 EnableDigitalFilter = 0
283 EnableMeasureScreen = 0
286 AllowFlashFirmware = 0
288 ShowTraceControls = 0
302 CHA_TC1 = DoubleVar(0)
304 CHA_TC2 = DoubleVar(0)
306 CHB_TC1 = DoubleVar(0)
308 CHB_TC2 = DoubleVar(0)
310 CHA_A1 = DoubleVar(0)
312 CHA_A2 = DoubleVar(0)
314 CHB_A1 = DoubleVar(0)
316 CHB_A2 = DoubleVar(0)
318 Auto_ETS_Comp = IntVar(0)
319 ETS_TC1 = DoubleVar(0)
321 ETS_A1 = DoubleVar(0)
323 ETS_TC2 = DoubleVar(0)
325 ETS_A2 = DoubleVar(0)
331 windowingsystem = root.tk.call(
'tk',
'windowingsystem')
332 if (root.tk.call(
'tk',
'windowingsystem')==
'aqua'):
333 Style_String =
'aqua'
335 root.createcommand(
'::tk::mac::ReopenApplication', root.deiconify)
336 root.createcommand(
'::tk::mac::Quit', root.destroy)
338 root.option_add(
'*tearOff',
False)
339 if sys.version_info[0] == 2:
340 menubar = tKinter.Menu(root)
341 appmenu = tKinter.Menu(menubar, name=
'apple')
343 menubar = tkinter.Menu(root)
344 appmenu = tkinter.Menu(menubar, name=
'apple')
347 menubar.add_cascade(menu=appmenu)
349 root[
'menu'] = menubar
354 InitFile = open(
"alice_init.ini")
355 for line
in InitFile:
357 exec( line.rstrip() )
359 print(
"Skiping " + line.rstrip())
362 print(
"No Init File Read")
365 XOLF = XOLBP = XOLXY = XOLIA = int(FontSize * 4.625)
366 XOLNqP = XOLNiC = int(FontSize * 3.125)
369 root.style.theme_use(Style_String)
371 root.style.theme_use(
'default')
373 root.tk_focusFollowsMouse()
377 if sys.version_info[0] == 2:
378 default_font = tkFont.nametofont(
"TkDefaultFont")
379 if sys.version_info[0] == 3:
380 default_font = tkinter.font.nametofont(
"TkDefaultFont")
381 default_font.configure(size=FontSize)
383 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)
385 CHipdiv = (0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
387 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)
388 ResScalediv = (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000)
389 SampRateList = (1024, 2048, 4096, 8192, 16384, 32765, 64000, 93023, 93385, 93750, 94118,
390 96385, 96774, 97166, 97561, 97959, 98361, 98765, 99174, 99585, 100000)
392 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
396 AWGAOffsetvalue = 0.0
400 AWGADutyCyclevalue = 50
403 AWGBOffsetvalue = 0.0
407 AWGBDutyCyclevalue = 50
417 MeasGateStatus = IntVar(0)
418 MeasGateStatus.set(0)
420 DCV1 = DCV2 = MinV1 = MaxV1 = MinV2 = MaxV2 = MidV1 = PPV1 = MidV2 = PPV2 = SV1 = SI1 = 0
422 DCVMuxA = MinVMuxA = MaxVMuxA = MidVMuxA = PPVMuxA = SVMuxA = 0
423 DCVMuxB = MinVMuxB = MaxVMuxB = MidVMuxB = PPVMuxB = SVMuxB = 0
424 DCVMuxC = MinVMuxC = MaxVMuxC = MidVMuxC = PPVMuxC = SVMuxC = 0
425 DCVMuxD = MinVMuxD = MaxVMuxD = MidVMuxD = PPVMuxD = SVMuxD = 0
426 PeakVA = PeakVB = PeakIA = PeakIB = 0.0
427 PeakVMA = PeakVMB = PeakVMC = PeakVMD = 0.0
428 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
429 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = 0.0
430 PeakphaseVA = PeakphaseVB = PeakphaseIA = PeakphaseIB = PeakphaseVAB = 0.0
432 DCI1 = DCI2 = MinI1 = MaxI1 = MinI2 = MaxI2 = MidI1 = PPI1 = MidI2 = PPI2 = SV2 = SI2 = 0
433 CHAperiod = CHAfreq = CHBperiod = CHBfreq = 0
435 CHAVGain = CHBVGain = 1.0
436 CHAVOffset = CHBVOffset = 0.0
438 CHAOffset = CHBOffset = CHBAOffset = CHBBOffset = CHBCOffset = CHBDOffset = 2.5
439 CHAIOffset = CHBIOffset = InOffA = InGainA = InOffB = InGainB = 0.0
441 CANVASwidth = GRW + 2 * X0L
442 CANVASheight = GRH + Y0T + (FontSize * 7)
470 DigFiltABoxCar = IntVar(0)
471 DigFiltBBoxCar = IntVar(0)
480 SampleRateStatus = IntVar(0)
481 ETSStatus = IntVar(0)
489 VmemoryA = numpy.ones(1)
490 VmemoryB = numpy.ones(1)
491 ImemoryA = numpy.ones(1)
492 ImemoryB = numpy.ones(1)
493 TRACEresetTime =
True
494 TRACEresetFreq =
True
495 AWGScreenStatus = IntVar(0)
527 ScreenTrefresh = IntVar(0)
528 ScreenXYrefresh = IntVar(0)
536 CurrentFreqX = X0LBP + 14
537 FBins = numpy.linspace(0, 50000, num=16384)
538 FStep = numpy.linspace(0, 16384, num=NSteps.get())
539 FSweepMode = IntVar(0)
540 FSweepCont = IntVar(0)
541 FStepSync = IntVar(0)
542 FSweepSync = IntVar(0)
543 ShowCA_VdB = IntVar(0)
545 ShowCB_VdB = IntVar(0)
547 ShowMarkerBP = IntVar(0)
548 ShowCA_RdB = IntVar(0)
549 ShowCA_RP = IntVar(0)
550 ShowCB_RdB = IntVar(0)
551 ShowCB_RP = IntVar(0)
552 ShowMathBP = IntVar(0)
553 ShowRMathBP = IntVar(0)
554 SingleShotSA = IntVar(0)
563 NetworkScreenStatus = IntVar(0)
564 BDSweepFile = IntVar(0)
568 MarkerNum = MarkerFreqNum = 0
571 TCursor = VCursor = 0
574 XCursor = YCursor = 0
576 ShowdBCur = IntVar(0)
577 FCursor = dBCursor = 0
578 ShowBPCur = IntVar(0)
579 ShowBdBCur = IntVar(0)
580 BPCursor = BdBCursor = 0
581 RUNstatus = IntVar(0)
586 DBdivlist = [1, 2, 3, 5, 10, 15, 20]
587 DBdivindex = IntVar(0)
591 DBdivindexBP = IntVar(0)
593 DBlevelBP = IntVar(0)
596 SpectrumScreenStatus = IntVar(0)
597 SmoothCurvesSA = IntVar(0)
598 SmoothCurvesBP = IntVar(0)
600 IAScreenStatus = IntVar(0)
601 NqPScreenStatus = IntVar(0)
603 NiCScreenStatus = IntVar(0)
605 ImpedanceMagnitude = 0.0
607 ImpedanceRseries = 0.0
608 ImpedanceXseries = 0.0
609 Show_Rseries = IntVar(0)
610 Show_Xseries = IntVar(0)
611 Show_Magnitude = IntVar(0)
612 Show_Angle = IntVar(0)
613 Show_RseriesRef = IntVar(0)
614 Show_XseriesRef = IntVar(0)
615 Show_MagnitudeRef = IntVar(0)
616 Show_AngleRef = IntVar(0)
630 DisplaySeries = IntVar(0)
631 IA_Ext_Conf = IntVar(0)
632 IASweepSaved = IntVar(0)
640 OhmStatus = IntVar(0)
641 OhmRunStatus = IntVar(0)
651 FFTmemoryA = numpy.ones(1)
652 PhaseMemoryA = numpy.ones(1)
653 FFTmemoryB = numpy.ones(1)
654 PhaseMemoryB = numpy.ones(1)
655 SMPfftpwrTwo = IntVar(0)
657 SMPfft = 2 ** SMPfftpwrTwo.get()
659 FFTwindowshape = numpy.ones(SMPfft)
671 FreqTraceMode = IntVar(0)
688 MathScreenStatus = IntVar(0)
690 XYScreenStatus = IntVar(0)
719 SDATAPort = IntVar(0)
720 SLATCHPort = IntVar(0)
724 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
725 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
726 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
727 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
728 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
729 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
730 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
731 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
732 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
733 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
734 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
735 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
736 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
737 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
738 sKDBgw8AKFzIsKFChA4jMoQoUSJFAAgHLryYUeDGgx8zhiw4EuRDkxg7ltR4UmRLki9RclQZk2VK
739 lzdh5pTJE+dMnz1/6uyYsKZHowRXHt1pcGREohUbQo2qNKlDolgFBgQAOw==
741 hipulseimg = PhotoImage(data=hipulse)
744 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
745 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
746 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
747 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
748 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
749 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
750 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
751 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
752 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
753 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
754 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
755 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
756 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
757 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
758 sKBBggASKgRwEOHChwsbDoRIkaHEBxQdWpSosGHHix8NhvSYkORGkyhBljw4kuVKkS9TwjzpkubE
759 mDVl6tR4ESPOmzYLtgTac6hAozxzqgzqkynRmhUhmoz6cCpVpD0vBgQAOw==
761 lowpulseimg = PhotoImage(data=lowpulse)
791 self.
widget.after_cancel(id)
795 x, y, cx, cy = self.
widget.bbox(
"insert")
796 x += self.
widget.winfo_rootx() + 25
797 y += self.
widget.winfo_rooty() + 20
801 self.
tw.wm_overrideredirect(
True)
802 self.
tw.wm_geometry(
"+%d+%d" % (x, y))
803 label = Label(self.
tw, text=self.
text, justify=
'left',
804 background=
"#ffffe0", foreground=
"#000000",
805 relief=
'solid', borderwidth=1,
822 global TgInput, TgEdge, ManualTrigger, SingleShot, AutoLevel, SingleShotSA
823 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
824 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
825 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
826 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
827 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
828 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
829 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
830 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
831 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
832 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
833 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
834 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
835 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
836 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
837 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
838 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase
839 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
840 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
841 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
842 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, DacScreenStatus, DigScreenStatus
843 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
844 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
845 global TimeDisp, XYDisp, FreqDisp, IADisp, XYScreenStatus, IAScreenStatus, SpectrumScreenStatus
846 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry, AWGAPhaseDelay, AWGBPhaseDelay
847 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasDelay
848 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
849 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
850 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, HozPossentry
851 global SmoothCurvesBP, bodewindow, AWG_Amp_Mode, ColorMode
852 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp
853 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP
854 global BPSweepMode, BPSweepCont, BodeScreenStatus, RevDate, SweepStepBodeEntry
855 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
856 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
857 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
858 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
859 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
860 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
861 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
862 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
863 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
864 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
865 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter, NetworkScreenStatus
866 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
867 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
868 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
869 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAcsvFile, AWGBcsvFile
870 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGAwavFile, AWGBwavFile
871 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
872 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
873 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
874 global DigFiltStatus, DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
875 global phawindow, PhAca, PhAScreenStatus, PhADisp
876 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA
877 global VScale, IScale, RefphEntry, EnableScopeOnly
878 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
879 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
883 ConfgFile = open(filename,
"w")
887 ConfgFile.write(
"root.geometry('+" + str(root.winfo_x()) +
'+' + str(root.winfo_y()) +
"')\n")
888 if EnableScopeOnly == 0:
889 ConfgFile.write(
"awgwindow.geometry('+" + str(awgwindow.winfo_x()) +
'+' + str(awgwindow.winfo_y()) +
"')\n")
890 ConfgFile.write(
'global GRW; GRW = ' + str(GRW) +
'\n')
891 ConfgFile.write(
'global GRH; GRH = ' + str(GRH) +
'\n')
892 ConfgFile.write(
'ColorMode.set(' + str(ColorMode.get()) +
')\n')
894 ConfgFile.write(
'global MathString; MathString = "' + MathString +
'"\n')
895 ConfgFile.write(
'global MathUnits; MathUnits = "' + MathUnits +
'"\n')
896 ConfgFile.write(
'global MathAxis; MathAxis = "' + MathAxis +
'"\n')
897 ConfgFile.write(
'global MathXString; MathXString = "' + MathXString +
'"\n')
898 ConfgFile.write(
'global MathXUnits; MathXUnits = "' + MathXUnits +
'"\n')
899 ConfgFile.write(
'global MathXAxis; MathXAxis = "' + MathXAxis +
'"\n')
900 ConfgFile.write(
'global MathYString; MathYString = "' + MathYString +
'"\n')
901 ConfgFile.write(
'global MathYUnits; MathYUnits = "' + MathYUnits +
'"\n')
902 ConfgFile.write(
'global MathYAxis; MathYAxis = "' + MathYAxis +
'"\n')
903 if MathScreenStatus.get() > 0:
904 ConfgFile.write(
'NewEnterMathControls()\n')
905 ConfgFile.write(
"MathWindow.geometry('+" + str(MathWindow.winfo_x()) +
'+' + str(MathWindow.winfo_y()) +
"')\n")
907 ConfgFile.write(
'DestroyMathScreen()\n')
908 if XYScreenStatus.get() > 0:
909 ConfgFile.write(
'global GRWXY; GRWXY = ' + str(GRWXY) +
'\n')
910 ConfgFile.write(
'global GRHXY; GRHXY = ' + str(GRHXY) +
'\n')
911 ConfgFile.write(
'MakeXYWindow()\n')
912 ConfgFile.write(
"xywindow.geometry('+" + str(xywindow.winfo_x()) +
'+' + str(xywindow.winfo_y()) +
"')\n")
913 ConfgFile.write(
'CHAsbxy.delete(0,END)\n')
914 ConfgFile.write(
'CHAsbxy.insert(0, ' + CHAsbxy.get() +
')\n')
915 ConfgFile.write(
'CHAIsbxy.delete(0,END)\n')
916 ConfgFile.write(
'CHAIsbxy.insert(0, ' + CHAIsbxy.get() +
')\n')
917 ConfgFile.write(
'CHAVPosEntryxy.delete(0,END)\n')
918 ConfgFile.write(
'CHAVPosEntryxy.insert(4, ' + CHAVPosEntryxy.get() +
')\n')
919 ConfgFile.write(
'CHAIPosEntryxy.delete(0,END)\n')
920 ConfgFile.write(
'CHAIPosEntryxy.insert(4, ' + CHAIPosEntryxy.get() +
')\n')
921 ConfgFile.write(
'CHBsbxy.delete(0,END)\n')
922 ConfgFile.write(
'CHBsbxy.insert(0, ' + CHBsbxy.get() +
')\n')
923 ConfgFile.write(
'CHBIsbxy.delete(0,END)\n')
924 ConfgFile.write(
'CHBIsbxy.insert(0, ' + CHBIsbxy.get() +
')\n')
925 ConfgFile.write(
'CHBVPosEntryxy.delete(0,END)\n')
926 ConfgFile.write(
'CHBVPosEntryxy.insert(4, ' + CHBVPosEntryxy.get() +
')\n')
927 ConfgFile.write(
'CHBIPosEntryxy.delete(0,END)\n')
928 ConfgFile.write(
'CHBIPosEntryxy.insert(4, ' + CHBIPosEntryxy.get() +
')\n')
930 ConfgFile.write(
'DestroyXYScreen()\n')
931 if IAScreenStatus.get() > 0:
932 ConfgFile.write(
'global GRWIA; GRWIA = ' + str(GRWIA) +
'\n')
933 ConfgFile.write(
'global GRHIA; GRHIA = ' + str(GRHIA) +
'\n')
934 ConfgFile.write(
'MakeIAWindow()\n')
935 ConfgFile.write(
"iawindow.geometry('+" + str(iawindow.winfo_x()) +
'+' + str(iawindow.winfo_y()) +
"')\n")
936 ConfgFile.write(
'IASource.set(' + str(IASource.get()) +
')\n')
937 ConfgFile.write(
'DisplaySeries.set(' + str(DisplaySeries.get()) +
')\n')
938 ConfgFile.write(
'RsystemEntry.delete(0,END)\n')
939 ConfgFile.write(
'RsystemEntry.insert(5, ' + RsystemEntry.get() +
')\n')
940 ConfgFile.write(
'ResScale.delete(0,END)\n')
941 ConfgFile.write(
'ResScale.insert(5, ' + ResScale.get() +
')\n')
942 ConfgFile.write(
'GainCorEntry.delete(0,END)\n')
943 ConfgFile.write(
'GainCorEntry.insert(5, ' + GainCorEntry.get() +
')\n')
944 ConfgFile.write(
'PhaseCorEntry.delete(0,END)\n')
945 ConfgFile.write(
'PhaseCorEntry.insert(5, ' + PhaseCorEntry.get() +
')\n')
946 ConfgFile.write(
'NetworkScreenStatus.set(' + str(NetworkScreenStatus.get()) +
')\n')
948 ConfgFile.write(
'DestroyIAScreen()\n')
949 if SpectrumScreenStatus.get() > 0:
950 ConfgFile.write(
'global GRWF; GRWF = ' + str(GRWF) +
'\n')
951 ConfgFile.write(
'global GRHF; GRHF = ' + str(GRHF) +
'\n')
952 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
953 ConfgFile.write(
'MakeSpectrumWindow()\n')
954 ConfgFile.write(
"freqwindow.geometry('+" + str(freqwindow.winfo_x()) +
'+' + str(freqwindow.winfo_y()) +
"')\n")
955 ConfgFile.write(
'ShowC1_VdB.set(' + str(ShowC1_VdB.get()) +
')\n')
956 ConfgFile.write(
'ShowC1_P.set(' + str(ShowC1_P.get()) +
')\n')
957 ConfgFile.write(
'ShowC2_VdB.set(' + str(ShowC2_VdB.get()) +
')\n')
958 ConfgFile.write(
'ShowC2_P.set(' + str(ShowC2_P.get()) +
')\n')
959 ConfgFile.write(
'StartFreqEntry.delete(0,END)\n')
960 ConfgFile.write(
'StartFreqEntry.insert(5, ' + StartFreqEntry.get() +
')\n')
961 ConfgFile.write(
'StopFreqEntry.delete(0,END)\n')
962 ConfgFile.write(
'StopFreqEntry.insert(5, ' + StopFreqEntry.get() +
')\n')
963 ConfgFile.write(
'HScale.set(' + str(HScale.get()) +
')\n')
964 ConfgFile.write(
'FreqTraceMode.set(' + str(FreqTraceMode.get()) +
')\n')
965 ConfgFile.write(
'SingleShotSA.set(' + str(SingleShotSA.get()) +
')\n')
967 ConfgFile.write(
'DestroySpectrumScreen()\n')
969 if DacScreenStatus.get() > 0:
970 ConfgFile.write(
'MakeDacScreen()\n')
971 ConfgFile.write(
"win1.geometry('+" + str(win1.winfo_x()) +
'+' + str(win1.winfo_y()) +
"')\n")
973 ConfgFile.write(
'DestroyDacScreen()\n')
974 if DigScreenStatus.get() > 0:
975 ConfgFile.write(
'MakeDigScreen()\n')
976 ConfgFile.write(
"win2.geometry('+" + str(win2.winfo_x()) +
'+' + str(win2.winfo_y()) +
"')\n")
978 ConfgFile.write(
'DestroyDigScreen()\n')
979 if EnableHSsampling > 0:
980 ConfgFile.write(
'FminEntry.delete(0,"end")\n')
981 ConfgFile.write(
'FminEntry.insert(0, ' + FminEntry.get() +
')\n')
982 ConfgFile.write(
'HtMulEntry.delete(0,"end")\n')
983 ConfgFile.write(
'HtMulEntry.insert(0, ' + HtMulEntry.get() +
')\n')
984 ConfgFile.write(
'Auto_ETS_Comp.set(' + str(Auto_ETS_Comp.get()) +
')\n')
986 ConfgFile.write(
'ets_TC1Entry.delete(0,"end")\n')
987 ConfgFile.write(
'ets_TC1Entry.insert(0, ' + ets_TC1Entry.get() +
')\n')
988 ConfgFile.write(
'ETS_TC1.set(' + ets_TC1Entry.get() +
')\n')
989 ConfgFile.write(
'ets_A1Entry.delete(0,"end")\n')
990 ConfgFile.write(
'ets_A1Entry.insert(0, ' + ets_A1Entry.get() +
')\n')
991 ConfgFile.write(
'ETS_A1.set(' + ets_A1Entry.get() +
')\n')
992 ConfgFile.write(
'ets_TC2Entry.delete(0,"end")\n')
993 ConfgFile.write(
'ets_TC2Entry.insert(0, ' + ets_TC2Entry.get() +
')\n')
994 ConfgFile.write(
'ETS_TC2.set(' + ets_TC2Entry.get() +
')\n')
995 ConfgFile.write(
'ets_A2Entry.delete(0,"end")\n')
996 ConfgFile.write(
'ets_A2Entry.insert(0, ' + ets_A2Entry.get() +
')\n')
997 ConfgFile.write(
'ETS_A2.set(' + ets_A2Entry.get() +
')\n')
999 ConfgFile.write(
'ETS_TC1.set(' + str(ETS_TC1.get()) +
')\n')
1000 ConfgFile.write(
'ETS_A1.set(' + str(ETS_A1.get()) +
')\n')
1001 ConfgFile.write(
'ETS_TC2.set(' + str(ETS_TC2.get()) +
')\n')
1002 ConfgFile.write(
'ETS_A2.set(' + str(ETS_A2.get()) +
')\n')
1003 if DigFiltStatus.get() == 1:
1004 ConfgFile.write(
'MakeDigFiltWindow()\n')
1005 ConfgFile.write(
'DigFiltABoxCar.set(' + str(DigFiltABoxCar.get()) +
')\n')
1006 ConfgFile.write(
'DigFiltBBoxCar.set(' + str(DigFiltBBoxCar.get()) +
')\n')
1007 ConfgFile.write(
'BCALenEntry.delete(0,"end")\n')
1008 ConfgFile.write(
'BCALenEntry.insert(0, ' + BCALenEntry.get() +
')\n')
1009 ConfgFile.write(
'BCBLenEntry.delete(0,"end")\n')
1010 ConfgFile.write(
'BCBLenEntry.insert(0, ' + BCBLenEntry.get() +
')\n')
1011 ConfgFile.write(
'BuildBoxCarA()\n')
1012 ConfgFile.write(
'BuildBoxCarB()\n')
1014 ConfgFile.write(
'DestroyDigFiltScreen()\n')
1015 if MinigenScreenStatus.get() == 1:
1016 ConfgFile.write(
'MakeMinigenWindow()\n')
1017 ConfgFile.write(
"minigenwindow.geometry('+" + str(minigenwindow.winfo_x()) +
'+' + str(minigenwindow.winfo_y()) +
"')\n")
1018 ConfgFile.write(
'MinigenMode.set(' + str(MinigenMode.get()) +
')\n')
1019 ConfgFile.write(
'MinigenFout.delete(0,END)\n')
1020 ConfgFile.write(
'MinigenFout.insert(4, ' + MinigenFout.get() +
')\n')
1021 ConfgFile.write(
'MinigenFclk.delete(0,END)\n')
1022 ConfgFile.write(
'MinigenFclk.insert(4, ' + MinigenFclk.get() +
')\n')
1023 ConfgFile.write(
'SCLKPort.set(' + str(SCLKPort.get()) +
')\n')
1024 ConfgFile.write(
'SDATAPort.set(' + str(SDATAPort.get()) +
')\n')
1025 ConfgFile.write(
'SLATCHPort.set(' + str(SLATCHPort.get()) +
')\n')
1027 ConfgFile.write(
'DestroyMinigenScreen()\n')
1028 if MuxScreenStatus.get() == 1:
1029 ConfgFile.write(
'MakeMuxModeWindow()\n')
1030 ConfgFile.write(
"muxwindow.geometry('+" + str(muxwindow.winfo_x()) +
'+' + str(muxwindow.winfo_y()) +
"')\n")
1031 ConfgFile.write(
'Show_CBA.set(' + str(Show_CBA.get()) +
')\n')
1032 ConfgFile.write(
'Show_CBB.set(' + str(Show_CBB.get()) +
')\n')
1033 ConfgFile.write(
'Show_CBC.set(' + str(Show_CBC.get()) +
')\n')
1034 ConfgFile.write(
'Show_CBD.set(' + str(Show_CBD.get()) +
')\n')
1035 ConfgFile.write(
'MuxEnb.set(' + str(MuxEnb.get()) +
')\n')
1036 ConfgFile.write(
'CHB_Asb.delete(0,END)\n')
1037 ConfgFile.write(
'CHB_Asb.insert(0, ' + CHB_Asb.get() +
')\n')
1038 ConfgFile.write(
'CHB_Bsb.delete(0,END)\n')
1039 ConfgFile.write(
'CHB_Bsb.insert(0, ' + CHB_Bsb.get() +
')\n')
1040 ConfgFile.write(
'CHB_Csb.delete(0,END)\n')
1041 ConfgFile.write(
'CHB_Csb.insert(0, ' + CHB_Csb.get() +
')\n')
1042 ConfgFile.write(
'CHB_Dsb.delete(0,END)\n')
1043 ConfgFile.write(
'CHB_Dsb.insert(0, ' + CHB_Dsb.get() +
')\n')
1044 ConfgFile.write(
'CHB_APosEntry.delete(0,END)\n')
1045 ConfgFile.write(
'CHB_APosEntry.insert(4, ' + CHB_APosEntry.get() +
')\n')
1046 ConfgFile.write(
'CHB_BPosEntry.delete(0,END)\n')
1047 ConfgFile.write(
'CHB_BPosEntry.insert(4, ' + CHB_BPosEntry.get() +
')\n')
1048 ConfgFile.write(
'CHB_CPosEntry.delete(0,END)\n')
1049 ConfgFile.write(
'CHB_CPosEntry.insert(4, ' + CHB_CPosEntry.get() +
')\n')
1050 ConfgFile.write(
'CHB_DPosEntry.delete(0,END)\n')
1051 ConfgFile.write(
'CHB_DPosEntry.insert(4, ' + CHB_DPosEntry.get() +
')\n')
1053 ConfgFile.write(
'DestroyMuxScreen()\n')
1055 if PhAScreenStatus.get() > 0:
1056 ConfgFile.write(
'global GRWPhA; GRWPhA = ' + str(GRWPhA) +
'\n')
1057 ConfgFile.write(
'global GRHPhA; GRHPhA = ' + str(GRHPhA) +
'\n')
1058 ConfgFile.write(
'MakePhAWindow()\n')
1059 ConfgFile.write(
"phawindow.geometry('+" + str(phawindow.winfo_x()) +
'+' + str(phawindow.winfo_y()) +
"')\n")
1060 ConfgFile.write(
'VScale.delete(0,END)\n')
1061 ConfgFile.write(
'VScale.insert(0, ' + str(VScale.get()) +
')\n')
1062 ConfgFile.write(
'IScale.delete(0,END)\n')
1063 ConfgFile.write(
'IScale.insert(0, ' + str(IScale.get()) +
')\n')
1064 ConfgFile.write(
'RefphEntry.delete(0,END)\n')
1065 ConfgFile.write(
'RefphEntry.insert(0, "' + str(RefphEntry.get()) +
'")\n')
1066 if vat_btn.config(
'text')[-1] ==
'OFF':
1067 ConfgFile.write(
'vat_btn.config(text="OFF", style="Stop.TButton")\n')
1069 ConfgFile.write(
'vat_btn.config(text="ON", style="Run.TButton")\n')
1070 if MuxScreenStatus.get() == 0:
1071 if vbt_btn.config(
'text')[-1] ==
'OFF':
1072 ConfgFile.write(
'vbt_btn.config(text="OFF", style="Stop.TButton")\n')
1074 ConfgFile.write(
'vbt_btn.config(text="ON", style="Run.TButton")\n')
1075 if vabt_btn.config(
'text')[-1] ==
'OFF':
1076 ConfgFile.write(
'vabt_btn.config(text="OFF", style="Stop.TButton")\n')
1078 ConfgFile.write(
'vabt_btn.config(text="ON", style="Run.TButton")\n')
1080 ConfgFile.write(
'ShowPB_A.set(' + str(ShowPB_A.get()) +
')\n')
1081 ConfgFile.write(
'ShowPB_B.set(' + str(ShowPB_B.get()) +
')\n')
1082 ConfgFile.write(
'ShowPB_C.set(' + str(ShowPB_C.get()) +
')\n')
1083 ConfgFile.write(
'ShowPB_D.set(' + str(ShowPB_D.get()) +
')\n')
1084 if iat_btn.config(
'text')[-1] ==
'OFF':
1085 ConfgFile.write(
'iat_btn.config(text="OFF", style="Stop.TButton")\n')
1087 ConfgFile.write(
'iat_btn.config(text="ON", style="Run.TButton")\n')
1088 if ibt_btn.config(
'text')[-1] ==
'OFF':
1089 ConfgFile.write(
'ibt_btn.config(text="OFF", style="Stop.TButton")\n')
1091 ConfgFile.write(
'ibt_btn.config(text="ON", style="Run.TButton")\n')
1094 ConfgFile.write(
'DestroyPhAScreen()\n')
1095 if BodeScreenStatus.get() == 1:
1096 ConfgFile.write(
'global GRWBP; GRWBP = ' + str(GRWBP) +
'\n')
1097 ConfgFile.write(
'global GRHBP; GRHBP = ' + str(GRHBP) +
'\n')
1098 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1099 ConfgFile.write(
'ImpedanceCenter.set(' + str(ImpedanceCenter.get()) +
')\n')
1100 ConfgFile.write(
'MakeBodeWindow()\n')
1101 ConfgFile.write(
"bodewindow.geometry('+" + str(bodewindow.winfo_x()) +
'+' + str(bodewindow.winfo_y()) +
"')\n")
1102 ConfgFile.write(
'ShowCA_VdB.set(' + str(ShowCA_VdB.get()) +
')\n')
1103 ConfgFile.write(
'ShowCB_VdB.set(' + str(ShowCB_VdB.get()) +
')\n')
1104 ConfgFile.write(
'ShowCA_P.set(' + str(ShowCA_P.get()) +
')\n')
1105 ConfgFile.write(
'ShowCB_P.set(' + str(ShowCB_P.get()) +
')\n')
1106 ConfgFile.write(
'ShowCA_RdB.set(' + str(ShowCA_RdB.get()) +
')\n')
1107 ConfgFile.write(
'ShowCA_RP.set(' + str(ShowCA_RP.get()) +
')\n')
1108 ConfgFile.write(
'ShowCB_RdB.set(' + str(ShowCB_RdB.get()) +
')\n')
1109 ConfgFile.write(
'ShowCB_RP.set(' + str(ShowCB_RP.get()) +
')\n')
1110 ConfgFile.write(
'BodeDisp.set(' + str(BodeDisp.get()) +
')\n')
1111 ConfgFile.write(
'ShowMarkerBP.set(' + str(ShowMarkerBP.get()) +
')\n')
1112 ConfgFile.write(
'ShowMathBP.set(' + str(ShowMathBP.get()) +
')\n')
1113 ConfgFile.write(
'ShowRMathBP.set(' + str(ShowRMathBP.get()) +
')\n')
1114 ConfgFile.write(
'HScaleBP.set(' + str(HScaleBP.get()) +
')\n')
1115 ConfgFile.write(
'NSteps.set(' + str(NSteps.get()) +
')\n')
1116 ConfgFile.write(
'DBdivindexBP.set(' + str(DBdivindexBP.get()) +
')\n')
1117 ConfgFile.write(
'DBlevelBP.set(' + str(DBlevelBP.get()) +
')\n')
1118 ConfgFile.write(
'FSweepMode.set(' + str(FSweepMode.get()) +
')\n')
1119 ConfgFile.write(
'SweepStepBodeEntry.delete(0,END)\n')
1120 ConfgFile.write(
'SweepStepBodeEntry.insert(4, ' + SweepStepBodeEntry.get() +
')\n')
1121 ConfgFile.write(
'StopBodeEntry.delete(0,END)\n')
1122 ConfgFile.write(
'StopBodeEntry.insert(4, ' + StopBodeEntry.get() +
')\n')
1123 ConfgFile.write(
'StartBodeEntry.delete(0,END)\n')
1124 ConfgFile.write(
'StartBodeEntry.insert(4, ' + StartBodeEntry.get() +
')\n')
1125 ConfgFile.write(
'Show_Rseries.set(' + str(Show_Rseries.get()) +
')\n')
1126 ConfgFile.write(
'Show_Xseries.set(' + str(Show_Xseries.get()) +
')\n')
1127 ConfgFile.write(
'Show_Magnitude.set(' + str(Show_Magnitude.get()) +
')\n')
1128 ConfgFile.write(
'Show_Angle.set(' + str(Show_Angle.get()) +
')\n')
1130 ConfgFile.write(
'DestroyBodeScreen()\n')
1131 if MeasureStatus.get() == 1:
1133 ConfgFile.write(
'global ChaLableSrring1; ChaLableSrring1 = "' + ChaLableSrring1 +
'"\n')
1134 ConfgFile.write(
'global ChaLableSrring2; ChaLableSrring2 = "' + ChaLableSrring2 +
'"\n')
1135 ConfgFile.write(
'global ChaLableSrring3; ChaLableSrring3 = "' + ChaLableSrring3 +
'"\n')
1136 ConfgFile.write(
'global ChaLableSrring4; ChaLableSrring4 = "' + ChaLableSrring4 +
'"\n')
1137 ConfgFile.write(
'global ChaLableSrring5; ChaLableSrring5 = "' + ChaLableSrring5 +
'"\n')
1138 ConfgFile.write(
'global ChaLableSrring6; ChaLableSrring6 = "' + ChaLableSrring6 +
'"\n')
1139 ConfgFile.write(
'global ChbLableSrring1; ChbLableSrring1 = "' + ChbLableSrring1 +
'"\n')
1140 ConfgFile.write(
'global ChbLableSrring2; ChbLableSrring2 = "' + ChbLableSrring2 +
'"\n')
1141 ConfgFile.write(
'global ChbLableSrring3; ChbLableSrring3 = "' + ChbLableSrring3 +
'"\n')
1142 ConfgFile.write(
'global ChbLableSrring4; ChbLableSrring4 = "' + ChbLableSrring4 +
'"\n')
1143 ConfgFile.write(
'global ChbLableSrring5; ChbLableSrring5 = "' + ChbLableSrring5 +
'"\n')
1144 ConfgFile.write(
'global ChbLableSrring6; ChbLableSrring6 = "' + ChbLableSrring6 +
'"\n')
1145 ConfgFile.write(
'global ChaMeasString1; ChaMeasString1 = "' + ChaMeasString1 +
'"\n')
1146 ConfgFile.write(
'global ChaMeasString2; ChaMeasString2 = "' + ChaMeasString2 +
'"\n')
1147 ConfgFile.write(
'global ChaMeasString3; ChaMeasString3 = "' + ChaMeasString3 +
'"\n')
1148 ConfgFile.write(
'global ChaMeasString4; ChaMeasString4 = "' + ChaMeasString4 +
'"\n')
1149 ConfgFile.write(
'global ChaMeasString5; ChaMeasString5 = "' + ChaMeasString5 +
'"\n')
1150 ConfgFile.write(
'global ChaMeasString6; ChaMeasString6 = "' + ChaMeasString6 +
'"\n')
1151 ConfgFile.write(
'global ChbMeasString1; ChbMeasString1 = "' + ChbMeasString1 +
'"\n')
1152 ConfgFile.write(
'global ChbMeasString2; ChbMeasString2 = "' + ChbMeasString2 +
'"\n')
1153 ConfgFile.write(
'global ChbMeasString3; ChbMeasString3 = "' + ChbMeasString3 +
'"\n')
1154 ConfgFile.write(
'global ChbMeasString4; ChbMeasString4 = "' + ChbMeasString4 +
'"\n')
1155 ConfgFile.write(
'global ChbMeasString5; ChbMeasString5 = "' + ChbMeasString5 +
'"\n')
1156 ConfgFile.write(
'global ChbMeasString6; ChbMeasString6 = "' + ChbMeasString6 +
'"\n')
1157 ConfgFile.write(
'MakeMeasureScreen()\n')
1158 ConfgFile.write(
"measurewindow.geometry('+" + str(measurewindow.winfo_x()) +
'+' + str(measurewindow.winfo_y()) +
"')\n")
1160 ConfgFile.write(
'DestroyMeasuewScreen()\n')
1161 if ETSStatus.get() == 1:
1162 ConfgFile.write(
'MakeETSWindow()\n')
1163 ConfgFile.write(
"etswindow.geometry('+" + str(etswindow.winfo_x()) +
'+' + str(etswindow.winfo_y()) +
"')\n")
1164 ConfgFile.write(
'ETSDisp.set(' + str(ETSDisp.get()) +
')\n')
1165 ConfgFile.write(
'ETSDir.set(' + str(ETSDir.get()) +
')\n')
1166 ConfgFile.write(
'FMulXEntry.delete(0,END)\n')
1167 ConfgFile.write(
'FMulXEntry.insert(6, ' + FMulXEntry.get() +
')\n')
1168 ConfgFile.write(
'DivXEntry.delete(0,END)\n')
1169 ConfgFile.write(
'DivXEntry.insert(4, ' + DivXEntry.get() +
')\n')
1170 ConfgFile.write(
'ETSts.delete(0,END)\n')
1171 ConfgFile.write(
'ETSts.insert(4, ' + ETSts.get() +
')\n')
1173 ConfgFile.write(
'DestroyETSScreen()\n')
1175 ConfgFile.write(
'TRIGGERentry.delete(0,END)\n')
1176 ConfgFile.write(
'TRIGGERentry.insert(4, ' + TRIGGERentry.get() +
')\n')
1177 ConfgFile.write(
'HoldOffentry.delete(0,"end")\n')
1178 ConfgFile.write(
'HoldOffentry.insert(0, ' + HoldOffentry.get() +
')\n')
1179 ConfgFile.write(
'HozPossentry.delete(0,"end")\n')
1180 ConfgFile.write(
'HozPossentry.insert(0, ' + HozPossentry.get() +
')\n')
1181 ConfgFile.write(
'TMsb.delete(0,END)\n')
1182 ConfgFile.write(
'TMsb.insert(0, ' + TMsb.get() +
')\n')
1183 ConfgFile.write(
'TgInput.set(' + str(TgInput.get()) +
')\n')
1184 ConfgFile.write(
'AutoLevel.set(' + str(AutoLevel.get()) +
')\n')
1185 ConfgFile.write(
'ManualTrigger.set(' + str(ManualTrigger.get()) +
')\n')
1186 ConfgFile.write(
'SingleShot.set(' + str(SingleShot.get()) +
')\n')
1187 ConfgFile.write(
'TgEdge.set(' + str(TgEdge.get()) +
')\n')
1188 ConfgFile.write(
'Xsignal.set(' + str(Xsignal.get()) +
')\n')
1189 ConfgFile.write(
'Ysignal.set(' + str(Ysignal.get()) +
')\n')
1191 ConfgFile.write(
'TimeDisp.set(' + str(TimeDisp.get()) +
')\n')
1192 ConfgFile.write(
'XYDisp.set(' + str(XYDisp.get()) +
')\n')
1193 ConfgFile.write(
'FreqDisp.set(' + str(FreqDisp.get()) +
')\n')
1194 ConfgFile.write(
'IADisp.set(' + str(IADisp.get()) +
')\n')
1195 ConfgFile.write(
'ShowC1_V.set(' + str(ShowC1_V.get()) +
')\n')
1196 ConfgFile.write(
'ShowC1_I.set(' + str(ShowC1_I.get()) +
')\n')
1197 ConfgFile.write(
'ShowC2_V.set(' + str(ShowC2_V.get()) +
')\n')
1198 ConfgFile.write(
'ShowC2_I.set(' + str(ShowC2_I.get()) +
')\n')
1199 ConfgFile.write(
'Show_MathX.set(' + str(Show_MathX.get()) +
')\n')
1200 ConfgFile.write(
'Show_MathY.set(' + str(Show_MathY.get()) +
')\n')
1201 ConfgFile.write(
'AutoCenterA.set(' + str(AutoCenterA.get()) +
')\n')
1202 ConfgFile.write(
'AutoCenterB.set(' + str(AutoCenterB.get()) +
')\n')
1203 ConfgFile.write(
'TRACEmodeTime.set(' + str(TRACEmodeTime.get()) +
')\n')
1205 ConfgFile.write(
'CHAVPosEntry.delete(0,END)\n')
1206 ConfgFile.write(
'CHAVPosEntry.insert(4, ' + CHAVPosEntry.get() +
')\n')
1207 ConfgFile.write(
'CHAIPosEntry.delete(0,END)\n')
1208 ConfgFile.write(
'CHAIPosEntry.insert(4, ' + CHAIPosEntry.get() +
')\n')
1209 ConfgFile.write(
'CHAsb.delete(0,END)\n')
1210 ConfgFile.write(
'CHAsb.insert(0, ' + CHAsb.get() +
')\n')
1211 ConfgFile.write(
'CHAIsb.delete(0,END)\n')
1212 ConfgFile.write(
'CHAIsb.insert(0, ' + CHAIsb.get() +
')\n')
1214 ConfgFile.write(
'CHBVPosEntry.delete(0,END)\n')
1215 ConfgFile.write(
'CHBVPosEntry.insert(4, ' + CHBVPosEntry.get() +
')\n')
1216 ConfgFile.write(
'CHBIPosEntry.delete(0,END)\n')
1217 ConfgFile.write(
'CHBIPosEntry.insert(4, ' + CHBIPosEntry.get() +
')\n')
1218 ConfgFile.write(
'CHBsb.delete(0,END)\n')
1219 ConfgFile.write(
'CHBsb.insert(0, ' + CHBsb.get() +
')\n')
1220 ConfgFile.write(
'CHBIsb.delete(0,END)\n')
1221 ConfgFile.write(
'CHBIsb.insert(0, ' + CHBIsb.get() +
')\n')
1223 ConfgFile.write(
'AWG_Amp_Mode.set('+ str(AWG_Amp_Mode.get()) +
')\n')
1224 ConfgFile.write(
'AWGAMode.set('+ str(AWGAMode.get()) +
')\n')
1225 ConfgFile.write(
'AWGAIOMode.set('+ str(AWGAIOMode.get()) +
')\n')
1226 ConfgFile.write(
'AWGATerm.set('+ str(AWGATerm.get()) +
')\n')
1227 ConfgFile.write(
'AWGAPhaseDelay.set('+ str(AWGAPhaseDelay.get()) +
')\n')
1228 ConfgFile.write(
'AWGAAmplEntry.delete(0,END)\n')
1229 ConfgFile.write(
'AWGAAmplEntry.insert(4, ' + AWGAAmplEntry.get() +
')\n')
1230 ConfgFile.write(
'AWGAOffsetEntry.delete(0,END)\n')
1231 ConfgFile.write(
'AWGAOffsetEntry.insert(4, ' + AWGAOffsetEntry.get() +
')\n')
1232 ConfgFile.write(
'AWGAFreqEntry.delete(0,END)\n')
1233 ConfgFile.write(
'AWGAFreqEntry.insert(4, ' + AWGAFreqEntry.get() +
')\n')
1234 ConfgFile.write(
'AWGAPhaseEntry.delete(0,END)\n')
1235 ConfgFile.write(
'AWGAPhaseEntry.insert(4, ' + AWGAPhaseEntry.get() +
')\n')
1236 ConfgFile.write(
'AWGADutyCycleEntry.delete(0,END)\n')
1237 ConfgFile.write(
'AWGADutyCycleEntry.insert(4, ' + AWGADutyCycleEntry.get() +
')\n')
1238 ConfgFile.write(
'AWGAShape.set(' + str(AWGAShape.get()) +
')\n')
1239 ConfgFile.write(
'AWGARepeatFlag.set(' + str(AWGARepeatFlag.get()) +
')\n')
1240 ConfgFile.write(
'AWGABurstFlag.set(' + str(AWGABurstFlag.get()) +
')\n')
1241 ConfgFile.write(
'global AWGACycles; AWGACycles = ' + str(AWGACycles) +
'\n')
1242 ConfgFile.write(
'global AWGABurstDelay; AWGABurstDelay = ' + str(AWGABurstDelay) +
'\n')
1244 ConfgFile.write(
'AWGBMode.set('+ str(AWGBMode.get()) +
')\n')
1245 ConfgFile.write(
'AWGBIOMode.set('+ str(AWGBIOMode.get()) +
')\n')
1246 ConfgFile.write(
'AWGBTerm.set('+ str(AWGBTerm.get()) +
')\n')
1247 ConfgFile.write(
'AWGBPhaseDelay.set('+ str(AWGBPhaseDelay.get()) +
')\n')
1248 ConfgFile.write(
'AWGBAmplEntry.delete(0,END)\n')
1249 ConfgFile.write(
'AWGBAmplEntry.insert(4, ' + AWGBAmplEntry.get() +
')\n')
1250 ConfgFile.write(
'AWGBOffsetEntry.delete(0,END)\n')
1251 ConfgFile.write(
'AWGBOffsetEntry.insert(4, ' + AWGBOffsetEntry.get() +
')\n')
1252 ConfgFile.write(
'AWGBFreqEntry.delete(0,END)\n')
1253 ConfgFile.write(
'AWGBFreqEntry.insert(4, ' + AWGBFreqEntry.get() +
')\n')
1254 ConfgFile.write(
'AWGBPhaseEntry.delete(0,END)\n')
1255 ConfgFile.write(
'AWGBPhaseEntry.insert(4, ' + AWGBPhaseEntry.get() +
')\n')
1256 ConfgFile.write(
'AWGBDutyCycleEntry.delete(0,END)\n')
1257 ConfgFile.write(
'AWGBDutyCycleEntry.insert(4, ' + AWGBDutyCycleEntry.get() +
')\n')
1258 ConfgFile.write(
'AWGBShape.set(' + str(AWGBShape.get()) +
')\n')
1259 ConfgFile.write(
'AWGBRepeatFlag.set(' + str(AWGBRepeatFlag.get()) +
')\n')
1260 ConfgFile.write(
'AWGBBurstFlag.set(' + str(AWGBBurstFlag.get()) +
')\n')
1261 ConfgFile.write(
'global AWGBCycles; AWGBCycles = ' + str(AWGBCycles) +
'\n')
1262 ConfgFile.write(
'global AWGBBurstDelay; AWGBBurstDelay = ' + str(AWGBBurstDelay) +
'\n')
1264 ConfgFile.write(
'AWGSync.set(' + str(AWGSync.get()) +
')\n')
1265 ConfgFile.write(
'global AWGAMathString; AWGAMathString = "' + AWGAMathString +
'"\n')
1266 ConfgFile.write(
'global AWGBMathString; AWGBMathString = "' + AWGBMathString +
'"\n')
1267 ConfgFile.write(
'global AWGAcsvFile; AWGAcsvFile = "' + AWGAcsvFile +
'"\n')
1268 ConfgFile.write(
'global AWGBcsvFile; AWGBcsvFile = "' + AWGBcsvFile +
'"\n')
1269 ConfgFile.write(
'global AWGAwavFile; AWGAwavFile = "' + AWGAwavFile +
'"\n')
1270 ConfgFile.write(
'global AWGBwavFile; AWGBwavFile = "' + AWGBwavFile +
'"\n')
1272 ConfgFile.write(
'CHAVGainEntry.delete(0,END)\n')
1273 ConfgFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1274 ConfgFile.write(
'CHBVGainEntry.delete(0,END)\n')
1275 ConfgFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1276 ConfgFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1277 ConfgFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1278 ConfgFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1279 ConfgFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1281 ConfgFile.write(
'MeasDCV1.set(' + str(MeasDCV1.get()) +
')\n')
1282 ConfgFile.write(
'MeasMinV1.set(' + str(MeasMinV1.get()) +
')\n')
1283 ConfgFile.write(
'MeasMaxV1.set(' + str(MeasMaxV1.get()) +
')\n')
1284 ConfgFile.write(
'MeasBaseV1.set(' + str(MeasBaseV1.get()) +
')\n')
1285 ConfgFile.write(
'MeasTopV1.set(' + str(MeasTopV1.get()) +
')\n')
1286 ConfgFile.write(
'MeasMidV1.set(' + str(MeasMidV1.get()) +
')\n')
1287 ConfgFile.write(
'MeasPPV1.set(' + str(MeasPPV1.get()) +
')\n')
1288 ConfgFile.write(
'MeasRMSV1.set(' + str(MeasRMSV1.get()) +
')\n')
1289 ConfgFile.write(
'MeasDCI1.set(' + str(MeasDCI1.get()) +
')\n')
1290 ConfgFile.write(
'MeasMinI1.set(' + str(MeasMinI1.get()) +
')\n')
1291 ConfgFile.write(
'MeasMaxI1.set(' + str(MeasMaxI1.get()) +
')\n')
1292 ConfgFile.write(
'MeasMidI1.set(' + str(MeasMidI1.get()) +
')\n')
1293 ConfgFile.write(
'MeasPPI1.set(' + str(MeasPPI1.get()) +
')\n')
1294 ConfgFile.write(
'MeasRMSI1.set(' + str(MeasRMSI1.get()) +
')\n')
1295 ConfgFile.write(
'MeasDiffAB.set(' + str(MeasDiffAB.get()) +
')\n')
1296 ConfgFile.write(
'MeasDCV2.set(' + str(MeasDCV2.get()) +
')\n')
1297 ConfgFile.write(
'MeasMinV2.set(' + str(MeasMinV2.get()) +
')\n')
1298 ConfgFile.write(
'MeasMaxV2.set(' + str(MeasMaxV2.get()) +
')\n')
1299 ConfgFile.write(
'MeasBaseV2.set(' + str(MeasBaseV2.get()) +
')\n')
1300 ConfgFile.write(
'MeasTopV2.set(' + str(MeasTopV2.get()) +
')\n')
1301 ConfgFile.write(
'MeasMidV2.set(' + str(MeasMidV2.get()) +
')\n')
1302 ConfgFile.write(
'MeasPPV2.set(' + str(MeasPPV2.get()) +
')\n')
1303 ConfgFile.write(
'MeasRMSV2.set(' + str(MeasRMSV2.get()) +
')\n')
1304 ConfgFile.write(
'MeasDCI2.set(' + str(MeasDCI2.get()) +
')\n')
1305 ConfgFile.write(
'MeasMinI2.set(' + str(MeasMinI2.get()) +
')\n')
1306 ConfgFile.write(
'MeasMaxI2.set(' + str(MeasMaxI2.get()) +
')\n')
1307 ConfgFile.write(
'MeasMidI2.set(' + str(MeasMidI2.get()) +
')\n')
1308 ConfgFile.write(
'MeasPPI2.set(' + str(MeasPPI2.get()) +
')\n')
1309 ConfgFile.write(
'MeasRMSI2.set(' + str(MeasRMSI2.get()) +
')\n')
1310 ConfgFile.write(
'MeasDiffBA.set(' + str(MeasDiffBA.get()) +
')\n')
1312 ConfgFile.write(
'MeasAHW.set(' + str(MeasAHW.get()) +
')\n')
1313 ConfgFile.write(
'MeasALW.set(' + str(MeasALW.get()) +
')\n')
1314 ConfgFile.write(
'MeasADCy.set(' + str(MeasADCy.get()) +
')\n')
1315 ConfgFile.write(
'MeasAPER.set(' + str(MeasAPER.get()) +
')\n')
1316 ConfgFile.write(
'MeasAFREQ.set(' + str(MeasAFREQ.get()) +
')\n')
1317 ConfgFile.write(
'MeasBHW.set(' + str(MeasBHW.get()) +
')\n')
1318 ConfgFile.write(
'MeasBLW.set(' + str(MeasBLW.get()) +
')\n')
1319 ConfgFile.write(
'MeasBDCy.set(' + str(MeasBDCy.get()) +
')\n')
1320 ConfgFile.write(
'MeasBPER.set(' + str(MeasBPER.get()) +
')\n')
1321 ConfgFile.write(
'MeasBFREQ.set(' + str(MeasBFREQ.get()) +
')\n')
1322 ConfgFile.write(
'MeasPhase.set(' + str(MeasPhase.get()) +
')\n')
1323 ConfgFile.write(
'MeasDelay.set(' + str(MeasDelay.get()) +
')\n')
1325 ConfgFile.write(
'MathTrace.set(' + str(MathTrace.get()) +
')\n')
1327 ConfgFile.write(
'CHAIGainEntry.delete(0,END)\n')
1328 ConfgFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1329 ConfgFile.write(
'CHBIGainEntry.delete(0,END)\n')
1330 ConfgFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1331 ConfgFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1332 ConfgFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1333 ConfgFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1334 ConfgFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1336 ConfgFile.write(
'global UserAString; UserAString = "' + UserAString +
'"\n')
1337 ConfgFile.write(
'global UserALabel; UserALabel = "' + UserALabel +
'"\n')
1338 ConfgFile.write(
'global UserBString; UserBString = "' + UserBString +
'"\n')
1339 ConfgFile.write(
'global UserBLabel; UserBLabel = "' + UserBLabel +
'"\n')
1340 ConfgFile.write(
'global FFTUserWindowString; FFTUserWindowString= "' + FFTUserWindowString +
'"\n')
1341 ConfgFile.write(
'global DigFilterAString; DigFilterAString = "' + DigFilterAString +
'"\n')
1342 ConfgFile.write(
'global DigFilterBString; DigFilterBString = "' + DigFilterBString +
'"\n')
1345 CHA_TC1.set(float(cha_TC1Entry.get()))
1346 CHA_TC2.set(float(cha_TC2Entry.get()))
1347 CHB_TC1.set(float(chb_TC1Entry.get()))
1348 CHB_TC2.set(float(chb_TC2Entry.get()))
1349 CHA_A1.set(float(cha_A1Entry.get()))
1350 CHA_A2.set(float(cha_A2Entry.get()))
1351 CHB_A1.set(float(chb_A1Entry.get()))
1352 CHB_A2.set(float(chb_A2Entry.get()))
1355 ConfgFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1356 ConfgFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1357 ConfgFile.write(
'CHAI_RC_HP.set(' + str(CHAI_RC_HP.get()) +
')\n')
1358 ConfgFile.write(
'CHBI_RC_HP.set(' + str(CHBI_RC_HP.get()) +
')\n')
1359 ConfgFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1360 ConfgFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1361 ConfgFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1362 ConfgFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1363 ConfgFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1364 ConfgFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1365 ConfgFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1366 ConfgFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1367 ConfgFile.write(
'cha_TC1Entry.delete(0,END)\n')
1368 ConfgFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1369 ConfgFile.write(
'cha_TC2Entry.delete(0,END)\n')
1370 ConfgFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1371 ConfgFile.write(
'chb_TC1Entry.delete(0,END)\n')
1372 ConfgFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1373 ConfgFile.write(
'chb_TC2Entry.delete(0,END)\n')
1374 ConfgFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1375 ConfgFile.write(
'cha_A1Entry.delete(0,END)\n')
1376 ConfgFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1377 ConfgFile.write(
'cha_A2Entry.delete(0,END)\n')
1378 ConfgFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1379 ConfgFile.write(
'chb_A1Entry.delete(0,END)\n')
1380 ConfgFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1381 ConfgFile.write(
'chb_A2Entry.delete(0,END)\n')
1382 ConfgFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1385 if SpectrumScreenStatus.get() > 0
or IAScreenStatus.get() > 0
or BodeScreenStatus.get() > 0:
1386 ConfgFile.write(
'SMPfftpwrTwo.set(' + str(SMPfftpwrTwo.get()) +
')\n')
1387 ConfgFile.write(
'FFTwindow.set(' + str(FFTwindow.get()) +
')\n')
1388 ConfgFile.write(
'ZEROstuffing.set(' + str(ZEROstuffing.get()) +
')\n')
1389 ConfgFile.write(
'Vdiv.set(' + str(Vdiv.get()) +
')\n')
1391 ConfgFile.write(
'DBdivindex.set(' + str(DBdivindex.get()) +
')\n')
1392 ConfgFile.write(
'DBlevel.set(' + str(DBlevel.get()) +
')\n')
1394 ConfgFile.write(
'CutDC.set(' + str(CutDC.get()) +
')\n')
1401 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1407 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1413 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1418 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1422 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1423 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1424 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
1425 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1426 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1427 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1428 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1429 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1430 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1431 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1432 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1433 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1434 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1435 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1436 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1437 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1438 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1439 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1440 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1441 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1442 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1443 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1444 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1445 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1446 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1447 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1448 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1449 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
1450 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1451 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1452 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1453 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1454 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1455 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1456 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1457 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1458 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1459 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1460 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1461 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1462 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1463 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1464 global AWGABurstFlag, AWGACycles, AWGABurstDelay, AWGAwaveform, AWGAcsvFile, AWGBcsvFile
1465 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay, AWGBwaveform, AWGAwavFile, AWGBwavFile
1466 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1467 global phawindow, PhAca, PhAScreenStatus, PhADisp
1468 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, EnableScopeOnly
1469 global VScale, IScale, RefphEntry, SMPfft
1470 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
1471 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
1472 global TRACEwidth, ColorMode, ca, COLORcanvas, COLORtrace4, COLORtraceR4, COLORtext
1476 ConfgFile = open(filename)
1477 for line
in ConfgFile:
1479 exec( line.rstrip() )
1481 print(
"Skipping " + line.rstrip())
1483 if DevID !=
"No Device":
1488 if ColorMode.get() > 0:
1490 if TRACEwidth.get() < 2:
1492 COLORtext =
"#000000"
1493 COLORtrace4 =
"#a0a000"
1494 COLORtraceR4 =
"#606000"
1495 COLORcanvas =
"#ffffff"
1498 COLORcanvas =
"#000000"
1499 COLORtrace4 =
"#ffff00"
1500 COLORtraceR4 =
"#808000"
1501 COLORtext =
"#ffffff"
1502 ca.config(background=COLORcanvas)
1504 if AWGAShape.get()==6:
1506 if AWGAShape.get()==13:
1508 if AWGBShape.get()==6:
1510 if AWGBShape.get()==13:
1513 if AWGAShape.get()==10:
1515 if AWGBShape.get()==10:
1517 if EnableScopeOnly == 0:
1535 print(
"Config File Not Found.")
1538 global AWGAShape, AWGBShape, BisCompA, AWGAShapeLabel, AWGBShapeLabel
1539 global AWGALength, AWGBLength, AWGAwaveform, AWGBwaveform, EnableScopeOnly
1541 if AWGAShape.get()==9:
1543 AWGAShapeLabel.config(text =
"Impulse")
1544 elif AWGAShape.get()==11:
1546 AWGAShapeLabel.config(text =
"Trapazoid")
1547 elif AWGAShape.get()==15:
1549 AWGAShapeLabel.config(text =
"SSQ Pulse")
1550 elif AWGAShape.get()==16:
1552 AWGAShapeLabel.config(text =
"Ramp")
1553 elif AWGAShape.get()==17:
1555 AWGAShapeLabel.config(text =
"PWN Sine")
1556 elif AWGAShape.get()==18:
1558 AWGAShapeLabel.config(text =
"Hi Res Sine")
1559 elif AWGAShape.get()==12:
1561 AWGAShapeLabel.config(text =
"Up Down Ramp")
1562 elif AWGAShape.get()==14:
1564 AWGAShapeLabel.config(text =
"Fourier Series")
1565 elif AWGAShape.get()==19:
1567 AWGAShapeLabel.config(text =
"Sinc Pulse")
1568 elif AWGAShape.get()==20:
1570 AWGAShapeLabel.config(text =
"Pulse")
1571 elif AWGAShape.get()==21:
1573 AWGAShapeLabel.config(text =
"FM Sine")
1574 elif AWGAShape.get()==22:
1576 AWGAShapeLabel.config(text =
"AM Sine")
1577 elif AWGAShape.get()==7:
1579 AWGAShapeLabel.config(text =
"UU Noise")
1580 elif AWGAShape.get()==8:
1582 AWGAShapeLabel.config(text =
"UG Noise")
1583 elif AWGAShape.get()==0:
1584 AWGAShapeLabel.config(text =
"DC")
1585 elif AWGAShape.get()==2:
1586 AWGAShapeLabel.config(text =
"Triangle")
1587 elif AWGAShape.get()==4:
1588 AWGAShapeLabel.config(text =
"Square")
1589 elif AWGAShape.get()==3:
1590 AWGAShapeLabel.config(text =
"Saw Tooth")
1591 elif AWGAShape.get()==5:
1592 AWGAShapeLabel.config(text =
"Starestep")
1593 elif AWGAShape.get()==6:
1594 AWGAShapeLabel.config(text =
"CSV File")
1595 elif AWGAShape.get()==13:
1596 AWGAShapeLabel.config(text =
"Wav File")
1597 elif AWGAShape.get()==10:
1598 AWGAShapeLabel.config(text =
"Math")
1600 AWGAShapeLabel.config(text =
"Other Shape")
1602 if BisCompA.get() == 1:
1604 if AWGBShape.get()==9:
1606 AWGBShapeLabel.config(text =
"Impulse")
1607 elif AWGBShape.get()==11:
1609 AWGBShapeLabel.config(text =
"Trapazoid")
1610 elif AWGBShape.get()==15:
1612 AWGBShapeLabel.config(text =
"SSQ Pulse")
1613 elif AWGBShape.get()==16:
1615 AWGBShapeLabel.config(text =
"Ramp")
1616 elif AWGBShape.get()==17:
1618 AWGBShapeLabel.config(text =
"PWN Sine")
1619 elif AWGBShape.get()==18:
1621 AWGBShapeLabel.config(text =
"Hi Res Sine")
1622 elif AWGBShape.get()==12:
1624 AWGBShapeLabel.config(text =
"Up Doen Ramp")
1625 elif AWGBShape.get()==14:
1627 AWGBShapeLabel.config(text =
"Fourier Series")
1628 elif AWGBShape.get()==19:
1630 AWGBShapeLabel.config(text =
"Sinc Pulse")
1631 elif AWGBShape.get()==20:
1633 AWGBShapeLabel.config(text =
"Pulse")
1634 elif AWGBShape.get()==7:
1636 AWGBShapeLabel.config(text =
"UU Noise")
1637 elif AWGBShape.get()==8:
1639 AWGBShapeLabel.config(text =
"UG Noise")
1640 elif AWGBShape.get()==0:
1641 AWGBShapeLabel.config(text =
"DC")
1642 elif AWGBShape.get()==2:
1643 AWGBShapeLabel.config(text =
"Triangle")
1644 elif AWGBShape.get()==4:
1645 AWGBShapeLabel.config(text =
"Square")
1646 elif AWGBShape.get()==3:
1647 AWGBShapeLabel.config(text =
"Saw Tooth")
1648 elif AWGBShape.get()==5:
1649 AWGBShapeLabel.config(text =
"Starestep")
1650 elif AWGBShape.get()==6:
1651 AWGBShapeLabel.config(text =
"CSV File")
1652 elif AWGBShape.get()==13:
1653 AWGBShapeLabel.config(text =
"Wav File")
1654 elif AWGBShape.get()==10:
1655 AWGBShapeLabel.config(text =
"Math")
1657 AWGBShapeLabel.config(text =
"Other Shape")
1658 if EnableScopeOnly == 0:
1659 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
1660 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
1667 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1673 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1679 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1685 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1690 global COLORtext, COLORcanvas, ColorMode, Bodeca, BodeScreenStatus, PhAca, PhAScreenStatus
1691 global ca, Freqca, SpectrumScreenStatus, XYca, XYScreenStatus, IAca, IAScreenStatus
1692 global COLORtrace4, COLORtraceR4, TRACEwidth
1694 if ColorMode.get() > 0:
1695 if TRACEwidth.get() < 2:
1697 COLORtext =
"#000000"
1698 COLORtrace4 =
"#a0a000"
1699 COLORtraceR4 =
"#606000"
1700 COLORcanvas =
"#ffffff"
1702 COLORcanvas =
"#000000"
1703 COLORtrace4 =
"#ffff00"
1704 COLORtraceR4 =
"#808000"
1705 COLORtext =
"#ffffff"
1706 ca.config(background=COLORcanvas)
1708 if SpectrumScreenStatus.get() > 0:
1709 Freqca.config(background=COLORcanvas)
1711 if XYScreenStatus.get() > 0:
1712 XYca.config(background=COLORcanvas)
1714 if PhAScreenStatus.get() > 0:
1715 PhAca.config(background=COLORcanvas)
1717 if IAScreenStatus.get() > 0:
1718 IAca.config(background=COLORcanvas)
1720 if BodeScreenStatus.get() > 0:
1721 Bodeca.config(background=COLORcanvas)
1725 global CANVASwidth, CANVASheight
1726 global COLORtext, MarkerNum, ColorMode
1728 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")])
1729 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n")
1730 if MarkerNum > 0
or ColorMode.get() > 0:
1731 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1733 COLORtext =
"#000000"
1736 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1740 COLORtext =
"#ffffff"
1744 global CANVASwidthXY, CANVASheightXY, xywindow
1745 global COLORtext, MarkerNum, ColorMode, XYca
1747 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=xywindow)
1748 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=xywindow)
1749 if MarkerNum > 0
or ColorMode.get() > 0:
1750 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1752 COLORtext =
"#000000"
1755 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1759 COLORtext =
"#ffffff"
1763 global CANVASwidthIA, CANVASheightIA
1764 global COLORtext, IAca, ColorMode, iawindow
1766 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=iawindow)
1767 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=iawindow)
1768 if ColorMode.get() > 0:
1769 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1771 COLORtext =
"#000000"
1774 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1776 COLORtext =
"#ffffff"
1780 global CANVASwidthBP, CANVASheightBP
1781 global COLORtext, Bodeca, bodewindow
1783 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent = bodewindow)
1784 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=bodewindow)
1785 if MarkerNum > 0
or ColorMode.get() > 0:
1786 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1788 COLORtext =
"#000000"
1791 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1793 COLORtext =
"#ffffff"
1797 global VBuffA, VBuffB, IBuffA, IBuffB, SAMPLErate
1800 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
1801 DataFile = open(filename,
'w')
1802 DataFile.write(
'Sample-#, CA-V, CA-I, CB-V, CB-I \n' )
1803 for index
in range(len(VBuffA)):
1804 TimePnt = float((index+0.0)/SAMPLErate)
1805 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
', ' + str(IBuffA[index]) +
', '
1806 + str(VBuffB[index]) +
', ' + str(IBuffB[index]) +
'\n')
1810 global SAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
1813 Channel = askstring(
"Choose Channel",
"CA-V, CB-V, CA-I or CB-I\n\nChannel:\n", initialvalue=
"CA-V")
1814 if (Channel ==
None):
1817 filename = asksaveasfilename(defaultextension =
".txt", filetypes=[(
"Text Columns",
"*.txt")])
1818 DataFile = open(filename,
'w')
1819 for index
in range(len(VBuffA)):
1820 TimePnt = float((index+0.0)/SAMPLErate)
1821 if Channel ==
"CA-V":
1822 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
'\n')
1823 elif Channel ==
"CA-I":
1824 DataFile.write( str(TimePnt) +
', ' + str(IBuffA[index]) +
'\n')
1825 elif Channel ==
"CB-V":
1826 DataFile.write( str(TimePnt) +
', ' + str(VBuffB[index]) +
'\n')
1827 elif Channel ==
"CB-I":
1828 DataFile.write( str(TimePnt) +
', ' + str(IBuffB[index]) +
'\n')
1832 global VBuffA, VBuffB, IBuffA, IBuffB, SHOWsamples
1835 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")])
1837 CSVFile = open(filename)
1838 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
1840 csv_f = csv.reader(CSVFile, dialect)
1848 VBuffA.append(float(row[1]))
1849 IBuffA.append(float(row[2]))
1850 VBuffB.append(float(row[3]))
1851 IBuffB.append(float(row[4]))
1852 SHOWsamples = SHOWsamples + 1
1854 print(
'skipping non-numeric row')
1855 VBuffA = numpy.array(VBuffA)
1856 IBuffA = numpy.array(IBuffA)
1857 VBuffB = numpy.array(VBuffB)
1858 IBuffB = numpy.array(IBuffB)
1862 showwarning(
"WARNING",
"No such file found or wrong format!")
1867 url =
"https://wiki.analog.com/university/tools/m1k/alice/desk-top-users-guide"
1868 webbrowser.open(url,new=2)
1871 global RevDate, SWRev, FWRevOne, HWRevOne, DevID, Version_url
1874 if sys.version_info[0] == 2:
1875 u = urllib2.urlopen(Version_url)
1876 if sys.version_info[0] == 3:
1877 u = urllib.request.urlopen(Version_url)
1879 time_string = str(meta.getheaders(
"Last-Modified"))
1881 time_string =
"Unavailable"
1882 showinfo(
"About ALICE",
"ALICE DeskTop" + SWRev + RevDate +
"\n" +
1883 "Last Released Version: " + time_string[7:18] +
"\n" +
1884 "ADALM1000 Hardware Rev " + str(HWRevOne) +
"\n" +
1885 "Firmware Rev " + str(FWRevOne) +
"\n" +
1886 "Board Serial Number " + DevID +
"\n" +
1887 "Software is provided as is without any Warranty")
1890 global T1Vline, T2Vline, T1Iline, T2Iline
1891 global TXYline, Tmathline, TMRline, TXYRline
1892 global T1VRline, T2VRline, T1IRline, T2IRline, TMCVline, TMDVline
1893 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowMath, MathTrace
1894 global MuxScreenStatus, TMCRline, TMBRline, TMAVline, TMBVline, TMCVline, TMDVline
1895 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb
1897 if ShowC1_V.get() == 1:
1899 if ShowC2_V.get() == 1:
1901 if ShowC1_I.get() == 1:
1903 if ShowC2_I.get() == 1:
1905 if MathTrace.get() > 0:
1907 if MuxScreenStatus.get() > 0:
1908 if Show_CBA.get() > 0:
1910 if Show_CBB.get() > 0:
1912 if Show_CBC.get() > 0:
1914 if Show_CBD.get() > 0:
1916 if len(TXYline) > 4:
1920 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1921 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1923 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1924 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1925 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1926 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1928 devidstr = DevID[17:31]
1929 filename = devidstr +
"_O.cal"
1930 CalFile = open(filename,
"w")
1932 CalFile.write(
'CHAVGainEntry.delete(0,END)\n')
1933 CalFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1934 CalFile.write(
'CHBVGainEntry.delete(0,END)\n')
1935 CalFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1936 CalFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1937 CalFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1938 CalFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1939 CalFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1941 CalFile.write(
'CHAIGainEntry.delete(0,END)\n')
1942 CalFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1943 CalFile.write(
'CHBIGainEntry.delete(0,END)\n')
1944 CalFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1945 CalFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1946 CalFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1947 CalFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1948 CalFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1952 CHA_TC1.set(float(cha_TC1Entry.get()))
1953 CHA_TC2.set(float(cha_TC2Entry.get()))
1954 CHB_TC1.set(float(chb_TC1Entry.get()))
1955 CHB_TC2.set(float(chb_TC2Entry.get()))
1956 CHA_A1.set(float(cha_A1Entry.get()))
1957 CHA_A2.set(float(cha_A2Entry.get()))
1958 CHB_A1.set(float(chb_A1Entry.get()))
1959 CHB_A2.set(float(chb_A2Entry.get()))
1962 CalFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1963 CalFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1964 CalFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1965 CalFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1966 CalFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1967 CalFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1968 CalFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1969 CalFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1970 CalFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1971 CalFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1972 CalFile.write(
'cha_TC1Entry.delete(0,END)\n')
1973 CalFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1974 CalFile.write(
'cha_TC2Entry.delete(0,END)\n')
1975 CalFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1976 CalFile.write(
'chb_TC1Entry.delete(0,END)\n')
1977 CalFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1978 CalFile.write(
'chb_TC2Entry.delete(0,END)\n')
1979 CalFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1980 CalFile.write(
'cha_A1Entry.delete(0,END)\n')
1981 CalFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1982 CalFile.write(
'cha_A2Entry.delete(0,END)\n')
1983 CalFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1984 CalFile.write(
'chb_A1Entry.delete(0,END)\n')
1985 CalFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1986 CalFile.write(
'chb_A2Entry.delete(0,END)\n')
1987 CalFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1992 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1993 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1995 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1996 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1997 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1998 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
2000 devidstr = DevID[17:31]
2001 filename = devidstr +
"_O.cal"
2003 CalFile = open(filename)
2004 for line
in CalFile:
2005 exec( line.rstrip() )
2008 print(
"Cal file for this device not found")
2011 global UserAString, UserALabel, MeasUserA
2013 TempString = UserALabel
2014 UserALabel = askstring(
"Measurement Label",
"Current Label: " + UserALabel +
"\n\nNew Label:\n", initialvalue=UserALabel)
2015 if (UserALabel ==
None):
2017 UserALabel = TempString
2019 TempString = UserAString
2020 UserAString = askstring(
"Measurement Formula",
"Current Formula: " + UserAString +
"\n\nNew Formula:\n", initialvalue=UserAString)
2021 if (UserAString ==
None):
2023 UserAString = TempString
2028 global UserBString, UserBLabel, MeasUserB
2030 TempString = UserBLabel
2031 UserBLabel = askstring(
"Measurement Label",
"Current Label: " + UserBLabel +
"\n\nNew Label:\n", initialvalue=UserBLabel)
2032 if (UserBLabel ==
None):
2034 UserBLabel = TempString
2036 TempString = UserBString
2037 UserBString = askstring(
"Measurement Formula",
"Current Formula: " + UserBString +
"\n\nNew Formula:\n", initialvalue=UserBString)
2038 if (UserBString ==
None):
2040 UserBString = TempString
2046 global LabelPlotText, PlotLabelText
2048 TempString = PlotLabelText
2049 PlotLabelText = askstring(
"Custom Label",
"Current Plot Label: " + PlotLabelText +
"\n\nNew Label:\n", initialvalue=PlotLabelText)
2050 if (PlotLabelText ==
None):
2051 LabelPlotText.set(0)
2052 PlotLabelText = TempString
2054 LabelPlotText.set(1)
2057 global RUNstatus, MathScreenStatus, MathWindow, SWRev, RevDate
2058 global MathString, MathUnits, MathXString, MathXUnits, MathYString, MathYUnits
2059 global MathAxis, MathXAxis, MathYAxis, MathTrace
2060 global formentry, unitsentry, axisentry, xformentry, xunitsentry, xaxisentry, yformentry, yunitsentry, yaxisentry
2061 global formlab, xformlab, yformlab, FrameBG
2062 global Mframe1, Mframe2, Mframe3, Mframe4
2064 if MathScreenStatus.get() == 0:
2065 MathScreenStatus.set(1)
2067 MathWindow = Toplevel()
2068 MathWindow.title(
"Math Formula " + SWRev + RevDate)
2069 MathWindow.resizable(FALSE,FALSE)
2070 MathWindow.protocol(
"WM_DELETE_WINDOW", DestroyMathScreen)
2071 MathWindow.configure(background=FrameBG)
2072 Mframe1 = LabelFrame(MathWindow, text=
"Built-in Exp", style=
"A10R1.TLabelframe")
2073 Mframe2 = LabelFrame(MathWindow, text=
"Math Trace", style=
"A10R1.TLabelframe")
2074 Mframe3 = LabelFrame(MathWindow, text=
"X Math Trace", style=
"A10R1.TLabelframe")
2075 Mframe4 = LabelFrame(MathWindow, text=
"Y Math Trace", style=
"A10R1.TLabelframe")
2078 Mframe1.grid(row = 0, column=0, rowspan=3, sticky=W)
2079 Mframe2.grid(row = 0, column=1, sticky=W)
2080 Mframe3.grid(row = 1, column=1, sticky=W)
2081 Mframe4.grid(row = 2, column=1, sticky=W)
2085 mrb1 = Radiobutton(Mframe1, text=
'none', variable=MathTrace, value=0, command=UpdateTimeTrace)
2086 mrb1.grid(row=0, column=0, sticky=W)
2087 mrb2 = Radiobutton(Mframe1, text=
'CAV+CBV', variable=MathTrace, value=1, command=UpdateTimeTrace)
2088 mrb2.grid(row=1, column=0, sticky=W)
2089 mrb3 = Radiobutton(Mframe1, text=
'CAV-CBV', variable=MathTrace, value=2, command=UpdateTimeTrace)
2090 mrb3.grid(row=2, column=0, sticky=W)
2091 mrb4 = Radiobutton(Mframe1, text=
'CBV-CAV', variable=MathTrace, value=3, command=UpdateTimeTrace)
2092 mrb4.grid(row=3, column=0, sticky=W)
2093 mrb5 = Radiobutton(Mframe1, text=
'CAI-CBI', variable=MathTrace, value=8, command=UpdateTimeTrace)
2094 mrb5.grid(row=4, column=0, sticky=W)
2095 mrb6 = Radiobutton(Mframe1, text=
'CBI-CAI', variable=MathTrace, value=9, command=UpdateTimeTrace)
2096 mrb6.grid(row=5, column=0, sticky=W)
2097 mrb7 = Radiobutton(Mframe1, text=
'CAV*CAI', variable=MathTrace, value=4, command=UpdateTimeTrace)
2098 mrb7.grid(row=6, column=0, sticky=W)
2099 mrb8 = Radiobutton(Mframe1, text=
'CBV*CBI', variable=MathTrace, value=5, command=UpdateTimeTrace)
2100 mrb8.grid(row=7, column=0, sticky=W)
2101 mrb9 = Radiobutton(Mframe1, text=
'CAV/CAI', variable=MathTrace, value=6, command=UpdateTimeTrace)
2102 mrb9.grid(row=8, column=0, sticky=W)
2103 mrb10 = Radiobutton(Mframe1, text=
'CBV/CBI', variable=MathTrace, value=7, command=UpdateTimeTrace)
2104 mrb10.grid(row=9, column=0, sticky=W)
2105 mrb11 = Radiobutton(Mframe1, text=
'CBV/CAV', variable=MathTrace, value=10, command=UpdateTimeTrace)
2106 mrb11.grid(row=10, column=0, sticky=W)
2107 mrb12 = Radiobutton(Mframe1, text=
'CBI/CAI', variable=MathTrace, value=11, command=UpdateTimeTrace)
2108 mrb12.grid(row=11, column=0, sticky=W)
2109 mrb13 = Radiobutton(Mframe1, text=
'Formula', variable=MathTrace, value=12, command=UpdateTimeTrace)
2110 mrb13.grid(row=12, column=0, sticky=W)
2114 sframe2a = Frame( Mframe2 )
2115 sframe2a.pack(side=TOP)
2116 formlab = Label(sframe2a, text=
" Formula ", style=
"A10B.TLabel")
2117 formlab.pack(side=LEFT)
2118 formentry = Entry(sframe2a, width=23)
2119 formentry.pack(side=LEFT)
2120 formentry.delete(0,
"end")
2121 formentry.insert(0,MathString)
2122 sframe2b = Frame( Mframe2 )
2123 sframe2b.pack(side=TOP)
2124 unitslab = Label(sframe2b, text=
"Units ", style=
"A10B.TLabel")
2125 unitslab.pack(side=LEFT)
2126 unitsentry = Entry(sframe2b, width=6)
2127 unitsentry.pack(side=LEFT)
2128 unitsentry.delete(0,
"end")
2129 unitsentry.insert(0,MathUnits)
2130 checkbt = Button(sframe2b, text=
"Check", command=CheckMathString )
2131 checkbt.pack(side=LEFT)
2132 sframe2c = Frame( Mframe2 )
2133 sframe2c.pack(side=TOP)
2134 axislab = Label(sframe2c, text=
"Axis ", style=
"A10B.TLabel")
2135 axislab.pack(side=LEFT)
2136 axisentry = Entry(sframe2c, width=4)
2137 axisentry.pack(side=LEFT)
2138 axisentry.delete(0,
"end")
2139 axisentry.insert(0,MathAxis)
2140 applybt = Button(sframe2c, text=
"Apply", command=ApplyMathString )
2141 applybt.pack(side=LEFT)
2145 sframe3a = Frame( Mframe3 )
2146 sframe3a.pack(side=TOP)
2147 xformlab = Label(sframe3a, text=
"X Formula ", style=
"A10B.TLabel")
2148 xformlab.pack(side=LEFT)
2149 xformentry = Entry(sframe3a, width=23)
2150 xformentry.pack(side=LEFT)
2151 xformentry.delete(0,
"end")
2152 xformentry.insert(0, MathXString)
2153 sframe3b = Frame( Mframe3 )
2154 sframe3b.pack(side=TOP)
2155 xunitslab = Label(sframe3b, text=
"X Units ", style=
"A10B.TLabel")
2156 xunitslab.pack(side=LEFT)
2157 xunitsentry = Entry(sframe3b, width=6)
2158 xunitsentry.pack(side=LEFT)
2159 xunitsentry.delete(0,
"end")
2160 xunitsentry.insert(0, MathXUnits)
2161 xcheckbt = Button(sframe3b, text=
"Check", command=CheckMathXString )
2162 xcheckbt.pack(side=LEFT)
2163 sframe3c = Frame( Mframe3 )
2164 sframe3c.pack(side=TOP)
2165 xaxislab = Label(sframe3c, text=
"X Axis ", style=
"A10B.TLabel")
2166 xaxislab.pack(side=LEFT)
2167 xaxisentry = Entry(sframe3c, width=4)
2168 xaxisentry.pack(side=LEFT)
2169 xaxisentry.delete(0,
"end")
2170 xaxisentry.insert(0, MathXAxis)
2171 xapplybt = Button(sframe3c, text=
"Apply", command=ApplyMathXString )
2172 xapplybt.pack(side=LEFT)
2176 sframe4a = Frame( Mframe4 )
2177 sframe4a.pack(side=TOP)
2178 yformlab = Label(sframe4a, text=
"Y Formula ", style=
"A10B.TLabel")
2179 yformlab.pack(side=LEFT)
2180 yformentry = Entry(sframe4a, width=23)
2181 yformentry.pack(side=LEFT)
2182 yformentry.delete(0,
"end")
2183 yformentry.insert(0,MathYString)
2184 sframe4b = Frame( Mframe4 )
2185 sframe4b.pack(side=TOP)
2186 yunitslab = Label(sframe4b, text=
"Y Units ", style=
"A10B.TLabel")
2187 yunitslab.pack(side=LEFT)
2188 yunitsentry = Entry(sframe4b, width=6)
2189 yunitsentry.pack(side=LEFT)
2190 yunitsentry.delete(0,
"end")
2191 yunitsentry.insert(0,MathYUnits)
2192 ycheckbt = Button(sframe4b, text=
"Check", command=CheckMathYString )
2193 ycheckbt.pack(side=LEFT)
2194 sframe4c = Frame( Mframe4 )
2195 sframe4c.pack(side=TOP)
2196 yaxislab = Label(sframe4c, text=
"Y Axis ", style=
"A10B.TLabel")
2197 yaxislab.pack(side=LEFT)
2198 yaxisentry = Entry(sframe4c, width=4)
2199 yaxisentry.pack(side=LEFT)
2200 yaxisentry.delete(0,
"end")
2201 yaxisentry.insert(0,MathYAxis)
2202 yapplybt = Button(sframe4c, text=
"Apply", command=ApplyMathYString )
2203 yapplybt.pack(side=LEFT)
2205 dismissbutton = Button(MathWindow, text=
"Dismiss", command=DestroyMathScreen)
2206 dismissbutton.grid(row=3, column=0, sticky=W)
2208 if RUNstatus.get() > 0:
2212 global MathScreenStatus, MathWindow
2214 if MathScreenStatus.get() == 1:
2215 MathScreenStatus.set(0)
2216 MathWindow.destroy()
2219 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry, formlab
2220 global VBuffA, VBuffB, IBuffA, IBuffB
2221 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2222 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2223 global FFTBuffA, FFTBuffB, FFTwindowshape
2224 global AWGAwaveform, AWGBwaveform
2225 global Show_MathX, Show_MathY
2226 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2227 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2230 TempString = formentry.get()
2232 MathResult = eval(TempString)
2233 formlab.configure(text=
"Formula ", style=
"A10G.TLabel")
2235 formlab.configure(text=
"Formula ", style=
"A10R.TLabel")
2238 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry, xformlab
2239 global VBuffA, VBuffB, IBuffA, IBuffB
2240 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2241 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2242 global FFTBuffA, FFTBuffB, FFTwindowshape
2243 global AWGAwaveform, AWGBwaveform
2244 global Show_MathX, Show_MathY
2245 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2246 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2249 TempString = xformentry.get()
2251 MathResult = eval(TempString)
2252 xformlab.configure(text=
"X Formula ", style=
"A10G.TLabel")
2254 xformlab.configure(text=
"X Formula ", style=
"A10R.TLabel")
2257 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry, yformlab
2258 global VBuffA, VBuffB, IBuffA, IBuffB
2259 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2260 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2261 global FFTBuffA, FFTBuffB, FFTwindowshape
2262 global AWGAwaveform, AWGBwaveform
2263 global Show_MathX, Show_MathY
2264 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2265 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2268 TempString = yformentry.get()
2270 MathResult = eval(TempString)
2271 yformlab.configure(text=
"Y Formula ", style=
"A10G.TLabel")
2273 yformlab.configure(text=
"Y Formula ", style=
"A10R.TLabel")
2276 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry
2278 MathString = formentry.get()
2279 MathUnits = unitsentry.get()
2280 MathAxis = axisentry.get()
2283 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry
2285 MathXString = xformentry.get()
2286 MathXUnits = xunitsentry.get()
2287 MathXAxis = xaxisentry.get()
2290 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry
2292 MathYString = yformentry.get()
2293 MathYUnits = yunitsentry.get()
2294 MathYAxis = yaxisentry.get()
2297 global MarkerLoc, RUNstatus
2299 TempString = MarkerLoc
2300 MarkerLoc = askstring(
"Marker Text Location",
"Current Marker Text Location: " + MarkerLoc +
"\n\nNew Location: (UL, UR, LL, LR)\n", initialvalue=MarkerLoc)
2301 if (MarkerLoc ==
None):
2302 MarkerLoc = TempString
2303 if RUNstatus.get() == 0:
2313 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2319 if RUNstatus.get() == 0:
2323 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, RUNstatus
2329 if RUNstatus.get() == 0:
2339 global TgInput, TRIGGERlevel, TRIGGERentry, RUNstatus
2340 global MaxV1, MinV1, MaxV2, MinV2
2341 global MaxI1, MinI1, MaxI2, MinI2
2343 MidV1 = (MaxV1+MinV1)/2
2344 MidV2 = (MaxV2+MinV2)/2
2345 MidI1 = (MaxI1+MinI1)/2
2346 MidI2 = (MaxI2+MinI2)/2
2347 if (TgInput.get() == 0):
2349 elif (TgInput.get() == 1
or TgInput.get() == 5):
2350 DCString =
' {0:.2f} '.format(MidV1)
2351 elif (TgInput.get() == 2 ):
2352 DCString =
' {0:.2f} '.format(MidI1)
2353 elif (TgInput.get() == 3 ):
2354 DCString =
' {0:.2f} '.format(MidV2)
2355 elif (TgInput.get() == 4 ):
2356 DCString =
' {0:.2f} '.format(MidI2)
2358 TRIGGERlevel = eval(DCString)
2359 TRIGGERentry.delete(0,END)
2360 TRIGGERentry.insert(4, DCString)
2361 if RUNstatus.get() == 0:
2378 global TRIGGERlevel, TRIGGERentry, RUNstatus
2382 TRIGGERlevel = float(eval(TRIGGERentry.get()))
2384 TRIGGERentry.delete(0,END)
2385 TRIGGERentry.insert(0, TRIGGERlevel)
2387 if RUNstatus.get() == 0:
2392 global HoldOff, HoldOffentry, RUNstatus
2395 HoldOff = float(eval(HoldOffentry.get()))
2397 HoldOffentry.delete(0,END)
2398 HoldOffentry.insert(0, HoldOff)
2399 if RUNstatus.get() == 0:
2403 global HozPoss, HozPossentry, RUNstatus
2406 HozPoss = float(eval(HozPossentry.get()))
2408 HozPossentry.delete(0,END)
2409 HozPossentry.insert(0, HozPoss)
2410 if RUNstatus.get() == 0:
2414 global HozPossentry, TgInput, TMsb
2418 TIMEdiv = float(eval(TMsb.get()))
2421 TMsb.delete(0,
"end")
2422 TMsb.insert(0,TIMEdiv)
2424 if TIMEdiv < 0.0002:
2426 if TgInput.get() > 0:
2427 HozPoss = -5 * TIMEdiv
2428 HozPossentry.delete(0,END)
2429 HozPossentry.insert(0, HozPoss)
2432 global HoldOffentry, HoldOff, TgInput, TMsb
2436 TIMEdiv = float(eval(TMsb.get()))
2439 TMsb.delete(0,
"end")
2440 TMsb.insert(0,TIMEdiv)
2442 if TIMEdiv < 0.0002:
2444 if TgInput.get() == 0:
2445 HoldOff = HoldOff + TIMEdiv
2446 HoldOffentry.delete(0,END)
2447 HoldOffentry.insert(0, HoldOff)
2450 global CHB_APosEntry, DCVMuxA
2452 CHB_APosEntry.delete(0,
"end")
2453 CHB_APosEntry.insert(0,
' {0:.2f} '.format(DCVMuxA))
2456 global CHB_BPosEntry, DCVMuxB
2458 CHB_BPosEntry.delete(0,
"end")
2459 CHB_BPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxB))
2462 global CHB_CPosEntry, DCVMuxC
2464 CHB_CPosEntry.delete(0,
"end")
2465 CHB_CPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxC))
2468 global CHD_BPosEntry, DCVMuxD
2470 CHB_DPosEntry.delete(0,
"end")
2471 CHB_DPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxD))
2474 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2476 if MarkerScale.get() != 1:
2478 CHB_Alab.config(style=
"Rtrace2.TButton")
2479 CHB_Blab.config(style=
"Strace6.TButton")
2480 CHB_Clab.config(style=
"Strace7.TButton")
2481 CHB_Dlab.config(style=
"Strace4.TButton")
2486 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2488 if MarkerScale.get() != 1:
2490 CHB_Alab.config(style=
"Strace2.TButton")
2491 CHB_Blab.config(style=
"Rtrace6.TButton")
2492 CHB_Clab.config(style=
"Strace7.TButton")
2493 CHB_Dlab.config(style=
"Strace4.TButton")
2498 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2500 if MarkerScale.get() != 1:
2502 CHB_Alab.config(style=
"Strace2.TButton")
2503 CHB_Blab.config(style=
"Strace6.TButton")
2504 CHB_Clab.config(style=
"Rtrace7.TButton")
2505 CHB_Dlab.config(style=
"Strace4.TButton")
2510 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2512 if MarkerScale.get() != 1:
2514 CHB_Alab.config(style=
"Strace2.TButton")
2515 CHB_Blab.config(style=
"Strace6.TButton")
2516 CHB_Clab.config(style=
"Strace7.TButton")
2517 CHB_Dlab.config(style=
"Rtrace4.TButton")
2522 global CHAVPosEntry, DCV1
2524 CHAVPosEntry.delete(0,
"end")
2525 CHAVPosEntry.insert(0,
' {0:.2f} '.format(DCV1))
2528 global CHBVPosEntry, DCV2
2530 CHBVPosEntry.delete(0,
"end")
2531 CHBVPosEntry.insert(0,
' {0:.2f} '.format(DCV2))
2534 global CHAIPosEntry, DCI1
2536 CHAIPosEntry.delete(0,
"end")
2537 CHAIPosEntry.insert(0,
' {0:.2f} '.format(DCI1))
2540 global CHBIPosEntry, DCI2
2542 CHBIPosEntry.delete(0,
"end")
2543 CHBIPosEntry.insert(0,
' {0:.2f} '.format(DCI2))
2546 global CHAVPosEntryxy, DCV1
2548 CHAVPosEntryxy.delete(0,
"end")
2549 CHAVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV1))
2552 global CHBVPosEntryxy, DCV2
2554 CHBVPosEntryxy.delete(0,
"end")
2555 CHBVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV2))
2558 global CHAIPosEntryxy, DCI1
2560 CHAIPosEntryxy.delete(0,
"end")
2561 CHAIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI1))
2564 global CHBIPosEntryxy, DCI2
2566 CHBIPosEntryxy.delete(0,
"end")
2567 CHBIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI2))
2570 global RUNstatus, session, CHA, CHB, devx, AWG_2X
2578 CHA.mode = Mode.HI_Z_SPLIT
2579 CHB.mode = Mode.HI_Z_SPLIT
2586 if session.continuous:
2595 global RUNstatus, PowerStatus, devx, PwrBt, DevID, FWRevOne, session, AWGSync
2596 global contloop, discontloop, TIMEdiv, First_Slow_sweep
2598 if DevID ==
"No Device":
2599 showwarning(
"WARNING",
"No Device Plugged In!")
2600 elif FWRevOne == 0.0:
2601 showwarning(
"WARNING",
"Out of data Firmware!")
2603 if PowerStatus == 0:
2605 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2606 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2607 if (RUNstatus.get() == 0):
2609 if AWGSync.get() == 0:
2611 CHA.mode = Mode.HI_Z_SPLIT
2612 CHB.mode = Mode.HI_Z_SPLIT
2614 if not session.continuous:
2617 elif session.continuous:
2620 CHA.mode = Mode.HI_Z_SPLIT
2621 CHB.mode = Mode.HI_Z_SPLIT
2638 if session.continuous:
2643 First_Slow_sweep = 0
2645 First_Slow_sweep = 1
2648 global session, AWGSync
2651 if AWGSync.get() == 0:
2653 if not session.continuous:
2656 elif session.continuous:
2662 if session.continuous:
2666 global AWGAFreqEntry, AWGAFreqvalue, Two_X_Sample, FWRevOne
2669 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
2671 AWGAFreqEntry.delete(0,
"end")
2672 AWGAFreqEntry.insert(0, AWGAFreqvalue)
2674 if AWGAFreqvalue > 20000.0:
2683 global IASource, CHA, CHB, AWGAMode, AWGBMode, AWGBIOMode, AWGSync
2685 if AWGSync.get() == 0:
2687 if IASource.get() == 1:
2688 CHA.mode = Mode.HI_Z
2689 CHB.mode = Mode.HI_Z
2692 CHA.mode = Mode.SVMI
2693 CHB.mode = Mode.HI_Z
2695 if AWGBIOMode.get() == 0:
2699 global RUNstatus, TimeDisp, XYDisp, FreqDisp, IADisp, session, AWGSync
2700 global CHA, CHB, contloop, discontloop
2702 if (RUNstatus.get() == 1):
2705 CHA.mode = Mode.HI_Z_SPLIT
2706 CHB.mode = Mode.HI_Z_SPLIT
2707 if AWGSync.get() == 0:
2712 if session.continuous:
2722 if TimeDisp.get() > 0:
2724 if XYDisp.get() > 0:
2726 if FreqDisp.get() > 0:
2728 if IADisp.get() > 0:
2732 global RUNstatus, PowerStatus, devx, PwrBt
2734 if (RUNstatus.get() == 1):
2736 if PowerStatus == 1:
2738 PwrBt.config(style=
"PwrOff.TButton",text=
"PWR-Off")
2739 devx.ctrl_transfer( 0x40, 0x50, 49, 0, 0, 0, 100)
2742 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2743 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2746 global TIMEdiv, TMsb, RUNstatus, Two_X_Sample, ETSDisp, FWRevOne
2749 TIMEdiv = float(eval(TMsb.get()))
2750 if TIMEdiv < 0.0002:
2752 TMsb.delete(0,
"end")
2753 TMsb.insert(0,TIMEdiv)
2756 TMsb.delete(0,
"end")
2757 TMsb.insert(0,TIMEdiv)
2759 if ETSDisp.get() == 0:
2760 Samples_per_div = TIMEdiv * 100.0
2762 if Samples_per_div < 20.0:
2768 if RUNstatus.get() == 0:
2772 global CHAsb, RUNstatus, CH1vpdvLevel
2775 CH1vpdvLevel = float(eval(CHAsb.get()))
2778 CHAsb.insert(0, CH1vpdvLevel)
2779 if RUNstatus.get() == 0:
2783 global CHAIsb, RUNstatus, CH1ipdvLevel
2786 CH1ipdvLevel = float(eval(CHAIsb.get()))
2788 CHAIsb.delete(0,END)
2789 CHAIsb.insert(0, CH1ipdvLevel)
2790 if RUNstatus.get() == 0:
2794 global CHBsb, RUNstatus, CH2vpdvLevel
2797 CH2vpdvLevel = float(eval(CHBsb.get()))
2800 CHBsb.insert(0, CH2vpdvLevel)
2801 if RUNstatus.get() == 0:
2805 global CHBIsb, RUNstatus, CH2ipdvLevel
2808 CH2ipdvLevel = float(eval(CHBIsb.get()))
2810 CHBIsb.delete(0,END)
2811 CHBIsb.insert(0, CH2ipdvLevel)
2812 if RUNstatus.get() == 0:
2816 global CHAOffset, CHAVPosEntry, RUNstatus
2819 CHAOffset = float(eval(CHAVPosEntry.get()))
2821 CHAVPosEntry.delete(0,END)
2822 CHAVPosEntry.insert(0, CHAOffset)
2824 if RUNstatus.get() == 0:
2828 global CHAIOffset, CHAIPosEntry, RUNstatus
2831 CHAIOffset = float(eval(CHAIPosEntry.get()))
2833 CHAIPosEntry.delete(0,END)
2834 CHAIPosEntry.insert(0, CHAIOffset)
2836 if RUNstatus.get() == 0:
2840 global CHBOffset, CHBVPosEntry, RUNstatus
2843 CHBOffset = float(eval(CHBVPosEntry.get()))
2845 CHBVPosEntry.delete(0,END)
2846 CHBVPosEntry.insert(0, CHBOffset)
2848 if RUNstatus.get() == 0:
2852 global CHBIOffset, CHBIPosEntry, RUNstatus
2855 CHBIOffset = float(eval(CHBIPosEntry.get()))
2857 CHBIPosEntry.delete(0,END)
2858 CHBIPosEntry.insert(0, CHBIOffset)
2860 if RUNstatus.get() == 0:
2864 global TimeDisp, ckb1
2865 if TimeDisp.get() == 1:
2866 ckb1.config(style=
"Enab.TCheckbutton")
2868 ckb1.config(style=
"Disab.TCheckbutton")
2872 if XYDisp.get() == 1:
2873 ckb2.config(style=
"Enab.TCheckbutton")
2875 ckb2.config(style=
"Disab.TCheckbutton")
2878 global FreqDisp, ckb3, OOTckb3, OOTScreenStatus
2879 if FreqDisp.get() == 1:
2880 if OOTScreenStatus.get() == 0:
2881 ckb3.config(style=
"Enab.TCheckbutton")
2883 OOTckb3.config(style=
"Enab.TCheckbutton")
2885 if OOTScreenStatus.get() == 0:
2886 ckb3.config(style=
"Disab.TCheckbutton")
2888 OOTckb3.config(style=
"Disab.TCheckbutton")
2891 global BodeDisp, ckb5, AWGSync, OOTckb5, OOTScreenStatus
2892 if BodeDisp.get() == 1:
2894 if OOTScreenStatus.get() == 0:
2895 ckb5.config(style=
"Enab.TCheckbutton")
2897 OOTckb5.config(style=
"Enab.TCheckbutton")
2899 if OOTScreenStatus.get() == 0:
2900 ckb5.config(style=
"Disab.TCheckbutton")
2902 OOTckb5.config(style=
"Disab.TCheckbutton")
2905 global IADisp, ckb4, OOTckb4, OOTScreenStatus
2906 if IADisp.get() == 1:
2907 if OOTScreenStatus.get() == 0:
2908 ckb4.config(style=
"Enab.TCheckbutton")
2910 OOTckb4.config(style=
"Enab.TCheckbutton")
2912 if OOTScreenStatus.get() == 0:
2913 ckb4.config(style=
"Disab.TCheckbutton")
2915 OOTckb4.config(style=
"Disab.TCheckbutton")
2918 global PhADisp, Phckb, OOTphckb, OOTScreenStatus
2919 if PhADisp.get() == 1:
2920 if OOTScreenStatus.get() == 0:
2921 phckb.config(style=
"Enab.TCheckbutton")
2923 OOTphckb.config(style=
"Enab.TCheckbutton")
2925 if OOTScreenStatus.get() == 0:
2926 phckb.config(style=
"Disab.TCheckbutton")
2928 OOTphckb.config(style=
"Disab.TCheckbutton")
2931 global OhmDisp, ckb6, OOTckb6, OOTScreenStatus
2932 if OhmDisp.get() == 1:
2933 if OOTScreenStatus.get() == 0:
2934 ckb6.config(style=
"Enab.TCheckbutton")
2936 OOTckb6.config(style=
"Enab.TCheckbutton")
2938 if OOTScreenStatus.get() == 0:
2939 ckb6.config(style=
"Disab.TCheckbutton")
2941 OOTckb6.config(style=
"Disab.TCheckbutton")
2944 global ETSDisp, enb1
2945 if ETSDisp.get() == 1:
2946 enb1.config(style=
"Enab.TCheckbutton")
2949 enb1.config(style=
"Disab.TCheckbutton")
2955 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp, SpectrumScreenStatus, HWRevOne
2956 global IADisp, IAScreenStatus, CutDC, DevOne, AWGBMode, MuxEnb, BodeScreenStatus, BodeDisp
2957 global MuxScreenStatus, VBuffA, VBuffB, MuxSync, AWGBIOMode
2958 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD, MuxChan
2959 global ShowC1_V, ShowC2_V, ShowC2_I, SMPfft
2960 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
2961 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2962 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2963 global SV1, SI1, SV2, SI2, SVA_B
2964 global FregPoint, FBins, FStep
2966 global TRACEresetTime, TRACEmodeTime, SettingsStatus
2967 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
2968 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
2969 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
2970 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
2971 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
2972 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
2976 if (RUNstatus.get() == 1)
or (RUNstatus.get() == 2):
2977 if SettingsStatus.get() == 1:
2979 if TimeDisp.get() > 0
or XYDisp.get() > 0:
2980 if MuxScreenStatus.get() == 0:
2984 if DualMuxMode.get() == 1:
2989 if HWRevOne ==
"D" :
2992 if AWGBIOMode.get() == 0:
2994 if MuxEnb.get() == 1:
2998 if MuxSync.get() == 0:
3004 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3005 TRACEresetTime =
True
3006 elif TRACEmodeTime.get() == 1:
3007 if TRACEresetTime ==
True:
3008 TRACEresetTime =
False
3010 VmemoryMuxA = VBuffMA
3011 VmemoryMuxB = VBuffMB
3012 VmemoryMuxC = VBuffMC
3013 ImemoryMuxD = VBuffMD
3014 if Show_CBA.get() == 1:
3016 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3017 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3018 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3019 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3021 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3023 if Show_CBB.get() == 1:
3025 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3026 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3027 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3028 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3030 devx.ctrl_transfer(0x40, PIO3x, 3, 0, 0, 0, 100)
3032 if Show_CBC.get() == 1:
3034 if DualMuxMode.get() == 1:
3035 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3036 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3038 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3039 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3040 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3041 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3043 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3045 if Show_CBD.get() == 1:
3047 if DualMuxMode.get() == 1:
3048 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
3049 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
3051 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
3052 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
3053 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
3054 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
3056 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
3058 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:
3060 if (FreqDisp.get() > 0
and SpectrumScreenStatus.get() == 1)
or (IADisp.get() > 0
and IAScreenStatus.get() == 1)
or (BodeDisp.get() > 0
and BodeScreenStatus.get() == 1):
3061 if IADisp.get() > 0
or BodeDisp.get() > 0:
3064 if BodeDisp.get() > 0:
3065 if LoopNum.get() <= len(FStep):
3066 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
3067 if FregPoint < 100.0:
3069 elif FregPoint < 500.0:
3071 elif FregPoint < 2000.0:
3075 if Two_X_Sample.get() > 0
and FregPoint < 2000.0:
3079 elif OhmRunStatus.get() == 1
and OhmDisp.get() == 1:
3081 root.update_idletasks()
3085 global RMode, CHATestVEntry, CHATestREntry, CHA, CHB, devx, OhmA0, OhmA1, discontloop
3086 global AWGAMode, AWGBMode, AWGAShape, AWGSync, AWGBTerm, AWGAOffsetEntry
3087 global AWGAIOMode, AWGBIOMode, Two_X_Sample
3091 InOffA = float(eval(CHAVOffsetEntry.get()))
3093 CHAVOffsetEntry.delete(0,END)
3094 CHAVOffsetEntry.insert(0, InOffA)
3096 InGainA = float(eval(CHAVGainEntry.get()))
3098 CHAVGainEntry.delete(0,END)
3099 CHAVGainEntry.insert(0, InGainA)
3101 InOffB = float(eval(CHBVOffsetEntry.get()))
3103 CHBVOffsetEntry.delete(0,END)
3104 CHBVOffsetEntry.insert(0, InOffB)
3106 InGainB = float(eval(CHBVGainEntry.get()))
3108 CHBVGainEntry.delete(0,END)
3109 CHBVGainEntry.insert(0, InGainB)
3111 CurOffA = float(CHAIOffsetEntry.get())
3115 CurOffB = float(CHBIOffsetEntry.get())
3119 CurGainA = float(CHAIGainEntry.get())
3123 CurGainB = float(CHBIGainEntry.get())
3127 chatestv = float(eval(CHATestVEntry.get()))
3130 CHATestVEntry.delete(0,END)
3131 CHATestVEntry.insert(0, chatestv)
3133 CHATestVEntry.delete(0,END)
3134 CHATestVEntry.insert(0, chatestv)
3136 chatestr = float(eval(CHATestREntry.get()))
3138 CHATestREntry.delete(0,END)
3139 CHATestREntry.insert(0, chatestr)
3141 DCVA0 = DCVB0 = DCIA0 = DCIB0 = 0.0
3151 AWGAOffsetEntry.delete(0,
"end")
3152 AWGAOffsetEntry.insert(0, chatestv)
3156 if RMode.get() == 0:
3161 if AWGSync.get() > 0:
3168 ADsignal1 = devx.get_samples(210)
3171 if session.continuous:
3172 ADsignal1 = devx.read(210, -1,
True)
3175 for index
in range(200):
3176 DCVA0 += ADsignal1[index+10][0][0]
3177 DCVB0 += ADsignal1[index+10][1][0]
3178 DCIA0 += ADsignal1[index+10][0][1]
3179 DCIB0 += ADsignal1[index+10][1][1]
3181 DCVA0 = DCVA0 / 200.0
3182 DCVB0 = DCVB0 / 200.0
3183 DCIA0 = DCIA0 / 200.0
3184 DCIB0 = DCIB0 / 200.0
3185 DCVA0 = (DCVA0 - InOffA) * InGainA
3186 DCVB0 = (DCVB0 - InOffB) * InGainB
3187 DCIA0 = ((DCIA0*1000) - CurOffA) * CurGainA
3188 DCIB0 = ((DCIB0*1000) - CurOffB) * CurGainB
3189 if RMode.get() == 0:
3190 DCM = chatestr * (DCVB0/(DCVA0-DCVB0))
3191 DCR = (DCM * RIN) / (RIN - DCM)
3193 DCR = chatestr * ((DCVA0-DCVB0)/DCVB0)
3195 OhmString =
'{0:.2f} '.format(DCR) +
"Ohms "
3197 OhmString =
'{0:.3f} '.format(DCR/1000) +
"KOhms "
3198 IAString =
"Meas " +
' {0:.2f} '.format(DCIA0) +
" mA " +
' {0:.2f} '.format(DCVB0) +
" V"
3199 OhmA0.config(text = OhmString)
3200 OhmA1.config(text = IAString)
3203 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
3207 global TIMEdiv, TMsb, TRACEmodeTime, TRACEresetTime, TRACEaverage
3208 global VBuffMA, VmemoryMuxA, VBuffMB, VmemoryMuxB, VBuffMC, VmemoryMuxC, VBuffMD, VmemoryMuxD
3209 global CHAVOffsetEntry, CHAVGainEntry, CHBVOffsetEntry, CHBVGainEntry
3210 global CHAIOffsetEntry, CHBIOffsetEntry, CHAIGainEntry, CHBIGainEntry
3211 global InOffA, InGainA, InOffB, InGainB
3212 global CurOffA, CurOffB, CurGainA, CurGainB
3213 global PhADisp, PhAScreenStatus, MuxScreenStatus
3214 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3218 TIMEdiv = eval(TMsb.get())
3221 TMsb.delete(0,
"end")
3222 TMsb.insert(0,TIMEdiv)
3223 if TIMEdiv < 0.0002:
3228 InOffA = float(eval(CHAVOffsetEntry.get()))
3230 CHAVOffsetEntry.delete(0,END)
3231 CHAVOffsetEntry.insert(0, InOffA)
3233 InGainA = float(eval(CHAVGainEntry.get()))
3235 CHAVGainEntry.delete(0,END)
3236 CHAVGainEntry.insert(0, InGainA)
3238 InOffB = float(eval(CHBVOffsetEntry.get()))
3240 CHBVOffsetEntry.delete(0,END)
3241 CHBVOffsetEntry.insert(0, InOffB)
3243 InGainB = float(eval(CHBVGainEntry.get()))
3245 CHBVGainEntry.delete(0,END)
3246 CHBVGainEntry.insert(0, InGainB)
3248 CurOffA = float(CHAIOffsetEntry.get())
3252 CurOffB = float(CHBIOffsetEntry.get())
3256 CurGainA = float(CHAIGainEntry.get())
3260 CurGainB = float(CHBIGainEntry.get())
3268 if MuxScreenStatus.get() > 0:
3269 if Show_CBA.get() == 1:
3271 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3273 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
3276 VmemoryMuxA = VBuffMA
3277 if Show_CBB.get() == 1:
3279 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3281 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
3284 VmemoryMuxB = VBuffMB
3285 if Show_CBC.get() == 1:
3287 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3289 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
3292 VmemoryMuxC = VBuffMC
3293 if Show_CBD.get() == 1:
3295 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3297 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
3300 VmemoryMuxD = VBuffMD
3301 if PhADisp.get() > 0
and PhAScreenStatus.get() == 1:
3306 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB
3307 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
3308 global VAresult, VBresult, IAresult, IBresult, VABresult
3309 global PhaseVA, PhaseVB, PhaseIA, PhaseIB, PhaseVAB
3310 global VMAresult, VMBresult,VMCresult, VMDresult
3311 global PhaseVMA, PhaseVMB, PhaseVMC, PhaseVMD
3312 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3313 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3314 global DCVMuxA, DCVMuxB, DCVMuxC, DCVMuxD
3315 global SHOWsamples, SMPfft, hldn, MuxScreenStatus, MuxChan
3316 global FFTwindowshape, ZEROstuffing
3318 if len(VBuffA) < SMPfft:
3325 StopSmp = hldn + SMPfft
3333 REX = numpy.array(VBuffA[StartSmp:StopSmp]-DCV1)
3339 REX = REX * FFTwindowshape[0:len(REX)]
3341 ALL = numpy.fft.fft(REX, n=SMPfft)
3342 PhaseVA = numpy.angle(ALL, deg=
True)
3343 ALL = numpy.absolute(ALL)
3345 le = int(len(ALL) / 2)
3347 PhaseVA = PhaseVA[0:le]
3348 Totalcorr = 7.07106 / SMPfft
3349 VAresult = Totalcorr * ALL
3351 if MuxScreenStatus.get() == 0:
3355 REX = numpy.array(VBuffB[StartSmp:StopSmp]-DCV2)
3361 REX = REX * FFTwindowshape[0:len(REX)]
3364 ALL = numpy.fft.fft(REX, n=SMPfft)
3365 PhaseVB = numpy.angle(ALL, deg=
True)
3366 ALL = numpy.absolute(ALL)
3368 le = int(len(ALL) / 2)
3370 PhaseVB = PhaseVB[0:le]
3371 Totalcorr = 7.07106 / SMPfft
3372 VBresult = Totalcorr * ALL
3375 REX = numpy.array(VBuffA[StartSmp:StopSmp]-VBuffB[StartSmp:StopSmp])
3376 REX = REX - (DCV1-DCV2)
3381 REX = REX * FFTwindowshape[0:len(REX)]
3384 ALL = numpy.fft.fft(REX, n=SMPfft)
3385 PhaseVAB = numpy.angle(ALL, deg=
True)
3386 ALL = numpy.absolute(ALL)
3388 le = int(len(ALL) / 2)
3390 PhaseVAB = PhaseVAB[0:le]
3391 Totalcorr = 7.07106 / SMPfft
3392 VABresult = Totalcorr * ALL
3397 REX = numpy.array(VBuffMA[StartSmp:StopSmp]-DCVMuxA)
3403 REX = REX * FFTwindowshape[0:len(REX)]
3406 ALL = numpy.fft.fft(REX, n=SMPfft)
3407 PhaseVMA = numpy.angle(ALL, deg=
True)
3408 ALL = numpy.absolute(ALL)
3410 le = int(len(ALL) / 2)
3412 PhaseVMA = PhaseVMA[0:le]
3413 Totalcorr = 7.07106 / SMPfft
3414 VMAresult = Totalcorr * ALL
3418 REX = numpy.array(VBuffMB[StartSmp:StopSmp]-DCVMuxB)
3424 REX = REX * FFTwindowshape[0:len(REX)]
3427 ALL = numpy.fft.fft(REX, n=SMPfft)
3428 PhaseVMB = numpy.angle(ALL, deg=
True)
3429 ALL = numpy.absolute(ALL)
3431 le = int(len(ALL) / 2)
3433 PhaseVMB = PhaseVMB[0:le]
3434 Totalcorr = 7.07106 / SMPfft
3435 VMBresult = Totalcorr * ALL
3439 REX = numpy.array(VBuffMC[StartSmp:StopSmp]-DCVMuxC)
3445 REX = REX * FFTwindowshape[0:len(REX)]
3448 ALL = numpy.fft.fft(REX, n=SMPfft)
3449 PhaseVMC = numpy.angle(ALL, deg=
True)
3450 ALL = numpy.absolute(ALL)
3452 le = int(len(ALL) / 2)
3454 PhaseVMC = PhaseVMC[0:le]
3455 Totalcorr = 7.07106 / SMPfft
3456 VMCresult = Totalcorr * ALL
3460 REX = numpy.array(VBuffMD[StartSmp:StopSmp]-DCVMuxD)
3466 REX = REX * FFTwindowshape[0:len(REX)]
3469 ALL = numpy.fft.fft(REX, n=SMPfft)
3470 PhaseVMD = numpy.angle(ALL, deg=
True)
3471 ALL = numpy.absolute(ALL)
3473 le = int(len(ALL) / 2)
3475 PhaseVMD = PhaseVMD[0:le]
3476 Totalcorr = 7.07106 / SMPfft
3477 VMDresult = Totalcorr * ALL
3479 REX = numpy.array(IBuffA[StartSmp:StopSmp])
3485 REX = REX * FFTwindowshape[0:len(REX)]
3488 ALL = numpy.fft.fft(REX, n=SMPfft)
3489 PhaseIA = numpy.angle(ALL, deg=
True)
3490 ALL = numpy.absolute(ALL)
3492 le = int(len(ALL) / 2)
3494 PhaseIA = PhaseIA[0:le]
3495 Totalcorr = 0.707106 / SMPfft
3496 IAresult = Totalcorr * ALL
3499 REX = numpy.array(IBuffB[StartSmp:StopSmp])
3505 REX = REX * FFTwindowshape[0:len(REX)]
3508 ALL = numpy.fft.fft(REX, n=SMPfft)
3509 PhaseIB = numpy.angle(ALL, deg=
True)
3510 ALL = numpy.absolute(ALL)
3512 le = int(len(ALL) / 2)
3514 PhaseIB = PhaseIB[0:le]
3515 Totalcorr = 0.707106 / SMPfft
3516 IBresult = Totalcorr * ALL
3523 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3524 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3525 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3526 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3527 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3528 global CHA, CHB, session, devx, discontloop, contloop
3529 global TRACES, TRACESread, TRACEsize, First_Slow_sweep, ShiftPointer
3530 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3531 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered
3532 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
3533 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3534 global SCREENrefresh, DCrefresh
3535 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3536 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3537 global SV1, SI1, SV2, SI2, SVA_B
3538 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3539 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3540 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3541 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3542 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3543 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3544 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3545 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3546 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3547 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3548 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3549 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3550 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3551 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3552 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3553 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3554 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3555 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3556 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3557 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3558 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3561 DCVA0 = DCVB0 = DCIA0 = DCIB0= 0.0
3564 if First_Slow_sweep == 0:
3565 BufferLen = TIMEdiv*12.0
3566 VBuffA = numpy.ones(BufferLen)
3567 VBuffB = numpy.ones(BufferLen)
3568 IBuffA = numpy.ones(BufferLen)
3569 IBuffB = numpy.ones(BufferLen)
3570 First_Slow_sweep = 1
3572 if AWGScreenStatus.get() == 1:
3573 if AWGSync.get() > 0:
3579 ADsignal1 = devx.get_samples(NumSamples)
3581 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3582 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3583 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3584 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3587 if session.continuous:
3588 if MuxScreenStatus.get() > 0:
3589 devx.flush(-1,
True)
3590 DummySamples = NumSamples*2
3591 if DummySamples < 10000:
3592 DummySamples = 10000
3593 ADsignal1 = devx.read(DummySamples, -1,
True)
3594 ADsignal1 = devx.read(NumSamples, -1,
True)
3597 ADsignal1 = devx.get_samples(NumSamples)
3600 for index
in range(NumSamples):
3601 DCVA0 += ADsignal1[index][0][0]
3602 DCVB0 += ADsignal1[index][1][0]
3603 DCIA0 += ADsignal1[index][0][1]
3604 DCIB0 += ADsignal1[index][1][1]
3605 DCVA0 = DCVA0/(NumSamples)
3606 DCVB0 = DCVB0/(NumSamples)
3607 DCVA0 = (DCVA0 - InOffA) * InGainA
3608 DCVB0 = (DCVB0 - InOffB) * InGainB
3609 DCIA0 = DCIA0/(NumSamples)
3610 DCIB0 = DCIB0/(NumSamples)
3611 DCIA0 = DCIA0 * 1000
3612 DCIB0 = DCIB0 * 1000
3613 DCIA0 = (DCIA0 - CurOffA) * CurGainA
3614 DCIB0 = (DCIB0 - CurOffB) * CurGainB
3621 DCV1 = numpy.mean(VBuffA)
3622 DCV2 = numpy.mean(VBuffB)
3623 DCI1 = numpy.mean(IBuffA)
3624 DCI2 = numpy.mean(IBuffB)
3626 MinV1 = numpy.amin(VBuffA)
3627 MaxV1 = numpy.amax(VBuffA)
3628 MinV2 = numpy.amin(VBuffB)
3629 MaxV2 = numpy.amax(VBuffB)
3630 MinI1 = numpy.amin(IBuffA)
3631 MaxI1 = numpy.amax(IBuffA)
3632 MinI2 = numpy.amin(IBuffB)
3633 MaxI2 = numpy.amax(IBuffB)
3635 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA)))
3636 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA)))
3637 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB)))
3638 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB)))
3639 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA-VBuffB)))
3641 if TimeDisp.get() > 0:
3643 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3645 if MeasureStatus.get() > 0:
3647 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
3648 if RUNstatus.get() == 3:
3650 if RUNstatus.get() == 4:
3652 if TimeDisp.get() > 0:
3654 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3660 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3661 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3662 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3663 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3664 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3665 global CHA, CHB, session, devx, discontloop, contloop, DeBugMode
3666 global TRACES, TRACESread, TRACEsize, TRIGGERsampleAltA, TRIGGERsampleAltB
3667 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3668 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, Trigger_LPF_length, LPFTrigger
3669 global SAMPLErate, SHOWsamples, SMPfft, MinSamples, MaxSamples, AWGSAMPLErate
3670 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3671 global SCREENrefresh, DCrefresh, ETSrecord
3672 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3673 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3674 global SV1, SI1, SV2, SI2, SVA_B
3675 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3676 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3677 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3678 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3679 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3680 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
3681 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3682 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3683 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3684 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3685 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3686 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3687 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3688 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3689 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3690 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3691 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3692 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3693 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3694 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3695 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3697 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3698 TRACEresetTime =
True
3699 elif TRACEmodeTime.get() == 1:
3700 if TRACEresetTime ==
True:
3701 TRACEresetTime =
False
3709 HoldOff = float(eval(HoldOffentry.get()))
3712 HoldOffentry.delete(0,END)
3713 HoldOffentry.insert(0, HoldOff)
3715 HoldOffentry.delete(0,END)
3716 HoldOffentry.insert(0, HoldOff)
3719 HozPoss = float(eval(HozPossentry.get()))
3721 HozPossentry.delete(0,END)
3722 HozPossentry.insert(0, HozPoss)
3724 hldn = int(HoldOff * SAMPLErate/1000 )
3725 hozpos = int(HozPoss * SAMPLErate/1000 )
3728 twoscreens = int(SAMPLErate * 20.0 * TIMEdiv / 1000.0)
3729 onescreen = int(twoscreens/2)
3730 if hldn+hozpos > MaxSamples-twoscreens:
3731 hldn = MaxSamples-twoscreens-hozpos
3732 HoldOffentry.delete(0,END)
3733 HoldOffentry.insert(0, hldn*1000/SAMPLErate)
3734 if ETSDisp.get() > 0:
3736 MaxETSrecord = int(AWGSAMPLErate * 10 * TIMEdiv / 1000.0)
3738 MaxETSrecord = int(AWGSAMPLErate * 20 * TIMEdiv / 1000.0)
3739 if (MaxETSrecord*100) > MaxSamples:
3740 MaxETSrecord = MaxSamples / 100
3742 DivX = float(eval(DivXEntry.get()))
3747 DivXEntry.delete(0,END)
3748 DivXEntry.insert(0, DivX)
3750 DivXEntry.delete(0,END)
3751 DivXEntry.insert(0, DivX)
3753 MulX = (DivX*SAMPLErate)/(100*FOff)
3754 while MulX > MaxETSrecord:
3756 MulX = (DivX*SAMPLErate)/(100*FOff)
3759 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
3760 MulXEntry.config(text = SRstring)
3761 SRstring =
"Offset = " + str(FOff) +
" samples"
3762 FOffEntry.config(text = SRstring)
3763 SHOWsamples = int(MulX * 100)
3765 SHOWsamples = twoscreens + hldn + hozpos
3766 if SHOWsamples > MaxSamples:
3767 SHOWsamples = MaxSamples
3768 if SHOWsamples < MinSamples:
3769 SHOWsamples = MinSamples
3770 if PhAScreenStatus.get() > 0:
3771 if SHOWsamples < SMPfft:
3772 SHOWsamples = SMPfft + hldn + hozpos
3774 TRIGGERsample = hldn
3776 TRIGGERsample = abs(hozpos)
3777 TRIGGERsample = TRIGGERsample + hozpos
3779 if AWGScreenStatus.get() == 1:
3780 if AWGSync.get() > 0:
3787 ADsignal1 = devx.get_samples(SHOWsamples)
3789 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3790 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3791 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3792 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3794 if session.continuous:
3795 if MuxScreenStatus.get() > 0:
3796 devx.flush(-1,
True)
3797 DummySamples = SHOWsamples*2
3798 if DummySamples < 20000:
3799 DummySamples = 20000
3800 ADsignal1 = devx.read(DummySamples, -1,
True)
3801 ADsignal1 = devx.read(SHOWsamples, -1,
True)
3804 ADsignal1 = devx.get_samples(SHOWsamples)
3806 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3807 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3808 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3809 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3811 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3812 if ADC_Mux_Mode.get() == 0:
3815 elif ADC_Mux_Mode.get() == 1:
3818 elif ADC_Mux_Mode.get() == 4:
3821 elif ADC_Mux_Mode.get() == 5:
3831 if SHOWsamples >= 20000
and DecimateOption.get() > 0:
3833 SAMPLErate = int(AWGSAMPLErate/increment)
3834 if SHOWsamples >= 40000
and DecimateOption.get() > 0:
3836 SAMPLErate = int(AWGSAMPLErate/increment)
3838 if SHOWsamples != len(ADsignal1):
3839 SHOWsamples = len(ADsignal1)
3840 while index < SHOWsamples:
3841 if Two_X_Sample.get() == 1
and ADC_Mux_Mode.get() < 6:
3842 if ADC_Mux_Mode.get() == 0:
3843 VBuffA.append(ADsignal1[index][0][0])
3844 VBuffA.append(ADsignal1[index][1][1])
3845 VBuffB.append(ADsignal1[index][0][1])
3846 VBuffB.append(ADsignal1[index][1][0])
3847 if Alternate_Sweep_Mode.get() == 0:
3852 elif ADC_Mux_Mode.get() == 1:
3853 IBuffA.append(ADsignal1[index][0][1])
3854 IBuffA.append(ADsignal1[index][1][0])
3855 IBuffB.append(ADsignal1[index][0][0])
3856 IBuffB.append(ADsignal1[index][1][1])
3857 if Alternate_Sweep_Mode.get() == 0:
3862 elif ADC_Mux_Mode.get() == 2:
3863 VBuffA.append((ADsignal1[index][0][1])/1024.0)
3864 VBuffA.append((ADsignal1[index][1][0])/1024.0)
3866 IBuffB.append( ((ADsignal1[index][0][0])/4096.0)-0.5 )
3867 IBuffB.append( ((ADsignal1[index][1][1])/4096.0)-0.5 )
3869 if Alternate_Sweep_Mode.get() == 0:
3874 elif ADC_Mux_Mode.get() == 3:
3875 VBuffB.append((ADsignal1[index][0][0])/1024.0)
3876 VBuffB.append((ADsignal1[index][1][1])/1024.0)
3878 IBuffA.append( ((ADsignal1[index][0][1])/4096.0)-0.5 )
3879 IBuffA.append( ((ADsignal1[index][1][0])/4096.0)-0.5 )
3881 if Alternate_Sweep_Mode.get() == 0:
3886 elif ADC_Mux_Mode.get() == 4:
3887 VBuffA.append(ADsignal1[index][0][0])
3888 VBuffA.append(ADsignal1[index][1][1])
3889 IBuffA.append(ADsignal1[index][0][1])
3890 IBuffA.append(ADsignal1[index][1][0])
3891 if Alternate_Sweep_Mode.get() == 0:
3896 elif ADC_Mux_Mode.get() == 5:
3897 VBuffB.append(ADsignal1[index][0][1])
3898 VBuffB.append(ADsignal1[index][1][0])
3899 IBuffB.append(ADsignal1[index][0][0])
3900 IBuffB.append(ADsignal1[index][1][1])
3901 if Alternate_Sweep_Mode.get() == 0:
3907 VBuffA.append(ADsignal1[index][0][0])
3908 IBuffA.append(ADsignal1[index][0][1])
3909 VBuffB.append(ADsignal1[index][1][0])
3910 IBuffB.append(ADsignal1[index][1][1])
3911 index = index + increment
3913 SHOWsamples = len(VBuffA)
3914 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3915 if ADC_Mux_Mode.get() == 0:
3916 VBuffA = numpy.array(VBuffA)
3917 VBuffB = numpy.array(VBuffB)
3918 VBuffA = (VBuffA - InOffA) * InGainA
3919 VBuffB = (VBuffB - InOffB) * InGainB
3921 Last_ADC_Mux_Mode = 0
3922 elif ADC_Mux_Mode.get() == 1:
3923 IBuffA = numpy.array(IBuffA) * 1000
3924 IBuffB = numpy.array(IBuffB) * 1000
3925 IBuffA = (IBuffA - CurOffA) * CurGainA
3926 IBuffB = (IBuffB - CurOffB) * CurGainB
3927 ADC_Mux_Mode.set(Last_ADC_Mux_Mode)
3928 elif ADC_Mux_Mode.get() == 4:
3929 VBuffA = numpy.array(VBuffA)
3930 IBuffA = numpy.array(IBuffA) * 1000
3931 IBuffA = (IBuffA - CurOffA) * CurGainA
3932 VBuffA = (VBuffA - InOffA) * InGainA
3934 Last_ADC_Mux_Mode = 4
3935 elif ADC_Mux_Mode.get() == 5:
3936 VBuffB = numpy.array(VBuffB)
3937 VBuffB = (VBuffB - InOffB) * InGainB
3938 IBuffB = numpy.array(IBuffB) * 1000
3939 IBuffB = (IBuffB - CurOffB) * CurGainB
3941 Last_ADC_Mux_Mode = 5
3945 VBuffA = numpy.array(VBuffA)
3946 VBuffB = numpy.array(VBuffB)
3947 IBuffA = numpy.array(IBuffA) * 1000
3948 IBuffB = numpy.array(IBuffB) * 1000
3949 VBuffA = (VBuffA - InOffA) * InGainA
3950 VBuffB = (VBuffB - InOffB) * InGainB
3951 IBuffA = (IBuffA - CurOffA) * CurGainA
3952 IBuffB = (IBuffB - CurOffB) * CurGainB
3955 if ETSDisp.get() > 0:
3956 baseFreq = SAMPLErate/DivX
3964 FMul = float(eval(FminEntry.get()))
3967 FMulXEntry.delete(0,END)
3968 FMulXEntry.insert(0, int(FMul))
3971 FMulXEntry.delete(0,END)
3972 FMulXEntry.insert(0, int(FMul))
3974 FMulXEntry.delete(0,END)
3975 FMulXEntry.insert(0, int(FMul))
3976 Fmin = baseFreq * FMul
3977 FminE = float(SAMPLErate + FOff)
3978 Samples_Cycle = SAMPLErate/FminE
3980 tot_cycles = int((MulX*100)/Samples_Cycle)
3981 tot_cycles = tot_cycles + 0.1
3982 ETSrecord = int((MulX*50)/Samples_Cycle)
3983 if tot_cycles > SHOWsamples:
3984 tot_cycles = SHOWsamples-1
3986 while index < SHOWsamples:
3987 Ipart, Dpart = divmod( index*Samples_Cycle, 1)
3988 IndexValue = int(tot_cycles * Dpart)
3989 if IndexValue > SHOWsamples:
3990 IndexValue = SHOWsamples-1
3991 if IndexValue > tot_cycles:
3992 IndexValue = tot_cycles
3993 if ETSDir.get() == 0:
3994 VAets.append(VBuffA[IndexValue])
3995 VBets.append(VBuffB[IndexValue])
3996 IAets.append(IBuffA[IndexValue])
3997 IBets.append(IBuffB[IndexValue])
3999 VAets.append(VBuffA[tot_cycles-IndexValue])
4000 VBets.append(VBuffB[tot_cycles-IndexValue])
4001 IAets.append(IBuffA[tot_cycles-IndexValue])
4002 IBets.append(IBuffB[tot_cycles-IndexValue])
4005 TimeCorrection = int(SHiftFact )
4010 VBuffA = numpy.array(VBuffA)
4011 VBuffB = numpy.array(VBuffB)
4012 IBuffA = numpy.array(IBuffA)
4013 IBuffB = numpy.array(IBuffB)
4015 TimeCorrection = int(float(eval(ETSts.get())) * TimeCorrection)
4017 TimeCorrection = SHiftFact
4018 if ETSDir.get() == 0:
4019 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4020 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4022 VBuffB = numpy.roll(VBuffB, TimeCorrection)
4023 IBuffB = numpy.roll(IBuffB, TimeCorrection)
4024 SHOWsamples = twoscreens + hldn + hozpos
4026 if CHA_RC_HP.get() == 1
or CHAI_RC_HP.get() == 1:
4028 TC1A = float(cha_TC1Entry.get())
4031 cha_TC1Entry.delete(0,END)
4032 cha_TC1Entry.insert(0, TC1A)
4034 TC1A = CHA_TC1.get()
4036 TC2A = float(cha_TC2Entry.get())
4039 cha_TC2Entry.delete(0,END)
4040 cha_TC2Entry.insert(0, TC2A)
4042 TC2A = CHA_TC2.get()
4045 Gain1A = float(cha_A1Entry.get())
4047 Gain1A = CHA_A1.get()
4049 Gain2A = float(cha_A2Entry.get())
4051 Gain2A = CHA_A2.get()
4056 if CHAI_RC_HP.get() == 1:
4059 if CHB_RC_HP.get() == 1
or CHBI_RC_HP.get() == 1:
4061 TC1B = float(chb_TC1Entry.get())
4064 chb_TC1Entry.delete(0, END)
4065 chb_TC1Entry.insert(0, TC1B)
4067 TC1B = CHB_TC1.get()
4069 TC2B = float(chb_TC2Entry.get())
4072 chb_TC2Entry.delete(0, END)
4073 chb_TC2Entry.insert(0, TC2B)
4075 TC2B = CHB_TC2.get()
4078 Gain1B = float(chb_A1Entry.get())
4080 Gain1B = CHB_A1.get()
4082 Gain2B = float(chb_A2Entry.get())
4084 Gain2B = CHB_A2.get()
4089 if CHBI_RC_HP.get() == 1:
4093 if DigFiltA.get() == 1:
4094 if len(DFiltACoef) > 1:
4095 VBuffA = numpy.convolve(VBuffA, DFiltACoef)
4096 if DigFiltB.get() == 1:
4097 if len(DFiltBCoef) > 1:
4098 VBuffB = numpy.convolve(VBuffB, DFiltBCoef)
4101 if TgInput.get() == 1:
4103 if TgInput.get() == 2:
4105 if TgInput.get() == 3:
4107 if TgInput.get() == 4:
4109 if TgInput.get() == 5:
4111 if Is_Triggered == 0:
4113 if TgInput.get() == 6:
4115 TRIGGERsampleAltA = TRIGGERsample
4117 TRIGGERsampleAltB = TRIGGERsample
4118 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
4120 if TgInput.get() > 0:
4121 LShift = 0 - TRIGGERsample
4122 if TgInput.get() == 6:
4123 LShift = 0 - TRIGGERsampleA
4124 VBuffA = numpy.roll(VBuffA, LShift)
4125 IBuffA = numpy.roll(IBuffA, LShift)
4126 LShift = 0 - TRIGGERsampleB
4127 VBuffB = numpy.roll(VBuffB, LShift)
4128 IBuffB = numpy.roll(IBuffB, LShift)
4130 VBuffA = numpy.roll(VBuffA, LShift)
4131 VBuffB = numpy.roll(VBuffB, LShift)
4132 IBuffA = numpy.roll(IBuffA, LShift)
4133 IBuffB = numpy.roll(IBuffB, LShift)
4134 TRIGGERsample = hozpos
4136 if DualMuxMode.get() == 0
and MuxScreenStatus.get() == 0:
4137 VBuffA = VmemoryA + (VBuffA - VmemoryA) / TRACEaverage.get()
4138 IBuffA = ImemoryA + (IBuffA - ImemoryA) / TRACEaverage.get()
4139 if MuxScreenStatus.get() == 0:
4140 VBuffB = VmemoryB + (VBuffB - VmemoryB) / TRACEaverage.get()
4141 IBuffB = ImemoryB + (IBuffB - ImemoryB) / TRACEaverage.get()
4145 if MuxScreenStatus.get() == 0:
4149 if TgInput.get() == 1
or TgInput.get() == 5
or TgInput.get() == 6:
4151 if TgInput.get() == 2:
4153 if TgInput.get() == 3
or TgInput.get() == 5
or TgInput.get() == 6:
4155 if TgInput.get() == 4:
4158 if CHA_RC_HP.get() == 1
or CHB_RC_HP.get() == 1:
4159 Endsample = hldn+onescreen
4161 Endsample = SHOWsamples - 10
4162 if MeasGateStatus.get() == 1:
4163 if (MeasGateRight-MeasGateLeft) > 0:
4164 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
4165 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
4166 if Endsample <= hldn:
4167 Endsample = hldn + 2
4168 DCV1 = numpy.mean(VBuffA[hldn:Endsample])
4169 DCV2 = numpy.mean(VBuffB[hldn:Endsample])
4171 DCI1 = numpy.mean(IBuffA[hldn:Endsample])
4172 DCI2 = numpy.mean(IBuffB[hldn:Endsample])
4174 MinV1 = numpy.amin(VBuffA[hldn:Endsample])
4175 MaxV1 = numpy.amax(VBuffA[hldn:Endsample])
4176 MinV2 = numpy.amin(VBuffB[hldn:Endsample])
4177 MaxV2 = numpy.amax(VBuffB[hldn:Endsample])
4178 MinI1 = numpy.amin(IBuffA[hldn:Endsample])
4179 MaxI1 = numpy.amax(IBuffA[hldn:Endsample])
4180 MinI2 = numpy.amin(IBuffB[hldn:Endsample])
4181 MaxI2 = numpy.amax(IBuffB[hldn:Endsample])
4183 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample])))
4184 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA[hldn:Endsample])))
4185 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB[hldn:Endsample])))
4186 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB[hldn:Endsample])))
4187 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample]-VBuffB[hldn:Endsample])))
4189 if TgInput.get() > 0
and MuxChan > -1
and TRACEmodeTime.get() != 1:
4191 LShift = 0 - TRIGGERsample
4192 VBuffA = numpy.roll(VBuffA, LShift)
4193 VBuffB = numpy.roll(VBuffB, LShift)
4194 IBuffA = numpy.roll(IBuffA, LShift)
4195 IBuffB = numpy.roll(IBuffB, LShift)
4196 TRIGGERsample = hozpos
4198 Dval0 = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4199 Dval1 = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4200 if Show_CBA.get() == 1
and Dval0[0] == 0
and Dval1[0] == 0:
4204 MidVMuxA = (MaxV2+MinV2)/2.0
4205 PPVMuxA = MaxV2-MinV2
4208 if Show_CBB.get() == 1
and Dval0[0] == 1
and Dval1[0] == 0:
4212 MidVMuxB = (MaxV2+MinV2)/2.0
4213 PPVMuxB = MaxV2-MinV2
4216 if Show_CBC.get() == 1
and Dval0[0] == 0
and Dval1[0] == 1:
4217 if DualMuxMode.get() == 1:
4221 MidVMuxC = (MaxV1+MinV1)/2.0
4222 PPVMuxC = MaxV1-MinV1
4229 MidVMuxC = (MaxV2+MinV2)/2.0
4230 PPVMuxC = MaxV2-MinV2
4233 if Show_CBD.get() == 1
and Dval0[0] == 1
and Dval1[0] == 1:
4234 if DualMuxMode.get() == 1:
4238 MidVMuxD = (MaxV1+MinV1)/2.0
4239 PPVMuxD = MaxV1-MinV1
4246 MidVMuxD = (MaxV2+MinV2)/2.0
4247 PPVMuxD = MaxV2-MinV2
4251 if TimeDisp.get() > 0:
4253 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4255 if SingleShot.get() > 0
and Is_Triggered == 1:
4258 if ManualTrigger.get() == 1:
4260 if MeasureStatus.get() > 0:
4262 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
4263 if RUNstatus.get() == 3:
4265 if RUNstatus.get() == 4:
4267 if TimeDisp.get() > 0:
4269 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4276 global DCV1, DCV2, VBuffA, VBuffB
4284 sum1 += (VBuffA[i]-DCV1)*(VBuffA[i]-DCV1)
4285 sum2 += (VBuffB[i]-DCV2)*(VBuffB[i]-DCV2)
4286 sum12 += (VBuffA[i]-DCV1)*(VBuffB[i]-DCV2)
4288 return math.acos(sum12/math.sqrt(sum1*sum2))*180.0/numpy.pi
4302 Delta = 1.0/SAMPLErate
4304 Alpha = TC / (TC + Delta)
4305 OutBuff.append(InBuff[1]-InBuff[0])
4308 OutBuff.append( Alpha * (OutBuff[i-1] + InBuff[i] - InBuff[i-1]) )
4310 OutBuff = numpy.array(OutBuff)
4311 OutBuff = InBuff + (OutBuff * Gain)
4320 Delta = 1.0/SAMPLErate
4322 Alpha = Delta / (TC + Delta)
4324 OutBuff.append(Alpha*InBuff[0])
4326 OutBuff.append( OutBuff[i-1] + (Alpha * (InBuff[i] - InBuff[i-1])) )
4328 OutBuff = numpy.array(OutBuff)
4329 OutBuff = (OutBuff * Gain)
4336 result = numpy.empty_like(arr)
4338 result[:num] = fill_value
4339 result[num:] = arr[:-num]
4341 result[num:] = fill_value
4342 result[:num] = arr[-num:]
4350 global ADsignal1, FFTBuffA, FFTBuffB, SMPfft
4351 global AWGSync, AWGAMode, AWGBMode, AWGAShape, AWGAIOMode, AWGBIOMode
4352 global AWGAFreqvalue, AWGBFreqvalue, FStepSync, FSweepSync
4353 global NSteps, LoopNum, FSweepMode, FStep, FBins
4354 global StartFreqEntry, StopFreqEntry, HoldOffentry
4355 global session, CHA, CHB, devx, MaxSamples, discontloop
4356 global RUNstatus, SingleShotSA, FSweepCont, Two_X_Sample, ADC_Mux_Mode
4357 global AWGSAMPLErate, IAScreenStatus, SpectrumScreenStatus, BodeScreenStatus
4358 global NiCScreenStatus, NiCDisp, NqPScreenStatus, NqPDisp
4359 global OverRangeFlagA, OverRangeFlagB, BodeDisp, FreqDisp, IADisp
4360 global DCA, DCB, InOffA, InGainA, InOffB, InGainB
4361 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4362 global DigFiltA, DFiltACoef, DigFiltB, DFiltBCoef
4363 global BDSweepFile, FileSweepFreq, FileSweepAmpl
4364 global PIO_0, PIO_1, PIO_2, PIO_3
4365 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
4366 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4367 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4368 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4369 global Reset_Freq, AWGAFreqEntry, AWGBFreqEntry, MinigenFout, IASource, IA_Ext_Conf
4371 HalfSAMPLErate = SAMPLErate/2
4374 InOffA = float(eval(CHAVOffsetEntry.get()))
4376 CHAVOffsetEntry.delete(0,END)
4377 CHAVOffsetEntry.insert(0, InOffA)
4379 InGainA = float(eval(CHAVGainEntry.get()))
4381 CHAVGainEntry.delete(0,END)
4382 CHAVGainEntry.insert(0, InGainA)
4384 InOffB = float(eval(CHBVOffsetEntry.get()))
4386 CHBVOffsetEntry.delete(0,END)
4387 CHBVOffsetEntry.insert(0, InOffB)
4389 InGainB = float(eval(CHBVGainEntry.get()))
4391 CHBVGainEntry.delete(0,END)
4392 CHBVGainEntry.insert(0, InGainB)
4394 HoldOff = float(eval(HoldOffentry.get()))
4397 HoldOffentry.delete(0,END)
4398 HoldOffentry.insert(0, HoldOff)
4400 HoldOffentry.delete(0,END)
4401 HoldOffentry.insert(0, HoldOff)
4406 if BodeDisp.get() == 0:
4407 if AWGAShape.get() == 7
and AWGAMode.get() == 0:
4409 elif AWGAShape.get() == 8
and AWGAMode.get() == 0:
4411 elif AWGBShape.get() == 7
and AWGBMode.get() == 0:
4413 elif AWGBShape.get() == 8
and AWGBMode.get() == 0:
4415 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
4416 if BDSweepFile.get() == 0:
4417 if LoopNum.get() <= len(FStep):
4418 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
4420 FregPoint = FBins[FStep[0]]
4422 if LoopNum.get() <= len(FileSweepFreq):
4423 FreqIndex = int((FileSweepFreq[LoopNum.get()-1]*16384)/HalfSAMPLErate)
4424 FregPoint = FBins[FreqIndex]
4425 VRMSAmpl = 10**(FileSweepAmpl[LoopNum.get()-1]/20)
4427 FregPoint = FBins[FileSweepFreq[0]]
4428 VRMSAmpl = 10**(FileSweepAmpl[0]/20)
4429 VMax = 2.5 + (1.414*VRMSAmpl)
4430 VMin = 2.5 - (1.414*VRMSAmpl)
4431 if FSweepMode.get() == 1:
4432 AWGAAmplEntry.delete(0,END)
4433 AWGAAmplEntry.insert(4, VMin)
4434 AWGAOffsetEntry.delete(0,END)
4435 AWGAOffsetEntry.insert(4, VMax)
4436 if FSweepMode.get() == 2:
4437 AWGBAmplEntry.delete(0,END)
4438 AWGBAmplEntry.insert(4, VMin)
4439 AWGBOffsetEntry.delete(0,END)
4440 AWGBOffsetEntry.insert(4, VMax)
4441 if FSweepMode.get() == 1:
4442 AWGAFreqEntry.delete(0,END)
4443 AWGAFreqEntry.insert(4, FregPoint)
4445 if FSweepMode.get() == 2:
4446 AWGBFreqEntry.delete(0,END)
4447 AWGBFreqEntry.insert(4, FregPoint)
4449 if FSweepMode.get() == 3:
4450 MinigenFout.delete(0,END)
4451 MinigenFout.insert(4, FregPoint)
4453 if AWGSync.get() > 0:
4454 if IAScreenStatus.get() > 0
and IASource.get() == 0:
4455 if Two_X_Sample.get() == 1:
4462 hldn = int(HoldOff * 100 )
4463 if hldn > MaxSamples-SMPfft:
4464 hldn = MaxSamples-SMPfft
4465 HoldOffentry.delete(0,END)
4466 HoldOffentry.insert(0, hldn/100)
4469 SHOWsamples = SMPfft + hldn
4470 if BodeDisp.get() > 0:
4471 if FStepSync.get() == 1:
4472 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4473 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4474 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4475 if FStepSync.get() == 2:
4476 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4477 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4478 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4479 if LoopNum.get() == 1
and FSweepSync.get() == 1:
4480 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4481 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4482 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4483 if LoopNum.get() == 1
and FSweepSync.get() == 2:
4484 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4485 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4486 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4487 if AWGScreenStatus.get() == 1:
4488 if IAScreenStatus.get() > 0
and IASource.get() == 0:
4489 if Two_X_Sample.get() == 1:
4494 if AWGSync.get() > 0:
4501 ADsignal1 = devx.get_samples(SHOWsamples)
4505 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4506 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4507 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4508 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4510 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4513 if session.continuous:
4514 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4516 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4517 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4518 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4519 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4522 OverRangeFlagA = OverRangeFlagB = 0
4524 if SHOWsamples != len(ADsignal1):
4525 SHOWsamples = len(ADsignal1)
4526 while index < SHOWsamples:
4527 if Two_X_Sample.get() == 1:
4528 if ADC_Mux_Mode.get() == 0:
4529 FFTBuffA.append(ADsignal1[index][0][0])
4530 FFTBuffA.append(ADsignal1[index][1][1])
4531 FFTBuffB.append(ADsignal1[index][0][1])
4532 FFTBuffB.append(ADsignal1[index][1][0])
4534 VAdata = ADsignal1[index][0][0]
4535 FFTBuffA.append(VAdata)
4536 VBdata = ADsignal1[index][1][0]
4537 FFTBuffB.append(VBdata)
4538 if VAdata > 5.0
or VAdata < 0.0:
4541 if VBdata > 5.0
or VBdata < 0.0:
4545 FFTBuffA = numpy.array(FFTBuffA)
4546 FFTBuffB = numpy.array(FFTBuffB)
4547 FFTBuffA = (FFTBuffA - InOffA) * InGainA
4548 FFTBuffB = (FFTBuffB - InOffB) * InGainB
4549 DCA = numpy.average(FFTBuffA)
4550 DCB = numpy.average(FFTBuffB)
4551 if CutDC.get() == 1:
4552 FFTBuffA = FFTBuffA - DCA
4553 FFTBuffB = FFTBuffB - DCB
4555 if CHA_RC_HP.get() == 1:
4557 TC1A = float(cha_TC1Entry.get())
4560 cha_TC1Entry.delete(0,END)
4561 cha_TC1Entry.insert(0, TC1A)
4563 TC1A = CHA_TC1.get()
4565 TC2A = float(cha_TC2Entry.get())
4568 cha_TC2Entry.delete(0,END)
4569 cha_TC2Entry.insert(0, TC2A)
4571 TC2A = CHA_TC2.get()
4574 Gain1A = float(cha_A1Entry.get())
4576 Gain1A = CHA_A1.get()
4578 Gain2A = float(cha_A2Entry.get())
4580 Gain2A = CHA_A2.get()
4584 if CHB_RC_HP.get() == 1:
4586 TC1B = float(chb_TC1Entry.get())
4589 chb_TC1Entry.delete(0, END)
4590 chb_TC1Entry.insert(0, TC1B)
4592 TC1B = CHB_TC1.get()
4594 TC2B = float(chb_TC2Entry.get())
4597 chb_TC2Entry.delete(0, END)
4598 chb_TC2Entry.insert(0, TC2B)
4600 TC2B = CHB_TC2.get()
4603 Gain1B = float(chb_A1Entry.get())
4605 Gain1B = CHB_A1.get()
4607 Gain2B = float(chb_A2Entry.get())
4609 Gain2B = CHB_A2.get()
4614 if DigFiltA.get() == 1:
4615 FFTBuffA = numpy.convolve(FFTBuffA, DFiltACoef)
4616 if DigFiltB.get() == 1:
4617 FFTBuffB = numpy.convolve(FFTBuffB, DFiltBCoef)
4619 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
4621 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
4623 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
4625 if NqPScreenStatus.get() > 0
and NqPDisp.get() > 0:
4627 if NiCScreenStatus.get() > 0
and NiCDisp.get() > 0:
4629 if SingleShotSA.get() == 1:
4633 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
4634 if RUNstatus.get() == 3:
4636 if RUNstatus.get() == 4:
4638 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
4640 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
4642 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
4643 LoopNum.set(LoopNum.get() + 1)
4644 if LoopNum.get() > NSteps.get():
4645 if FSweepMode.get() == 1:
4646 AWGAFreqEntry.delete(0,
"end")
4647 AWGAFreqEntry.insert(0, Reset_Freq)
4648 if FSweepMode.get() == 2:
4649 AWGBFreqEntry.delete(0,
"end")
4650 AWGBFreqEntry.insert(0, Reset_Freq)
4653 if FSweepCont.get() == 0:
4658 global VBuffA, VBuffB, IBuffA, IBuffB, HBuffA, HBuffB
4659 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
4660 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Xsignal
4661 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4662 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4663 global VABase, VATop, VBBase, VBTop
4665 if ShowC1_V.get() == 1
or Xsignal.get() == 6:
4666 CHAGridMax = (5 * CH1pdvRange ) + CHAOffset
4667 CHAGridMin = (-5 * CH1pdvRange ) + CHAOffset
4668 VAMid = (MinV1 + MaxV1)/2
4669 HBuffA = numpy.histogram(VBuffA, bins=5000, range=[CHAGridMin, CHAGridMax] )
4674 if HBuffA[0][b] > HBuffA[0][LowerPeak]
and HBuffA[1][b] < VAMid:
4676 VABase = HBuffA[1][b]
4677 if HBuffA[0][b] > HBuffA[0][UpperPeak]
and HBuffA[1][b] > VAMid:
4679 VATop = HBuffA[1][b]
4681 if ShowC2_V.get() == 1
or Xsignal.get() == 7:
4682 CHBGridMax = (5 * CH2pdvRange ) + CHBOffset
4683 CHBGridMin = (-5 * CH2pdvRange ) + CHBOffset
4684 VBMid = (MinV2 + MaxV2)/2
4685 HBuffB = numpy.histogram(VBuffB, bins=5000, range=[CHBGridMin, CHBGridMax] )
4690 if HBuffB[0][b] > HBuffB[0][LowerPeak]
and HBuffB[1][b] < VBMid:
4692 VBBase = HBuffB[1][b]
4693 if HBuffB[0][b] > HBuffB[0][UpperPeak]
and HBuffB[1][b] > VBMid:
4695 VBTop = HBuffB[1][b]
4699 global HistAsPercent
4701 if askyesno(
"Plot as Percent",
"Plot Histogram as Percent?", parent=xywindow):
4707 global MinV1, MaxV1, MinV2, MaxV2, HoldOff, TRIGGERsample, TgInput, LShift
4708 global ETSrecord, DISsamples
4709 global SHOWsamples, SAMPLErate, CHAperiod, CHAfreq, CHBperiod, CHBfreq
4710 global CHAHW, CHALW, CHADCy, CHBHW, CHBLW, CHBDCy, ShowC1_V, ShowC2_V
4711 global CHABphase, CHBADelayR1, CHBADelayR2, CHBADelayF
4716 hldn = int(HoldOff * SAMPLErate/1000)
4718 if TgInput.get() > 0:
4719 Trace1 = numpy.roll(Trace1, -LShift)
4720 Trace2 = numpy.roll(Trace2, -LShift)
4722 Trace1 = numpy.roll(Trace1, -hldn)
4723 Trace2 = numpy.roll(Trace2, -hldn)
4725 MidV1 = (numpy.amax(Trace1)+numpy.amin(Trace1))/2.0
4726 MidV2 = (numpy.amax(Trace2)+numpy.amin(Trace2))/2.0
4728 MidV1 = (MinV1+MaxV1)/2
4729 MidV2 = (MinV2+MaxV2)/2
4738 Arising = [i
for (i, val)
in enumerate(Trace1)
if val >= MidV1
and Trace1[i-1] < MidV1]
4739 Afalling = [i
for (i, val)
in enumerate(Trace1)
if val <= MidV1
and Trace1[i-1] > MidV1]
4740 AIrising = [i - (Trace1[i] - MidV1)/(Trace1[i] - Trace1[i-1])
for i
in Arising]
4741 AIfalling = [i - (MidV1 - Trace1[i])/(Trace1[i-1] - Trace1[i])
for i
in Afalling]
4743 CHAfreq = SAMPLErate / numpy.mean(numpy.diff(AIrising))
4744 CHAperiod = (numpy.mean(numpy.diff(AIrising)) * 1000.0) / SAMPLErate
4747 Dummy_read = Arising[0]
4750 if len(Arising) > 0
or len(Afalling) > 0:
4761 if AIfalling[0] < AIrising[0]:
4777 if AIfalling[1] < AIrising[1]:
4791 Brising = [i
for (i, val)
in enumerate(Trace2)
if val >= MidV2
and Trace2[i-1] < MidV2]
4792 Bfalling = [i
for (i, val)
in enumerate(Trace2)
if val <= MidV2
and Trace2[i-1] > MidV2]
4793 BIrising = [i - (Trace2[i] - MidV2)/(Trace2[i] - Trace2[i-1])
for i
in Brising]
4794 BIfalling = [i - (MidV2 - Trace2[i])/(Trace2[i-1] - Trace2[i])
for i
in Bfalling]
4796 CHBfreq = SAMPLErate / numpy.mean(numpy.diff(BIrising))
4797 CHBperiod = (numpy.mean(numpy.diff(BIrising)) * 1000.0) / SAMPLErate
4800 Dummy_read = Brising[0]
4803 if len(Brising) > 0
or len(Bfalling) > 0:
4814 if BIfalling[0] < BIrising[0]:
4830 if BIfalling[1] < BIrising[1]:
4837 CHAHW = float(((anf1 - anr1) * 1000.0) / SAMPLErate)
4838 CHALW = float(((anr2 - anf1) * 1000.0) / SAMPLErate)
4839 CHADCy = float(anf1 - anr1) / float(anr2 - anr1) * 100.0
4840 CHBHW = float(((bnf1 - bnr1) * 1000.0) / SAMPLErate)
4841 CHBLW = float(((bnr2 - bnf1) * 1000.0) / SAMPLErate)
4842 CHBDCy = float(bnf1 - bnr1) / float(bnr2 - bnr1) * 100.0
4845 CHBADelayR1 = float((bnr1 - anr1) * 1000.0 / SAMPLErate)
4847 CHBADelayR1 = float((bnr2 - anr1) * 1000.0 / SAMPLErate)
4848 CHBADelayR2 = float((bnr2 - anr2) * 1000.0 / SAMPLErate)
4849 CHBADelayF = float((bnf1 - anf1) * 1000.0 / SAMPLErate)
4851 CHABphase = 360.0*(float((bnr1 - anr1) * 1000.0 / SAMPLErate))/CHAperiod
4855 CHABphase = CHABphase + 360.0
4858 global DX, TRIGGERsample, TRIGGERlevel
4862 DY = TrgBuff[int(n)] - TrgBuff[int(n+1)]
4864 DX = (TRIGGERlevel - TrgBuff[int(n+1)])/DY
4869 global AutoLevel, TgInput, TRIGGERlevel, TRIGGERentry, DX, SAMPLErate, Is_Triggered
4870 global HoldOffentry, HozPossentry, TRIGGERsample, TRACEsize, HozPoss, hozpos
4871 global Trigger_LPF_length, LPFTrigger
4874 TRACEsize = SHOWsamples
4877 if LPFTrigger.get() > 0:
4879 for n
in range(Trigger_LPF_length.get()):
4880 TFiltCoef.append(float(1.0/Trigger_LPF_length.get()))
4881 TFiltCoef = numpy.array(TFiltCoef)
4882 TrgBuff = numpy.convolve(TrgBuff, TFiltCoef)
4884 if len(TrgBuff) == 0:
4887 TrgMin = numpy.amin(TrgBuff)
4891 TrgMax = numpy.amax(TrgBuff)
4896 if AutoLevel.get() == 1:
4897 TRIGGERlevel = (TrgMin + TrgMax)/2
4898 TRIGGERentry.delete(0,
"end")
4899 TRIGGERentry.insert(0,
' {0:.4f} '.format(TRIGGERlevel))
4901 TRIGGERlevel = eval(TRIGGERentry.get())
4903 TRIGGERentry.delete(0,END)
4904 TRIGGERentry.insert(0, TRIGGERlevel)
4907 HoldOff = float(eval(HoldOffentry.get()))
4910 HoldOffentry.delete(0,END)
4911 HoldOffentry.insert(0, HoldOff)
4913 HoldOffentry.delete(0,END)
4914 HoldOffentry.insert(0, HoldOff)
4917 HozPoss = float(eval(HozPossentry.get()))
4919 HozPossentry.delete(0,END)
4920 HozPossentry.insert(0, HozPoss)
4922 hldn = int(HoldOff * SAMPLErate/1000)
4923 hozpos = int(HozPoss * SAMPLErate/1000)
4925 TRIGGERsample = hldn
4927 TRIGGERsample = abs(hozpos)
4929 Nmax = int(TRACEsize / 1.5)
4932 TRIGGERlevel2 = 0.99 * TRIGGERlevel
4933 if TRIGGERlevel2 < TrgMin:
4934 TRIGGERlevel2 = TrgMin
4935 if TRIGGERlevel2 > TrgMax:
4936 TRIGGERlevel2 = TrgMax
4937 ChInput = TrgBuff[int(n)]
4939 while ( ChInput >= TRIGGERlevel2)
and n < Nmax:
4941 ChInput = TrgBuff[int(n)]
4942 while (ChInput <= TRIGGERlevel)
and n < Nmax:
4945 ChInput = TrgBuff[int(n)]
4948 DX = (TRIGGERlevel - Prev)/DY
4951 if TgEdge.get() == 1:
4952 TRIGGERlevel2 = 1.01 * TRIGGERlevel
4953 if TRIGGERlevel2 < TrgMin:
4954 TRIGGERlevel2 = TrgMin
4955 if TRIGGERlevel2 > TrgMax:
4956 TRIGGERlevel2 = TrgMax
4957 ChInput = TrgBuff[int(n)]
4959 while (ChInput <= TRIGGERlevel2)
and n < Nmax:
4961 ChInput = TrgBuff[int(n)]
4962 while (ChInput >= TRIGGERlevel)
and n < Nmax:
4965 ChInput = TrgBuff[int(n)]
4968 DX = (Prev - TRIGGERlevel)/DY
4974 TRIGGERsample = n - 1
4977 TRIGGERsample = 1 + hldn
4985 TRIGGERsample = TRIGGERsample + hozpos
4988 global win2, DigScreenStatus
4990 DigScreenStatus.set(0)
4995 global D0, D1, D2, D3, D4, D5, D6, D7
4996 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4999 devx.ctrl_transfer( 0x40, D0.get(), PIO_0, 0, 0, 0, 100)
5001 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5003 devx.ctrl_transfer( 0x40, D1.get(), PIO_1, 0, 0, 0, 100)
5005 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5007 devx.ctrl_transfer( 0x40, D2.get(), PIO_2, 0, 0, 0, 100)
5009 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5011 devx.ctrl_transfer( 0x40, D3.get(), PIO_3, 0, 0, 0, 100)
5013 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5015 devx.ctrl_transfer( 0x40, D4.get(), PIO_4, 0, 0, 0, 100)
5017 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5019 devx.ctrl_transfer( 0x40, D5.get(), PIO_5, 0, 0, 0, 100)
5021 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5023 devx.ctrl_transfer( 0x40, D6.get(), PIO_6, 0, 0, 0, 100)
5025 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5027 devx.ctrl_transfer( 0x40, D7.get(), PIO_7, 0, 0, 0, 100)
5029 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5032 global D0, D1, D2, D3, D4, D5, D6, D7
5033 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
5034 global DigScreenStatus, DacScreenStatus, win2, MuxScreenStatus
5036 if DigScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5037 DigScreenStatus.set(1)
5039 win2.title(
"Dig Out")
5040 win2.resizable(FALSE,FALSE)
5041 win2.protocol(
"WM_DELETE_WINDOW", DestroyDigScreen)
5042 drb1 = Radiobutton(win2, text=
"D0-0", variable=D0, value=0x50, command=sel )
5043 drb1.grid(row=2, column=0, sticky=W)
5044 drb0z = Radiobutton(win2, text=
"D0-Z", variable=D0, value=0, command=sel )
5045 drb0z.grid(row=2, column=1, sticky=W)
5046 drb2 = Radiobutton(win2, text=
"D0-1", variable=D0, value=0x51, command=sel )
5047 drb2.grid(row=2, column=2, sticky=W)
5048 drb3 = Radiobutton(win2, text=
"D1-0", variable=D1, value=0x50, command=sel )
5049 drb3.grid(row=3, column=0, sticky=W)
5050 drb3z = Radiobutton(win2, text=
"D1-Z", variable=D1, value=0, command=sel )
5051 drb3z.grid(row=3, column=1, sticky=W)
5052 drb4 = Radiobutton(win2, text=
"D1-1", variable=D1, value=0x51, command=sel )
5053 drb4.grid(row=3, column=2, sticky=W)
5054 drb5 = Radiobutton(win2, text=
"D2-0", variable=D2, value=0x50, command=sel )
5055 drb5.grid(row=4, column=0, sticky=W)
5056 drb5z = Radiobutton(win2, text=
"D2-Z", variable=D2, value=0, command=sel )
5057 drb5z.grid(row=4, column=1, sticky=W)
5058 drb6 = Radiobutton(win2, text=
"D2-1", variable=D2, value=0x51, command=sel )
5059 drb6.grid(row=4, column=2, sticky=W)
5060 drb7 = Radiobutton(win2, text=
"D3-0", variable=D3, value=0x50, command=sel )
5061 drb7.grid(row=5, column=0, sticky=W)
5062 drb7z = Radiobutton(win2, text=
"D3-Z", variable=D3, value=0, command=sel )
5063 drb7z.grid(row=5, column=1, sticky=W)
5064 drb8 = Radiobutton(win2, text=
"D3-1", variable=D3, value=0x51, command=sel )
5065 drb8.grid(row=5, column=2, sticky=W)
5066 drb9 = Radiobutton(win2, text=
"D4-0", variable=D4, value=0x50, command=sel )
5067 drb9.grid(row=6, column=0, sticky=W)
5068 drb9z = Radiobutton(win2, text=
"D4-Z", variable=D4, value=0, command=sel )
5069 drb9z.grid(row=6, column=1, sticky=W)
5070 drb10 = Radiobutton(win2, text=
"D4-1", variable=D4, value=0x51, command=sel )
5071 drb10.grid(row=6, column=2, sticky=W)
5072 drb11 = Radiobutton(win2, text=
"D5-0", variable=D5, value=0x50, command=sel )
5073 drb11.grid(row=7, column=0, sticky=W)
5074 drb11z = Radiobutton(win2, text=
"D5-Z", variable=D5, value=0, command=sel )
5075 drb11z.grid(row=7, column=1, sticky=W)
5076 drb12 = Radiobutton(win2, text=
"D5-1", variable=D5, value=0x51, command=sel )
5077 drb12.grid(row=7, column=2, sticky=W)
5078 drb13 = Radiobutton(win2, text=
"D6-0", variable=D6, value=0x50, command=sel )
5079 drb13.grid(row=8, column=0, sticky=W)
5080 drb13z = Radiobutton(win2, text=
"D6-Z", variable=D6, value=0, command=sel )
5081 drb13z.grid(row=8, column=1, sticky=W)
5082 drb13 = Radiobutton(win2, text=
"D6-1", variable=D6, value=0x51, command=sel )
5083 drb13.grid(row=8, column=2, sticky=W)
5084 drb14 = Radiobutton(win2, text=
"D7-0", variable=D7, value=0x50, command=sel )
5085 drb14.grid(row=9, column=0, sticky=W)
5086 drb14z = Radiobutton(win2, text=
"D7-Z", variable=D7, value=0, command=sel )
5087 drb14z.grid(row=9, column=1, sticky=W)
5088 drb15 = Radiobutton(win2, text=
"D7-1", variable=D7, value=0x51, command=sel )
5089 drb15.grid(row=9, column=2, sticky=W)
5091 digdismissbutton = Button(win2, text=
"Dismiss", command=DestroyDigScreen)
5092 digdismissbutton.grid(row=10, column=0, sticky=W)
5095 global win1, DacScreenStatus
5097 DacScreenStatus.set(0)
5106 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5107 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5108 elif DAC0.get() == 4:
5109 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5110 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5111 elif DAC0.get() == 2:
5112 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
5113 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5114 elif DAC0.get() == 3:
5115 Dval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
5116 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5117 elif DAC0.get() == 5:
5118 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5119 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5120 elif DAC0.get() == 7:
5121 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
5122 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5123 elif DAC0.get() == 8:
5124 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5125 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
5126 elif DAC0.get() == 6:
5127 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5128 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
5129 elif DAC0.get() == 9:
5130 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
5131 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
5139 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5140 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5141 elif DAC1.get() == 4:
5142 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5143 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5144 elif DAC1.get() == 2:
5145 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
5146 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5147 elif DAC1.get() == 3:
5148 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5149 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5150 elif DAC1.get() == 5:
5151 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5152 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5153 elif DAC1.get() == 7:
5154 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
5155 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5156 elif DAC1.get() == 8:
5157 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5158 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
5159 elif DAC1.get() == 6:
5160 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5161 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
5162 elif DAC1.get() == 9:
5163 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
5164 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
5172 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5173 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5174 elif DAC2.get() == 4:
5175 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5176 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5177 elif DAC2.get() == 2:
5178 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5179 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5180 elif DAC2.get() == 3:
5181 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5182 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5183 elif DAC2.get() == 5:
5184 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5185 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5186 elif DAC2.get() == 7:
5187 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5188 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5189 elif DAC2.get() == 8:
5190 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5191 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5192 elif DAC2.get() == 6:
5193 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5194 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5195 elif DAC2.get() == 9:
5196 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5197 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5205 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5206 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5207 elif DAC3.get() == 4:
5208 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5209 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5210 elif DAC3.get() == 2:
5211 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5212 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5213 elif DAC3.get() == 3:
5214 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5215 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5216 elif DAC3.get() == 5:
5217 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5218 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5219 elif DAC3.get() == 7:
5220 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5221 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5222 elif DAC3.get() == 8:
5223 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5224 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5225 elif DAC3.get() == 6:
5226 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5227 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5228 elif DAC3.get() == 9:
5229 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5230 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5233 global DAC0, DAC1, DAC2, DAC3, SWRev, RevDate
5234 global DacScreenStatus, DigScreenStatus, win1, MuxScreenStatus
5236 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5237 DacScreenStatus.set(1)
5239 win1.title(
"DAC Out "+ SWRev + RevDate)
5240 win1.resizable(FALSE,FALSE)
5241 win1.protocol(
"WM_DELETE_WINDOW", DestroyDacScreen)
5242 DAC0 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel0, length=90)
5243 DAC0.grid(row=0, column=0, sticky=W)
5244 DAC1 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel1, length=90)
5245 DAC1.grid(row=0, column=1, sticky=W)
5246 DAC2 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel2, length=90)
5247 DAC2.grid(row=0, column=2, sticky=W)
5248 DAC3 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel3, length=90)
5249 DAC3.grid(row=0, column=3, sticky=W)
5251 dismissbutton = Button(win1, text=
"Dismiss", command=DestroyDacScreen)
5252 dismissbutton.grid(row=1, column=0, columnspan=4, sticky=W)
5285 global VBuffA, VBuffB, IBuffA, IBuffB
5286 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
5287 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
5288 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
5289 global FFTBuffA, FFTBuffB, FFTwindowshape
5290 global AWGAwaveform, AWGBwaveform
5291 global T1Vline, T2Vline, T1Iline, T2Iline
5292 global TMAVline, TMBVline, TMCVline, TMDVline
5293 global Tmathline, TMXline, TMYline
5294 global MathString, MathAxis, MathXString, MathYString, MathXAxis, MathYAxis
5295 global Triggerline, Triggersymbol, TgInput, TgEdge, HoldOff, HoldOffentry
5296 global X0L, Y0T, GRW, GRH, MouseX, MouseY, MouseCAV, MouseCAI, MouseCBV, MouseCBI
5297 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
5298 global SHOWsamples, ZOHold, AWGBMode
5299 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
5300 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
5301 global Show_MathX, Show_MathY
5302 global TRACES, TRACESread, RUNstatus
5303 global AutoCenterA, AutoCenterB
5304 global CHAsb, CHBsb, CHAOffset, CHBOffset, CHAIsb, CHBIsb, CHAIOffset, CHBIOffset
5308 global SAMPLErate, SCstart, Two_X_Sample, DISsamples
5309 global TRIGGERsample, TRACEsize, DX, TRIGGERsampleAltA, TRIGGERsampleAltB
5310 global TRIGGERlevel, TRIGGERentry, AutoLevel
5311 global InOffA, InGainA, InOffB, InGainB
5312 global CurOffA, CurOffB, CurGainA, CurGainB
5313 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
5314 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
5315 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
5316 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
5317 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
5318 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
5319 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
5320 global HozPoss, HozPossentry
5323 if len(VBuffA) < 100:
5325 TRACEsize = SHOWsamples
5335 if TIMEdiv < 0.0002:
5338 if AutoCenterA.get() > 0:
5340 CHAVPosEntry.delete(0,END)
5341 CHAVPosEntry.insert(0,
' {0:.2f} '.format(CHAOffset))
5342 if AutoCenterB.get() > 0:
5344 CHBVPosEntry.delete(0,END)
5345 CHBVPosEntry.insert(0,
' {0:.2f} '.format(CHBOffset))
5348 CH1pdvRange = float(eval(CHAsb.get()))
5351 CHAsb.insert(0, CH1pdvRange)
5353 CH2pdvRange = float(eval(CHBsb.get()))
5356 CHBsb.insert(0, CH2pdvRange)
5358 CH1IpdvRange = float(eval(CHAIsb.get()))
5360 CHAIsb.delete(0,END)
5361 CHAIsb.insert(0, CH1IpdvRange)
5363 CH2IpdvRange = float(eval(CHBIsb.get()))
5365 CHBIsb.delete(0,END)
5366 CHBIsb.insert(0, CH2IpdvRange)
5369 CHAOffset = float(eval(CHAVPosEntry.get()))
5371 CHAVPosEntry.delete(0,END)
5372 CHAVPosEntry.insert(0, CHAOffset)
5374 CHAIOffset = float(eval(CHAIPosEntry.get()))
5376 CHAIPosEntry.delete(0,END)
5377 CHAIPosEntry.insert(0, CHAIOffset)
5379 CHBOffset = float(eval(CHBVPosEntry.get()))
5381 CHBVPosEntry.delete(0,END)
5382 CHBVPosEntry.insert(0, CHBOffset)
5384 CHBIOffset = float(eval(CHBIPosEntry.get()))
5386 CHBIPosEntry.delete(0,END)
5387 CHBIPosEntry.insert(0, CHBIOffset)
5389 if CH1pdvRange < 0.001:
5391 if CH2pdvRange < 0.001:
5393 if CH1IpdvRange < 0.1:
5395 if CH2IpdvRange < 0.1:
5399 HoldOff = float(eval(HoldOffentry.get()))
5402 HoldOffentry.delete(0,END)
5403 HoldOffentry.insert(0, HoldOff)
5405 HoldOffentry.delete(0,END)
5406 HoldOffentry.insert(0, HoldOff)
5409 HozPoss = float(eval(HozPossentry.get()))
5411 HozPossentry.delete(0,END)
5412 HozPossentry.insert(0, HozPoss)
5414 hldn = int(HoldOff * SAMPLErate/1000 )
5415 hozpos = int(HozPoss * SAMPLErate/1000 )
5432 if TgInput.get() > 0:
5433 SCmin = int(-1 * TRIGGERsample)
5434 SCmax = int(TRACEsize - TRIGGERsample - 0)
5437 SCmax = TRACEsize - 1
5445 Yconv1 = float(GRH/10.0) / CH1pdvRange
5446 Yconv2 = float(GRH/10.0) / CH2pdvRange
5447 YIconv1 = float(GRH/10.0) / CH1IpdvRange
5448 YIconv2 = float(GRH/10.0) / CH2IpdvRange
5449 Xconv1 = float(GRW/10.0) / CH1pdvRange
5450 Xconv2 = float(GRW/10.0) / CH2pdvRange
5451 XIconv1 = float(GRW/10.0) / CH1IpdvRange
5452 XIconv2 = float(GRW/10.0) / CH2IpdvRange
5453 if MuxScreenStatus.get() == 1:
5455 CHMApdvRange = float(eval(CHB_Asb.get()))
5457 CHB_Asb.delete(0,END)
5458 CHB_Asb.insert(0, CHMApdvRange)
5460 CHMBpdvRange = float(eval(CHB_Bsb.get()))
5462 CHB_Bsb.delete(0,END)
5463 CHB_Bsb.insert(0, CHMBpdvRange)
5465 CHMCpdvRange = float(eval(CHB_Csb.get()))
5467 CHB_Csb.delete(0,END)
5468 CHB_Csb.insert(0, CHMCpdvRange)
5470 CHMDpdvRange = float(eval(CHB_Dsb.get()))
5472 CHB_Dsb.delete(0,END)
5473 CHB_Dsb.insert(0, CHMDpdvRange)
5474 YconvMA = float(GRH/10.0) / CHMApdvRange
5475 YconvMB = float(GRH/10.0) / CHMBpdvRange
5476 YconvMC = float(GRH/10.0) / CHMCpdvRange
5477 YconvMD = float(GRH/10.0) / CHMDpdvRange
5479 CHBAOffset = float(eval(CHB_APosEntry.get()))
5481 CHB_APosEntry.delete(0,END)
5482 CHB_APosEntry.insert(0, CHBAOffset)
5484 CHBBOffset = float(eval(CHB_BPosEntry.get()))
5486 CHB_BPosEntry.delete(0,END)
5487 CHB_BPosEntry.insert(0, CHBBOffset)
5489 CHBCOffset = float(eval(CHB_CPosEntry.get()))
5491 CHB_CPosEntry.delete(0,END)
5492 CHB_CPosEntry.insert(0, CHBCOffset)
5494 CHBDOffset = float(eval(CHB_DPosEntry.get()))
5496 CHB_DPosEntry.delete(0,END)
5497 CHB_DPosEntry.insert(0, CHBDOffset)
5498 if MathAxis ==
"V-A":
5500 CHMOffset = CHAOffset
5501 elif MathAxis ==
"V-B":
5503 CHMOffset = CHBOffset
5504 elif MathAxis ==
"I-A":
5506 CHMOffset = CHAIOffset
5507 elif MathAxis ==
"I-B":
5509 CHMOffset = CHBIOffset
5512 CHMOffset = CHAOffset
5514 if MathYAxis ==
"V-A":
5516 CHMYOffset = CHAOffset
5517 elif MathYAxis ==
"V-B":
5519 CHMYOffset = CHBOffset
5520 elif MathYAxis ==
"I-A":
5522 CHMYOffset = CHAIOffset
5523 elif MathYAxis ==
"I-B":
5525 CHMYOffset = CHBIOffset
5528 CHMYOffset = CHAOffset
5530 if MathXAxis ==
"V-A":
5532 CHMXOffset = CHAOffset
5533 elif MathXAxis ==
"V-B":
5535 CHMXOffset = CHBOffset
5536 elif MathXAxis ==
"I-A":
5538 CHMXOffset = CHAIOffset
5539 elif MathXAxis ==
"I-B":
5541 CHMXOffset = CHBIOffset
5544 CHMXOffset = CHAOffset
5546 c1 = GRH / 2.0 + Y0T
5547 c2 = GRH / 2.0 + Y0T
5549 DISsamples = SAMPLErate * 10.0 * TIMEdiv / 1000.0
5561 if len(VBuffA) < 4
and len(VBuffB) < 4
and len(IBuffA) < 4
and len(IBuffB) < 4:
5563 t = int(SCstart + TRIGGERsample)
5568 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5569 ypi1 = int(c1 - YIconv1 * (IBuffA[t] - CHAIOffset))
5570 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5571 ypi2 = int(c1 - YIconv2 * (IBuffB[t] - CHBIOffset))
5572 DvY1 = DvY2 = DiY1 = DiY2 = 0
5574 if (DISsamples <= GRW):
5575 Xstep = GRW / DISsamples
5576 if AWGBMode.get() == 2
and Two_X_Sample.get() == 0:
5577 xa = int((Xstep/-2.5) - (Xstep*DX))
5579 xa = 0 - int(Xstep*DX)
5580 x = 0 - int(Xstep*DX)
5585 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5587 ypi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
5588 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5589 if MuxScreenStatus.get() == 1:
5590 if len(VBuffMA) > 4:
5591 ypvma = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
5592 if len(VBuffMB) > 4:
5593 ypvmb = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
5594 if len(VBuffMC) > 4:
5595 ypvmc = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
5596 if len(VBuffMD) > 4:
5597 ypvmd = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
5599 ypi2 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
5600 ypm = ypmx = ypmy = GRH / 2.0 + Y0T
5601 if TgInput.get() == 0:
5609 y1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5611 yi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
5621 if ShowC1_V.get() == 1 :
5622 if ZOHold.get() == 1:
5623 T1Vline.append(int(xa1))
5624 T1Vline.append(int(ypv1))
5625 T1Vline.append(int(xa1))
5626 T1Vline.append(int(y1))
5628 T1Vline.append(int(xa1))
5629 T1Vline.append(int(y1))
5632 if ShowC1_I.get() == 1:
5633 if ZOHold.get() == 1:
5634 T1Iline.append(int(xa1))
5635 T1Iline.append(int(ypi1))
5636 T1Iline.append(int(xa1))
5637 T1Iline.append(int(yi1))
5639 T1Iline.append(int(xa1))
5640 T1Iline.append(int(yi1))
5643 if ShowC2_V.get() == 1:
5644 y1 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5649 if ZOHold.get() == 1:
5650 T2Vline.append(int(x1))
5651 T2Vline.append(int(ypv2))
5652 T2Vline.append(int(x1))
5653 T2Vline.append(int(y1))
5655 T2Vline.append(int(x1))
5656 T2Vline.append(int(y1))
5659 if Show_CBA.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMA)>4:
5660 y1 = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
5665 if ZOHold.get() == 1:
5666 TMAVline.append(int(x1))
5667 TMAVline.append(int(ypvma))
5668 TMAVline.append(int(x1))
5669 TMAVline.append(int(y1))
5671 TMAVline.append(int(x1))
5672 TMAVline.append(int(y1))
5674 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5675 Xfine = MouseX - X0L - x
5676 MouseMuxA = ypvma - (y1 - ypvma) * (Xfine/Xstep)
5677 if Show_CBB.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMB)>4:
5678 y1 = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
5683 if ZOHold.get() == 1:
5684 TMBVline.append(int(x1))
5685 TMBVline.append(int(ypvmb))
5686 TMBVline.append(int(x1))
5687 TMBVline.append(int(y1))
5689 TMBVline.append(int(x1))
5690 TMBVline.append(int(y1))
5692 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5693 Xfine = MouseX - X0L - x
5694 MouseMuxB = ypvmb - (y1 - ypvmb) * (Xfine/Xstep)
5695 if Show_CBC.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMC)>4:
5696 y1 = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
5701 if ZOHold.get() == 1:
5702 TMCVline.append(int(x1))
5703 TMCVline.append(int(ypvmc))
5704 TMCVline.append(int(x1))
5705 TMCVline.append(int(y1))
5707 TMCVline.append(int(x1))
5708 TMCVline.append(int(y1))
5710 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5711 Xfine = MouseX - X0L - x
5712 MouseMuxC = ypvmc - (y1 - ypvmc) * (Xfine/Xstep)
5713 if Show_CBD.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMD)>4:
5714 y1 = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
5719 if ZOHold.get() == 1:
5720 TMDVline.append(int(x1))
5721 TMDVline.append(int(ypvmd))
5722 TMDVline.append(int(x1))
5723 TMDVline.append(int(y1))
5725 TMDVline.append(int(x1))
5726 TMDVline.append(int(y1))
5728 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5729 Xfine = MouseX - X0L - x
5730 MouseMuxD = ypvmd - (y1 - ypvmd) * (Xfine/Xstep)
5731 if ShowC2_I.get() == 1:
5733 yi1 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
5738 if (ZOHold.get() == 1):
5739 T2Iline.append(int(x1))
5740 T2Iline.append(int(ypi2))
5741 T2Iline.append(int(x1))
5742 T2Iline.append(int(yi1))
5744 T2Iline.append(int(x1))
5745 T2Iline.append(int(yi1))
5748 if MathTrace.get() > 0:
5749 if MathTrace.get() == 1:
5750 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
5752 elif MathTrace.get() == 2:
5753 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
5755 elif MathTrace.get() == 3:
5756 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
5758 elif MathTrace.get() == 4:
5759 Ypower = VBuffA[t] * IBuffA[t]
5760 ytemp = YIconv1 * (Ypower - CHAIOffset)
5761 y1 = int(c1 - ytemp)
5763 elif MathTrace.get() == 5:
5764 Ypower = VBuffB[t] * IBuffB[t]
5765 ytemp = YIconv2 * (Ypower - CHBIOffset)
5766 y1 = int(c2 - ytemp)
5768 elif MathTrace.get() == 6:
5769 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
5770 ytemp = YIconv1 * (Yohms - CHAIOffset)
5771 y1 = int(c1 - ytemp)
5773 elif MathTrace.get() == 7:
5774 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
5775 ytemp = YIconv2 * (Yohms - CHBIOffset)
5776 y1 = int(c2 - ytemp)
5778 elif MathTrace.get() == 8:
5779 Ydif = (IBuffA[t] - IBuffB[t])
5780 ytemp = YIconv1 * (Ydif - CHAIOffset)
5781 y1 = int(c2 - ytemp)
5783 elif MathTrace.get() == 9:
5784 Ydif = (IBuffB[t] - IBuffA[t])
5785 ytemp = YIconv2 * (Ydif - CHBIOffset)
5786 y1 = int(c2 - ytemp)
5788 elif MathTrace.get() == 10:
5790 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
5792 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
5794 elif MathTrace.get() == 11:
5796 Y1 = (IBuffB[t] / IBuffA[t])
5798 Y1 = (IBuffB[t] / 0.000001)
5799 ytemp = YIconv2 * (Y1 - CHBIOffset)
5800 y1 = int(c2 - ytemp)
5802 elif MathTrace.get() == 12:
5805 MathResult = eval(MathString)
5806 MathResult = MathResult - CHMOffset
5807 y1 = int(c1 - YconvM * MathResult)
5816 if ZOHold.get() == 1:
5817 Tmathline.append(int(x1))
5818 Tmathline.append(int(ypm))
5819 Tmathline.append(int(x1))
5820 Tmathline.append(int(y1))
5822 Tmathline.append(int(x1))
5823 Tmathline.append(int(y1))
5825 if Show_MathX.get() > 0:
5827 MathResult = eval(MathXString)
5828 MathResult = MathResult - CHMXOffset
5829 y1 = int(c1 - XconvMxy * MathResult)
5838 if ZOHold.get() == 1:
5839 TMXline.append(int(x1))
5840 TMXline.append(int(ypmx))
5841 TMXline.append(int(x1))
5842 TMXline.append(int(y1))
5844 TMXline.append(int(x1))
5845 TMXline.append(int(y1))
5847 if Show_MathY.get() > 0:
5849 MathResult = eval(MathYString)
5850 MathResult = MathResult - CHMYOffset
5851 y1 = int(c1 - YconvMxy * MathResult)
5860 if ZOHold.get() == 1:
5861 TMYline.append(int(x1))
5862 TMYline.append(int(ypmy))
5863 TMYline.append(int(x1))
5864 TMYline.append(int(y1))
5866 TMYline.append(int(x1))
5867 TMYline.append(int(y1))
5870 if MouseX - X0L >= x
and MouseX - X0L < (x + Xstep):
5871 Xfine = MouseX - X0L - x
5872 MouseCAV = ypv1 - (DvY1 * (Xfine/Xstep))
5873 MouseCAI = ypi1 - (DiY1 * (Xfine/Xstep))
5874 MouseCBV = ypv2 - (DvY2 * (Xfine/Xstep))
5875 MouseCBI = ypi2 - (DiY2 * (Xfine/Xstep))
5882 Tstep = DISsamples / GRW
5887 t = int(SCstart + TRIGGERsample)
5888 if t > len(VBuffA)-1:
5896 if (t >= len(VBuffA)):
5900 ylo = VBuffA[t] - CHAOffset
5901 ilo = IBuffA[t] - CHAIOffset
5905 while n < (t + Tstep)
and n < TRACEsize:
5906 if ( ShowC1_V.get() == 1 ):
5907 v = VBuffA[t] - CHAOffset
5912 if ( ShowC1_I.get() == 1 ):
5913 i = IBuffA[t] - CHAIOffset
5919 if ( ShowC1_V.get() == 1 ):
5920 ylo = int(c1 - Yconv1 * ylo)
5921 yhi = int(c1 - Yconv1 * yhi)
5930 T1Vline.append(int(x1))
5931 T1Vline.append(int(ylo))
5932 T1Vline.append(int(x1))
5933 T1Vline.append(int(yhi))
5935 if ( ShowC1_I.get() == 1 ):
5936 ilo = int(c1 - YIconv1 * ilo)
5937 ihi = int(c1 - YIconv1 * ihi)
5946 T1Iline.append(int(x1))
5947 T1Iline.append(int(ilo))
5948 T1Iline.append(int(x1))
5949 T1Iline.append(int(ihi))
5951 ylo = VBuffB[t] - CHBOffset
5952 ilo = IBuffB[t] - CHBIOffset
5956 if MuxScreenStatus.get() == 0:
5957 while n < (t + Tstep)
and n < TRACEsize:
5958 if ( ShowC2_V.get() == 1 ):
5959 v = VBuffB[t] - CHBOffset
5964 if ( ShowC2_I.get() == 1 ):
5965 i = IBuffB[t] - CHBIOffset
5971 if ( ShowC2_V.get() == 1 ):
5972 ylo = int(c2 - Yconv2 * ylo)
5973 yhi = int(c2 - Yconv2 * yhi)
5983 T2Vline.append(int(x1))
5984 T2Vline.append(int(ylo))
5985 T2Vline.append(int(x1))
5986 T2Vline.append(int(yhi))
5988 if ( ShowC2_I.get() == 1 ):
5989 ilo = int(c2 - YIconv2 * ilo)
5990 ihi = int(c2 - YIconv2 * ihi)
5999 T2Iline.append(int(x1))
6000 T2Iline.append(int(ilo))
6001 T2Iline.append(int(x1))
6002 T2Iline.append(int(ihi))
6005 if Show_CBA.get() == 1
and len(VBuffMA)>4:
6006 if t < len(VBuffMA):
6007 ylo = VBuffMA[t] - CHBAOffset
6010 while n < (t + Tstep)
and n < len(VBuffMA):
6011 v = VBuffMA[t] - CHBAOffset
6017 ylo = int(c2 - YconvMA * ylo)
6018 yhi = int(c2 - YconvMA * yhi)
6027 TMAVline.append(int(x1))
6028 TMAVline.append(int(ylo))
6029 TMAVline.append(int(x1))
6030 TMAVline.append(int(yhi))
6031 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6033 if Show_CBB.get() == 1
and len(VBuffMB)>4:
6034 if t < len(VBuffMB):
6035 ylo = VBuffMB[t] - CHBBOffset
6038 while n < (t + Tstep)
and n < len(VBuffMB):
6039 v = VBuffMB[t] - CHBBOffset
6045 ylo = int(c2 - YconvMB * ylo)
6046 yhi = int(c2 - YconvMB * yhi)
6055 TMBVline.append(int(x1))
6056 TMBVline.append(int(ylo))
6057 TMBVline.append(int(x1))
6058 TMBVline.append(int(yhi))
6059 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6061 if Show_CBC.get() == 1
and len(VBuffMC)>4:
6062 if t < len(VBuffMC):
6063 ylo = VBuffMC[t] - CHBCOffset
6066 while n < (t + Tstep)
and n < len(VBuffMC):
6067 v = VBuffMC[t] - CHBCOffset
6073 ylo = int(c2 - YconvMC * ylo)
6074 yhi = int(c2 - YconvMC * yhi)
6083 TMCVline.append(int(x1))
6084 TMCVline.append(int(ylo))
6085 TMCVline.append(int(x1))
6086 TMCVline.append(int(yhi))
6087 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6089 if Show_CBD.get() == 1
and len(VBuffMD)>4:
6090 if t < len(VBuffMD):
6091 ylo = VBuffMD[t] - CHBDOffset
6094 while n < (t + Tstep)
and n < len(VBuffMD):
6095 v = VBuffMD[t] - CHBDOffset
6101 ylo = int(c2 - YconvMD * ylo)
6102 yhi = int(c2 - YconvMD * yhi)
6111 TMDVline.append(int(x1))
6112 TMDVline.append(int(ylo))
6113 TMDVline.append(int(x1))
6114 TMDVline.append(int(yhi))
6115 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
6117 if ( ShowC2_I.get() == 1 ):
6118 while n < (t + Tstep)
and n < TRACEsize:
6119 i = IBuffB[t] - CHBIOffset
6125 ilo = int(c2 - YIconv2 * ilo)
6126 ihi = int(c2 - YIconv2 * ihi)
6135 T2Iline.append(int(x1))
6136 T2Iline.append(int(ilo))
6137 T2Iline.append(int(x1))
6138 T2Iline.append(int(ihi))
6139 if MathTrace.get() > 0:
6140 if MathTrace.get() == 1:
6141 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
6143 elif MathTrace.get() == 2:
6144 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
6146 elif MathTrace.get() == 3:
6147 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
6149 elif MathTrace.get() == 4:
6150 Ypower = VBuffA[t] * IBuffA[t]
6151 ytemp = YIconv1 * (Ypower - CHAIOffset)
6152 y1 = int(c1 - ytemp)
6154 elif MathTrace.get() == 5:
6155 Ypower = VBuffB[t] * IBuffB[t]
6156 ytemp = YIconv2 * (Ypower - CHBIOffset)
6157 y1 = int(c2 - ytemp)
6159 elif MathTrace.get() == 6:
6160 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
6161 ytemp = YIconv1 * (Yohms- CHAIOffset)
6162 y1 = int(c1 - ytemp)
6164 elif MathTrace.get() == 7:
6165 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
6166 ytemp = YIconv2 * (Yohms - CHBIOffset)
6167 y1 = int(c2 - ytemp)
6169 elif MathTrace.get() == 8:
6170 Ydif = (IBuffA[t] - IBuffB[t])
6171 ytemp = YIconv1 * (Ydif - CHAIOffset)
6172 y1 = int(c2 - ytemp)
6174 elif MathTrace.get() == 9:
6175 Ydif = (IBuffB[t] - IBuffA[t])
6176 ytemp = YIconv2 * (Ydif - CHBIOffset)
6177 y1 = int(c2 - ytemp)
6179 elif MathTrace.get() == 10:
6181 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6183 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6184 elif MathTrace.get() == 11:
6186 Y1 = (IBuffB[t] / IBuffA[t])
6188 Y1 = (IBuffB[t] / 0.000001)
6189 ytemp = YIconv2 * (Y1 - CHBIOffset)
6190 y1 = int(c2 - ytemp)
6192 elif MathTrace.get() == 12:
6195 MathResult = eval(MathString)
6196 MathResult = MathResult - CHMOffset
6197 y1 = int(c1 - YconvM * MathResult)
6206 if (ZOHold.get() == 1):
6207 Tmathline.append(int(x1))
6208 Tmathline.append(int(ypm))
6209 Tmathline.append(int(x1))
6210 Tmathline.append(int(y1))
6212 Tmathline.append(int(x1))
6213 Tmathline.append(int(y1))
6215 if Show_MathX.get() > 0:
6217 MathResult = eval(MathXString)
6218 MathResult = MathResult - CHMXOffset
6219 y1 = int(c1 - XconvMxy * MathResult)
6228 if ZOHold.get() == 1:
6229 TMXline.append(int(x1))
6230 TMXline.append(int(ypmx))
6231 TMXline.append(int(x1))
6232 TMXline.append(int(y1))
6234 TMXline.append(int(x1))
6235 TMXline.append(int(y1))
6237 if Show_MathY.get() > 0:
6239 MathResult = eval(MathYString)
6240 MathResult = MathResult - CHMYOffset
6241 y1 = int(c1 - YconvMxy * MathResult)
6250 if ZOHold.get() == 1:
6251 TMYline.append(int(x1))
6252 TMYline.append(int(ypmy))
6253 TMYline.append(int(x1))
6254 TMYline.append(int(y1))
6256 TMYline.append(int(x1))
6257 TMYline.append(int(y1))
6260 if (MouseX - X0L) == x:
6266 if (t > len(VBuffA)):
6274 if TgInput.get() > 0:
6275 if TgInput.get() == 1
or TgInput.get() == 5:
6277 ytemp = Yconv1 * (float(TRIGGERlevel)-CHAOffset)
6278 y1 = int(c1 - ytemp)
6279 elif TgInput.get() == 2:
6281 y1 = int(c1 - YIconv1 * (float(TRIGGERlevel) - CHAIOffset))
6282 elif TgInput.get() == 3:
6284 ytemp = Yconv2 * (float(TRIGGERlevel)-CHBOffset)
6285 y1 = int(c2 - ytemp)
6286 elif TgInput.get() == 4:
6288 y1 = int(c2 - YIconv2 * (float(TRIGGERlevel) - CHBIOffset))
6294 Triggerline.append(int(x1-5))
6295 Triggerline.append(int(y1+5))
6296 Triggerline.append(int(x1+5))
6297 Triggerline.append(int(y1))
6298 Triggerline.append(int(x1-5))
6299 Triggerline.append(int(y1-5))
6300 Triggerline.append(int(x1-5))
6301 Triggerline.append(int(y1+5))
6303 if TgEdge.get() == 0:
6309 Triggersymbol.append(int(x1-10))
6310 Triggersymbol.append(int(Ymin+y1))
6311 Triggersymbol.append(int(x1))
6312 Triggersymbol.append(int(Ymin+y1))
6313 Triggersymbol.append(int(x1))
6314 Triggersymbol.append(int(Ymin+y2))
6315 Triggersymbol.append(int(x1+10))
6316 Triggersymbol.append(int(Ymin+y2))
6319 global VBuffA, VBuffB, IBuffA, IBuffB
6320 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
6321 global TXYline, MathXString, MathYString, MathXAxis, MathYAxis
6322 global HoldOff, HoldOffentry
6323 global X0LXY, Y0TXY, GRWXY, GRHXY
6324 global YminXY, YmaxXY, XminXY, XmaxXY
6325 global SHOWsamples, ZOHold, AWGBMode
6326 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
6327 global TRACES, TRACESread, RUNstatus
6328 global Xsignal, Ysignal
6329 global CHAsbxy, CHBsbxy, CHAOffset, CHBOffset, CHAIsbxy, CHBIsbxy, CHAIOffset, CHBIOffset
6334 global SCstart, MathString
6335 global TRIGGERsample, TRACEsize, DX
6336 global TRIGGERlevel, TRIGGERentry, AutoLevel
6337 global InOffA, InGainA, InOffB, InGainB
6338 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
6339 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
6340 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6341 global CHAVPosEntryxy, CHAIPosEntryxy, CHAVPosEntryxy, CHBIPosEntryxy
6342 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
6343 global HozPoss, HozPossentry
6346 if len(VBuffA) < 100:
6348 TRACEsize = SHOWsamples
6354 CH1pdvRange = float(eval(CHAsbxy.get()))
6356 CHAsbxy.delete(0,END)
6357 CHAsbxy.insert(0, CH1pdvRange)
6359 CH2pdvRange = float(eval(CHBsbxy.get()))
6361 CHBsbxy.delete(0,END)
6362 CHBsbxy.insert(0, CH2pdvRange)
6364 CH1IpdvRange = float(eval(CHAIsbxy.get()))
6366 CHAIsbxy.delete(0,END)
6367 CHAIsbxy.insert(0, CH1IpdvRange)
6369 CH2IpdvRange = float(eval(CHBIsbxy.get()))
6371 CHBIsbxy.delete(0,END)
6372 CHBIsbxy.insert(0, CH2IpdvRange)
6375 CHAOffset = float(eval(CHAVPosEntryxy.get()))
6377 CHAVPosEntryxy.delete(0,END)
6378 CHAVPosEntryxy.insert(0, CHAOffset)
6380 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
6382 CHAIPosEntryxy.delete(0,END)
6383 CHAIPosEntryxy.insert(0, CHAIOffset)
6385 CHBOffset = float(eval(CHBVPosEntryxy.get()))
6387 CHBVPosEntry.delete(0,END)
6388 CHBVPosEntry.insert(0, CHBOffset)
6390 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
6392 CHBIPosEntryxy.delete(0,END)
6393 CHBIPosEntryxy.insert(0, CHBIOffset)
6395 if CH1pdvRange < 0.001:
6397 if CH2pdvRange < 0.001:
6399 if CH1IpdvRange < 0.1:
6401 if CH2IpdvRange < 0.1:
6404 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
6405 Yconv2 = float(GRHXY/10.0) / CH2pdvRange
6406 YIconv1 = float(GRHXY/10.0) / CH1IpdvRange
6407 YIconv2 = float(GRHXY/10.0) / CH2IpdvRange
6408 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
6409 Xconv2 = float(GRWXY/10.0) / CH2pdvRange
6410 XIconv1 = float(GRWXY/10.0) / CH1IpdvRange
6411 XIconv2 = float(GRWXY/10.0) / CH2IpdvRange
6413 if MathYAxis ==
"V-A":
6415 CHMYOffset = CHAOffset
6416 elif MathYAxis ==
"V-B":
6418 CHMYOffset = CHBOffset
6419 elif MathYAxis ==
"I-A":
6421 CHMYOffset = CHAIOffset
6422 elif MathYAxis ==
"I-B":
6424 CHMYOffset = CHBIOffset
6427 CHMYOffset = CHAOffset
6428 if MathXAxis ==
"V-A":
6430 CHMXOffset = CHAOffset
6431 elif MathXAxis ==
"V-B":
6433 CHMXOffset = CHBOffset
6434 elif MathYAxis ==
"I-A":
6436 CHMXOffset = CHAIOffset
6437 elif MathXAxis ==
"I-B":
6439 CHMXOffset = CHBIOffset
6442 CHMXOffset = CHAOffset
6445 t = int(TRIGGERsample)
6446 c1 = GRHXY / 2.0 + Y0TXY
6447 c2 = GRWXY / 2.0 + X0LXY
6448 while (t < TRACEsize):
6449 if (Xsignal.get() == 3
and Ysignal.get() == 1):
6450 ylo = VBuffA[t] - CHAOffset
6451 xlo = VBuffB[t] - CHBOffset
6452 ylo = int(c1 - Yconv1 * ylo)
6453 xlo = int(c2 + Xconv2 * xlo)
6454 elif (Xsignal.get() == 1
and Ysignal.get() == 3):
6455 ylo = VBuffB[t] - CHBOffset
6456 xlo = VBuffA[t] - CHAOffset
6457 ylo = int(c1 - Yconv2 * ylo)
6458 xlo = int(c2 + Xconv1 * xlo)
6459 elif (Xsignal.get() == 5
and Ysignal.get() == 3):
6460 if ( MathTrace.get() == 2):
6461 ylo = VBuffB[t] - CHBOffset
6462 ylo = int(c1 - Yconv2 * ylo)
6463 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
6464 xlo = int(c2 + Xconv1 * xlo)
6465 elif (Xsignal.get() == 5
and Ysignal.get() == 4):
6466 if ( MathTrace.get() == 2):
6467 ylo = (IBuffB[t]) - CHBIOffset
6468 ylo = int(c1 - YIconv2 * ylo)
6469 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
6470 xlo = int(c2 + Xconv1 * xlo)
6471 elif (Xsignal.get() == 5
and Ysignal.get() == 2):
6472 if MathTrace.get() == 3:
6473 ylo = (IBuffA[t]) - CHAIOffset
6474 ylo = int(c1 - YIconv1 * ylo)
6475 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
6476 xlo = int(c2 + Xconv2 * xlo)
6477 elif (Xsignal.get() == 3
and Ysignal.get() == 5):
6478 if MathTrace.get() == 2:
6479 ylo = VBuffA[t] - VBuffB[t] - CHAOffset
6480 ylo = int(c1 - Yconv1 * ylo)
6481 xlo = VBuffB[t] - CHBOffset
6482 xlo = int(c2 + Xconv2 * xlo)
6483 elif (Xsignal.get() == 5
and Ysignal.get() == 1):
6484 if MathTrace.get() == 3:
6485 ylo = VBuffA[t] - CHAOffset
6486 ylo = int(c1 - Yconv1 * ylo)
6487 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
6488 xlo = int(c2 + Xconv2 * xlo)
6489 elif (Xsignal.get() == 1
and Ysignal.get() == 5):
6490 if MathTrace.get() == 3:
6491 ylo = VBuffB[t] - VBuffA[t] - CHBOffset
6492 ylo = int(c1 - Yconv2 * ylo)
6493 xlo = VBuffA[t] - CHAOffset
6494 xlo = int(c2 + Xconv1 * xlo)
6495 elif (Xsignal.get() == 1
and Ysignal.get() == 2):
6496 ylo = (IBuffA[t]) - CHAIOffset
6497 xlo = VBuffA[t] - CHAOffset
6498 ylo = int(c1 - YIconv1 * ylo)
6499 xlo = int(c2 + Xconv1 * xlo)
6500 elif (Xsignal.get() == 3
and Ysignal.get() == 2):
6501 ylo = (IBuffA[t]) - CHAIOffset
6502 xlo = VBuffB[t] - CHBOffset
6503 ylo = int(c1 - YIconv1 * ylo)
6504 xlo = int(c2 + Xconv2 * xlo)
6505 elif (Xsignal.get() == 2
and Ysignal.get() == 1):
6506 ylo = VBuffA[t] - CHAOffset
6507 xlo = (IBuffA[t]) - CHAIOffset
6508 ylo = int(c1 - Yconv1 * ylo)
6509 xlo = int(c2 + XIconv1 * xlo)
6510 elif (Xsignal.get() == 2
and Ysignal.get() == 3):
6511 ylo = VBuffB[t] - CHBOffset
6512 xlo = (IBuffA[t]) - CHAIOffset
6513 ylo = int(c1 - Yconv2 * ylo)
6514 xlo = int(c2 + XIconv1 * xlo)
6515 elif (Xsignal.get() == 3
and Ysignal.get() == 4):
6516 ylo = (IBuffB[t]) - CHBIOffset
6517 xlo = VBuffB[t] - CHBOffset
6518 ylo = int(c1 - YIconv2 * ylo)
6519 xlo = int(c2 + Xconv2 * xlo)
6520 elif (Xsignal.get() == 4
and Ysignal.get() == 3):
6521 ylo = VBuffB[t] - CHBOffset
6522 xlo = (IBuffB[t]) - CHBIOffset
6523 ylo = int(c1 - Yconv2 * ylo)
6524 xlo = int(c2 + XIconv2 * xlo)
6525 elif (Xsignal.get() == 4
and Ysignal.get() == 2):
6526 ylo = (IBuffA[t]) - CHAIOffset
6527 xlo = (IBuffB[t]) - CHBIOffset
6528 ylo = int(c1 - YIconv1 * ylo)
6529 xlo = int(c2 + XIconv2 * xlo)
6530 elif (Xsignal.get() == 2
and Ysignal.get() == 4):
6531 ylo = (IBuffB[t]) - CHBIOffset
6532 xlo = (IBuffA[t]) - CHAIOffset
6533 ylo = int(c1 - YIconv2 * ylo)
6534 xlo = int(c2 + XIconv1 * xlo)
6535 elif (Xsignal.get() == 1
and Ysignal.get() == 4):
6536 ylo = (IBuffB[t]) - CHBIOffset
6537 xlo = VBuffA[t] - CHAOffset
6538 ylo = int(c1 - YIconv2 * ylo)
6539 xlo = int(c2 + Xconv1 * xlo)
6540 elif (Xsignal.get() == 5
and Ysignal.get() == 5):
6542 MathResult = eval(MathYString)
6543 MathResult = MathResult - CHMYOffset
6544 ylo = int(c1 - YconvMxy * MathResult)
6548 MathResult = eval(MathXString)
6549 MathResult = MathResult - CHMXOffset
6550 xlo = int(c2 + XconvMxy * MathResult)
6561 TXYline.append(int(xlo))
6562 TXYline.append(int(ylo))
6566 global T1Vline, T2Vline, T1Iline, T2Iline, TXYline
6567 global TMXline, TMYline
6568 global T1VRline, T2VRline, T1IRline, T2IRline
6569 global Triggerline, Triggersymbol, Tmathline, TMRline, TXYRline
6570 global VBuffA, VBuffB, IBuffA, IBuffB
6571 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
6572 global TMAVline, TMBVline, TMCVline, TMDVline, TMCRline, TMBRline
6573 global VmemoryA, VmemoryB, VmemoryA, ImemoryB
6578 global FontSize, EnableHSsampling, ETSDisp, MinigenScreenStatus
6579 global LabelPlotText, PlotLabelText
6580 global MouseX, MouseY, MouseWidget, MouseCAV, MouseCAI, MouseCBV, MouseCBI
6581 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
6582 global ShowXCur, ShowYCur, TCursor, VCursor
6584 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowRXY, Show_MathX, Show_MathY
6585 global ShowRA_V, ShowRA_I, ShowRB_V, ShowRB_I, ShowMath
6586 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MathUnits, MathXUnits, MathYUnits
6587 global Xsignal, Ysignal, MathTrace, MathAxis, MathXAxis, MathYAxis
6588 global RUNstatus, SingleShot, ManualTrigger, session
6599 global TIMEdiv, Mulx, DISsamples
6600 global SAMPLErate, contloop, discontloop, HtMulEntry
6601 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry, TgInput
6602 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7, COLORtraceR7
6603 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6
6604 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6
6605 global CANVASwidth, CANVASheight
6606 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
6607 global ScreenTrefresh, SmoothCurves, Is_Triggered
6608 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
6609 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
6610 global InOffA, InGainA, InOffB, InGainB
6611 global CurOffA, CurOffB, CurGainA, CurGainB
6613 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
6614 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
6615 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
6616 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
6617 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
6618 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
6619 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
6620 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
6621 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
6622 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
6623 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
6624 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
6625 global AWGAShape, AWGBShape, MeasDiffAB, MeasDiffBA
6626 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6627 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6628 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
6629 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
6630 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
6631 global DacScreenStatus, DigScreenStatus, CHA_RC_HP, CHB_RC_HP
6632 global D0, D1, D2, D3, D4, D5, D6, D7
6633 global DevID, devx, MarkerNum, MarkerScale, MeasGateLeft, MeasGateRight, MeasGateStatus
6634 global HozPoss, HozPossentry
6635 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
6636 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
6637 global CHBADelayR1, CHBADelayR2, CHBADelayF, MeasDelay
6643 Tstep = (10.0 * TIMEdiv) / GRW
6646 CH1pdvRange = float(eval(CHAsb.get()))
6649 CHAsb.insert(0, CH1pdvRange)
6651 CH2pdvRange = float(eval(CHBsb.get()))
6654 CHBsb.insert(0, CH2pdvRange)
6656 CH1IpdvRange = float(eval(CHAIsb.get()))
6658 CHAIsb.delete(0,END)
6659 CHAIsb.insert(0, CH1IpdvRange)
6661 CH2IpdvRange = float(eval(CHBIsb.get()))
6663 CHBIsb.delete(0,END)
6664 CHBIsb.insert(0, CH2IpdvRange)
6667 CHAOffset = float(eval(CHAVPosEntry.get()))
6669 CHAVPosEntry.delete(0,END)
6670 CHAVPosEntry.insert(0, CHAOffset)
6672 CHAIOffset = float(eval(CHAIPosEntry.get()))
6674 CHAIPosEntry.delete(0,END)
6675 CHAIPosEntry.insert(0, CHAIOffset)
6677 CHBOffset = float(eval(CHBVPosEntry.get()))
6679 CHBVPosEntry.delete(0,END)
6680 CHBVPosEntry.insert(0, CHBOffset)
6682 CHBIOffset = float(eval(CHBIPosEntry.get()))
6684 CHBIPosEntry.delete(0,END)
6685 CHBIPosEntry.insert(0, CHBIOffset)
6687 HoldOff = float(eval(HoldOffentry.get()))
6691 HoldOffentry.delete(0,END)
6692 HoldOffentry.insert(0, HoldOff)
6693 if ETSDisp.get() > 0
or MinigenScreenStatus.get() > 0:
6695 Mulx = float(eval(HtMulEntry.get()))
6700 if EnableHSsampling > 0:
6701 HtMulEntry.delete(0,END)
6702 HtMulEntry.insert(0, 1)
6707 HozPoss = float(eval(HozPossentry.get()))
6709 HozPossentry.delete(0,END)
6710 HozPossentry.insert(0, HozPoss)
6711 if MuxScreenStatus.get() == 1:
6713 CHMApdvRange = float(eval(CHB_Asb.get()))
6715 CHB_Asb.delete(0,END)
6716 CHB_Asb.insert(0, CHMApdvRange)
6718 CHMBpdvRange = float(eval(CHB_Bsb.get()))
6720 CHB_Bsb.delete(0,END)
6721 CHB_Bsb.insert(0, CHMBpdvRange)
6723 CHMCpdvRange = float(eval(CHB_Csb.get()))
6725 CHB_Csb.delete(0,END)
6726 CHB_Csb.insert(0, CHMCpdvRange)
6728 CHMDpdvRange = float(eval(CHB_Dsb.get()))
6730 CHB_Dsb.delete(0,END)
6731 CHB_Dsb.insert(0, CHMDpdvRange)
6732 if CHMApdvRange < 0.001:
6733 CHMApdvRange = 0.001
6734 if CHMBpdvRange < 0.001:
6735 CHMBpdvRange = 0.001
6736 if CHMCpdvRange < 0.001:
6737 CHMCpdvRange = 0.001
6738 if CHMDpdvRange < 0.001:
6739 CHMDpdvRange = 0.001
6741 CHBAOffset = float(eval(CHB_APosEntry.get()))
6743 CHB_APosEntry.delete(0,END)
6744 CHB_APosEntry.insert(0, CHBAOffset)
6746 CHBBOffset = float(eval(CHB_BPosEntry.get()))
6748 CHB_BPosEntry.delete(0,END)
6749 CHB_BPosEntry.insert(0, CHBBOffset)
6751 CHBCOffset = float(eval(CHB_CPosEntry.get()))
6753 CHB_CPosEntry.delete(0,END)
6754 CHB_CPosEntry.insert(0, CHBCOffset)
6756 CHBDOffset = float(eval(CHB_DPosEntry.get()))
6758 CHB_DPosEntry.delete(0,END)
6759 CHB_DPosEntry.insert(0, CHBDOffset)
6761 if CH1pdvRange < 0.001:
6763 if CH2pdvRange < 0.001:
6765 if CH1IpdvRange < 0.1:
6767 if CH2IpdvRange < 0.1:
6769 vt = HoldOff + HozPoss
6770 if ScreenTrefresh.get() == 0:
6780 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)
6781 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)
6782 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)
6783 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)
6785 RightOffset = FontSize * 3
6786 LeftOffset = int(FontSize/2)
6787 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6788 ca.create_text(x1-LeftOffset, 12, text=
"CA-V", fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize-1 ))
6789 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6790 ca.create_text(x2+LeftOffset, 12, text=
"CA-I", fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize-1 ))
6791 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6792 ca.create_text(x1-RightOffset+2, 12, text=
"CB-V", fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize-1 ))
6793 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6794 ca.create_text(x2+RightOffset+4, 12, text=
"CB-I", fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize-1 ))
6797 y = Y0T + i * GRH/10.0
6800 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6805 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
6806 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6810 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6812 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6813 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6815 Vaxis_label = str(round(Vaxis_value,3 ))
6816 ca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
6818 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6819 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
6820 Iaxis_label = str(round(Iaxis_value, 3))
6821 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
6823 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6824 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6825 Vaxis_label = str(round(Vaxis_value, 3))
6826 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6828 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6829 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
6830 Iaxis_label = str(round(Iaxis_value, 3))
6831 ca.create_text(x2+RightOffset+4, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6832 if MuxScreenStatus.get() == 1:
6833 if Show_CBA.get() == 1:
6834 Vaxis_value = (((5-i) * CHMApdvRange ) + CHBAOffset)
6835 Vaxis_label = str(round(Vaxis_value, 3))
6836 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6837 if Show_CBB.get() == 1:
6838 Iaxis_value = 1.0 * (((5-i) * CHMBpdvRange ) + CHBBOffset)
6839 Iaxis_label = str(round(Iaxis_value, 3))
6840 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace6, anchor=
"w", font=(
"arial", FontSize ))
6841 if Show_CBC.get() == 1:
6842 Iaxis_value = 1.0 * (((5-i) * CHMCpdvRange ) + CHBCOffset)
6843 Iaxis_label = str(round(Iaxis_value, 3))
6844 ca.create_text(x2+RightOffset-3, y, text=Iaxis_label, fill=COLORtrace7, anchor=
"w", font=(
"arial", FontSize ))
6845 if Show_CBD.get() == 1:
6846 Iaxis_value = 1.0 * (((5-i) * CHMDpdvRange ) + CHBDOffset)
6847 Iaxis_label = str(round(Iaxis_value, 3))
6848 ca.create_text(x2+RightOffset+10, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6860 x = X0L + i * GRW/10.0
6863 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6868 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
6869 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6874 axis_value = ((i * vx)+ vt) / 1000.0
6875 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6876 if vx < 1000
and vx >= 1:
6877 axis_value = (i * vx) + vt
6878 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6880 axis_value = ((i * vx) + vt) * 1000.0
6881 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6882 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6884 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6886 axis_value = ((i * vx)+ vt) / 1000.0
6887 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6888 if vx < 1000
and vx >= 1:
6889 axis_value = (i * vx) + vt
6890 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6892 axis_value = ((i * vx) + vt) * 1000.0
6893 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6894 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6898 if len(Triggerline) > 2:
6899 ca.create_polygon(Triggerline, outline=COLORtrigger, fill=COLORtrigger, width=1)
6900 ca.create_line(Triggersymbol, fill=COLORtrigger, width=GridWidth.get())
6901 if TgInput.get() == 1:
6903 if TgInput.get() == 2:
6905 if TgInput.get() == 3:
6907 if TgInput.get() == 4:
6909 if TgInput.get() == 5:
6910 TgLabel =
"VA or VB"
6911 if TgInput.get() == 6:
6912 TgLabel =
"Alternate"
6913 if Is_Triggered == 1:
6914 TgLabel = TgLabel +
" Triggered"
6916 TgLabel = TgLabel +
" Not Triggered"
6917 if SingleShot.get() > 0:
6918 TgLabel = TgLabel +
" Armed"
6919 x = X0L + (GRW/2) + 12
6920 ca.create_text(x, Ymin-FontSize, text=TgLabel, fill=COLORtrigger, anchor=
"w", font=(
"arial", FontSize ))
6922 if MarkerScale.get() == 0:
6923 Yconv1 = float(GRH/10.0) / CH1pdvRange
6924 Yoffset1 = CHAOffset
6925 COLORmarker = COLORtrace1
6927 if MarkerScale.get() == 1:
6929 Yconv1 = float(GRH/10.0) / CH1pdvRange
6930 Yoffset1 = CHAOffset
6931 COLORmarker = COLORtrace1
6933 if MarkerScale.get() == 2:
6935 Yconv1 = float(GRH/10.0) / CH2pdvRange
6936 Yoffset1 = CHBOffset
6937 COLORmarker = COLORtrace2
6939 if MarkerScale.get() == 3:
6941 Yconv1 = float(GRH/10.0) / CH1IpdvRange
6942 Yoffset1 = CHAIOffset
6943 COLORmarker = COLORtrace3
6945 if MarkerScale.get() == 4:
6947 Yconv1 = float(GRH/10.0) / CH2IpdvRange
6948 Yoffset1 = CHBIOffset
6949 COLORmarker = COLORtrace4
6952 if MarkerScale.get() == 5:
6954 Yconv1 = float(GRH/10.0) / CHMApdvRange
6955 Yoffset1 = CHBAOffset
6956 COLORmarker = COLORtrace2
6958 if MarkerScale.get() == 6:
6960 Yconv1 = float(GRH/10.0) / CHMBpdvRange
6961 Yoffset1 = CHBBOffset
6962 COLORmarker = COLORtrace6
6964 if MarkerScale.get() == 7:
6966 Yconv1 = float(GRH/10.0) / CHMCpdvRange
6967 Yoffset1 = CHBCOffset
6968 COLORmarker = COLORtrace7
6970 if MarkerScale.get() == 8:
6972 Yconv1 = float(GRH/10.0) / CHMDpdvRange
6973 Yoffset1 = CHBDOffset
6974 COLORmarker = COLORtrace4
6977 if ShowTCur.get() > 0:
6978 Dline = [TCursor, Y0T, TCursor, Y0T+GRH]
6979 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6980 Tpoint = ((TCursor-X0L) * Tstep) + vt
6981 Tpoint = Tpoint/Mulx
6983 axis_value = Tpoint / 1000.0
6984 V_label =
' {0:.2f} '.format(axis_value) +
" S"
6985 if Tpoint < 1000
and Tpoint >= 1:
6987 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
6989 axis_value = Tpoint * 1000.0
6990 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
6991 ca.create_text(TCursor, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
6992 if ShowVCur.get() > 0:
6993 Dline = [X0L, VCursor, X0L+GRW, VCursor]
6994 ca.create_line(Dline, dash=(4,3), fill=COLORmarker, width=GridWidth.get())
6996 yvolts = ((VCursor-c1)/Yconv1) - Yoffset1
6997 V1String =
' {0:.3f} '.format(-yvolts)
6998 V_label = V1String + Units
6999 ca.create_text(X0L+GRW+2, VCursor, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7000 if ShowTCur.get() == 0
and ShowVCur.get() == 0
and MouseWidget == ca:
7001 if MouseX > X0L
and MouseX < X0L+GRW
and MouseY > Y0T
and MouseY < Y0T+GRH:
7002 Dline = [MouseX, Y0T, MouseX, Y0T+GRH]
7003 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7004 ca.create_oval(MouseX-GridWidth.get(), MouseY-GridWidth.get(), MouseX+GridWidth.get(), MouseY+GridWidth.get(), outline=COLORtrigger, fill=COLORtrigger, width=GridWidth.get())
7005 Tpoint = ((MouseX-X0L) * Tstep) + vt
7006 Tpoint = Tpoint/Mulx
7008 axis_value = Tpoint / 1000.0
7009 V_label =
' {0:.2f} '.format(axis_value) +
" S"
7010 if Tpoint < 1000
and Tpoint >= 1:
7012 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
7014 axis_value = Tpoint * 1000.0
7015 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
7016 ca.create_text(MouseX, Y0T+GRH+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
7017 Dline = [X0L, MouseY, X0L+GRW, MouseY]
7018 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
7020 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7021 V1String =
' {0:.3f} '.format(-yvolts)
7022 V_label = V1String + Units
7023 ca.create_text(X0L+GRW+2, MouseY, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
7025 if MeasGateStatus.get() == 1:
7026 LeftGate = X0L + MeasGateLeft / Tstep
7027 RightGate = X0L + MeasGateRight / Tstep
7028 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace5)
7029 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace7)
7032 DT = (MeasGateRight-MeasGateLeft)/Mulx
7036 axis_value = DT / 1000.0
7037 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
7038 if DT < 1000
and DT >= 1:
7040 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
7042 axis_value = DT * 1000.0
7043 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
7045 DFreq =
' {0:.3f} '.format(1.0/DT)
7046 V_label =
" Delta T" + DeltaT
7048 V_label = V_label +
", Freq " + DFreq +
" KHz"
7053 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
7057 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
7059 y = Y0T + GRH + 7 - (MarkerNum*10)
7061 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
7065 ca.create_text(x, y, text=V_label, fill=COLORtrace5, anchor=Justify, font=(
"arial", FontSize ))
7068 SmoothBool = SmoothCurves.get()
7070 if len(T1Vline) > 4:
7071 ca.create_line(T1Vline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7072 if len(T1Iline) > 4:
7073 ca.create_line(T1Iline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7074 if len(T2Vline) > 4:
7075 ca.create_line(T2Vline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7076 if len(T2Iline) > 4:
7077 ca.create_line(T2Iline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7078 if len(Tmathline) > 4
and MathTrace.get() > 0:
7079 ca.create_line(Tmathline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7080 if len(TMXline) > 4 :
7081 ca.create_line(TMXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7082 if len(TMYline) > 4 :
7083 ca.create_line(TMYline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7084 if MuxScreenStatus.get() == 1:
7085 if len(TMAVline) > 4:
7086 ca.create_line(TMAVline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7087 if len(TMBVline) > 4:
7088 ca.create_line(TMBVline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7089 if len(TMCVline) > 4:
7090 ca.create_line(TMCVline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7091 if len(TMDVline) > 4:
7092 ca.create_line(TMDVline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7093 if ShowRB_V.get() == 1
and len(TMBRline) > 4:
7094 ca.create_line(TMBRline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7095 if ShowRB_I.get() == 1
and len(TMCRline) > 4:
7096 ca.create_line(TMCRline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7097 if ShowRA_V.get() == 1
and len(T1VRline) > 4:
7098 ca.create_line(T1VRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7099 if ShowRA_I.get() == 1
and len(T1IRline) > 4:
7100 ca.create_line(T1IRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7101 if ShowRB_V.get() == 1
and len(T2VRline) > 4:
7102 ca.create_line(T2VRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7103 if ShowRB_I.get() == 1
and len(T2IRline) > 4:
7104 ca.create_line(T2IRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7105 if ShowMath.get() == 1
and len(TMRline) > 4:
7106 ca.create_line(TMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
7110 if session.continuous:
7111 sttxt =
"Running Continuous"
7113 sttxt =
"Running Discontinuous"
7114 if TRACEmodeTime.get() == 1:
7115 sttxt = sttxt +
" Averaging"
7116 if ManualTrigger.get() == 1:
7117 sttxt =
"Manual Trigger"
7118 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7120 if ScreenTrefresh.get() == 1:
7121 sttxt = sttxt +
" Persistance ON"
7123 de = ca.find_enclosed( X0L-1, Y0T+GRH+12, CANVASwidth, Y0T+GRH+100)
7127 de = ca.find_enclosed( X0L-1, -1, CANVASwidth, 20)
7130 if LabelPlotText.get() > 0:
7131 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7133 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7136 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7139 BoxColor =
"#808080"
7140 if DacScreenStatus.get() == 0
and (DigScreenStatus.get() == 1
or MuxScreenStatus.get() == 1):
7141 if D0.get() == 0
and D4.get() == 0:
7142 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7144 BoxColor =
"#00ff00"
7146 BoxColor =
"#ff0000"
7147 ca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7149 ca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7150 if D1.get() == 0
and D5.get() == 0:
7151 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7153 BoxColor =
"#00ff00"
7155 BoxColor =
"#ff0000"
7156 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7158 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7159 if D2.get() == 0
and D6.get() == 0:
7160 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7162 BoxColor =
"#00ff00"
7164 BoxColor =
"#ff0000"
7165 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7167 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7168 if D3.get() == 0
and D7.get() == 0:
7169 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7171 BoxColor =
"#00ff00"
7173 BoxColor =
"#ff0000"
7174 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7176 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7177 ca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7181 txt =
' {0:.2f} '.format(vx / 1000.0) +
" S/div"
7182 if vx < 1000
and vx >= 1:
7183 txt =
' {0:.2f} '.format(vx) +
" mS/div"
7185 txt =
' {0:.2f} '.format(vx * 1000.0) +
" uS/div"
7189 txt = txt +
"View at "
7191 txt = txt + str(int(vt / 1000.0)) +
" S "
7192 if abs(vt) < 1000
and abs(vt) >= 1:
7193 txt = txt + str(int(vt)) +
" mS "
7195 txt = txt + str(int(vt * 1000.0)) +
" uS "
7197 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
7198 if ETSDisp.get() > 0:
7199 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
7202 if ShowC1_V.get() == 1:
7203 if MeasAHW.get() == 1:
7204 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
7205 if MeasALW.get() == 1:
7206 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
7207 if MeasADCy.get() == 1:
7208 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
7209 if MeasAPER.get() == 1:
7210 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
7211 if MeasAFREQ.get() == 1:
7212 txt = txt +
" CA Freq = "
7215 V1String =
' {0:.1f} '.format(ChaF)
7216 txt = txt + str(V1String) +
" Hz "
7217 if ChaF > 1000
and ChaF < 1000000:
7218 V1String =
' {0:.1f} '.format(ChaF/1000)
7219 txt = txt + str(V1String) +
" KHz "
7221 V1String =
' {0:.1f} '.format(ChaF/1000000)
7222 txt = txt + str(V1String) +
" MHz "
7224 if ShowC2_V.get() == 1:
7225 if MeasBHW.get() == 1:
7226 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
7227 if MeasBLW.get() == 1:
7228 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
7229 if MeasBDCy.get() == 1:
7230 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
7231 if MeasBPER.get() == 1:
7232 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
7233 if MeasBFREQ.get() == 1:
7234 txt = txt +
" CB Freq = "
7237 V1String =
' {0:.1f} '.format(ChaF)
7238 txt = txt + str(V1String) +
" Hz "
7239 if ChaF > 1000
and ChaF < 1000000:
7240 V1String =
' {0:.1f} '.format(ChaF/1000)
7241 txt = txt + str(V1String) +
" KHz "
7243 V1String =
' {0:.1f} '.format(ChaF/1000000)
7244 txt = txt + str(V1String) +
" MHz "
7246 if MuxScreenStatus.get() == 0:
7247 if MeasPhase.get() == 1:
7248 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7249 if MeasDelay.get() == 1:
7250 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
7253 y = Y0T+GRH+int(2.5 *FontSize)
7254 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7255 if MeasTopV1.get() == 1
or MeasBaseV1.get() == 1
or MeasTopV2.get() == 1
or MeasBaseV2.get() == 1:
7258 if ShowC1_V.get() == 1:
7260 if CHA_RC_HP.get() == 1:
7264 txt = txt + str(CH1pdvRange) +
" V/div"
7265 if MeasDCV1.get() == 1:
7266 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
7267 if MeasMaxV1.get() == 1:
7268 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
7269 if MeasTopV1.get() == 1:
7270 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
7271 if MeasMinV1.get() == 1:
7272 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
7273 if MeasBaseV1.get() == 1:
7274 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
7275 if MeasMidV1.get() == 1:
7276 MidV1 = (MaxV1+MinV1)/2.0
7277 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
7278 if MeasPPV1.get() == 1:
7280 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
7281 if MeasRMSV1.get() == 1:
7282 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
7283 if MeasRMSVA_B.get() == 1:
7284 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
7285 if MeasDiffAB.get() == 1:
7286 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
7287 if MeasUserA.get() == 1:
7289 TempValue = eval(UserAString)
7290 V1String =
' {0:.4f} '.format(TempValue)
7293 txt = txt + UserALabel +
" = " + V1String
7294 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
7296 txt = txt + str(CH1IpdvRange) +
" mA/div"
7297 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
7299 txt = txt + str(CH1IpdvRange) +
" mA/div"
7300 if ShowC1_I.get() == 1:
7301 if MeasDCI1.get() == 1:
7302 V1String =
' {0:.2f} '.format(DCI1)
7303 txt = txt +
" AvgI = " + V1String
7304 if AWGAShape.get() == 0:
7306 Resvalue = (DCV1/DCI1)*1000
7307 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7309 txt = txt +
" Res = OverRange"
7310 if MeasMaxI1.get() == 1:
7311 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
7312 if MeasMinI1.get() == 1:
7313 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
7314 if MeasMidI1.get() == 1:
7315 MidI1 = (MaxI1+MinI1)/2.0
7316 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
7317 if MeasPPI1.get() == 1:
7319 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
7320 if MeasRMSI1.get() == 1:
7321 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
7324 y = Y0T+GRH+(4*FontSize)
7325 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7328 if MuxScreenStatus.get() == 1:
7330 if Show_CBA.get() > 0:
7332 elif Show_CBB.get() > 0:
7334 elif Show_CBC.get() > 0:
7336 elif Show_CBD.get() > 0:
7338 if MeasPhase.get() == 1:
7339 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7340 if MeasDelay.get() == 1:
7341 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
7342 if MeasUserB.get() == 1:
7344 TempValue = eval(UserBString)
7345 V1String =
' {0:.4f} '.format(TempValue)
7348 txt = txt + UserBLabel +
" = " + V1String
7349 if ShowC2_V.get() == 1:
7350 if CHB_RC_HP.get() == 1:
7354 txt = txt + str(CH2pdvRange) +
" V/div"
7355 if MeasDCV2.get() == 1:
7356 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
7357 if MeasMaxV2.get() == 1:
7358 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
7359 if MeasTopV2.get() == 1:
7360 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
7361 if MeasMinV2.get() == 1:
7362 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
7363 if MeasBaseV2.get() == 1:
7364 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
7365 if MeasMidV2.get() == 1:
7366 MidV2 = (MaxV2+MinV2)/2.0
7367 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
7368 if MeasPPV2.get() == 1:
7370 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
7371 if MeasRMSV2.get() == 1:
7372 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
7373 if MeasDiffBA.get() == 1:
7374 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
7375 if MeasUserB.get() == 1:
7377 TempValue = eval(UserBString)
7378 V1String =
' {0:.4f} '.format(TempValue)
7381 txt = txt + UserBLabel +
" = " + V1String
7382 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
7384 txt = txt + str(CH2IpdvRange) +
" mA/div"
7385 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
7387 txt = txt + str(CH2IpdvRange) +
" mA/div"
7388 if ShowC2_I.get() == 1:
7389 if MeasDCI2.get() == 1:
7390 V1String =
' {0:.2f} '.format(DCI2)
7391 txt = txt +
" AvgI = " + V1String
7392 if AWGBShape.get() == 0:
7394 Resvalue = (DCV2/DCI2)*1000
7395 R1String =
' {0:.1f} '.format(Resvalue)
7396 txt = txt +
" Res = " + R1String
7398 txt = txt +
" Res = OverRange"
7399 if MeasMaxI2.get() == 1:
7400 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
7401 if MeasMinI2.get() == 1:
7402 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
7403 if MeasMidI2.get() == 1:
7404 MidI2 = (MaxI2+MinI2)/2.0
7405 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
7406 if MeasPPI2.get() == 1:
7408 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
7409 if MeasRMSI2.get() == 1:
7410 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
7413 y = Y0T+GRH+int(5.5*FontSize)
7414 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7418 global Tmathline, TMRline, TXYRline
7423 global FontSize, LabelPlotText, PlotLabelText
7424 global XYca, MouseX, MouseY, MouseWidget
7425 global ShowXCur, ShowYCur, XCursor, YCursor
7427 global ShowRXY, ShowMath, MathUnits, MathXUnits, MathYUnits
7428 global Xsignal, Ysignal, MathXAxis, MathYAxis
7429 global RUNstatus, SingleShot, ManualTrigger
7442 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry
7443 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7
7444 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5
7445 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5
7446 global CANVASwidthXY, CANVASheightXY, COLORXmarker, COLORYmarker
7447 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
7448 global ScreenXYrefresh, SmoothCurves
7449 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
7450 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
7451 global SV1, SI1, SV2, SI2, CHABphase
7452 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
7453 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
7454 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
7455 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
7456 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase
7457 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
7458 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
7459 global AWGAShape, AWGBShape
7460 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7461 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
7462 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
7463 global DacScreenStatus, DigScreenStatus
7464 global D0, D1, D2, D3, D4, D5, D6, D7
7465 global DevID, devx, MarkerNum, MarkerScale
7466 global HozPoss, HozPossentry
7467 global HistAsPercent, VBuffA, VBuffB, HBuffA, HBuffB
7468 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
7469 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
7472 Ymax = Y0TXY + GRHXY
7474 InOffA = float(eval(CHAVOffsetEntry.get()))
7476 CHAVOffsetEntry.delete(0,END)
7477 CHAVOffsetEntry.insert(0, InOffA)
7479 InGainA = float(eval(CHAVGainEntry.get()))
7481 CHAVGainEntry.delete(0,END)
7482 CHAVGainEntry.insert(0, InGainA)
7484 InOffB = float(eval(CHBVOffsetEntry.get()))
7486 CHBVOffsetEntry.delete(0,END)
7487 CHBVOffsetEntry.insert(0, InOffB)
7489 InGainB = float(eval(CHBVGainEntry.get()))
7491 CHBVGainEntry.delete(0,END)
7492 CHBVGainEntry.insert(0, InGainB)
7495 CH1pdvRange = float(eval(CHAsbxy.get()))
7497 CHAsbxy.delete(0,END)
7498 CHAsbxy.insert(0, CH1pdvRange)
7500 CH2pdvRange = float(eval(CHBsbxy.get()))
7502 CHBsbxy.delete(0,END)
7503 CHBsbxy.insert(0, CH2pdvRange)
7505 CH1IpdvRange = float(eval(CHAIsbxy.get()))
7507 CHAIsbxy.delete(0,END)
7508 CHAIsbxy.insert(0, CH1IpdvRange)
7510 CH2IpdvRange = float(eval(CHBIsbxy.get()))
7512 CHBIsbxy.delete(0,END)
7513 CHBIsbxy.insert(0, CH2IpdvRange)
7516 CHAOffset = float(eval(CHAVPosEntryxy.get()))
7518 CHAVPosEntryxy.delete(0,END)
7519 CHAVPosEntryxy.insert(0, CHAOffset)
7521 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
7523 CHAIPosEntryxy.delete(0,END)
7524 CHAIPosEntryxy.insert(0, CHAIOffset)
7526 CHBOffset = float(eval(CHBVPosEntryxy.get()))
7528 CHBVPosEntry.delete(0,END)
7529 CHBVPosEntry.insert(0, CHBOffset)
7531 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
7533 CHBIPosEntryxy.delete(0,END)
7534 CHBIPosEntryxy.insert(0, CHBIOffset)
7536 if CH1pdvRange < 0.001:
7538 if CH2pdvRange < 0.001:
7540 if CH1IpdvRange < 0.05:
7542 if CH2IpdvRange < 0.05:
7545 if Xsignal.get() == 6:
7546 CHAIOffset = 5 * CH1IpdvRange
7547 if Xsignal.get() == 7:
7548 CHBIOffset = 5 * CH2IpdvRange
7549 if ScreenXYrefresh.get() == 0:
7560 y = Y0TXY + i * GRHXY/10.0
7563 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7568 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
7569 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7573 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7574 if Ysignal.get() == 2
or Xsignal.get() == 6:
7575 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7576 Iaxis_label = str(round(Iaxis_value, 3))
7577 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"e", font=(
"arial", FontSize ))
7578 elif Ysignal.get() == 4
or Xsignal.get() == 7:
7579 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7580 Iaxis_label = str(round(Iaxis_value, 3))
7581 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"e", font=(
"arial", FontSize ))
7582 elif Ysignal.get() == 1:
7583 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7584 Vaxis_label = str(round(Vaxis_value, 3))
7585 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
7586 elif Ysignal.get() == 3:
7587 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7588 Vaxis_label = str(round(Vaxis_value, 3))
7589 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7590 elif Ysignal.get() == 5:
7591 TempCOLOR = COLORtrace5
7592 if MathTrace.get() == 2:
7593 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7594 elif MathTrace.get() == 3:
7595 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7597 if MathYAxis ==
"V-A":
7598 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7599 TempCOLOR = COLORtrace1
7600 elif MathYAxis ==
"V-B":
7601 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7602 TempCOLOR = COLORtrace2
7603 elif MathYAxis ==
"I-A":
7604 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7605 TempCOLOR = COLORtrace3
7606 elif MathYAxis ==
"I-B":
7607 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7608 TempCOLOR = COLORtrace4
7610 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7611 Vaxis_label = str(round(Vaxis_value, 3))
7612 XYca.create_text(x1-3, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
7622 x = X0LXY + i * GRWXY/10.0
7625 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7630 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
7631 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7634 if Xsignal.get() == 1
or Xsignal.get() == 6:
7635 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7636 Vaxis_label = str(round(Vaxis_value, 3))
7637 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
7638 elif Xsignal.get() == 3
or Xsignal.get() == 7:
7639 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7640 Vaxis_label = str(round(Vaxis_value, 3))
7641 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
7642 elif Xsignal.get() == 2:
7643 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7644 Iaxis_label = str(round(Iaxis_value, 3))
7645 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
7646 elif Xsignal.get() == 4:
7647 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7648 Iaxis_label = str(round(Iaxis_value, 3))
7649 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7650 elif Xsignal.get() == 5:
7651 TempCOLOR = COLORtrace5
7652 if MathTrace.get() == 2:
7653 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7654 elif MathTrace.get() == 3:
7655 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7657 if MathXAxis ==
"V-A":
7658 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7659 TempCOLOR = COLORtrace1
7660 elif MathXAxis ==
"V-B":
7661 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7662 TempCOLOR = COLORtrace2
7663 elif MathXAxis ==
"I-A":
7664 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7665 TempCOLOR = COLORtrace3
7666 elif MathXAxis ==
"I-B":
7667 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7668 TempCOLOR = COLORtrace4
7670 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7671 TempCOLOR = COLORtrace5
7672 Vaxis_label = str(round(Vaxis_value, 3))
7673 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7675 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7676 if Xsignal.get() == 1
or Xsignal.get() == 6:
7677 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7678 Vaxis_label = str(round(Vaxis_value, 3))
7679 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
7680 elif Xsignal.get() == 3
or Xsignal.get() == 7:
7681 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7682 Vaxis_label = str(round(Vaxis_value, 3))
7683 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
7684 elif Xsignal.get() == 2:
7685 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7686 Iaxis_label = str(round(Iaxis_value, 3))
7687 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
7688 elif Xsignal.get() == 4:
7689 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7690 Iaxis_label = str(round(Iaxis_value, 3))
7691 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7692 elif Xsignal.get() == 5:
7693 TempCOLOR = COLORtrace5
7694 if MathTrace.get() == 2:
7695 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7696 elif MathTrace.get() == 3:
7697 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7699 if MathXAxis ==
"V-A":
7700 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7701 TempCOLOR = COLORtrace1
7702 elif MathXAxis ==
"V-B":
7703 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7704 TempCOLOR = COLORtrace2
7705 elif MathXAxis ==
"I-A":
7706 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7707 TempCOLOR = COLORtrace3
7708 elif MathXAxis ==
"I-B":
7709 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7710 TempCOLOR = COLORtrace4
7712 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7713 Vaxis_label = str(round(Vaxis_value, 3))
7714 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7717 if len(TXYline) > 4:
7718 if Xsignal.get() == 1:
7719 XYca.create_line(TXYline, fill=COLORtrace1, width=TRACEwidth.get())
7720 elif Xsignal.get() == 2:
7721 XYca.create_line(TXYline, fill=COLORtrace3, width=TRACEwidth.get())
7722 elif Xsignal.get() == 3:
7723 XYca.create_line(TXYline, fill=COLORtrace2, width=TRACEwidth.get())
7724 elif Xsignal.get() == 4:
7725 XYca.create_line(TXYline, fill=COLORtrace4, width=TRACEwidth.get())
7726 elif Xsignal.get() == 5
or Ysignal.get() == 5:
7727 XYca.create_line(TXYline, fill=COLORtrace5, width=TRACEwidth.get())
7728 if len(TXYRline) > 4
and ShowRXY.get() == 1:
7729 XYca.create_line(TXYRline, fill=COLORtraceR1, width=TRACEwidth.get())
7731 if Xsignal.get() == 6:
7734 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7735 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
7738 c2 = GRWXY / 2.0 + X0LXY
7740 if HistAsPercent == 1:
7741 ylo = float(HBuffA[0][b]) / len(VBuffA)
7745 ylo = int(y1 - (Yconv1 * ylo))
7750 xlo = HBuffA[1][b] - CHAOffset
7751 xlo = int(c2 + Xconv1 * xlo)
7752 Dline = [xlo,y1,xlo,ylo]
7753 XYca.create_line(Dline, fill=COLORtrace1)
7755 if Xsignal.get() == 7:
7758 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7759 Xconv1 = float(GRWXY/10.0) / CH2pdvRange
7761 c2 = GRWXY / 2.0 + X0LXY
7763 if HistAsPercent == 1:
7764 ylo = float(HBuffB[0][b]) / len(VBuffB)
7768 ylo = int(y1 - Yconv1 * ylo)
7773 xlo = HBuffB[1][b] - CHBOffset
7774 xlo = int(c2 + Xconv1 * xlo)
7775 Dline = [xlo,y1,xlo,ylo]
7776 XYca.create_line(Dline, fill=COLORtrace2)
7779 COLORXmarker = COLORtrace1
7780 COLORYmarker = COLORtrace2
7781 if Xsignal.get() == 1
or Xsignal.get() == 6:
7782 Xconv1 = float(GRWXY/10) / CH1pdvRange
7783 Xoffset1 = CHAOffset
7784 COLORXmarker = COLORtrace1
7786 if Xsignal.get() == 2:
7787 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7788 Xoffset1 = CHAIOffset
7789 COLORXmarker = COLORtrace3
7791 if Xsignal.get() == 3
or Xsignal.get() == 7:
7792 Xconv1 = float(GRWXY/10) / CH2pdvRange
7793 Xoffset1 = CHBOffset
7794 COLORXmarker = COLORtrace2
7796 if Xsignal.get() == 4:
7797 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7798 Xoffset1 = CHBIOffset
7799 COLORmarker = COLORtrace4
7801 if Xsignal.get() == 5:
7802 X_label = MathXUnits
7803 if MathXAxis ==
"V-A":
7804 Xconv1 = float(GRWXY/10) / CH1pdvRange
7805 Xoffset1 = CHAOffset
7806 COLORXmarker = COLORtrace1
7807 elif MathXAxis ==
"V-B":
7808 Xconv1 = float(GRWXY/10) / CH2pdvRange
7809 Xoffset1 = CHBOffset
7810 COLORXmarker = COLORtrace2
7811 elif MathXAxis ==
"I-A":
7812 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7813 Xoffset1 = CHAIOffset
7814 COLORXmarker = COLORtrace3
7815 elif MathXAxis ==
"I-B":
7816 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7817 Xoffset1 = CHBIOffset
7818 COLORXmarker = COLORtrace4
7820 Xconv1 = float(GRWXY/10) / CH1pdvRange
7821 Xoffset1 = CHAOffset
7822 COLORXmarker = COLORtrace1
7824 if Ysignal.get() == 1
or Ysignal.get() == 6:
7825 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7826 Yoffset1 = CHAOffset
7827 COLORYmarker = COLORtrace1
7829 if Ysignal.get() == 2:
7830 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7831 Yoffset1 = CHAIOffset
7832 COLORYmarker = COLORtrace3
7834 if Ysignal.get() == 3
or Ysignal.get() == 7:
7835 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7836 Yoffset1 = CHBOffset
7837 COLORYmarker = COLORtrace2
7839 if Ysignal.get() == 4:
7840 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7841 Yoffset1 = CHBIOffset
7842 COLORYmarker = COLORtrace4
7844 if Ysignal.get() == 5:
7845 Y_label = MathYUnits
7846 if MathYAxis ==
"V-A":
7847 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7848 Yoffset1 = CHAOffset
7849 COLORYmarker = COLORtrace1
7850 elif MathYAxis ==
"V-B":
7851 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7852 Yoffset1 = CHBOffset
7853 COLORYmarker = COLORtrace2
7854 elif MathYAxis ==
"I-A":
7855 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7856 Yoffset1 = CHAIOffset
7857 COLORYmarker = COLORtrace3
7858 elif MathYAxis ==
"I-B":
7859 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7860 Yoffset1 = CHBIOffset
7861 COLORYmarker = COLORtrace4
7863 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7864 Yoffset1 = CHAOffset
7865 COLORYmarker = COLORtrace1
7866 if ShowXCur.get() > 0:
7867 Dline = [XCursor, Y0TXY, XCursor, Y0TXY+GRHXY]
7868 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7869 c1 = GRWXY / 2.0 + X0LXY
7870 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7871 XString =
' {0:.3f} '.format(xvolts)
7872 V_label = XString + X_label
7873 XYca.create_text(XCursor+1, YCursor-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7874 if ShowYCur.get() > 0:
7875 Dline = [X0LXY, YCursor, X0LXY+GRWXY, YCursor]
7876 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7877 c1 = GRHXY / 2.0 + Y0TXY
7878 yvolts = ((YCursor-c1)/Yconv1) - Yoffset1
7879 V1String =
' {0:.3f} '.format(-yvolts)
7880 V_label = V1String + Y_label
7881 XYca.create_text(XCursor+1, YCursor+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7882 if ShowXCur.get() == 0
and ShowYCur.get() == 0
and MouseWidget == XYca:
7883 if MouseX > X0LXY
and MouseX < X0LXY+GRWXY
and MouseY > Y0TXY
and MouseY < Y0TXY+GRHXY:
7884 Dline = [MouseX, Y0TXY, MouseX, Y0TXY+GRHXY]
7885 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7886 c1 = GRWXY / 2.0 + X0LXY
7887 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7888 XString =
' {0:.3f} '.format(xvolts)
7889 V_label = XString + X_label
7890 XYca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7891 Dline = [X0LXY, MouseY, X0LXY+GRWXY, MouseY]
7892 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7893 c1 = GRHXY / 2 + Y0TXY
7894 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7895 V1String =
' {0:.3f} '.format(-yvolts)
7896 V_label = V1String + Y_label
7897 XYca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7902 if TRACEmodeTime.get() == 1:
7903 sttxt = sttxt +
" Averaging"
7904 if ManualTrigger.get() == 1:
7905 sttxt =
"Manual Trigger"
7906 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7908 if ScreenXYrefresh.get() == 1:
7909 sttxt = sttxt +
" Persistance ON"
7911 de = XYca.find_enclosed( X0LXY-1, Y0TXY+GRHXY+19, CANVASwidthXY, Y0TXY+GRHXY+100)
7915 de = XYca.find_enclosed( X0LXY-1, -1, CANVASwidthXY, 20)
7918 if LabelPlotText.get() > 0:
7919 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7921 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7924 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7927 BoxColor =
"#808080"
7928 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 1 :
7929 if D0.get() == 0
and D4.get() == 0:
7930 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7932 BoxColor =
"#00ff00"
7934 BoxColor =
"#ff0000"
7935 XYca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7937 XYca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7938 if D1.get() == 0
and D5.get() == 0:
7939 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7941 BoxColor =
"#00ff00"
7943 BoxColor =
"#ff0000"
7944 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7946 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7947 if D2.get() == 0
and D6.get() == 0:
7948 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7950 BoxColor =
"#00ff00"
7952 BoxColor =
"#ff0000"
7953 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7955 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7956 if D3.get() == 0
and D7.get() == 0:
7957 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7959 BoxColor =
"#00ff00"
7961 BoxColor =
"#ff0000"
7962 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7964 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7965 XYca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7968 if Xsignal.get() == 1
or Xsignal.get() == 3:
7970 if Xsignal.get() == 1:
7971 if MeasAHW.get() == 1:
7972 txt = txt +
" CA Hi Width = " +
' {0:.2f} '.format(CHAHW) +
" mS "
7973 if MeasALW.get() == 1:
7974 txt = txt +
" CA Lo Width = " +
' {0:.2f} '.format(CHALW) +
" mS "
7975 if MeasADCy.get() == 1:
7976 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
7977 if MeasAPER.get() == 1:
7978 txt = txt +
" CA Period = " +
' {0:.2f} '.format(CHAperiod) +
" mS "
7979 if MeasAFREQ.get() == 1:
7980 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
7981 if Xsignal.get() == 3:
7982 if MeasBHW.get() == 1:
7983 txt = txt +
" CB Hi Width = " +
' {0:.2f} '.format(CHBHW) +
" mS "
7984 if MeasBLW.get() == 1:
7985 txt = txt +
" CB Lo Width = " +
' {0:.2f} '.format(CHBLW) +
" mS "
7986 if MeasBDCy.get() == 1:
7987 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
7988 if MeasBPER.get() == 1:
7989 txt = txt +
" CB Period = " +
' {0:.2f} '.format(CHBperiod) +
" mS "
7990 if MeasBFREQ.get() == 1:
7991 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
7992 if MeasPhase.get() == 1:
7993 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7996 y = Y0TXY+GRHXY+int(2.5*FontSize)
7997 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7999 if Xsignal.get() == 1
or Ysignal.get() == 1
or Xsignal.get() == 6:
8002 txt = txt + str(CH1pdvRange) +
" V/div"
8003 if MeasDCV1.get() == 1:
8004 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
8005 if MeasMaxV1.get() == 1:
8006 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
8007 if MeasTopV1.get() == 1:
8008 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
8009 if MeasMinV1.get() == 1:
8010 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
8011 if MeasBaseV1.get() == 1:
8012 txt = txt +
" Top = " +
' {0:.4f} '.format(VABase)
8013 if MeasMidV1.get() == 1:
8014 MidV1 = (MaxV1+MinV1)/2
8015 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
8016 if MeasPPV1.get() == 1:
8018 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
8019 if MeasRMSV1.get() == 1:
8020 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
8021 if MeasUserA.get() == 1:
8023 TempValue = eval(UserAString)
8024 V1String =
' {0:.4f} '.format(TempValue)
8027 txt = txt + UserALabel +
" = " + V1String
8028 if Xsignal.get() == 2:
8030 txt = txt + str(CH1IpdvRange) +
" mA/div"
8031 elif (Xsignal.get() == 2):
8033 txt = txt + str(CH1IpdvRange) +
" mA/div"
8034 if Xsignal.get() == 2
or Ysignal.get() == 2:
8035 if MeasDCI1.get() == 1:
8036 V1String =
' {0:.2f} '.format(DCI1)
8037 txt = txt +
" AvgI = " + V1String
8038 if AWGAShape.get() == 0:
8040 Resvalue = (DCV1/DCI1)*1000
8041 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8043 txt = txt +
" Res = OverRange"
8044 if MeasMaxI1.get() == 1:
8045 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
8046 if MeasMinI1.get() == 1:
8047 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
8048 if MeasMidI1.get() == 1:
8049 MidI1 = (MaxI1+MinI1)/2
8050 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
8051 if MeasPPI1.get() == 1:
8053 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
8054 if MeasRMSI1.get() == 1:
8055 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
8058 y = Y0TXY+GRHXY+int(4*FontSize)
8059 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8062 if Xsignal.get() == 3
or Ysignal.get() == 3
or Xsignal.get() == 7:
8064 txt = txt + str(CH2pdvRange) +
" V/div"
8065 if MeasDCV2.get() == 1:
8066 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
8067 if MeasMaxV2.get() == 1:
8068 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
8069 if MeasTopV2.get() == 1:
8070 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
8071 if MeasMinV2.get() == 1:
8072 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
8073 if MeasBaseV2.get() == 1:
8074 txt = txt +
" Top = " +
' {0:.4f} '.format(VBBase)
8075 if MeasMidV2.get() == 1:
8076 MidV2 = (MaxV2+MinV2)/2
8077 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
8078 if MeasPPV2.get() == 1:
8080 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
8081 if MeasRMSV2.get() == 1:
8082 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
8083 if MeasUserB.get() == 1:
8085 TempValue = eval(UserBString)
8086 V1String =
' {0:.4f} '.format(TempValue)
8089 txt = txt + UserBLabel +
" = " + V1String
8090 if Xsignal.get() == 4:
8092 txt = txt + str(CH2IpdvRange) +
" mA/div"
8093 elif Xsignal.get() == 4:
8095 txt = txt + str(CH2IpdvRange) +
" mA/div"
8096 if Xsignal.get() == 4
or Ysignal.get() == 4:
8097 if MeasDCI2.get() == 1:
8098 V1String =
' {0:.2f} '.format(DCI2)
8099 txt = txt +
" AvgI = " + V1String
8100 if AWGBShape.get() == 0:
8102 Resvalue = (DCV2/DCI2)*1000
8103 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
8105 txt = txt +
" Res = OverRange"
8106 if MeasMaxI2.get() == 1:
8107 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
8108 if MeasMinI2.get() == 1:
8109 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
8110 if MeasMidI2.get() == 1:
8111 MidI2 = (MaxI2+MinI2)/2
8112 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
8113 if MeasPPI2.get() == 1:
8115 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
8116 if MeasRMSI2.get() == 1:
8117 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
8120 y = Y0TXY+GRHXY+int(5.5 * FontSize)
8121 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
8124 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
8126 if MarkerScale.get() != 1:
8128 CHAlab.config(style=
"Rtrace1.TButton")
8129 CHBlab.config(style=
"Strace2.TButton")
8130 CHAIlab.config(style=
"Strace3.TButton")
8131 CHBIlab.config(style=
"Strace4.TButton")
8136 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
8138 if MarkerScale.get() != 3:
8140 CHAlab.config(style=
"Strace1.TButton")
8141 CHBlab.config(style=
"Strace2.TButton")
8142 CHAIlab.config(style=
"Rtrace3.TButton")
8143 CHBIlab.config(style=
"Strace4.TButton")
8148 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
8150 if MarkerScale.get() != 2:
8152 CHAlab.config(style=
"Strace1.TButton")
8153 CHBlab.config(style=
"Rtrace2.TButton")
8154 CHAIlab.config(style=
"Strace3.TButton")
8155 CHBIlab.config(style=
"Strace4.TButton")
8160 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
8162 if MarkerScale.get() != 3:
8164 CHAlab.config(style=
"Strace1.TButton")
8165 CHBlab.config(style=
"Strace2.TButton")
8166 CHAIlab.config(style=
"Strace3.TButton")
8167 CHBIlab.config(style=
"Rtrace4.TButton")
8172 global MarkerXYScale, CHAxylab, CHBxylab
8174 MarkerXYScale.set(1)
8175 CHAxylab.config(style=
"Rtrace1.TButton")
8176 CHBxylab.config(style=
"Strace2.TButton")
8179 global MarkerXYScale, CHAxylab, CHBxylab
8181 MarkerXYScale.set(2)
8182 CHBxylab.config(style=
"Rtrace2.TButton")
8183 CHAxylab.config(style=
"Strace1.TButton")
8186 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
8190 if RUNstatus.get() == 0:
8192 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
8195 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca, MWcount
8196 global MeasGateStatus, MeasGateLeft, MeasGateRight, TIMEdiv, GRW
8198 ShiftKeyDwn = event.state & 1
8199 if event.widget == ca:
8200 if ShowTCur.get() > 0
or ShowVCur.get() > 0:
8201 if ShowTCur.get() > 0
and ShiftKeyDwn == 0:
8203 if event.num == 5
or event.delta == -120:
8205 if event.num == 4
or event.delta == 120:
8207 elif ShowVCur.get() > 0
or ShiftKeyDwn == 1:
8209 if event.num == 5
or event.delta == -120:
8211 if event.num == 4
or event.delta == 120:
8218 if MeasGateStatus.get() == 1:
8219 Tstep = (TIMEdiv / GRW) / 10
8220 if ShiftKeyDwn == 0:
8221 if event.num == 5
or event.delta == -120:
8222 MeasGateLeft = MeasGateLeft + (-100 * Tstep)
8223 if event.num == 4
or event.delta == 120:
8224 MeasGateLeft = MeasGateLeft + (100 * Tstep)
8226 if ShiftKeyDwn == 1:
8227 if event.num == 5
or event.delta == -120:
8228 MeasGateRight = MeasGateRight + (-100 * Tstep)
8229 if event.num == 4
or event.delta == 120:
8230 MeasGateRight = MeasGateRight + (100 * Tstep)
8236 if RUNstatus.get() == 0:
8240 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca, Bodeca
8242 shift_key = event.state & 1
8243 if event.widget == ca:
8244 if ShowVCur.get() > 0
and shift_key == 0:
8245 VCursor = VCursor - 1
8246 elif ShowVCur.get() > 0
and shift_key == 1:
8247 VCursor = VCursor - 5
8248 if RUNstatus.get() == 0:
8251 if event.widget == XYca:
8252 if ShowYCur.get() > 0
and shift_key == 0:
8253 YCursor = YCursor - 1
8254 elif ShowYCur.get() > 0
and shift_key == 1:
8255 YCursor = YCursor - 5
8256 if RUNstatus.get() == 0:
8261 if event.widget == Freqca:
8262 if ShowdBCur.get() > 0
and shift_key == 0:
8263 dBCursor = dBCursor - 1
8264 elif ShowdBCur.get() > 0
and shift_key == 1:
8265 dBCursor = dBCursor - 5
8266 if RUNstatus.get() == 0:
8271 if event.widget == Bodeca:
8272 if ShowBdBCur.get() > 0
and shift_key == 0:
8273 BdBCursor = BdBCursor - 1
8274 elif ShowBdBCur.get() > 0
and shift_key == 1:
8275 BdBCursor = BdBCursor - 5
8276 if RUNstatus.get() == 0:
8282 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca
8284 shift_key = event.state & 1
8285 if event.widget == ca:
8286 if ShowVCur.get() > 0
and shift_key == 0:
8287 VCursor = VCursor + 1
8288 elif ShowVCur.get() > 0
and shift_key == 1:
8289 VCursor = VCursor + 5
8290 if RUNstatus.get() == 0:
8293 if event.widget == XYca:
8294 if ShowYCur.get() > 0
and shift_key == 0:
8295 YCursor = YCursor + 1
8296 elif ShowYCur.get() > 0
and shift_key == 1:
8297 YCursor = YCursor + 5
8298 if RUNstatus.get() == 0:
8303 if event.widget == Freqca:
8304 if ShowdBCur.get() > 0
and shift_key == 0:
8305 dBCursor = dBCursor + 1
8306 elif ShowdBCur.get() > 0
and shift_key == 1:
8307 dBCursor = dBCursor + 5
8308 if RUNstatus.get() == 0:
8313 if event.widget == Bodeca:
8314 if ShowBdBCur.get() > 0
and shift_key == 0:
8315 BdBCursor = BdBCursor + 1
8316 elif ShowBdBCur.get() > 0
and shift_key == 1:
8317 BdBCursor = BdBCursor + 5
8318 if RUNstatus.get() == 0:
8324 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
8326 shift_key = event.state & 1
8327 if event.widget == ca:
8328 if ShowTCur.get() > 0
and shift_key == 0:
8329 TCursor = TCursor - 1
8330 elif ShowTCur.get() > 0
and shift_key == 1:
8331 TCursor = TCursor - 5
8332 if RUNstatus.get() == 0:
8335 if event.widget == XYca:
8336 if ShowXCur.get() > 0
and shift_key == 0:
8337 XCursor = XCursor - 1
8338 elif ShowXCur.get() > 0
and shift_key == 1:
8339 XCursor = XCursor - 5
8340 if RUNstatus.get() == 0:
8345 if event.widget == Freqca:
8346 if ShowFCur.get() > 0
and shift_key == 0:
8347 FCursor = FCursor - 1
8348 elif ShowFCur.get() > 0
and shift_key == 1:
8349 FCursor = FCursor - 5
8350 if RUNstatus.get() == 0:
8355 if event.widget == Bodeca:
8356 if ShowBPCur.get() > 0
and shift_key == 0:
8357 BPCursor = BPCursor - 1
8358 elif ShowBPCur.get() > 0
and shift_key == 1:
8359 BPCursor = BPCursor - 5
8360 if RUNstatus.get() == 0:
8366 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
8368 shift_key = event.state & 1
8369 if event.widget == ca:
8370 if ShowTCur.get() > 0
and shift_key == 0:
8371 TCursor = TCursor + 1
8372 elif ShowTCur.get() > 0
and shift_key == 1:
8373 TCursor = TCursor + 5
8374 if RUNstatus.get() == 0:
8377 if event.widget == XYca:
8378 if ShowXCur.get() > 0
and shift_key == 0:
8379 XCursor = XCursor + 1
8380 elif ShowXCur.get() > 0
and shift_key == 1:
8381 XCursor = XCursor + 5
8382 if RUNstatus.get() == 0:
8387 if event.widget == Freqca:
8388 if ShowFCur.get() > 0
and shift_key == 0:
8389 FCursor = FCursor + 1
8390 elif ShowFCur.get() > 0
and shift_key == 1:
8391 FCursor = FCursor + 5
8392 if RUNstatus.get() == 0:
8397 if event.widget == Bodeca:
8398 if ShowBPCur.get() > 0
and shift_key == 0:
8399 BPCursor = BPCursor + 1
8400 elif ShowBPCur.get() > 0
and shift_key == 1:
8401 BPCursor = BPCursor + 5
8402 if RUNstatus.get() == 0:
8408 global RUNstatus, ca, XYca, Freqca, Bodeca, IAca
8410 if event.widget == ca:
8411 if RUNstatus.get() == 0:
8413 elif RUNstatus.get() > 0:
8416 if event.widget == XYca:
8417 if RUNstatus.get() == 0:
8419 elif RUNstatus.get() > 0:
8424 if event.widget == IAca:
8425 if RUNstatus.get() == 0:
8427 elif RUNstatus.get() > 0:
8432 if event.widget == Freqca:
8433 if RUNstatus.get() == 0:
8435 elif RUNstatus.get() > 0:
8440 if event.widget == Bodeca:
8441 if RUNstatus.get() == 0:
8443 elif RUNstatus.get() > 0:
8454 global ca, MarkerLoc, Mulx
8455 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
8456 global TMsb, CHAsb, CHBsb, CHAIsb, CHBIsb, MarkerScale
8457 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
8458 global SAMPLErate, RUNstatus, MarkerNum, PrevV, PrevT
8459 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
8460 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
8461 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
8462 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
8463 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
8464 global MeasGateLeft, MeasGateRight, MeasGateStatus, MeasGateNum, TMsb, SAMPLErate
8467 HoldOff = float(eval(HoldOffentry.get()))
8471 HoldOffentry.delete(0,END)
8472 HoldOffentry.insert(0, HoldOff)
8475 TIMEdiv = float(eval(TMsb.get()))
8478 TMsb.delete(0,
"end")
8479 TMsb.insert(0,TIMEdiv)
8481 if TIMEdiv < 0.0002:
8484 if (RUNstatus.get() == 0):
8485 MarkerNum = MarkerNum + 1
8488 CH1pdvRange = float(eval(CHAsb.get()))
8491 CHAsb.insert(0, CH1pdvRange)
8493 CH2pdvRange = float(eval(CHBsb.get()))
8496 CHBsb.insert(0, CH2pdvRange)
8498 CH1IpdvRange = float(eval(CHAIsb.get()))
8500 CHAIsb.delete(0,END)
8501 CHAIsb.insert(0, CH1IpdvRange)
8503 CH2IpdvRange = float(eval(CHBIsb.get()))
8505 CHBIsb.delete(0,END)
8506 CHBIsb.insert(0, CH2IpdvRange)
8509 CHAOffset = float(eval(CHAVPosEntry.get()))
8511 CHAVPosEntry.delete(0,END)
8512 CHAVPosEntry.insert(0, CHAOffset)
8514 CHAIOffset = float(eval(CHAIPosEntry.get()))
8516 CHAIPosEntry.delete(0,END)
8517 CHAIPosEntry.insert(0, CHAIOffset)
8519 CHBOffset = float(eval(CHBVPosEntry.get()))
8521 CHBVPosEntry.delete(0,END)
8522 CHBVPosEntry.insert(0, CHBOffset)
8524 CHBIOffset = float(eval(CHBIPosEntry.get()))
8526 CHBIPosEntry.delete(0,END)
8527 CHBIPosEntry.insert(0, CHBIOffset)
8529 if CH1pdvRange < 0.001:
8531 if CH2pdvRange < 0.001:
8533 if CH1IpdvRange < 1.0:
8535 if CH2IpdvRange < 1.0:
8538 if MuxScreenStatus.get() == 1:
8540 CHMApdvRange = float(eval(CHB_Asb.get()))
8542 CHB_Asb.delete(0,END)
8543 CHB_Asb.insert(0, CHMApdvRange)
8545 CHMBpdvRange = float(eval(CHB_Bsb.get()))
8547 CHB_Bsb.delete(0,END)
8548 CHB_Bsb.insert(0, CHMBpdvRange)
8550 CHMCpdvRange = float(eval(CHB_Csb.get()))
8552 CHB_Csb.delete(0,END)
8553 CHB_Csb.insert(0, CHMCpdvRange)
8555 CHMDpdvRange = float(eval(CHB_Dsb.get()))
8557 CHB_Dsb.delete(0,END)
8558 CHB_Dsb.insert(0, CHMDpdvRange)
8559 YconvMA = float(GRH/10.0) / CHMApdvRange
8560 YconvMB = float(GRH/10.0) / CHMBpdvRange
8561 YconvMC = float(GRH/10.0) / CHMCpdvRange
8562 YconvMD = float(GRH/10.0) / CHMDpdvRange
8564 CHBAOffset = float(eval(CHB_APosEntry.get()))
8566 CHB_APosEntry.delete(0,END)
8567 CHB_APosEntry.insert(0, CHBAOffset)
8569 CHBBOffset = float(eval(CHB_BPosEntry.get()))
8571 CHB_BPosEntry.delete(0,END)
8572 CHB_BPosEntry.insert(0, CHBBOffset)
8574 CHBCOffset = float(eval(CHB_CPosEntry.get()))
8576 CHB_CPosEntry.delete(0,END)
8577 CHB_CPosEntry.insert(0, CHBCOffset)
8579 CHBDOffset = float(eval(CHB_DPosEntry.get()))
8581 CHB_DPosEntry.delete(0,END)
8582 CHB_DPosEntry.insert(0, CHBDOffset)
8583 Yoffset1 = CHAOffset
8584 if MarkerScale.get() == 1:
8585 Yconv1 = float(GRH/10.0) / CH1pdvRange
8586 Yoffset1 = CHAOffset
8587 COLORmarker = COLORtrace1
8589 elif MarkerScale.get() == 2:
8590 Yconv1 = float(GRH/10.0) / CH2pdvRange
8591 Yoffset1 = CHBOffset
8592 COLORmarker = COLORtrace2
8594 elif MarkerScale.get() == 3:
8595 Yconv1 = float(GRH/10.0) / CH1IpdvRange
8596 Yoffset1 = CHAIOffset
8597 COLORmarker = COLORtrace3
8599 elif MarkerScale.get() == 4:
8600 Yconv1 = float(GRH/10.0) / CH2IpdvRange
8601 Yoffset1 = CHBIOffset
8602 COLORmarker = COLORtrace4
8605 elif MarkerScale.get() == 5:
8606 Yconv1 = float(GRH/10.0) / CHMApdvRange
8607 Yoffset1 = CHBAOffset
8608 COLORmarker = COLORtrace2
8610 elif MarkerScale.get() == 6:
8611 Yconv1 = float(GRH/10.0) / CHMBpdvRange
8612 Yoffset1 = CHBBOffset
8613 COLORmarker = COLORtrace6
8615 elif MarkerScale.get() == 7:
8616 Yconv1 = float(GRH/10.0) / CHMCpdvRange
8617 Yoffset1 = CHBCOffset
8618 COLORmarker = COLORtrace7
8620 elif MarkerScale.get() == 8:
8621 Yconv1 = float(GRH/10.0) / CHMDpdvRange
8622 Yoffset1 = CHBDOffset
8623 COLORmarker = COLORtrace4
8626 Yconv1 = float(GRH/10.0) / CH1pdvRange
8627 Yoffset1 = CHAOffset
8628 COLORmarker = COLORtrace1
8631 c1 = GRH / 2.0 + Y0T
8632 xc1 = GRW / 2.0 + X0L
8633 c2 = GRH / 2.0 + Y0T
8635 ca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
8636 ca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
8638 Tstep = (10.0 * TIMEdiv) / GRW
8639 Tpoint = ((event.x-X0L) * Tstep) + HoldOff
8641 Tpoint = Tpoint/Mulx
8643 axis_value = Tpoint / 1000.0
8644 TString =
' {0:.2f} '.format(axis_value) +
" S "
8645 if Tpoint < 1000
and Tpoint >= 1:
8647 TString =
' {0:.2f} '.format(axis_value) +
" mS "
8649 axis_value = Tpoint * 1000.0
8650 TString =
' {0:.2f} '.format(axis_value) +
" uS "
8652 yvolts = ((event.y-c1)/Yconv1) - Yoffset1
8653 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
8654 V1String =
' {0:.3f} '.format(-yvolts)
8656 V1String =
' {0:.1f} '.format(-yvolts)
8657 V_label = str(MarkerNum) +
" " + TString + V1String
8658 V_label = V_label + Units
8660 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
8661 DeltaV =
' {0:.3f} '.format(PrevV-yvolts)
8663 DeltaV =
' {0:.1f} '.format(PrevV-yvolts)
8666 axis_value = DT / 1000.0
8667 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
8668 if Tpoint < 1000
and Tpoint >= 1:
8670 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
8672 axis_value = DT * 1000.0
8673 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
8675 DFreq =
' {0:.3f} '.format(1.0/(Tpoint-PrevT))
8676 V_label = V_label +
" Delta " + DeltaT + DeltaV
8677 V_label = V_label + Units
8678 V_label = V_label +
", Freq " + DFreq +
" KHz"
8681 y = Y0T + 3 + (MarkerNum*10)
8683 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
8685 y = Y0T + 3 + (MarkerNum*10)
8687 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
8689 y = Y0T + GRH + 3 - (MarkerNum*10)
8691 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
8693 y = Y0T + GRH + 3 - (MarkerNum*10)
8695 ca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=Justify, font=(
"arial", FontSize ))
8696 ca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
8700 if MeasGateStatus.get() == 1:
8702 Tstep = (10.0 * TIMEdiv) / GRW
8703 if MeasGateNum == 0:
8704 MeasGateLeft = ((event.x-X0L) * Tstep)
8707 MeasGateRight = ((event.x-X0L) * Tstep)
8709 LeftGate = X0L + MeasGateLeft / Tstep
8710 RightGate = X0L + MeasGateRight / Tstep
8711 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, fill=COLORtext)
8712 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, fill=COLORtext)
8718 if ShowC1_V.get() == 0:
8726 if ShowC2_V.get() == 0:
8734 if ShowC1_I.get() == 0:
8742 if ShowC2_I.get() == 0:
8792 global TRACEmodeTime
8794 if TRACEmodeTime.get() == 0:
8795 TRACEmodeTime.set(1)
8797 TRACEmodeTime.set(0)
8802 if ShowTCur.get() == 0:
8810 if ShowVCur.get() == 0:
8816 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus, XYca
8820 if RUNstatus.get() == 0:
8822 XYca.bind_all(
'<MouseWheel>', onCanvasXYScrollClick)
8825 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus
8826 if event.widget == XYca:
8827 if ShowXCur.get() > 0
or ShowYCur.get() > 0:
8828 ShiftKeyDwn = event.state & 1
8829 if ShowXCur.get() > 0
and ShiftKeyDwn == 0:
8831 if event.num == 5
or event.delta == -120:
8833 if event.num == 4
or event.delta == 120:
8836 elif ShowYCur.get() > 0
or ShiftKeyDwn == 1:
8838 if event.num == 5
or event.delta == -120:
8840 if event.num == 4
or event.delta == 120:
8843 if RUNstatus.get() == 0:
8853 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
8854 global TMsb, CHAsbxy, CHBsbxy, CHAIsbxy, CHBIsbxy, MarkerScale
8855 global CHAVPosEntryxy, CHAIPosEntryxy, CHBVPosEntryxy, CHBIPosEntryxy
8856 global SAMPLErate, RUNstatus, MarkerNum, PrevX, PrevY
8857 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
8858 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
8859 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
8862 if (RUNstatus.get() == 0):
8863 MarkerNum = MarkerNum + 1
8865 CH1pdvRange = float(eval(CHAsbxy.get()))
8867 CHAsbxy.delete(0,END)
8868 CHAsbxy.insert(0, CH1pdvRange)
8870 CH2pdvRange = float(eval(CHBsbxy.get()))
8873 CHBsb.insert(0, CH2pdvRange)
8875 CH1IpdvRange = float(eval(CHAIsbxy.get()))
8877 CHAIsbxy.delete(0,END)
8878 CHAIsbxy.insert(0, CH1IpdvRange)
8880 CH2IpdvRange = float(eval(CHBIsbxy.get()))
8882 CHBIsbxy.delete(0,END)
8883 CHBIsbxy.insert(0, CH2IpdvRange)
8886 CHAOffset = float(eval(CHAVPosEntryxy.get()))
8888 CHAVPosEntryxy.delete(0,END)
8889 CHAVPosEntryxy.insert(0, CHAOffset)
8891 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
8893 CHAIPosEntryxy.delete(0,END)
8894 CHAIPosEntryxy.insert(0, CHAIOffset)
8896 CHBOffset = float(eval(CHBVPosEntryxy.get()))
8898 CHBVPosEntryxy.delete(0,END)
8899 CHBVPosEntryxy.insert(0, CHBOffset)
8901 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
8903 CHBIPosEntryxy.delete(0,END)
8904 CHBIPosEntryxy.insert(0, CHBIOffset)
8906 if CH1pdvRange < 0.001:
8908 if CH2pdvRange < 0.001:
8910 if CH1IpdvRange < 1.0:
8912 if CH2IpdvRange < 1.0:
8915 HoldOff = float(eval(HoldOffentry.get()))
8919 HoldOffentry.delete(0,END)
8920 HoldOffentry.insert(0, HoldOff)
8922 Yconv1 = float(GRHXY/10) / CH1pdvRange
8923 Xconv1 = float(GRWXY/10) / CH1pdvRange
8924 Yconv2 = float(GRHXY/10) / CH2pdvRange
8925 Xconv2 = float(GRWXY/10) / CH2pdvRange
8926 YIconv1 = float(GRHXY/10) / CH1IpdvRange
8927 YIconv2 = float(GRHXY/10) / CH2IpdvRange
8928 COLORmarker = COLORtext
8929 Yoffset1 = CHAOffset
8930 c1 = GRHXY / 2 + Y0TXY
8931 xc1 = GRWXY / 2 + X0LXY
8932 c2 = GRHXY / 2 + Y0TXY
8934 XYca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
8935 XYca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
8936 XYca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8937 V_label = str(MarkerNum) +
" "
8939 y = Y0TXY + 3 + (MarkerNum*10)
8940 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
8941 if (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==3
or Ysignal.get()==5):
8942 yvolts = ((event.y-c2)/Yconv2) - CHBOffset
8943 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
8944 VyString =
' {0:.3f} '.format(-yvolts)
8945 VxString =
' {0:.3f} '.format(-xvolts)
8946 V_label = V_label + VxString +
" V, " + VyString +
" V"
8948 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8949 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8950 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8952 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==1
or Ysignal.get()==5):
8953 yvolts = ((event.y-c1)/Yconv1) - CHAOffset
8954 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
8955 VyString =
' {0:.3f} '.format(-yvolts)
8956 VxString =
' {0:.3f} '.format(-xvolts)
8957 V_label = V_label + VxString +
" V, " + VyString +
" V"
8959 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8960 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8961 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8963 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
8964 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
8965 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
8966 VxString =
' {0:.3f} '.format(-xvolts)
8967 VyString =
' {0:.1f} '.format(-ymA)
8968 V_label = V_label + VxString +
" V, " + VyString +
" mA"
8970 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
8971 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8972 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
8973 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
8974 V_label = V_label +
", dV/dI " + DeltaR
8976 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
8977 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
8978 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
8979 VxString =
' {0:.3f} '.format(-xvolts)
8980 VyString =
' {0:.1f} '.format(-ymA)
8981 V_label = V_label + VxString +
" V, " + VyString +
" mA"
8983 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
8984 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8985 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
8986 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
8987 V_label = V_label +
", dV/dI " + DeltaR
8989 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==2
or Ysignal.get()==5):
8990 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
8991 ymA = ((event.y-c2)/YIconv1) - CHAIOffset
8992 VxString =
' {0:.3f} '.format(-xvolts)
8993 VyString =
' {0:.1f} '.format(-ymA)
8994 V_label = V_label + VxString +
" V, " + VyString +
" mA"
8996 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
8997 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8998 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
8999 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9000 V_label = V_label +
", dV/dI " + DeltaR
9002 elif (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==4
or Ysignal.get()==5):
9003 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
9004 ymA = ((event.y-c2)/YIconv2) - CHBIOffset
9005 VxString =
' {0:.3f} '.format(-xvolts)
9006 VyString =
' {0:.1f} '.format(-ymA)
9007 V_label = V_label + VxString +
" V, " + VyString +
" mA"
9009 DeltaY =
' {0:.2f} '.format(PrevY-ymA)
9010 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
9011 DeltaR =
' {0:.3f} '.format(((PrevX-xvolts)/(PrevY-ymA))*1000)
9012 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" mA"
9013 V_label = V_label +
", dV/dI " + DeltaR
9015 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
9021 OutArray = Ampl*numpy.cos(numpy.linspace(0, 2*numpy.pi, Length))
9025 Harmonic = Ampl*numpy.cos(numpy.linspace(0, k*2*numpy.pi, Length)+(numpy.pi*k*k/NrTones))
9026 OutArray = OutArray + Harmonic
9028 OutArray = OutArray + 2.5
9036 OutArray = numpy.array(OutArray)
9037 InArray = numpy.array(InArray)
9038 EndIndex = len(InArray)
9040 while StartIndex < WrFactor:
9041 OutArray = numpy.concatenate((OutArray, InArray[StartIndex:EndIndex:WrFactor]), axis=0)
9042 StartIndex = StartIndex + 1
9050 InArray = numpy.array(InArray)
9051 EndIndex = int(len(InArray)/WrFactor)
9053 while StartIndex < EndIndex:
9055 while LoopIndex < WrFactor:
9056 OutArray.append(InArray[StartIndex+LoopIndex])
9057 LoopIndex = LoopIndex + 1
9058 StartIndex = StartIndex + 1
9059 OutArray = numpy.array(OutArray)
9067 wavfile = wave.open(filename,
"w")
9070 framerate = SAMPLErate
9074 compname =
"not compressed"
9075 wavfile.setparams((nchannels,
9082 ArrN = numpy.array(data)
9083 ArrN /= numpy.max(numpy.abs(data))
9086 mul = int(s * amplitude)
9088 frames.append(struct.pack(
'h', mul))
9090 frames =
''.join(frames)
9092 for x
in xrange(0, repeat):
9094 wavfile.writeframes(frames)
9099 global AWGAAmplEntry, AWGAAmplvalue, AWGAMode, AWG_Amp_Mode
9100 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9103 AWGAAmplvalue = float(eval(AWGAAmplEntry.get()))
9105 AWGAAmplEntry.delete(0,
"end")
9106 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9108 if AWG_Amp_Mode.get() == 0:
9109 if AWGAMode.get() == 0:
9110 if AWGAAmplvalue > 5.00:
9111 AWGAAmplvalue = 5.00
9112 AWGAAmplEntry.delete(0,
"end")
9113 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9114 if AWGAAmplvalue < 0.00:
9115 AWGAAmplvalue = 0.00
9116 AWGAAmplEntry.delete(0,
"end")
9117 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9118 elif AWG_Amp_Mode.get() == 1:
9119 if AWGAMode.get() == 0:
9120 if AWGAAmplvalue > (2.5 / AWGA_Ext_Gain.get()):
9121 AWGAAmplvalue = 2.5 / AWGA_Ext_Gain.get()
9122 AWGAAmplEntry.delete(0,
"end")
9123 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9124 if AWGAAmplvalue < (-2.50 / AWGA_Ext_Gain.get()):
9125 AWGAAmplvalue = -2.50 / AWGA_Ext_Gain.get()
9126 AWGAAmplEntry.delete(0,
"end")
9127 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9128 if AWGAMode.get() == 1:
9129 if AWGAAmplvalue > 200.00:
9130 AWGAAmplvalue = 200.00
9131 AWGAAmplEntry.delete(0,
"end")
9132 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9133 if AWGAAmplvalue < -200.00:
9134 AWGAAmplvalue = -200.00
9135 AWGAAmplEntry.delete(0,
"end")
9136 AWGAAmplEntry.insert(0, AWGAAmplvalue)
9139 global AWGAOffsetEntry, AWGAOffsetvalue, AWGAMode, AWG_Amp_Mode
9140 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9143 AWGAOffsetvalue = float(eval(AWGAOffsetEntry.get()))
9145 AWGAOffsetEntry.delete(0,
"end")
9146 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9147 if AWG_Amp_Mode.get() == 0:
9148 if AWGAMode.get() == 0:
9149 if AWGAOffsetvalue > 5.00:
9150 AWGAOffsetvalue = 5.00
9151 AWGAOffsetEntry.delete(0,
"end")
9152 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9153 if AWGAOffsetvalue < 0.00:
9154 AWGAOffsetvalue = 0.00
9155 AWGAOffsetEntry.delete(0,
"end")
9156 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9157 elif AWG_Amp_Mode.get() == 1:
9158 if AWGAOffsetvalue > (2.50-AWGA_Ext_Offset.get()):
9159 AWGAOffsetvalue = 2.50-AWGA_Ext_Offset.get()
9160 AWGAOffsetEntry.delete(0,
"end")
9161 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9162 if AWGAOffsetvalue < (-2.50-AWGA_Ext_Offset.get()):
9163 AWGAOffsetvalue = -2.50-AWGA_Ext_Offset.get()
9164 AWGAOffsetEntry.delete(0,
"end")
9165 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9166 if AWGAMode.get() == 1:
9167 if AWGAOffsetvalue > 200.00:
9168 AWGAOffsetvalue = 200.00
9169 AWGAOffsetEntry.delete(0,
"end")
9170 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9171 if AWGAOffsetvalue < -200.00:
9172 AWGAOffsetvalue = -200.00
9173 AWGAOffsetEntry.delete(0,
"end")
9174 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
9177 global AWGAFreqEntry, AWGAFreqvalue, AWG_2X
9178 global BodeScreenStatus, BodeDisp
9181 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
9183 AWGAFreqEntry.delete(0,
"end")
9184 AWGAFreqEntry.insert(0, AWGAFreqvalue)
9185 if AWG_2X.get() == 1:
9186 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
9187 if AWGAFreqvalue > 90000:
9188 AWGAFreqvalue = 90000
9189 AWGAFreqEntry.delete(0,
"end")
9190 AWGAFreqEntry.insert(0, AWGAFreqvalue)
9192 if AWGAFreqvalue > 50000:
9193 AWGAFreqvalue = 50000
9194 AWGAFreqEntry.delete(0,
"end")
9195 AWGAFreqEntry.insert(0, AWGAFreqvalue)
9197 if AWGAFreqvalue > 25000:
9198 AWGAFreqvalue = 25000
9199 AWGAFreqEntry.delete(0,
"end")
9200 AWGAFreqEntry.insert(0, AWGAFreqvalue)
9201 if AWGAFreqvalue < 0:
9203 AWGAFreqEntry.delete(0,
"end")
9204 AWGAFreqEntry.insert(0, AWGAFreqvalue)
9208 global AWGAPhaseDelay, phasealab, awgaph, awgadel
9210 if AWGAPhaseDelay.get() == 0:
9211 phasealab.configure(text=
"Deg")
9212 awgaph.configure(style=
"WPhase.TRadiobutton")
9213 awgadel.configure(style=
"GPhase.TRadiobutton")
9214 elif AWGAPhaseDelay.get() == 1:
9215 phasealab.configure(text=
"mSec")
9216 awgaph.configure(style=
"GPhase.TRadiobutton")
9217 awgadel.configure(style=
"WPhase.TRadiobutton")
9220 global AWGAPhaseEntry, AWGAPhasevalue
9223 AWGAPhasevalue = float(eval(AWGAPhaseEntry.get()))
9225 AWGAPhaseEntry.delete(0,
"end")
9226 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
9228 if AWGAPhasevalue > 360:
9229 AWGAPhasevalue = 360
9230 AWGAPhaseEntry.delete(0,
"end")
9231 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
9232 if AWGAPhasevalue < 0:
9234 AWGAPhaseEntry.delete(0,
"end")
9235 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
9238 global AWGADutyCycleEntry, AWGADutyCyclevalue
9241 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))/100
9243 AWGADutyCycleEntry.delete(0,
"end")
9244 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9246 if AWGADutyCyclevalue > 1:
9247 AWGADutyCyclevalue = 1
9248 AWGADutyCycleEntry.delete(0,
"end")
9249 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue*100)
9250 if AWGADutyCyclevalue < 0:
9251 AWGADutyCyclevalue = 0
9252 AWGADutyCycleEntry.delete(0,
"end")
9253 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9257 global AWGAShape, AWGAWave, phasealab, duty1lab
9259 if AWGAShape.get() == 0:
9261 duty1lab.config(text=
"%")
9263 if AWGAShape.get() == 1:
9265 duty1lab.config(text=
"%")
9267 if AWGAShape.get() == 2:
9268 AWGAWave =
'triangle'
9269 duty1lab.config(text=
"%")
9271 if AWGAShape.get() == 3:
9272 AWGAWave =
'sawtooth'
9273 duty1lab.config(text=
"%")
9275 if AWGAShape.get() == 4:
9277 duty1lab.config(text=
"%")
9279 if AWGAShape.get() == 5:
9280 AWGAWave =
'stairstep'
9281 duty1lab.config(text=
"%")
9283 if AWGAShape.get() > 5:
9284 AWGAWave =
'arbitrary'
9288 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile
9291 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9292 AWGAcsvFile = filename
9296 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X, AWGAcsvFile
9299 CSVFile = open(AWGAcsvFile)
9303 csv_f = csv.reader(CSVFile, csv.excel)
9305 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9313 if len(row) > 1
and ColumnSel == 0:
9314 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
9315 ColumnNum = int(RequestColumn) - 1
9316 ColumnLen = str(len(row))
9321 if colnum == ColumnNum:
9322 AWGAwaveform.append(float(col))
9325 print(
'skipping non-numeric row', RowNum)
9327 AWGAwaveform = numpy.array(AWGAwaveform)
9334 global AWG_2X, AWGA2X, AWGAwaveform
9336 if AWG_2X.get() == 1:
9339 AWGA2X = AWGAwaveform[1::2]
9340 Tempwaveform = AWGAwaveform[::2]
9341 AWGAwaveform = Tempwaveform
9344 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9346 if AWGABurstFlag.get() == 1:
9347 AWGACyclesString = askstring(
"AWG A Burst Mode",
"Current number of cycles " + str(AWGACycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGACycles), parent=awgwindow)
9348 if (AWGACyclesString ==
None):
9350 AWGACycles = int(AWGACyclesString)
9351 AWGADelayString = askstring(
"AWG A Burst Mode",
"Current Burst delay " + str(AWGABurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGABurstDelay), parent=awgwindow)
9352 if (AWGADelayString ==
None):
9354 AWGABurstDelay = float(AWGADelayString)
9358 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
9359 global AWG_2X, AWGA2X, AWGAwavFile
9362 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
9363 AWGAwavFile = filename
9367 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
9368 global AWG_2X, AWGA2X, AWGAwavFile
9371 spf = wave.open(AWGAwavFile,
'r')
9373 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9376 Length = spf.getnframes()
9380 if spf.getnchannels() == 2:
9381 showwarning(
"Split Stereo",
"Left to AWGA Right to AWGB", parent=awgwindow)
9382 signal = spf.readframes(Length)
9383 Stereo = numpy.fromstring(signal,
'Int16')
9386 AWGAwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
9388 AWGBwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
9390 AWGAwaveform = numpy.array(AWGAwaveform)
9391 AWGBwaveform = numpy.array(AWGBwaveform)
9392 AWGBShape.set(AWGAShape.get())
9395 signal = spf.readframes(Length)
9396 WAVsignal = numpy.fromstring(signal,
'Int16')
9398 AWGAwaveform = (WAVsignal * 2.5 / 32768) + 2.5
9399 AWGAwaveform = numpy.array(AWGAwaveform)
9405 global AWGAwaveform, AWGALength, awgwindow
9407 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9408 numpy.savetxt(filename, AWGAwaveform, delimiter=
",", fmt=
'%2.4f')
9411 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
9412 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
9413 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
9414 global DFiltACoef, DFiltBCoef, AWGAShapeLabel
9415 global AWG_2X, AWGA2X
9417 TempString = AWGAMathString
9418 AWGAShapeLabel.config(text =
"Math" )
9419 AWGAMathString = askstring(
"AWG A Math Formula",
"Current Formula: " + AWGAMathString +
"\n\nNew Formula:\n", initialvalue=AWGAMathString, parent=awgwindow)
9420 if (AWGAMathString ==
None):
9421 AWGAMathString = TempString
9423 AWGAwaveform = eval(AWGAMathString)
9424 AWGAwaveform = numpy.array(AWGAwaveform)
9429 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
9430 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
9431 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
9432 global DFiltACoef, DFiltBCoef, AWGAShapeLabel
9433 global AWG_2X, AWGA2X
9435 AWGAwaveform = eval(AWGAMathString)
9436 AWGAwaveform = numpy.array(AWGAwaveform)
9441 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9442 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9443 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9444 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9452 if AWGAFreqvalue < 10.0:
9458 if AWGAFreqvalue > 0.0:
9459 if AWG_2X.get() == 1:
9460 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9462 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9464 AWGAperiodvalue = 10.0
9466 if AWGAPhaseDelay.get() == 0:
9467 if AWGAPhasevalue > 0:
9468 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9470 AWGAdelayvalue = 0.0
9471 elif AWGAPhaseDelay.get() == 1:
9472 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9473 Cycles = int(32768/AWGAperiodvalue)
9476 RecLength = int(Cycles * AWGAperiodvalue)
9477 if RecLength % 2 != 0:
9478 RecLength = RecLength + 1
9480 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
9482 if AWG_Amp_Mode.get() == 0:
9483 if AWGAMode.get() == 1:
9484 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9485 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9487 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9488 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9490 if AWGAMode.get() == 1:
9491 amplitude = AWGAAmplvalue/1000.0
9492 offset = AWGAOffsetvalue/1000.0
9494 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9495 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9496 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9497 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9501 duty1lab.config(text=
"%")
9505 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9506 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9507 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9508 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9514 duty1lab.config(text =
"M Index")
9515 phasealab.config(text =
"M Freq")
9517 if AWGAFreqvalue > 0.0:
9518 if AWG_2X.get() == 1:
9519 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9521 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9523 AWGAperiodvalue = 10.0
9526 ModFreq = float(eval(AWGAPhaseEntry.get()))
9529 AWGAPhaseEntry.delete(0,
"end")
9530 AWGAPhaseEntry.insert(0, ModFreq)
9534 AWGAPhaseEntry.delete(0,
"end")
9535 AWGAPhaseEntry.insert(0, ModFreq)
9537 if AWG_2X.get() == 1:
9538 MODperiodvalue = (BaseSampleRate*2)/ModFreq
9540 MODperiodvalue = BaseSampleRate/ModFreq
9543 ModIndex = float(eval(AWGADutyCycleEntry.get()))
9546 AWGADutyCycleEntry.delete(0,
"end")
9547 AWGADutyCycleEntry.insert(0, ModIndex)
9549 ModCycles = int(32768/MODperiodvalue)
9552 RecLength = int(ModCycles * MODperiodvalue)
9553 if RecLength % 2 != 0:
9554 RecLength = RecLength + 1
9555 CarCycles = int(RecLength/AWGAperiodvalue)
9557 AWGAwaveform = numpy.sin( (numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) - ModIndex*numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)) )
9558 if AWG_Amp_Mode.get() == 0:
9559 if AWGAMode.get() == 1:
9560 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9561 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9563 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9564 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9566 if AWGAMode.get() == 1:
9567 amplitude = AWGAAmplvalue/1000.0
9568 offset = AWGAOffsetvalue/1000.0
9570 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9571 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9572 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9573 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9579 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9580 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9581 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9582 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9588 duty1lab.config(text =
"M Index")
9589 phasealab.config(text =
"M Freq")
9591 if AWGAFreqvalue > 0.0:
9592 if AWG_2X.get() == 1:
9593 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9595 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9597 AWGAperiodvalue = 10.0
9600 ModFreq = float(eval(AWGAPhaseEntry.get()))
9603 AWGAPhaseEntry.delete(0,
"end")
9604 AWGAPhaseEntry.insert(0, ModFreq)
9608 AWGAPhaseEntry.delete(0,
"end")
9609 AWGAPhaseEntry.insert(0, ModFreq)
9611 if AWG_2X.get() == 1:
9612 MODperiodvalue = (BaseSampleRate*2)/ModFreq
9614 MODperiodvalue = BaseSampleRate/ModFreq
9617 ModIndex = float(eval(AWGADutyCycleEntry.get()))/200.0
9620 AWGADutyCycleEntry.delete(0,
"end")
9621 AWGADutyCycleEntry.insert(0, ModIndex)
9623 ModCycles = int(32768/MODperiodvalue)
9626 RecLength = int(ModCycles * MODperiodvalue)
9627 if RecLength % 2 != 0:
9628 RecLength = RecLength + 1
9629 CarCycles = int(RecLength/AWGAperiodvalue)
9631 AWGAwaveform = numpy.sin(numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) * (0.5+(ModIndex*(numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)))))
9632 if AWG_Amp_Mode.get() == 0:
9633 if AWGAMode.get() == 1:
9634 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9635 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9637 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9638 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9640 if AWGAMode.get() == 1:
9641 amplitude = AWGAAmplvalue/1000.0
9642 offset = AWGAOffsetvalue/1000.0
9644 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9645 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9646 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9647 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9653 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
9654 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
9655 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9656 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9664 if AWGAFreqvalue > 0.0:
9665 if AWG_2X.get() == 1:
9666 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9668 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9670 AWGAperiodvalue = 0.0
9671 if AWG_Amp_Mode.get() == 1:
9672 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9673 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9675 MaxV = AWGAOffsetvalue
9676 MinV = AWGAAmplvalue
9678 PulseWidth = int(AWGADutyCyclevalue*100)
9679 PulseSamples = int(AWGAperiodvalue/PulseWidth)
9681 for i
in range(PulseSamples):
9682 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
9684 for j
in range(PulseWidth):
9686 AWGAwaveform.append(MaxV)
9688 AWGAwaveform.append(MinV)
9690 duty1lab.config(text=
"PWidth")
9694 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
9695 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
9696 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9697 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9704 Max_term = int(AWGADutyCyclevalue*100)
9705 if AWG_2X.get() == 1:
9706 TempRate = (BaseSampleRate*2)
9708 TempRate = BaseSampleRate
9710 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGAFreqvalue))
9712 while k <= Max_term:
9714 Harmonic = (math.sin(k*numpy.pi/2.0)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGAFreqvalue)))
9715 AWGAwaveform = AWGAwaveform + Harmonic
9717 if AWG_Amp_Mode.get() == 0:
9718 amplitude = (AWGAOffsetvalue-AWGAAmplvalue)/2.0
9719 offset = (AWGAOffsetvalue+AWGAAmplvalue)/2.0
9721 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9722 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9723 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9725 duty1lab.config(text=
"Harmonics")
9729 global AWGAwaveform, AWGSampleRate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9730 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay
9731 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
9732 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9740 if AWGAFreqvalue > 0.0:
9741 if AWG_2X.get() == 1:
9742 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9743 SamplesPermS = int((BaseSampleRate*2)/1000)
9744 if AWGAperiodvalue % 2 != 0:
9745 AWGAperiodvalue = AWGAperiodvalue + 1
9747 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9748 SamplesPermS = int(BaseSampleRate/1000)
9750 AWGAperiodvalue = 0.0
9751 if AWG_Amp_Mode.get() == 1:
9752 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9753 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9755 MaxV = AWGAOffsetvalue
9756 MinV = AWGAAmplvalue
9758 if AWGAPhaseDelay.get() == 0:
9759 if AWGAPhasevalue > 0:
9760 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9762 AWGAdelayvalue = 0.0
9763 elif AWGAPhaseDelay.get() == 1:
9764 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9766 Cycles = int(AWGADutyCyclevalue*100)
9767 NCycles = -1 * Cycles
9769 AWGAwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGAFreqvalue))
9770 amplitude = (MaxV-MinV) / 2.0
9771 offset = (MaxV+MinV) / 2.0
9772 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9773 Cycles = int(37500/AWGAperiodvalue)
9777 Extend = int((Cycles-1.0)*AWGAperiodvalue/2.0)
9778 AWGAwaveform = numpy.pad(AWGAwaveform, (Extend,Extend),
'wrap')
9779 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9782 duty1lab.config(text=
"Cycles")
9786 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9787 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9788 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9789 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9790 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9798 if AWGAFreqvalue > 0.0:
9799 if AWG_2X.get() == 1:
9800 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9801 SamplesPermS = int((BaseSampleRate*2)/1000)
9802 if AWGAperiodvalue % 2 != 0:
9803 AWGAperiodvalue = AWGAperiodvalue + 1
9805 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9806 SamplesPermS = int(BaseSampleRate/1000)
9808 AWGAperiodvalue = 0.0
9809 if AWG_Amp_Mode.get() == 1:
9810 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9811 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9813 MaxV = AWGAOffsetvalue
9814 MinV = AWGAAmplvalue
9816 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9819 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9822 Remainder = int((AWGAperiodvalue - PulseWidth - SlopeValue)/2)
9825 PulseWidth = PulseWidth - SlopeValue
9828 StepAmp = (MaxV - MinV)/2
9829 StepOff = (MaxV + MinV)/2
9830 AWGAwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
9831 MidArray = numpy.ones(PulseWidth) * MinV
9832 AWGAwaveform = numpy.insert(AWGAwaveform, SlopeValue, MidArray)
9833 AWGAwaveform = numpy.pad(AWGAwaveform, (Remainder, Remainder),
'edge')
9834 if AWGABurstFlag.get() == 1:
9835 TempOneCycle = AWGAwaveform
9836 for i
in range(AWGACycles-1):
9837 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9838 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9839 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9841 duty1lab.config(text=
"%")
9842 phasealab.config(text =
"Rise Time")
9846 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9847 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9848 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9849 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9850 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9858 if AWGAFreqvalue > 0.0:
9859 if AWG_2X.get() == 1:
9860 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9861 SamplesPermS = int((BaseSampleRate*2)/1000)
9862 if AWGAperiodvalue % 2 != 0:
9863 AWGAperiodvalue = AWGAperiodvalue + 1
9865 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9866 SamplesPermS = int(BaseSampleRate/1000)
9868 AWGAperiodvalue = 0.0
9869 if AWG_Amp_Mode.get() == 1:
9870 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9871 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9873 MaxV = AWGAOffsetvalue
9874 MinV = AWGAAmplvalue
9876 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9879 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9882 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9885 PulseWidth = PulseWidth - SlopeValue
9888 StepValue = (MaxV - MinV) / SlopeValue
9890 for i
in range(SlopeValue):
9891 AWGAwaveform.append(SampleValue)
9892 SampleValue = SampleValue + StepValue
9893 for i
in range(PulseWidth):
9894 AWGAwaveform.append(MaxV)
9895 for i
in range(SlopeValue):
9896 AWGAwaveform.append(SampleValue)
9897 SampleValue = SampleValue - StepValue
9898 for i
in range(Remainder):
9899 AWGAwaveform.append(MinV)
9900 if AWGABurstFlag.get() == 1:
9901 TempOneCycle = AWGAwaveform
9902 for i
in range(AWGACycles-1):
9903 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9904 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9905 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9907 duty1lab.config(text=
"%")
9908 phasealab.config(text =
"Rise Time")
9912 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9913 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9914 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9915 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9916 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9924 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
9926 AWGADutyCycleEntry.delete(0,
"end")
9927 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9929 if AWGAFreqvalue > 0.0:
9930 if AWG_2X.get() == 1:
9931 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9932 SamplesPermS = int((BaseSampleRate*2)/1000)
9933 if AWGAperiodvalue % 2 != 0:
9934 AWGAperiodvalue = AWGAperiodvalue + 1
9936 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9937 SamplesPermS = int(BaseSampleRate/1000)
9939 AWGAperiodvalue = 0.0
9940 if AWG_Amp_Mode.get() == 1:
9941 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9942 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9944 MaxV = AWGAOffsetvalue
9945 MinV = AWGAAmplvalue
9947 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9950 PulseWidth = int(AWGADutyCyclevalue*SamplesPermS)
9953 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9956 PulseWidth = PulseWidth - SlopeValue
9959 StepValue = (MaxV - MinV) / SlopeValue
9961 for i
in range(SlopeValue):
9962 AWGAwaveform.append(SampleValue)
9963 SampleValue = SampleValue + StepValue
9964 for i
in range(PulseWidth):
9965 AWGAwaveform.append(MaxV)
9966 for i
in range(SlopeValue):
9967 AWGAwaveform.append(SampleValue)
9968 SampleValue = SampleValue - StepValue
9969 for i
in range(Remainder):
9970 AWGAwaveform.append(MinV)
9971 if AWGABurstFlag.get() == 1:
9972 TempOneCycle = AWGAwaveform
9973 for i
in range(AWGACycles-1):
9974 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9975 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9976 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9978 duty1lab.config(text=
"Width mS")
9979 phasealab.config(text =
"Rise Time")
9983 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9984 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9985 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9986 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9987 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9995 if AWGAFreqvalue > 0.0:
9996 if AWG_2X.get() == 1:
9997 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9998 SamplesPermS = int((BaseSampleRate*2)/1000)
9999 if AWGAperiodvalue % 2 != 0:
10000 AWGAperiodvalue = AWGAperiodvalue + 1
10002 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10003 SamplesPermS = int(BaseSampleRate/1000)
10005 AWGAperiodvalue = 0.0
10006 if AWG_Amp_Mode.get() == 1:
10007 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10008 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10010 MaxV = AWGAOffsetvalue
10011 MinV = AWGAAmplvalue
10013 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
10014 if SlopeValue <= 0:
10016 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10019 Remainder = int(AWGAperiodvalue - PulseWidth)
10022 PulseWidth = PulseWidth - SlopeValue
10025 StepValue = (MaxV - MinV) / SlopeValue
10027 for i
in range(SlopeValue):
10028 AWGAwaveform.append(SampleValue)
10029 SampleValue = SampleValue + StepValue
10030 for i
in range(PulseWidth):
10031 AWGAwaveform.append(MaxV)
10032 for i
in range(Remainder):
10033 AWGAwaveform.append(MinV)
10034 if AWGABurstFlag.get() == 1:
10035 TempOneCycle = AWGAwaveform
10036 for i
in range(AWGACycles-1):
10037 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10038 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
10039 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
10041 duty1lab.config(text=
"%")
10042 phasealab.config(text =
"Slope Time")
10046 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, duty1lab
10047 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
10048 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10049 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10050 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10058 if AWGAFreqvalue > 0.0:
10059 if AWG_2X.get() == 1:
10060 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10061 SamplesPermS = int((BaseSampleRate*2)/1000)
10062 if AWGAperiodvalue % 2 != 0:
10063 AWGAperiodvalue = AWGAperiodvalue + 1
10065 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
10066 SamplesPermS = int(BaseSampleRate/1000)
10068 AWGAperiodvalue = 0.0
10069 if AWG_Amp_Mode.get() == 1:
10070 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10071 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10073 MaxV = AWGAOffsetvalue
10074 MinV = AWGAAmplvalue
10076 if AWGAPhaseDelay.get() == 0:
10077 if AWGAPhasevalue > 0:
10078 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10080 AWGAdelayvalue = 0.0
10081 elif AWGAPhaseDelay.get() == 1:
10082 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
10085 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
10088 Remainder = int(AWGAperiodvalue - PulseWidth)
10091 UpStepValue = (MaxV - MinV) / PulseWidth
10092 DownStepValue = (MaxV - MinV) / Remainder
10094 for i
in range(PulseWidth):
10095 AWGAwaveform.append(SampleValue)
10096 SampleValue = SampleValue + UpStepValue
10097 for i
in range(Remainder):
10098 AWGAwaveform.append(SampleValue)
10099 SampleValue = SampleValue - DownStepValue
10100 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
10101 if AWGABurstFlag.get() == 1:
10102 TempOneCycle = AWGAwaveform
10103 for i
in range(AWGACycles-1):
10104 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10105 TempDelay = int(AWGABurstDelay*SamplesPermS)
10106 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
10109 duty1lab.config(text =
"Symmetry")
10113 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, AWG_Amp_Mode
10114 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue
10115 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10116 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10117 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10125 if AWGAFreqvalue > 0.0:
10126 if AWG_2X.get() == 1:
10127 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10128 SamplesPermS = int((BaseSampleRate*2)/1000)
10129 if AWGAperiodvalue % 2 != 0:
10130 AWGAperiodvalue = AWGAperiodvalue + 1
10132 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10133 SamplesPermS = int(BaseSampleRate/1000)
10135 AWGAperiodvalue = 0.0
10136 if AWG_Amp_Mode.get() == 1:
10137 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10138 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10140 MaxV = AWGAOffsetvalue
10141 MinV = AWGAAmplvalue
10143 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue / 2.0)
10144 if AWGAPhaseDelay.get() == 0:
10145 DelayValue = int(AWGAperiodvalue*(AWGAPhasevalue/360))
10146 elif AWGAPhaseDelay.get() == 1:
10147 DelayValue = int(AWGAPhasevalue*SamplesPermS)
10148 for i
in range(DelayValue-PulseWidth):
10149 AWGAwaveform.append((MinV+MaxV)/2.0)
10150 for i
in range(PulseWidth):
10151 AWGAwaveform.append(MaxV)
10152 for i
in range(PulseWidth):
10153 AWGAwaveform.append(MinV)
10154 DelayValue = int(AWGAperiodvalue-DelayValue)
10155 for i
in range(DelayValue-PulseWidth):
10156 AWGAwaveform.append((MinV+MaxV)/2.0)
10157 if AWGABurstFlag.get() == 1:
10158 TempOneCycle = AWGAwaveform
10159 for i
in range(AWGACycles-1):
10160 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10161 TempDelay = int(AWGABurstDelay*SamplesPermS)
10162 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
10167 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
10168 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
10169 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10170 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10171 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10177 if AWGAFreqvalue > 0.0:
10178 if AWG_2X.get() == 1:
10179 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10180 SamplesPermS = int((BaseSampleRate*2)/1000)
10181 if AWGAperiodvalue % 2 != 0:
10182 AWGAperiodvalue = AWGAperiodvalue + 1
10184 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10185 SamplesPermS = int(BaseSampleRate/1000)
10187 AWGAperiodvalue = 0.0
10188 if AWG_Amp_Mode.get() == 1:
10189 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10190 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10192 if AWGAAmplvalue > AWGAOffsetvalue:
10193 MinV = AWGAOffsetvalue
10194 MaxV = AWGAAmplvalue
10196 MaxV = AWGAOffsetvalue
10197 MinV = AWGAAmplvalue
10199 AWGAwaveform = numpy.random.uniform(MinV, MaxV, int(AWGAperiodvalue))
10200 Mid = (MaxV+MinV)/2.0
10201 if AWGABurstFlag.get() == 1:
10202 TempOneCycle = AWGAwaveform
10203 for i
in range(AWGACycles-1):
10204 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10205 TempDelay = int(AWGABurstDelay*SamplesPermS)
10206 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
10211 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
10212 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
10213 global AWGABurstFlag, AWGACycles, AWGABurstDelay
10214 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10215 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10221 if AWGAFreqvalue > 0.0:
10222 if AWG_2X.get() == 1:
10223 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
10224 SamplesPermS = int((BaseSampleRate*2)/1000)
10225 if AWGAperiodvalue % 2 != 0:
10226 AWGAperiodvalue = AWGAperiodvalue + 1
10228 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
10229 SamplesPermS = int(BaseSampleRate/1000)
10231 AWGAperiodvalue = 0.0
10232 if AWG_Amp_Mode.get() == 1:
10233 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10234 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10236 if AWGAAmplvalue > AWGAOffsetvalue:
10237 MinV = AWGAOffsetvalue
10238 MaxV = AWGAAmplvalue
10240 MaxV = AWGAOffsetvalue
10241 MinV = AWGAAmplvalue
10243 AWGAwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGAperiodvalue))
10244 Mid = (MaxV+MinV)/2.0
10245 if AWGABurstFlag.get() == 1:
10246 TempOneCycle = AWGAwaveform
10247 for i
in range(AWGACycles-1):
10248 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10249 TempDelay = int(AWGABurstDelay*SamplesPermS)
10250 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
10255 global AWGAMode, AWGAIOMode, AWGAModeLabel, DevID, session, devx, DevOne, CHA, HWRevOne
10256 global AWG_Amp_Mode
10258 if AWGAMode.get() == 0:
10260 elif AWGAMode.get() == 1:
10262 elif AWGAMode.get() == 2:
10264 if AWGAIOMode.get() > 0:
10265 if HWRevOne ==
"D":
10266 if AWGAMode.get() == 0:
10270 label_txt = label_txt +
" Split I/O"
10271 label_txt = label_txt +
" Mode"
10272 AWGAModeLabel.config(text = label_txt )
10277 global AWGAAmplvalue, AWGAOffsetvalue
10278 global AWGAFreqvalue, AWGAPhasevalue, AWGAPhaseDelay
10279 global AWGADutyCyclevalue, FSweepMode, AWGARepeatFlag, AWGSync
10280 global AWGAWave, AWGAMode, AWGATerm, AWGAwaveform, AWGAIOMode
10281 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne, AWG_Amp_Mode
10282 global amp1lab, off1lab, AWGA2X, AWGA2X, AWGBWave, AWGBRepeatFlag
10283 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10292 if AWG_Amp_Mode.get() == 0:
10293 amp1lab.config(text =
"Min Ch A" )
10294 off1lab.config(text =
"Max Ch A" )
10296 amp1lab.config(text =
"Amp Ch A" )
10297 off1lab.config(text =
"Off Ch A" )
10299 if AWGAFreqvalue > 0.0:
10300 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
10302 AWGAperiodvalue = 0.0
10304 if AWGAPhaseDelay.get() == 0:
10305 if AWGAWave ==
'square':
10306 AWGAPhasevalue = AWGAPhasevalue + 270.0
10307 if AWGAPhasevalue > 359:
10308 AWGAPhasevalue = AWGAPhasevalue - 360
10309 if AWGAPhasevalue > 0:
10310 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10312 AWGAdelayvalue = 0.0
10313 elif AWGAPhaseDelay.get() == 1:
10314 AWGAdelayvalue = AWGAPhasevalue * 100
10316 if AWGATerm.get() == 0:
10317 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
10318 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
10319 elif AWGATerm.get() == 1:
10320 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
10321 devx.ctrl_transfer( 0x40, 0x50, 33, 0, 0, 0, 100)
10322 elif AWGATerm.get() == 2:
10323 devx.ctrl_transfer( 0x40, 0x50, 32, 0, 0, 0, 100)
10324 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
10326 if AWGAWave ==
'dc':
10327 if AWG_2X.get() == 2:
10328 AWGAWave ==
'arbitrary'
10329 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
10331 if AWGAMode.get() == 0:
10332 if AWGAIOMode.get() == 0:
10333 CHA.mode = Mode.SVMI
10335 CHA.mode = Mode.SVMI_SPLIT
10336 CHA.constant(AWGAOffsetvalue)
10338 if AWGAMode.get() == 1:
10339 if AWGAIOMode.get() == 0:
10340 CHA.mode = Mode.SIMV
10342 CHA.mode = Mode.SIMV_SPLIT
10343 CHA.constant(AWGAOffsetvalue/1000)
10345 if AWGAMode.get() == 2:
10346 if AWGAIOMode.get() == 0:
10347 CHA.mode = Mode.HI_Z
10349 CHA.mode = Mode.HI_Z_SPLIT
10351 if AWGAIOMode.get() > 0:
10352 if HWRevOne ==
"D":
10354 CHA.mode = Mode.SIMV_SPLIT
10357 if AWGAMode.get() == 0:
10358 if AWGAIOMode.get() == 0:
10359 CHA.mode = Mode.SVMI
10361 CHA.mode = Mode.SVMI_SPLIT
10362 if AWGAMode.get() == 1:
10363 if AWGAIOMode.get() == 0:
10364 CHA.mode = Mode.SIMV
10366 CHA.mode = Mode.SIMV_SPLIT
10367 AWGAOffsetvalue = AWGAOffsetvalue/1000
10368 AWGAAmplvalue = AWGAAmplvalue/1000
10369 if AWGAMode.get() == 2:
10370 if AWGAIOMode.get() == 0:
10371 CHA.mode = Mode.HI_Z
10373 CHA.mode = Mode.HI_Z_SPLIT
10375 if AWG_Amp_Mode.get() == 1:
10376 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10377 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10379 MaxV = AWGAOffsetvalue
10380 MinV = AWGAAmplvalue
10382 if AWGAWave ==
'sine':
10383 CHA.sine(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10384 elif AWGAWave ==
'triangle':
10385 CHA.triangle(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10386 elif AWGAWave ==
'sawtooth':
10387 CHA.sawtooth(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10388 elif AWGAWave ==
'square':
10389 CHA.square(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue, AWGADutyCyclevalue)
10390 elif AWGAWave ==
'stairstep':
10391 CHA.stairstep(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10392 elif AWGAWave ==
'arbitrary':
10393 if AWGSync.get() == 0:
10394 AWGARepeatFlag.set(1)
10395 if AWG_2X.get() == 2:
10396 AWGAWave ==
'arbitrary'
10397 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
10399 CHA.arbitrary(AWGAwaveform, AWGARepeatFlag.get())
10402 if AWGAIOMode.get() > 0:
10403 if HWRevOne ==
"D":
10405 CHA.mode = Mode.SIMV_SPLIT
10408 global AWGAAmplEntry, AWGBAmplEntry, AWGAOffsetEntry, AWGBOffsetEntry, AWGAFreqEntry, AWGBFreqEntry
10409 global AWGAPhaseEntry, AWGBPhaseEntry, AWGADutyCycleEntry, AWGBDutyCycleEntry, AWGAShape, AWGBShape
10414 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
10415 AWGBOffsetvalue = float(eval(AWGAOffsetEntry.get()))
10416 AWGBAmplEntry.delete(0,
"end")
10417 AWGBAmplEntry.insert(0, AWGBOffsetvalue)
10418 AWGBOffsetEntry.delete(0,
"end")
10419 AWGBOffsetEntry.insert(0, AWGBAmplvalue)
10421 AWGBFreqvalue = float(eval(AWGAFreqEntry.get()))
10422 AWGBFreqEntry.delete(0,
"end")
10423 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10424 AWGBPhasevalue = float(eval(AWGAPhaseEntry.get()))
10425 AWGBPhaseEntry.delete(0,
"end")
10426 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10427 AWGBDutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
10428 AWGBDutyCycleEntry.delete(0,
"end")
10429 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10430 AWGBShape.set(AWGAShape.get())
10436 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10438 if AWGBBurstFlag.get() == 1:
10439 AWGBCyclesString = askstring(
"AWG B Burst Mode",
"Current number of cycles " + str(AWGBCycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGBCycles), parent=awgwindow)
10440 if (AWGBCyclesString ==
None):
10442 AWGBCycles = int(AWGBCyclesString)
10443 AWGBDelayString = askstring(
"AWG B Burst Mode",
"Current Burst delay " + str(AWGBBurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGBBurstDelay), parent=awgwindow)
10444 if (AWGBDelayString ==
None):
10446 AWGBBurstDelay = float(AWGBDelayString)
10450 global AWGBAmplEntry, AWGBAmplvalue, AWGBMode, AWG_Amp_Mode
10451 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10454 AWGBAmplvalue = float(eval(AWGBAmplEntry.get()))
10456 AWGBAmplEntry.delete(0,
"end")
10457 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10459 if AWGBMode.get() == 0:
10460 if AWG_Amp_Mode.get() == 0:
10461 if AWGBAmplvalue > 5.00:
10462 AWGBAmplvalue = 5.00
10463 AWGBAmplEntry.delete(0,
"end")
10464 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10465 if AWGBAmplvalue < 0.00:
10466 AWGBAmplvalue = 0.00
10467 AWGBAmplEntry.delete(0,
"end")
10468 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10469 elif AWG_Amp_Mode.get() == 1:
10470 if AWGBAmplvalue > (2.5 / AWGB_Ext_Gain.get()):
10471 AWGBAmplvalue = 2.5 / AWGB_Ext_Gain.get()
10472 AWGBAmplEntry.delete(0,
"end")
10473 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10474 if AWGBAmplvalue < (-2.50 / AWGB_Ext_Gain.get()):
10475 AWGBAmplvalue = -2.50 / AWGB_Ext_Gain.get()
10476 AWGBAmplEntry.delete(0,
"end")
10477 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10478 elif AWGBMode.get() == 1:
10479 if AWGBAmplvalue > 200.00:
10480 AWGBAmplvalue = 200.00
10481 AWGBAmplEntry.delete(0,
"end")
10482 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10483 if AWGBAmplvalue < -200.00:
10484 AWGBAmplvalue = -200.00
10485 AWGBAmplEntry.delete(0,
"end")
10486 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10489 global AWGBOffsetEntry, AWGBOffsetvalue, AWGBMode, AWG_Amp_Mode
10490 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10493 AWGBOffsetvalue = float(eval(AWGBOffsetEntry.get()))
10495 AWGBOffsetEntry.delete(0,
"end")
10496 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10497 if AWG_Amp_Mode.get() == 0:
10498 if AWGBMode.get() == 0:
10499 if AWGBOffsetvalue > 5.00:
10500 AWGBOffsetvalue = 5.00
10501 AWGBOffsetEntry.delete(0,
"end")
10502 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10503 if AWGBOffsetvalue < 0.00:
10504 AWGBOffsetvalue = 0.00
10505 AWGBOffsetEntry.delete(0,
"end")
10506 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10507 elif AWG_Amp_Mode.get() == 1:
10508 if AWGBOffsetvalue > (2.50-AWGB_Ext_Offset.get()):
10509 AWGBOffsetvalue = 2.50-AWGB_Ext_Offset.get()
10510 AWGBOffsetEntry.delete(0,
"end")
10511 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10512 if AWGBOffsetvalue < (-2.50-AWGB_Ext_Offset.get()):
10513 AWGBOffsetvalue = -2.50-AWGB_Ext_Offset.get()
10514 AWGBOffsetEntry.delete(0,
"end")
10515 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10516 if AWGBMode.get() == 1:
10517 if AWGBOffsetvalue > 200.00:
10518 AWGBOffsetvalue = 200.00
10519 AWGBOffsetEntry.delete(0,
"end")
10520 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10521 if AWGBOffsetvalue < -200.00:
10522 AWGBOffsetvalue = -200.00
10523 AWGBOffsetEntry.delete(0,
"end")
10524 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10527 global AWGBFreqEntry, AWGBFreqvalue, AWG_2X
10528 global BodeScreenStatus, BodeDisp
10531 AWGBFreqvalue = float(eval(AWGBFreqEntry.get()))
10533 AWGBFreqEntry.delete(0,
"end")
10534 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10535 if AWG_2X.get() == 2:
10536 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
10537 if AWGBFreqvalue > 90000:
10538 AWGBFreqvalue = 90000
10539 AWGBFreqEntry.delete(0,
"end")
10540 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10542 if AWGBFreqvalue > 50000:
10543 AWGBFreqvalue = 50000
10544 AWGBFreqEntry.delete(0,
"end")
10545 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10547 if AWGBFreqvalue > 25000:
10548 AWGBFreqvalue = 25000
10549 AWGBFreqEntry.delete(0,
"end")
10550 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10551 if AWGBFreqvalue < 0:
10553 AWGBFreqEntry.delete(0,
"end")
10554 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10558 global AWGbPhaseDelay, phaseblab, awgbph, awgbdel
10560 if AWGBPhaseDelay.get() == 0:
10561 phaseblab.configure(text=
"Deg")
10562 awgbph.configure(style=
"WPhase.TRadiobutton")
10563 awgbdel.configure(style=
"GPhase.TRadiobutton")
10564 elif AWGBPhaseDelay.get() == 1:
10565 phaseblab.configure(text=
"mSec")
10566 awgbph.configure(style=
"GPhase.TRadiobutton")
10567 awgbdel.configure(style=
"WPhase.TRadiobutton")
10570 global AWGBPhaseEntry, AWGBPhasevalue
10573 AWGBPhasevalue = float(eval(AWGBPhaseEntry.get()))
10575 AWGBPhaseEntry.delete(0,
"end")
10576 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10578 if AWGBPhasevalue > 360:
10579 AWGBPhasevalue = 360
10580 AWGBPhaseEntry.delete(0,
"end")
10581 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10582 if AWGBPhasevalue < 0:
10584 AWGBPhaseEntry.delete(0,
"end")
10585 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10588 global AWGBDutyCycleEntry, AWGBDutyCyclevalue
10591 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))/100
10593 AWGBDutyCycleEntry.delete(0,
"end")
10594 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10596 if AWGBDutyCyclevalue > 1:
10597 AWGBDutyCyclevalue = 1
10598 AWGBDutyCycleEntry.delete(0,
"end")
10599 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue*100)
10600 if AWGBDutyCyclevalue < 0:
10601 AWGBDutyCyclevalue = 0
10602 AWGBDutyCycleEntry.delete(0,
"end")
10603 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10607 global AWGBShape, AWGBWave, duty2lab, AWG_2X, CHA, CHB
10609 if AWGBShape.get() == 0:
10611 duty2lab.config(text=
"%")
10613 if AWGBShape.get() == 1:
10615 duty2lab.config(text=
"%")
10617 if AWGBShape.get() == 2:
10618 AWGBWave =
'triangle'
10619 duty2lab.config(text=
"%")
10621 if AWGBShape.get() == 3:
10622 AWGBWave =
'sawtooth'
10623 duty2lab.config(text=
"%")
10625 if AWGBShape.get() == 4:
10626 AWGBWave =
'square'
10627 duty2lab.config(text=
"%")
10629 if AWGBShape.get() == 5:
10630 AWGBWave =
'stairstep'
10631 duty2lab.config(text=
"%")
10633 if AWGBShape.get() > 5:
10634 AWGBWave =
'arbitrary'
10635 if AWG_2X.get() == 1:
10636 CHB.mode = CHA.mode
10637 AWGBWave =
'arbitrary'
10641 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile
10644 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10645 AWGBcsvFile = filename
10649 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X, AWGBcsvFile
10652 CSVFile = open(AWGBcsvFile)
10656 csv_f = csv.reader(CSVFile, csv.excel)
10658 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10664 if len(row) > 1
and ColumnSel == 0:
10665 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
10666 ColumnNum = int(RequestColumn) - 1
10667 ColumnLen = str(len(row))
10672 if colnum == ColumnNum:
10673 AWGBwaveform.append(float(col))
10676 print(
'skipping non-numeric row', RowNum)
10678 AWGBwaveform = numpy.array(AWGBwaveform)
10685 global AWG_2X, AWGB2X, AWGBwaveform
10687 if AWG_2X.get() == 2:
10690 AWGB2X = AWGBwaveform[::2]
10691 Tempwaveform = AWGBwaveform[1::2]
10692 AWGBwaveform = Tempwaveform
10695 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
10696 global AWG_2X, AWGA2X
10699 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
10700 AWGBwavFile = filename
10704 global AWGBwaveform, AWGBLength, awgwindow, AWGBwavFile
10705 global AWG_2X, AWGA2X
10708 spf = wave.open(AWGBwavFile,
'r')
10710 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10713 if spf.getnchannels() == 2:
10714 showwarning(
"WARNING",
"Only mono files supported!", parent=awgwindow)
10717 Length = spf.getnframes()
10720 signal = spf.readframes(Length)
10721 WAVsignal = numpy.fromstring(signal,
'Int16')
10723 AWGBwaveform = (WAVsignal * 2.5 / 32768) + 2.5
10724 AWGBwaveform = numpy.array(AWGBwaveform)
10730 global AWGBwaveform, AWGBLength, awgwindow
10732 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10733 numpy.savetxt(filename, AWGBwaveform, delimiter=
",", fmt=
'%2.4f')
10736 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10737 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
10738 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
10739 global DFiltACoef, DFiltBCoef, AWGBShapeLabel
10740 global AWG_2X, AWGA2X
10742 TempString = AWGBMathString
10743 AWGBShapeLabel.config(text =
"Math" )
10744 AWGBMathString = askstring(
"AWG B Math Formula",
"Current Formula: " + AWGBMathString +
"\n\nNew Formula:\n", initialvalue=AWGBMathString, parent=awgwindow)
10745 if (AWGBMathString ==
None):
10746 AWGBMathString = TempString
10748 AWGBwaveform = eval(AWGBMathString)
10749 AWGBwaveform = numpy.array(AWGBwaveform)
10754 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10755 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
10756 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
10757 global DFiltACoef, DFiltBCoef, AWGBShapeLabel
10758 global AWG_2X, AWGA2X
10760 AWGBwaveform = eval(AWGBMathString)
10761 AWGBwaveform = numpy.array(AWGBwaveform)
10766 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBFreqvalue, awgwindow
10767 global AWG_Amp_Mode
10768 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10769 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10771 Max_term = int(AWGBDutyCyclevalue*100)
10776 if AWG_2X.get() == 1:
10777 TempRate = (BaseSampleRate*2)
10779 TempRate = BaseSampleRate
10781 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGBFreqvalue))
10783 while k <= Max_term:
10785 Harmonic = (math.sin(k*numpy.pi/2)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGBFreqvalue)))
10786 AWGBwaveform = AWGBwaveform + Harmonic
10788 if AWG_Amp_Mode.get() == 0:
10789 amplitude = (AWGBOffsetvalue-AWGBAmplvalue)/2
10790 offset = (AWGBOffsetvalue+AWGBAmplvalue)/2
10792 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
10793 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
10794 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10796 duty2lab.config(text=
"Harmonics")
10800 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
10801 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay, AWGBMode
10802 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10803 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10811 if AWGBFreqvalue < 10.0:
10817 if AWGBFreqvalue > 0.0:
10818 if AWG_2X.get() == 2:
10819 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10821 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10823 AWGBperiodvalue = 10.0
10825 if AWGBPhaseDelay.get() == 0:
10826 if AWGBPhasevalue > 0:
10827 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10829 AWGBdelayvalue = 0.0
10830 elif AWGBPhaseDelay.get() == 1:
10831 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
10832 Cycles = int(32768/AWGBperiodvalue)
10835 RecLength = int(Cycles * AWGBperiodvalue)
10836 if RecLength % 2 != 0:
10837 RecLength = RecLength + 1
10839 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
10841 if AWG_Amp_Mode.get() == 0:
10842 if AWGBMode.get() == 1:
10843 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2000.0
10844 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2000.0
10846 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2.0
10847 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2.0
10849 if AWGBMode.get() == 1:
10850 amplitude = AWGBAmplvalue/1000.0
10851 offset = AWGBOffsetvalue/1000.0
10853 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
10854 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
10855 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10856 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10858 if AWG_2X.get() == 2:
10861 AWGB2X = AWGBwaveform[::2]
10862 Tempwaveform = AWGBwaveform[1::2]
10863 AWGBwaveform = Tempwaveform
10865 duty2lab.config(text=
"%")
10869 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength
10870 global AWGBDutyCyclevalue, AWGBFreqvalue, AWG_Amp_Mode
10871 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10872 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10880 if AWGBFreqvalue > 0.0:
10881 if AWG_2X.get() == 2:
10882 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10884 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10886 AWGBperiodvalue = 0.0
10887 if AWG_Amp_Mode.get() == 1:
10888 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10889 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10891 MaxV = AWGBOffsetvalue
10892 MinV = AWGBAmplvalue
10894 PulseWidth = int(AWGBDutyCyclevalue*100)
10895 PulseSamples = int(AWGBperiodvalue/PulseWidth)
10897 for i
in range(PulseSamples):
10898 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
10900 for j
in range(PulseWidth):
10902 AWGBwaveform.append(MaxV)
10904 AWGBwaveform.append(MinV)
10906 duty2lab.config(text=
"PWidth")
10910 global AWGBwaveform, AWGSampleRate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
10911 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay
10912 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10913 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10921 if AWGBFreqvalue > 0.0:
10922 if AWG_2X.get() == 1:
10923 AWGBperiodvalue = int((BaseSampleRate*2)/AWGBFreqvalue)
10924 if AWGBperiodvalue % 2 != 0:
10925 AWGBperiodvalue = AWGBperiodvalue + 1
10927 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10929 AWGBperiodvalue = 0.0
10930 if AWG_Amp_Mode.get() == 1:
10931 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10932 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10934 MaxV = AWGBOffsetvalue
10935 MinV = AWGBAmplvalue
10937 if AWGBPhaseDelay.get() == 0:
10938 if AWGBPhasevalue > 0:
10939 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10941 AWGBdelayvalue = 0.0
10942 elif AWGBPhaseDelay.get() == 1:
10943 AWGBdelayvalue = AWGBPhasevalue * SampleRate / 1000
10945 Cycles = int(AWGBDutyCyclevalue*100)
10946 NCycles = -1 * Cycles
10948 AWGBwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGBFreqvalue))
10949 amplitude = (MaxV-MinV) / 2.0
10950 offset = (MaxV+MinV) / 2.0
10951 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10952 Cycles = int(37500/AWGBperiodvalue)
10956 Extend = int((Cycles-1.0)*AWGBperiodvalue/2.0)
10957 AWGBwaveform = numpy.pad(AWGBwaveform, (Extend,Extend),
'wrap')
10958 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10961 duty2lab.config(text=
"Cycles")
10965 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10966 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10967 global AWG_Amp_Mode
10968 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10969 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10970 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10978 if AWGBFreqvalue > 0.0:
10979 if AWG_2X.get() == 2:
10980 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10981 SamplesPermS = int((BaseSampleRate*2)/1000)
10983 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10984 SamplesPermS = int(BaseSampleRate/1000)
10986 AWGBperiodvalue = 0.0
10987 if AWG_Amp_Mode.get() == 1:
10988 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10989 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10991 MaxV = AWGBOffsetvalue
10992 MinV = AWGBAmplvalue
10994 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10995 if SlopeValue <= 0:
10997 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
11000 Remainder = int((AWGBperiodvalue - PulseWidth - SlopeValue)/2)
11003 PulseWidth = PulseWidth - SlopeValue
11006 StepAmp = (MaxV - MinV)/2
11007 StepOff = (MaxV + MinV)/2
11008 AWGBwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
11009 MidArray = numpy.ones(PulseWidth) * MinV
11010 AWGBwaveform = numpy.insert(AWGBwaveform, SlopeValue, MidArray)
11011 AWGBwaveform = numpy.pad(AWGBwaveform, (Remainder, Remainder),
'edge')
11012 if AWGBBurstFlag.get() == 1:
11013 TempOneCycle = AWGBwaveform
11014 for i
in range(AWGBCycles-1):
11015 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11016 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11017 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11019 duty2lab.config(text=
"%")
11020 phaseblab.config(text =
"Rise Time")
11024 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11025 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11026 global AWG_Amp_Mode
11027 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11028 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11029 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11037 if AWGBFreqvalue > 0.0:
11038 if AWG_2X.get() == 2:
11039 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11040 SamplesPermS = int((BaseSampleRate*2)/1000)
11042 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11043 SamplesPermS = int(BaseSampleRate/1000)
11045 AWGBperiodvalue = 0.0
11046 if AWG_Amp_Mode.get() == 1:
11047 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11048 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11050 MaxV = AWGBOffsetvalue
11051 MinV = AWGBAmplvalue
11053 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
11054 if SlopeValue <= 0:
11056 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
11059 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
11062 PulseWidth = PulseWidth - SlopeValue
11065 StepValue = (MaxV - MinV) / SlopeValue
11067 for i
in range(SlopeValue):
11068 AWGBwaveform.append(SampleValue)
11069 SampleValue = SampleValue + StepValue
11070 for i
in range(PulseWidth):
11071 AWGBwaveform.append(MaxV)
11072 for i
in range(SlopeValue):
11073 AWGBwaveform.append(SampleValue)
11074 SampleValue = SampleValue - StepValue
11075 for i
in range(Remainder):
11076 AWGBwaveform.append(MinV)
11077 if AWGBBurstFlag.get() == 1:
11078 TempOneCycle = AWGBwaveform
11079 for i
in range(AWGBCycles-1):
11080 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11081 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11082 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11084 duty2lab.config(text=
"%")
11085 phaseblab.config(text =
"Rise Time")
11089 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11090 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11091 global AWG_Amp_Mode
11092 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11093 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11094 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11102 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))
11104 AWGBDutyCycleEntry.delete(0,
"end")
11105 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
11107 if AWGBFreqvalue > 0.0:
11108 if AWG_2X.get() == 2:
11109 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11110 SamplesPermS = int((BaseSampleRate*2)/1000)
11112 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11113 SamplesPermS = int(BaseSampleRate/1000)
11115 AWGBperiodvalue = 0.0
11116 if AWG_Amp_Mode.get() == 1:
11117 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11118 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11120 MaxV = AWGBOffsetvalue
11121 MinV = AWGBAmplvalue
11123 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
11124 if SlopeValue <= 0:
11126 PulseWidth = int(AWGBDutyCyclevalue*SamplesPermS)
11129 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
11132 PulseWidth = PulseWidth - SlopeValue
11135 StepValue = (MaxV - MinV) / SlopeValue
11137 for i
in range(SlopeValue):
11138 AWGBwaveform.append(SampleValue)
11139 SampleValue = SampleValue + StepValue
11140 for i
in range(PulseWidth):
11141 AWGBwaveform.append(MaxV)
11142 for i
in range(SlopeValue):
11143 AWGBwaveform.append(SampleValue)
11144 SampleValue = SampleValue - StepValue
11145 for i
in range(Remainder):
11146 AWGBwaveform.append(MinV)
11147 if AWGBBurstFlag.get() == 1:
11148 TempOneCycle = AWGBwaveform
11149 for i
in range(AWGBCycles-1):
11150 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11151 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11152 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11154 duty2lab.config(text=
"Width mS")
11155 phaseblab.config(text =
"Rise Time")
11159 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11160 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11161 global AWG_Amp_Mode
11162 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11163 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11164 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11172 if AWGBFreqvalue > 0.0:
11173 if AWG_2X.get() == 2:
11174 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11175 SamplesPermS = int((BaseSampleRate*2)/1000)
11177 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11178 SamplesPermS = int(BaseSampleRate/1000)
11180 AWGBperiodvalue = 0.0
11181 if AWG_Amp_Mode.get() == 1:
11182 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11183 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11185 MaxV = AWGBOffsetvalue
11186 MinV = AWGBAmplvalue
11188 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
11189 if SlopeValue <= 0:
11191 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
11194 Remainder = int(AWGBperiodvalue - PulseWidth)
11197 PulseWidth = PulseWidth - SlopeValue
11200 StepValue = (MaxV - MinV) / SlopeValue
11202 for i
in range(SlopeValue):
11203 AWGBwaveform.append(SampleValue)
11204 SampleValue = SampleValue + StepValue
11205 for i
in range(PulseWidth):
11206 AWGBwaveform.append(MaxV)
11207 for i
in range(Remainder):
11208 AWGBwaveform.append(MinV)
11209 if AWGBBurstFlag.get() == 1:
11210 TempOneCycle = AWGBwaveform
11211 for i
in range(AWGBCycles-1):
11212 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11213 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11214 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11216 duty2lab.config(text=
"%")
11217 phaseblab.config(text =
"Slope Time")
11221 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11222 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11223 global AWG_Amp_Mode
11224 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11225 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11226 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11234 if AWGBFreqvalue > 0.0:
11235 if AWG_2X.get() == 2:
11236 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11237 SamplesPermS = int((BaseSampleRate*2)/1000)
11239 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11240 SamplesPermS = int(BaseSampleRate/1000)
11242 AWGBperiodvalue = 0.0
11243 if AWG_Amp_Mode.get() == 1:
11244 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11245 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11247 MaxV = AWGBOffsetvalue
11248 MinV = AWGBAmplvalue
11250 if AWGBPhaseDelay.get() == 0:
11251 if AWGBPhasevalue > 0:
11252 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
11254 AWGBdelayvalue = 0.0
11255 elif AWGBPhaseDelay.get() == 1:
11256 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
11259 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
11262 Remainder = int(AWGBperiodvalue - PulseWidth)
11265 UpStepValue = (MaxV - MinV) / PulseWidth
11266 DownStepValue = (MaxV - MinV) / Remainder
11268 for i
in range(PulseWidth):
11269 AWGBwaveform.append(SampleValue)
11270 SampleValue = SampleValue + UpStepValue
11271 for i
in range(Remainder):
11272 AWGBwaveform.append(SampleValue)
11273 SampleValue = SampleValue - DownStepValue
11274 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
11275 if AWGBBurstFlag.get() == 1:
11276 TempOneCycle = AWGBwaveform
11277 for i
in range(AWGBCycles-1):
11278 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11279 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11280 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11283 duty2lab.config(text =
"Symmetry")
11287 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11288 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11289 global AWG_Amp_Mode
11290 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11291 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11292 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11300 if AWGBFreqvalue > 0.0:
11301 if AWG_2X.get() == 2:
11302 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11303 SamplesPermS = int((BaseSampleRate*2)/1000)
11305 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11306 SamplesPermS = int(BaseSampleRate/1000)
11308 AWGBperiodvalue = 0.0
11309 if AWG_Amp_Mode.get() == 1:
11310 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11311 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11313 MaxV = AWGBOffsetvalue
11314 MinV = AWGBAmplvalue
11316 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue / 2)
11317 if AWGBPhaseDelay.get() == 0:
11318 DelayValue = int(AWGBperiodvalue*(AWGBPhasevalue/360))
11319 elif AWGBPhaseDelay.get() == 1:
11320 DelayValue = int(AWGBPhasevalue*SamplesPermS)
11321 for i
in range(DelayValue-PulseWidth):
11322 AWGBwaveform.append((MinV+MaxV)/2)
11323 for i
in range(PulseWidth):
11324 AWGBwaveform.append(MaxV)
11325 for i
in range(PulseWidth):
11326 AWGBwaveform.append(MinV)
11327 DelayValue = int(AWGBperiodvalue-DelayValue)
11328 for i
in range(DelayValue-PulseWidth):
11329 AWGBwaveform.append((MinV+MaxV)/2)
11330 if AWGBBurstFlag.get() == 1:
11331 TempOneCycle = AWGBwaveform
11332 for i
in range(AWGBCycles-1):
11333 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11334 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11335 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11340 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
11341 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
11342 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11343 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11344 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11350 if AWGBFreqvalue > 0.0:
11351 if AWG_2X.get() == 2:
11352 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11353 SamplesPermS = int((BaseSampleRate*2)/1000)
11355 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11356 SamplesPermS = int(BaseSampleRate/1000)
11358 AWGBperiodvalue = 0.0
11360 if AWGBAmplvalue > AWGBOffsetvalue:
11361 MinV = AWGBOffsetvalue
11362 MaxV = AWGBAmplvalue
11364 MaxV = AWGBOffsetvalue
11365 MinV = AWGBAmplvalue
11366 if AWG_Amp_Mode.get() == 1:
11367 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11368 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11370 AWGBwaveform = numpy.random.uniform(MinV, MaxV, int(AWGBperiodvalue))
11371 Mid = (MaxV+MinV)/2
11372 if AWGBBurstFlag.get() == 1:
11373 TempOneCycle = AWGBwaveform
11374 for i
in range(AWGBCycles-1):
11375 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11376 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11377 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11382 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
11383 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
11384 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11385 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11386 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11392 if AWGBFreqvalue > 0.0:
11393 if AWG_2X.get() == 2:
11394 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11395 SamplesPermS = int((BaseSampleRate*2)/1000)
11397 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11398 SamplesPermS = int(BaseSampleRate/1000)
11400 AWGBperiodvalue = 0.0
11401 if AWGBAmplvalue > AWGBOffsetvalue:
11402 MinV = AWGBOffsetvalue
11403 MaxV = AWGBAmplvalue
11405 MaxV = AWGBOffsetvalue
11406 MinV = AWGBAmplvalue
11407 if AWG_Amp_Mode.get() == 1:
11408 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11409 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11411 AWGBwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGBperiodvalue))
11412 Mid = (MaxV+MinV)/2
11413 if AWGBBurstFlag.get() == 1:
11414 TempOneCycle = AWGBwaveform
11415 for i
in range(AWGBCycles-1):
11416 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11417 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11418 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11423 global AWGBMode, AWGBIOMode, AWGBModeLabel, DevID, devx, DevOne, CHB, HWRevOne
11425 if AWGBMode.get() == 0:
11427 elif AWGBMode.get() == 1:
11429 elif AWGBMode.get() == 2:
11431 if AWGBIOMode.get() > 0:
11432 if HWRevOne ==
"D":
11433 if AWGBMode.get() == 0:
11437 label_txt = label_txt +
" Split I/O"
11438 label_txt = label_txt +
" Mode"
11439 AWGBModeLabel.config(text = label_txt )
11444 global AWGBAmplvalue, AWGBOffsetvalue, AWGA2X, AWG_2X
11445 global AWGBFreqvalue, AWGBPhasevalue, AWGBPhaseDelay
11446 global AWGBDutyCyclevalue, FSweepMode, AWGBRepeatFlag, AWGSync
11447 global AWGBWave, AWGBMode, AWGBTerm, AWGBwaveform, AWGBIOMode
11448 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne
11449 global amp2lab, off2lab, AWG_Amp_Mode
11450 global AWGA2X, AWGB2X, AWGAWave, AWGARepeatFlag
11451 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11453 if AWG_Amp_Mode.get() == 0:
11454 amp2lab.config(text =
"Min Ch B" )
11455 off2lab.config(text =
"Max Ch B" )
11457 amp2lab.config(text =
"Amp Ch B" )
11458 off2lab.config(text =
"Off Ch B" )
11460 if AWG_2X.get() == 1:
11461 AWGBWave =
'arbitrary'
11462 if AWGBFreqvalue > 0.0:
11463 AWGBperiodvalue = AWGSAMPLErate/AWGBFreqvalue
11465 AWGBperiodvalue = 0.0
11467 if AWGBPhaseDelay.get() == 0:
11468 if AWGBWave ==
'square':
11469 AWGBPhasevalue = AWGBPhasevalue + 270.0
11470 if AWGBPhasevalue > 359:
11471 AWGBPhasevalue = AWGBPhasevalue - 360
11472 if AWGBPhasevalue > 0:
11473 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
11475 AWGBdelayvalue = 0.0
11476 elif AWGBPhaseDelay.get() == 1:
11477 AWGBdelayvalue = AWGBPhasevalue * 100
11479 if AWGBTerm.get() == 0:
11480 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
11481 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
11482 elif AWGBTerm.get() == 1:
11483 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
11484 devx.ctrl_transfer( 0x40, 0x50, 38, 0, 0, 0, 100)
11485 elif AWGBTerm.get() == 2:
11486 devx.ctrl_transfer( 0x40, 0x50, 37, 0, 0, 0, 100)
11487 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
11489 if AWGBWave ==
'dc':
11490 if AWG_2X.get() == 1:
11491 AWGBWave ==
'arbitrary'
11492 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
11494 if AWGBMode.get() == 0:
11495 if AWGBIOMode.get() == 0:
11496 CHB.mode = Mode.SVMI
11498 CHB.mode = Mode.SVMI_SPLIT
11499 CHB.constant(AWGBOffsetvalue)
11500 if AWGBMode.get() == 1:
11501 if AWGBIOMode.get() == 0:
11502 CHB.mode = Mode.SIMV
11504 CHB.mode = Mode.SIMV_SPLIT
11505 CHB.constant(AWGBOffsetvalue/1000)
11506 if AWGBMode.get() == 2:
11507 if AWGBIOMode.get() == 0:
11508 CHB.mode = Mode.HI_Z
11510 CHB.mode = Mode.HI_Z_SPLIT
11512 if AWGBIOMode.get() > 0:
11513 if HWRevOne ==
"D":
11515 CHB.mode = Mode.SIMV_SPLIT
11518 if AWGBMode.get() == 0:
11519 if AWGBIOMode.get() == 0:
11520 CHB.mode = Mode.SVMI
11522 CHB.mode = Mode.SVMI_SPLIT
11523 if AWGBMode.get() == 1:
11524 if AWGBIOMode.get() == 0:
11525 CHB.mode = Mode.SIMV
11527 CHB.mode = Mode.SIMV_SPLIT
11528 AWGBOffsetvalue = AWGBOffsetvalue/1000
11529 AWGBAmplvalue = AWGBAmplvalue/1000
11530 if AWGBMode.get() == 2:
11531 if AWGBIOMode.get() == 0:
11532 CHB.mode = Mode.HI_Z
11534 CHB.mode = Mode.HI_Z_SPLIT
11536 if AWG_Amp_Mode.get() == 1:
11537 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11538 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11540 MaxV = AWGBOffsetvalue
11541 MinV = AWGBAmplvalue
11543 if AWGBWave ==
'sine':
11544 CHB.sine(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11545 elif AWGBWave ==
'triangle':
11546 CHB.triangle(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11547 elif AWGBWave ==
'sawtooth':
11548 CHB.sawtooth(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11549 elif AWGBWave ==
'square':
11550 CHB.square(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue, AWGBDutyCyclevalue)
11551 elif AWGBWave ==
'stairstep':
11552 CHB.stairstep(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11553 elif AWGBWave ==
'arbitrary':
11554 if AWGSync.get() == 0:
11555 AWGBRepeatFlag.set(1)
11556 if AWG_2X.get() == 1:
11557 AWGBWave ==
'arbitrary'
11558 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
11560 CHB.arbitrary(AWGBwaveform, AWGBRepeatFlag.get())
11563 if AWGBIOMode.get() > 0:
11564 if HWRevOne ==
"D":
11566 CHB.mode = Mode.SIMV_SPLIT
11569 global session, CHA, CHB, AWGSync
11571 if (RUNstatus.get() == 1)
and AWGSync.get() == 0:
11572 if session.continuous:
11582 global AWGAMode, AWGBMode, AWGSync
11583 global CHA, CHB, discontloop, contloop, session
11603 global RUNstatus, AWGSync, session, CHA, CHB, IAScreenStatus, IADisp
11605 if (RUNstatus.get() == 1):
11606 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
11609 if AWGSync.get() == 0:
11612 CHA.mode = Mode.HI_Z_SPLIT
11613 CHB.mode = Mode.HI_Z_SPLIT
11617 elif session.continuous:
11620 CHA.mode = Mode.HI_Z_SPLIT
11621 CHB.mode = Mode.HI_Z_SPLIT
11626 global CANVASwidthF, CANVASheightF, freqwindow
11629 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=freqwindow)
11630 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=freqwindow)
11631 if MarkerNum > 0
or ColorMode.get() > 0:
11632 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
11634 COLORtext =
"#000000"
11637 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
11639 COLORtext =
"#ffffff"
11643 print(
"Routine not made yet")
11646 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
11653 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
11661 global FreqTraceMode
11663 FreqTraceMode.set(1)
11664 if RUNstatus.get() == 0:
11666 if RUNstatus.get() == 2:
11671 global FreqTraceMode
11673 FreqTraceMode.set(2)
11674 if RUNstatus.get() == 0:
11676 if RUNstatus.get() == 2:
11680 global RUNstatus, TRACEaverage, FreqTraceMode, freqwindow
11682 FreqTraceMode.set(3)
11684 if RUNstatus.get() == 0:
11686 if RUNstatus.get() == 2:
11690 global FreqTraceMode, TRACEresetFreq
11692 if FreqTraceMode.get()==3:
11693 TRACEresetFreq =
True
11696 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
11697 global T1Fline, T2Fline, T1FRline, T2FRline, TFRMline, TFMline
11698 global T1Pline, T2Pline, T1PRline, T2PRline
11699 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11700 global PeakxM, PeakyM, PeakMdb, PeakfreqM
11701 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
11702 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
11703 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
11705 if ShowC1_VdB.get() == 1:
11710 PeakfreqRA = PeakfreqA
11711 if ShowC2_VdB.get() == 1:
11716 PeakfreqRB = PeakfreqB
11717 if ShowC1_P.get() == 1:
11719 if ShowC2_P.get() == 1:
11721 if ShowMathSA.get() > 0:
11726 PeakfreqRM = PeakfreqM
11731 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
11732 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
11733 global TAFline, TBFline, TAFRline, TBFRline, TBPRMline, TBPMline
11734 global TAPline, TBPline, TAPRline, TBPRline
11735 global TIARline, TIAXline, TIAMagline, TIAAngline
11736 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
11737 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11738 global PeakxM, PeakyM, PeakMdb, PeakfreqM
11739 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
11740 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
11741 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
11743 if ShowCA_VdB.get() == 1:
11748 PeakfreqRA = PeakfreqA
11749 if ShowCB_VdB.get() == 1:
11754 PeakfreqRB = PeakfreqB
11755 if ShowCA_P.get() == 1:
11757 if ShowCB_P.get() == 1:
11759 if ShowMathBP.get() > 0:
11760 TBPRMline = TBPMline
11764 PeakfreqRM = PeakfreqM
11765 if Show_Rseries.get() > 0:
11766 RefIARline = TIARline
11767 if Show_Xseries.get() > 0:
11768 RefIAXline = TIAXline
11769 if Show_Magnitude.get() > 0:
11770 RefIAMagline = TIAMagline
11771 if Show_Angle.get() > 0:
11772 RefIAAngline = TIAAngline
11776 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins, bodewindow
11777 global SAMPLErate, ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11780 if ShowCA_VdB.get() == 1:
11781 TRACEsize = len(FSweepAdB)
11782 elif ShowCA_VdB.get() == 1:
11783 TRACEsize = len(FSweepBdB)
11787 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=bodewindow)
11790 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
11791 filename =
"Bode-" + tme
11792 filename = filename +
".csv"
11794 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
11795 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=bodewindow)
11796 DataFile = open(filename,
'a')
11797 HeaderString =
'Frequency-#, '
11798 if ShowCA_VdB.get() == 1:
11800 HeaderString = HeaderString +
'CA-dB, '
11802 HeaderString = HeaderString +
'CA-Mag, '
11803 if ShowCB_VdB.get() == 1:
11805 HeaderString = HeaderString +
'CB-dB, '
11807 HeaderString = HeaderString +
'CB-Mag, '
11808 if ShowCA_P.get() == 1:
11809 HeaderString = HeaderString +
'Phase A-B, '
11810 if ShowCB_P.get() == 1:
11811 HeaderString = HeaderString +
'Phase B-A, '
11812 HeaderString = HeaderString +
'\n'
11813 DataFile.write( HeaderString )
11816 while n < len(FSweepAdB):
11817 F = FBins[FStep[n]]
11819 if ShowCA_VdB.get() == 1:
11820 V = 10 * math.log10(float(FSweepAdB[n])) + 17
11823 txt = txt +
"," + str(V)
11824 if ShowCB_VdB.get() == 1:
11825 V = 10 * math.log10(float(FSweepBdB[n])) + 17
11828 txt = txt +
"," + str(V)
11829 if ShowCA_P.get() == 1:
11830 RelPhase = FSweepAPh[n]
11832 RelPhase = RelPhase - 360
11833 elif RelPhase < -180:
11834 RelPhase = RelPhase + 360
11835 txt = txt +
"," + str(RelPhase)
11836 if ShowCB_P.get() == 1:
11837 RelPhase = FSweepBPh[n]
11839 RelPhase = RelPhase - 360
11840 elif RelPhase < -180:
11841 RelPhase = RelPhase + 360
11842 txt = txt +
"," + str(RelPhase)
11844 DataFile.write(txt)
11850 global iawindow, FStep, FBins
11851 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
11853 if NetworkScreenStatus.get() > 0:
11854 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
11855 filename =
"Impedance-" + tme
11856 filename = filename +
".csv"
11858 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
11859 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=iawindow)
11860 DataFile = open(filename,
'a')
11861 HeaderString =
'Frequency, Series R, Seriec X, Series Z, Series Angle'
11862 HeaderString = HeaderString +
'\n'
11863 DataFile.write( HeaderString )
11866 while n < len(NSweepSeriesR):
11867 F = FBins[FStep[n]]
11868 txt = str(F) +
"," + str(NSweepSeriesR[n]) +
"," + str(NSweepSeriesX[n]) +
"," + str(NSweepSeriesMag[n]) +
"," + str(NSweepSeriesAng[n])
11870 DataFile.write(txt)
11877 global RUNstatus, PowerStatus, devx, PwrBt, freqwindow, session, AWGSync, contloop, discontloop
11878 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA, DevID, FWRevOne, StopFreqEntry
11879 global Two_X_Sample, ADC_Mux_Mode, ShowAWGASA, ShowAWGBSA
11882 if DevID ==
"No Device":
11883 showwarning(
"WARNING",
"No Device Plugged In!")
11884 elif FWRevOne == 0.0:
11885 showwarning(
"WARNING",
"Out of data Firmware!")
11887 if PowerStatus == 0:
11889 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
11890 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
11892 if (ShowC1_VdB.get() == 0
and
11893 ShowC2_VdB.get() == 0
and
11894 ShowMathSA.get() == 0
and
11895 ShowAWGASA.get() == 0
and
11896 ShowAWGBSA.get() == 0
and
11897 ShowC1_P.get() == 0
and
11898 ShowC2_P.get() == 0):
11899 showwarning(
"WARNING",
"Select at least one trace first", parent=freqwindow)
11902 StopFrequency = float(StopFreqEntry.get())
11904 StopFreqEntry.delete(0,
"end")
11905 StopFreqEntry.insert(0,50000)
11906 StopFrequency = 50000
11907 if FWRevOne > 2.16:
11908 if StopFrequency >= 50000:
11909 Two_X_Sample.set(1)
11911 Two_X_Sample.set(0)
11912 ADC_Mux_Mode.set(0)
11920 global RUNstatus, session, AWGSync
11922 if (RUNstatus.get() == 1):
11924 CHA.mode = Mode.HI_Z_SPLIT
11925 CHB.mode = Mode.HI_Z_SPLIT
11926 if AWGSync.get() == 0:
11930 if session.continuous:
11938 elif (RUNstatus.get() == 2):
11940 elif (RUNstatus.get() == 3):
11942 elif (RUNstatus.get() == 4):
11950 DBlevel.set(DBlevel.get() - 1)
11952 if RUNstatus.get() == 0:
11959 DBlevel.set(DBlevel.get() + 1)
11961 if RUNstatus.get() == 0:
11968 DBlevel.set(DBlevel.get() - 10)
11970 if RUNstatus.get() == 0:
11977 DBlevel.set(DBlevel.get() + 10)
11979 if RUNstatus.get() == 0:
11983 global RUNstatus, SpectrumScreenStatus, IAScreenStatus
11984 global SMPfftpwrTwo, SMPfft, FFTwindow
11985 global TRACEresetFreq, PhAScreenStatus
11987 if FFTwindow.get() != 8:
11988 if (SMPfftpwrTwo.get() > 6):
11989 SMPfftpwrTwo.set(SMPfftpwrTwo.get() - 1)
11990 TRACEresetFreq =
True
11991 SMPfft = 2 ** int(SMPfftpwrTwo.get())
11993 if RUNstatus.get() == 0:
11994 if SpectrumScreenStatus.get() > 0:
11996 if IAScreenStatus.get() > 0:
11998 if PhAScreenStatus.get() > 0:
12000 if RUNstatus.get() == 2:
12004 global RUNstatus, PhAScreenStatus
12005 global SMPfftpwrTwo, SMPfft, FFTwindow
12006 global TRACEresetFreq, SpectrumScreenStatus, IAScreenStatus
12008 if FFTwindow.get() != 8:
12009 if (SMPfftpwrTwo.get() < 16):
12010 SMPfftpwrTwo.set(SMPfftpwrTwo.get() + 1)
12011 TRACEresetFREQ =
True
12012 SMPfft = 2 ** int(SMPfftpwrTwo.get())
12014 if RUNstatus.get() == 0:
12015 if SpectrumScreenStatus.get() > 0:
12017 if IAScreenStatus.get() > 0:
12019 if PhAScreenStatus.get() > 0:
12021 if RUNstatus.get() == 2:
12028 if (DBdivindex.get() >= 1):
12029 DBdivindex.set(DBdivindex.get() - 1)
12031 if RUNstatus.get() == 0:
12039 if (DBdivindex.get() < len(DBdivlist) - 1):
12040 DBdivindex.set(DBdivindex.get() + 1)
12042 if RUNstatus.get() == 0:
12046 global RUNstatus, LoopNum, PowerStatus, devx, PwrBt, bodewindow, session, AWGSync
12047 global ShowCA_VdB, ShowCB_P, ShowCB_VdB, ShowCB_P, ShowMathBP, contloop, discontloop
12048 global FBins, FStep, NSteps, FSweepMode, HScaleBP, CutDC
12049 global AWGAMode, AWGAShape, AWGBMode, AWGBShape
12050 global StartBodeEntry, StopBodeEntry, SweepStepBodeEntry, DevID, FWRevOne
12051 global AWGAFreqEntry, AWGBFreqEntry, Reset_Freq, AWGAIOMode, AWGBIOMode
12052 global Two_X_Sample, ADC_Mux_Mode, AWG_2X, ZEROstuffing, SAMPLErate
12053 global BeginIndex, EndIndex
12055 if DevID ==
"No Device":
12056 showwarning(
"WARNING",
"No Device Plugged In!")
12057 elif FWRevOne == 0.0:
12058 showwarning(
"WARNING",
"Out of data Firmware!")
12060 if PowerStatus == 0:
12062 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
12063 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
12065 if ShowCA_VdB.get() == 0
and ShowCB_VdB.get() == 0
and ShowMathBP.get() == 0:
12066 showwarning(
"WARNING",
"Select at least one trace first", parent=bodewindow)
12069 if ZEROstuffing.get() < 3:
12070 ZEROstuffing.set(3)
12073 EndFreq = float(StopBodeEntry.get())
12075 StopBodeEntry.delete(0,
"end")
12076 StopBodeEntry.insert(0,10000)
12078 if FWRevOne > 2.16:
12079 if EndFreq >= 20000:
12080 Two_X_Sample.set(1)
12081 FBins = numpy.linspace(0, 100000, num=16384)
12083 Two_X_Sample.set(0)
12084 FBins = numpy.linspace(0, 50000, num=16384)
12085 ADC_Mux_Mode.set(0)
12088 BeginFreq = float(StartBodeEntry.get())
12090 StartBodeEntry.delete(0,
"end")
12091 StartBodeEntry.insert(0,100)
12094 if FSweepMode.get() == 1:
12095 if AWGAMode.get() == 2:
12098 if Two_X_Sample.get() == 1:
12105 Reset_Freq = AWGAFreqEntry.get()
12106 if FSweepMode.get() == 2:
12107 if AWGBMode.get() == 2:
12110 if Two_X_Sample.get() == 1:
12117 Reset_Freq = AWGBFreqEntry.get()
12118 if FSweepMode.get() == 3:
12122 NSteps.set(float(SweepStepBodeEntry.get()))
12124 SweepStepBodeEntry.delete(0,
"end")
12125 SweepStepBodeEntry.insert(0, NSteps.get())
12127 if FSweepMode.get() > 0:
12131 NyquistFreq = SAMPLErate/2
12132 BeginIndex = int((BeginFreq/NyquistFreq)*16384)
12133 EndIndex = int((EndFreq/NyquistFreq)*16384)
12134 if NSteps.get() < 5:
12136 if HScaleBP.get() == 1:
12137 LogFStop = math.log10(EndIndex)
12139 LogFStart = math.log10(BeginIndex)
12142 FStep = numpy.logspace(LogFStart, LogFStop, num=NSteps.get(), base=10.0)
12144 FStep = numpy.linspace(BeginIndex, EndIndex, num=NSteps.get())
12149 global RUNstatus, session, AWGSync, FSweepMode, AWGAFreqEntry, AWGBFreqEntry, Reset_Freq
12151 if FSweepMode.get() == 1:
12152 AWGAFreqEntry.delete(0,
"end")
12153 AWGAFreqEntry.insert(0, Reset_Freq)
12154 if FSweepMode.get() == 2:
12155 AWGBFreqEntry.delete(0,
"end")
12156 AWGBFreqEntry.insert(0, Reset_Freq)
12158 if (RUNstatus.get() == 1):
12160 if AWGSync.get() == 0:
12162 elif (RUNstatus.get() == 2):
12164 elif (RUNstatus.get() == 3):
12166 elif (RUNstatus.get() == 4):
12174 DBlevelBP.set(DBlevelBP.get() - 1)
12176 if RUNstatus.get() == 0:
12183 DBlevelBP.set(DBlevelBP.get() + 1)
12185 if RUNstatus.get() == 0:
12192 DBlevelBP.set(DBlevelBP.get() - 10)
12194 if RUNstatus.get() == 0:
12201 DBlevelBP.set(DBlevelBP.get() + 10)
12203 if RUNstatus.get() == 0:
12207 global DBdivindexBP
12210 if (DBdivindexBP.get() >= 1):
12211 DBdivindexBP.set(DBdivindexBP.get() - 1)
12213 if RUNstatus.get() == 0:
12217 global DBdivindexBP
12221 if (DBdivindexBP.get() < len(DBdivlist) - 1):
12222 DBdivindexBP.set(DBdivindexBP.get() + 1)
12224 if RUNstatus.get() == 0:
12228 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
12235 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
12242 global FFTBuffA, FFTBuffB
12259 global FFTBuffA, FFTBuffB
12262 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
12277 global FFTBuffA, FFTBuffB, AWGAwaveform, AWGBwaveform
12278 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowAWGASA, ShowAWGBSA
12279 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
12280 global FFTmemoryB, FFTresultB, FFTresultAWGA, FFTresultAWGB
12281 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh
12282 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
12283 global FFTwindowshape, FFTbandwidth
12284 global AWGSAMPLErate, StartFreqEntry, StopFreqEntry, StartBodeEntry
12285 global SMPfft, LoopNum, IA_Ext_Conf
12286 global STARTsample, STOPsample, CutDC
12287 global TRACEaverage, FreqTraceMode, FSweepMode
12288 global TRACEresetFreq, ZEROstuffing
12289 global SpectrumScreenStatus, IAScreenStatus, BodeScreenStatus
12290 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
12298 REX = numpy.array(FFTBuffA[0:SMPfft])
12304 REX = REX * FFTwindowshape[0:len(REX)]
12307 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12308 fftsamples = ZEROstuffingvalue * SMPfft
12311 FFTmemoryA = FFTresultA
12312 if FreqTraceMode.get() == 3:
12313 PhaseMemoryA = PhaseA
12316 ALL = numpy.fft.fft(REX, n=fftsamples)
12317 PhaseA = numpy.angle(ALL, deg=
True)
12318 ALL = numpy.absolute(ALL)
12321 le = int(len(ALL) / 2)
12323 PhaseA = PhaseA[0:le]
12324 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12325 Totalcorr = Totalcorr * Totalcorr
12326 FFTresultA = Totalcorr * ALL
12331 REX = numpy.array(FFTBuffB[0:SMPfft])
12338 REX = REX * FFTwindowshape
12342 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12343 fftsamples = ZEROstuffingvalue * SMPfft
12346 FFTmemoryB = FFTresultB
12347 if FreqTraceMode.get() == 3:
12348 PhaseMemoryB = PhaseB
12350 ALL = numpy.fft.fft(REX, n=fftsamples)
12351 PhaseB = numpy.angle(ALL, deg=
True)
12352 ALL = numpy.absolute(ALL)
12355 le = int(len(ALL) / 2 )
12357 PhaseB = PhaseB[0:le]
12358 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12359 Totalcorr = Totalcorr * Totalcorr
12360 FFTresultB = Totalcorr * ALL
12362 if IA_Ext_Conf.get() == 1:
12367 REX = numpy.array(FFTBuffA[0:SMPfft]-FFTBuffB[0:SMPfft])
12373 REX = REX * FFTwindowshape
12376 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12377 fftsamples = ZEROstuffingvalue * SMPfft
12384 ALL = numpy.fft.fft(REX, n=fftsamples)
12385 PhaseAB = numpy.angle(ALL, deg=
True)
12386 ALL = numpy.absolute(ALL)
12391 PhaseAB = PhaseAB[:le]
12392 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12393 Totalcorr = Totalcorr * Totalcorr
12394 FFTresultAB = Totalcorr * ALL
12396 if ShowAWGASA.get() > 0:
12397 FFTAWGA = AWGAwaveform
12399 if CutDC.get() == 1:
12400 DCA = numpy.average(FFTAWGA)
12401 FFTAWGA = FFTAWGA - DCA
12402 if len(AWGAwaveform) < SMPfft:
12403 Repeats = math.ceil(SMPfft/len(AWGAwaveform))
12406 FFTAWGA = numpy.concatenate((FFTAWGA, AWGAwaveform-DCA))
12411 REX = numpy.array(FFTAWGA[0:SMPfft])
12418 REX = REX * FFTwindowshape
12422 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12423 fftsamples = ZEROstuffingvalue * SMPfft
12425 ALL = numpy.fft.fft(REX, n=fftsamples)
12427 ALL = numpy.absolute(ALL)
12430 le = int(len(ALL) / 2 )
12433 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12434 Totalcorr = Totalcorr * Totalcorr
12435 FFTresultAWGA = Totalcorr * ALL
12437 if ShowAWGBSA.get() > 0:
12438 FFTAWGB = AWGBwaveform
12440 if CutDC.get() == 1:
12441 DCB = numpy.average(FFTAWGB)
12442 FFTAWGB = FFTAWGB - DCB
12443 if len(AWGBwaveform) < SMPfft:
12444 Repeats = math.ceil(SMPfft/len(AWGBwaveform))
12447 FFTAWGB = numpy.concatenate((FFTAWGB, AWGBwaveform-DCB))
12452 REX = numpy.array(FFTAWGB[0:SMPfft])
12459 REX = REX * FFTwindowshape
12463 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12464 fftsamples = ZEROstuffingvalue * SMPfft
12466 ALL = numpy.fft.fft(REX, n=fftsamples)
12468 ALL = numpy.absolute(ALL)
12471 le = int(len(ALL) / 2 )
12474 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12475 Totalcorr = Totalcorr * Totalcorr
12476 FFTresultAWGB = Totalcorr * ALL
12478 TRACEsize = int(len(FFTresultB))
12479 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
12480 if SpectrumScreenStatus.get() > 0:
12482 StartFrequency = float(StartFreqEntry.get())
12484 StartFreqEntry.delete(0,
"end")
12485 StartFreqEntry.insert(0,100)
12486 StartFrequency = 100
12487 STARTsample = int(StartFrequency / Fsample)
12490 if LoopNum.get() == 1:
12491 PhaseMemoryB = PhaseB
12496 if NetworkScreenStatus.get() > 0:
12499 NSweepSeriesMag = []
12500 NSweepSeriesAng = []
12501 if FreqTraceMode.get() == 1:
12502 if FSweepMode.get() == 1:
12503 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12504 if ptmax > STARTsample:
12505 STARTsample = ptmax
12508 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12510 if FSweepMode.get() == 2:
12511 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12512 if ptmax > STARTsample:
12513 STARTsample = ptmax
12516 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12519 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
12520 if FSweepMode.get() == 1:
12521 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12522 if ptmax > STARTsample:
12523 STARTsample = ptmax
12526 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12528 if FSweepMode.get() == 2:
12529 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12530 if ptmax > STARTsample:
12531 STARTsample = ptmax
12534 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12536 if len(FFTresultB) == len(FFTmemoryB):
12537 FFTresultB = numpy.maximum(FFTresultB, FFTmemoryB)
12538 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
12540 FFTresultB = FFTmemoryB + (FFTresultB - FFTmemoryB) / TRACEaverage.get()
12541 PhaseB = PhaseMemoryB +(PhaseB - PhaseMemoryB) / TRACEaverage.get()
12543 FFTmemoryB = FFTresultB
12544 PhaseMemoryB = PhaseB
12546 TRACEsize = int(len(FFTresultA))
12547 Fsample = float(AWGSAMPLErate / 2) / (TRACEsize - 1)
12548 if SpectrumScreenStatus.get() > 0:
12549 STARTsample = int(StartFrequency / Fsample)
12552 if LoopNum.get() == 1:
12553 PhaseMemoryA = PhaseA
12554 if FreqTraceMode.get() == 1:
12555 if FSweepMode.get() == 1:
12556 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12557 if ptmax > STARTsample:
12558 STARTsample = ptmax
12561 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12563 if FSweepMode.get() == 2:
12564 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12565 if ptmax > STARTsample:
12566 STARTsample = ptmax
12569 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12572 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
12573 if FSweepMode.get() == 1:
12574 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12575 if ptmax > STARTsample:
12576 STARTsample = ptmax
12579 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12581 if FSweepMode.get() == 2:
12582 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12583 if ptmax > STARTsample:
12584 STARTsample = ptmax
12587 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12590 if len(FFTresultA) == len(FFTmemoryA):
12591 FFTresultA = numpy.maximum(FFTresultA, FFTmemoryA)
12592 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
12594 FFTresultA = FFTmemoryA + (FFTresultA - FFTmemoryA) / TRACEaverage.get()
12595 PhaseA = PhaseMemoryA +(PhaseA - PhaseMemoryA) / TRACEaverage.get()
12597 FFTmemoryA = FFTresultA
12598 PhaseMemoryA = PhaseA
12600 if FSweepMode.get() > 0
and BodeScreenStatus.get() > 0:
12601 FSweepAdB.append(numpy.amax(FFTresultA))
12602 FSweepBdB.append(numpy.amax(FFTresultB))
12603 FSweepAPh.append(PhaseA[numpy.argmax(FFTresultA)])
12604 FSweepBPh.append(PhaseB[numpy.argmax(FFTresultB)])
12606 TRACEresetFreq =
False
12609 global FFTmemoryA, FFTresultA
12610 global FFTmemoryB, FFTresultB
12611 global FFTresultAWGA, FFTresultAWGB, ShowAWGASA, ShowAWGBSA
12612 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
12613 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep
12614 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
12615 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12616 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakIndexA, PeakIndexB
12617 global PeakfreqA, PeakfreqB, Two_X_Sample
12622 global AWGSAMPLErate, HScale, Fsample, SAMPLErate, BaseSampleRate
12623 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
12624 global STARTsample, STOPsample, LoopNum, FSweepMode
12625 global FreqTraceMode
12626 global T1Fline, T2Fline, TFMline, T1Pline, T2Pline, TAFline, TBFline
12633 StartFrequency = float(StartFreqEntry.get())
12635 StartFreqEntry.delete(0,
"end")
12636 StartFreqEntry.insert(0,100)
12637 StartFrequency = 100
12639 StopFrequency = float(StopFreqEntry.get())
12641 StopFreqEntry.delete(0,
"end")
12642 StopFreqEntry.insert(0,50000)
12643 StopFrequency = 50000
12644 if StartFrequency > StopFrequency :
12645 StopFreqEntry.delete(0,
"end")
12646 StopFreqEntry.insert(0,50000)
12647 StopFrequency = 50000
12648 if StopFrequency < StartFrequency :
12649 StopFreqEntry.delete(0,
"end")
12650 StopFreqEntry.insert(0,50000)
12651 StopFrequency = 50000
12653 Phasecenter = int(PhCenFreqEntry.get())
12654 RelPhaseCenter.set(Phasecenter)
12656 PhCenFreqEntry.delete(0,
"end")
12657 PhCenFreqEntry.insert(0,0)
12658 RelPhaseCenter.set(0)
12660 if ShowC1_VdB.get() == 1
or ShowMathSA.get() > 0:
12661 TRACEsize = len(FFTresultA)
12662 elif ShowC2_VdB.get() == 1
or ShowMathSA.get() > 0:
12663 TRACEsize = len(FFTresultB)
12664 elif ShowAWGASA.get() > 0:
12665 TRACEsize = len(FFTresultAWGA)
12666 elif ShowAWGBSA.get() > 0:
12667 TRACEsize = len(FFTresultAWGB)
12671 if FSweepMode.get() > 0
and LoopNum.get() == NSteps.get():
12672 PhaseA = PhaseMemoryA
12673 PhaseB = PhaseMemoryB
12675 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
12676 Yc = float(Y0TF) + Yconv * (DBlevel.get())
12679 Yphconv = float(GRHF) / 360
12680 Yp = float(Y0TF) + Yphconv + 180
12682 Fpixel = (StopFrequency - StartFrequency) / GRWF
12683 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
12684 LogFStop = math.log10(StopFrequency)
12686 LogFStart = math.log10(StartFrequency)
12689 LogFpixel = (LogFStop - LogFStart) / GRWF
12690 STARTsample = StartFrequency / Fsample
12691 STARTsample = int(math.ceil(STARTsample))
12693 STOPsample = StopFrequency / Fsample
12694 STOPsample = int(math.floor(STOPsample))
12696 MAXsample = TRACEsize
12697 if STARTsample > (MAXsample - 1):
12698 STARTsample = MAXsample - 1
12700 if STOPsample > MAXsample:
12701 STOPsample = MAXsample
12711 PeakIndexA = PeakIndexB = n
12712 PeakdbA = PeakdbB = PeakMdb = -200
12713 while n <= STOPsample:
12715 if HScale.get() == 1:
12717 LogF = math.log10(F)
12718 x = X0LF + (LogF - LogFStart)/LogFpixel
12722 x = X0LF + (F - StartFrequency) / Fpixel
12723 if ShowC1_VdB.get() == 1:
12724 T1Fline.append(int(x + 0.5))
12726 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12727 ya = Yc - Yconv * dbA
12736 PeakyA = int(ya + 0.5)
12737 PeakxA = int(x + 0.5)
12740 T1Fline.append(int(ya + 0.5))
12741 if ShowC2_VdB.get() == 1:
12742 T2Fline.append(int(x + 0.5))
12744 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12745 yb = Yc - Yconv * dbB
12754 PeakyB = int(yb + 0.5)
12755 PeakxB = int(x + 0.5)
12758 T2Fline.append(int(yb + 0.5))
12759 if ShowAWGASA.get() > 0:
12760 TAFline.append(int(x + 0.5))
12762 dbA = (10 * math.log10(float(FFTresultAWGA[n])) + 17)
12763 ya = Yc - Yconv * dbA
12770 TAFline.append(int(ya + 0.5))
12771 if ShowAWGBSA.get() > 0:
12772 TBFline.append(int(x + 0.5))
12774 dbA = (10 * math.log10(float(FFTresultAWGB[n])) + 17)
12775 ya = Yc - Yconv * dbA
12782 TBFline.append(int(ya + 0.5))
12783 if ShowC1_P.get() == 1:
12784 T1Pline.append(int(x + 0.5))
12785 if FSweepMode.get() > 0:
12786 RelPhase = PhaseMemoryA[n]-PhaseMemoryB[n]
12788 RelPhase = PhaseA[n]-PhaseB[n]
12789 RelPhase = RelPhase - Phasecenter
12791 RelPhase = RelPhase - 360
12792 elif RelPhase < -180:
12793 RelPhase = RelPhase + 360
12794 if Two_X_Sample.get() == 0:
12795 PhErr = 0.0018 * n * Fsample
12796 RelPhase = RelPhase + PhErr - 12.0
12798 RelPhase = RelPhase - 9.0
12799 ya = Yp - Yphconv * RelPhase
12800 T1Pline.append(int(ya + 0.5))
12801 if ShowC2_P.get() == 1:
12802 T2Pline.append(int(x + 0.5))
12803 if FSweepMode.get() > 0:
12804 RelPhase = PhaseMemoryB[n]-PhaseMemoryA[n]
12806 RelPhase = PhaseB[n]-PhaseA[n]
12807 RelPhase = RelPhase - Phasecenter
12809 RelPhase = RelPhase - 360
12810 elif RelPhase < -180:
12811 RelPhase = RelPhase + 360
12812 if Two_X_Sample.get() == 0:
12813 PhErr = 0.0018 * n * Fsample
12814 RelPhase = RelPhase - PhErr - 12.0
12816 RelPhase = RelPhase - 9.0
12817 ya = Yp - Yphconv * RelPhase
12818 T2Pline.append(int(ya + 0.5))
12819 if ShowMathSA.get() > 0:
12820 TFMline.append(int(x + 0.5))
12821 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12822 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12823 if ShowMathSA.get() == 1:
12825 elif ShowMathSA.get() == 2:
12827 yb = Yc - Yconv * MdB
12834 PeakyM = int(yb + 0.5)
12835 PeakxM = int(x + 0.5)
12837 TFMline.append(int(yb + 0.5))
12841 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins
12842 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
12843 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12844 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12845 global PeakfreqA, PeakfreqB, Two_X_Sample, PhaseOffset1x, PhaseOffset2x
12846 global DBdivindexBP
12851 global AWGSAMPLErate, HScaleBP, RUNstatus, SAMPLErate, BaseSampleRate
12852 global StartBodeEntry, StopBodeEntry
12853 global STARTsample, STOPsample, LoopNum, FSweepMode
12854 global FreqTraceMode, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
12855 global TAFline, TBFline, TBPMline, TAPline, TBPline
12859 global ResScale, NetworkScreenStatus, Show_Rseries, NSweepSeriesR, Show_Xseries, NSweepSeriesX
12860 global Show_Magnitude, NSweepSeriesMag, Show_Angle, NSweepSeriesAng
12861 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
12865 if ShowCA_VdB.get() == 1
or ShowMathBP.get() > 0:
12866 TRACEsize = len(FStep)
12867 elif ShowCB_VdB.get() == 1
or ShowMathBP.get() > 0:
12868 TRACEsize = len(FStep)
12873 EndFreq = float(StopBodeEntry.get())
12875 StopBodeEntry.delete(0,
"end")
12876 StopBodeEntry.insert(0,10000)
12879 BeginFreq = float(StartBodeEntry.get())
12881 StartBodeEntry.delete(0,
"end")
12882 StartBodeEntry.insert(0,100)
12885 Phasecenter = int(PhCenBodeEntry.get())
12886 RelPhaseCenter.set(Phasecenter)
12888 PhCenBodeEntry.delete(0,
"end")
12889 PhCenBodeEntry.insert(0,0)
12890 RelPhaseCenter.set(0)
12893 Impedcenter = int(ImCenBodeEntry.get())
12894 ImpedanceCenter.set(Impedcenter)
12896 ImCenBodeEntry.delete(0,
"end")
12897 ImCenBodeEntry.insert(0,0)
12898 ImpedanceCenter.set(0)
12901 HalfSAMPLErate = SAMPLErate/2
12902 BeginIndex = int((BeginFreq/HalfSAMPLErate)*16384)
12903 EndIndex = int((EndFreq/HalfSAMPLErate)*16384)
12904 CurrentFreqX = X0LBP + 14
12905 if FSweepMode.get() > 0
and len(FSweepAdB) > 4:
12907 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
12908 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
12910 Ymax = Y0TBP + GRHBP
12911 Yphconv = float(GRHBP) / 360
12912 Yp = float(Y0TBP) + Yphconv + 180
12915 Fpixel = (EndFreq - BeginFreq) / GRWBP
12916 LogFStop = math.log10(EndFreq)
12918 LogFStart = math.log10(BeginFreq)
12921 LogFpixel = (LogFStop - LogFStart) / GRWBP
12935 for n
in range(len(FSweepAdB)):
12937 F = FBins[int(FStep[n])]
12939 F = FBins[int(FStep[0])]
12940 if F >= BeginFreq
and F <= EndFreq:
12941 if HScaleBP.get() == 1:
12943 LogF = math.log10(F)
12944 x = x1 + (LogF - LogFStart)/LogFpixel
12948 x = x1 + (F - BeginFreq) / Fpixel
12950 if ShowCA_VdB.get() == 1:
12951 TAFline.append(int(x + 0.5))
12953 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
12954 ya = Yc - Yconv * dbA
12963 PeakyA = int(ya + 0.5)
12964 PeakxA = int(x + 0.5)
12966 TAFline.append(int(ya + 0.5))
12967 if ShowCB_VdB.get() == 1:
12968 TBFline.append(int(x + 0.5))
12970 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
12971 yb = Yc - Yconv * dbB
12980 PeakyB = int(yb + 0.5)
12981 PeakxB = int(x + 0.5)
12983 TBFline.append(int(yb + 0.5))
12984 if ShowCA_P.get() == 1:
12985 TAPline.append(int(x + 0.5))
12986 RelPhase = FSweepAPh[n] - FSweepBPh[n]
12987 RelPhase = RelPhase - Phasecenter
12989 RelPhase = RelPhase - 360
12990 elif RelPhase < -180:
12991 RelPhase = RelPhase + 360
12992 if Two_X_Sample.get() == 0:
12994 RelPhase = RelPhase + PhErr - PhaseOffset1x
12996 RelPhase = RelPhase - PhaseOffset2x
12997 ya = Yp - Yphconv * RelPhase
12998 TAPline.append(int(ya + 0.5))
12999 if ShowCB_P.get() == 1:
13000 TBPline.append(int(x + 0.5))
13001 RelPhase = FSweepBPh[n] - FSweepAPh[n]
13002 RelPhase = RelPhase - Phasecenter
13004 RelPhase = RelPhase - 360
13005 elif RelPhase < -180:
13006 RelPhase = RelPhase + 360
13007 if Two_X_Sample.get() == 0:
13009 RelPhase = RelPhase - PhErr - PhaseOffset1x
13011 RelPhase = RelPhase - PhaseOffset2x
13012 ya = Yp - Yphconv * RelPhase
13013 TBPline.append(int(ya + 0.5))
13014 if ShowMathBP.get() > 0:
13015 TBPMline.append(int(x + 0.5))
13016 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
13017 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
13018 if ShowMathBP.get() == 1:
13020 elif ShowMathBP.get() == 2:
13022 yb = Yc - Yconv * MdB
13029 PeakyM = int(yb + 0.5)
13030 PeakxM = int(x + 0.5)
13032 TBPMline.append(int(yb + 0.5))
13034 if NetworkScreenStatus.get() > 0:
13035 ycenter = Y0TBP + (GRHBP/2)
13036 OhmsperPixel = float(ResScale.get())*Vdiv.get()/GRHBP
13038 for n
in range(len(NSweepSeriesR)):
13040 F = FBins[int(FStep[n])]
13042 F = FBins[int(FStep[0])]
13043 if F >= BeginFreq
and F <= EndFreq:
13044 if HScaleBP.get() == 1:
13046 LogF = math.log10(F)
13047 x = x1 + (LogF - LogFStart)/LogFpixel
13051 x = x1 + (F - BeginFreq) / Fpixel
13052 if Show_Rseries.get() == 1:
13053 TIARline.append(int(x + 0.5))
13054 y1 = ycenter - ((NSweepSeriesR[n]-Impedcenter) / OhmsperPixel)
13059 TIARline.append(y1)
13060 if Show_Xseries.get() == 1:
13061 TIAXline.append(int(x + 0.5))
13062 y1 = ycenter - ((NSweepSeriesX[n]-Impedcenter) / OhmsperPixel)
13067 TIAXline.append(y1)
13068 if Show_Magnitude.get() == 1:
13069 TIAMagline.append(int(x + 0.5))
13070 y1 = ycenter - ((NSweepSeriesMag[n]-Impedcenter) / OhmsperPixel)
13075 TIAMagline.append(y1)
13076 if Show_Angle.get() == 1:
13077 TIAAngline.append(int(x + 0.5))
13078 y1 = ycenter - Yphconv * (NSweepSeriesAng[n]-Phasecenter)
13083 TIAAngline.append(y1)
13086 global CANVASheightBP, CANVASwidthBP, SmoothCurvesBP
13087 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13088 global PeakxM, PeakyM, PeakMdb, PeakfreqM
13089 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
13090 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
13091 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
13093 global COLORsignalband, COLORtext
13094 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
13095 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
13096 global DBdivindexBP
13099 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
13106 global AWGSAMPLErate, HScaleBP, SAMPLErate, BaseSampleRate
13108 global StartBodeEntry, StopBodeEntry
13109 global ShowCA_P, ShowCB_P, ShowRA_VdB, ShowRB_VdB, ShowMarkerBP
13110 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP
13111 global ShowMathBP, BodeDisp, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
13112 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
13113 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, NetworkScreenStatus
13114 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
13115 global TAFline, TBFline, TAPline, TAFRline, TBFRline, TBPMline, TBPRMline
13116 global TAPRline, TBPRline
13117 global TRACEaverage
13118 global FreqTraceMode
13119 global Vdiv, ResScale
13120 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
13121 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
13128 EndFreq = float(StopBodeEntry.get())
13130 StopBodeEntry.delete(0,
"end")
13131 StopBodeEntry.insert(0,10000)
13134 BeginFreq = float(StartBodeEntry.get())
13136 StartBodeEntry.delete(0,
"end")
13137 StartBodeEntry.insert(0,100)
13140 Phasecenter = int(PhCenBodeEntry.get())
13141 RelPhaseCenter.set(Phasecenter)
13143 PhCenBodeEntry.delete(0,
"end")
13144 PhCenBodeEntry.insert(0,0)
13145 RelPhaseCenter.set(0)
13148 Impedcenter = int(ImCenBodeEntry.get())
13149 ImpedanceCenter.set(Impedcenter)
13151 ImCenBodeEntry.delete(0,
"end")
13152 ImCenBodeEntry.insert(0,0)
13153 ImpedanceCenter.set(0)
13160 while (i <= Vdiv.get()):
13161 y = Y0TBP + i * GRHBP/Vdiv.get()
13162 Dline = [x1,y,x2,y]
13163 if i == 0
or i == Vdiv.get():
13164 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13166 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13167 Vaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
13168 Vaxis_label = str(Vaxis_value)
13169 Bodeca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
13170 if ShowCA_P.get() == 1
or ShowCB_P.get() == 1
or Show_Angle.get() == 1:
13171 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get()))) + Phasecenter
13172 Vaxis_label = str(Vaxis_value)
13173 Bodeca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
13174 if NetworkScreenStatus.get() > 0:
13175 if Show_Rseries.get() == 1
or Show_Xseries.get() == 1
or Show_Magnitude.get() == 1:
13176 RperDiv = float(ResScale.get())
13177 Vaxis_value = ( (RperDiv * Vdiv.get()/2) - (i * RperDiv) ) + Impedcenter
13178 if Vaxis_value > 500
or Vaxis_value < -500:
13179 Vaxis_value = Vaxis_value/1000.0
13180 if Vaxis_value > 5
or Vaxis_value < -5:
13181 Vaxis_label =
' {0:.0f}'.format(Vaxis_value) +
'K'
13183 Vaxis_label =
' {0:.1f}'.format(Vaxis_value) +
'K'
13185 Vaxis_label =
' {0:.0f} '.format(Vaxis_value)
13186 Bodeca.create_text(x1-23, y, text=Vaxis_label, fill=COLORtrace5, anchor=
"e", font=(
"arial", FontSize ))
13192 if HScaleBP.get() == 1:
13194 LogFStop = math.log10(EndFreq)
13196 LogFStart = math.log10(BeginFreq)
13199 LogFpixel = (LogFStop - LogFStart) / GRWBP
13201 while F <= EndFreq:
13204 LogF = math.log10(F)
13205 x = x1 + (LogF - LogFStart)/LogFpixel
13208 Dline = [x,y1,x,y2]
13209 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
13210 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13211 axis_label = str(F)
13212 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
13214 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13231 Freqdiv = (EndFreq - BeginFreq) / 10
13233 x = x1 + i * GRWBP/10
13234 Dline = [x,y1,x,y2]
13235 if i == 0
or i == 10:
13236 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13238 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
13239 axis_value = BeginFreq + (i * Freqdiv)
13240 axis_label = str(axis_value)
13241 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
13244 Fpixel = (EndFreq - BeginFreq) / GRWBP
13245 LogFStop = math.log10(EndFreq)
13247 LogFStart = math.log10(BeginFreq)
13250 LogFpixel = (LogFStop - LogFStart) / GRWBP
13251 if ShowBPCur.get() > 0:
13252 Dline = [BPCursor, Y0TBP, BPCursor, Y0TBP+GRHBP]
13253 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
13255 if HScaleBP.get() == 1:
13256 xfreq = 10**(((BPCursor-x1)*LogFpixel) + LogFStart)
13258 xfreq = ((BPCursor-x1)*Fpixel)+BeginFreq
13259 XFString =
' {0:.2f} '.format(xfreq)
13260 V_label = XFString +
" Hz"
13261 Bodeca.create_text(BPCursor, Y0TBP+GRHBP+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
13264 if ShowBdBCur.get() > 0:
13265 Dline = [x1, BdBCursor, x1+GRWBP, BdBCursor]
13266 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
13267 if ShowBdBCur.get() == 1:
13269 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
13270 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
13271 yvdB = ((Yc-BdBCursor)/Yconv)
13272 VdBString =
' {0:.1f} '.format(yvdB)
13273 V_label = VdBString +
" dBV"
13276 Yconv = float(GRHBP) / 360.0
13278 yvdB = 180 + ((Yc-BdBCursor)/Yconv) + Phasecenter
13279 VdBString =
' {0:.1f} '.format(yvdB)
13280 V_label = VdBString +
" Deg"
13281 Bodeca.create_text(x1+GRWBP+1, BdBCursor, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
13284 SmoothBool = SmoothCurvesBP.get()
13286 if len(TAFline) > 4:
13288 if OverRangeFlagA == 1:
13289 Bodeca.create_line(TAFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13291 Bodeca.create_line(TAFline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13292 if ShowMarkerBP.get() == 1:
13293 Peak_label =
' {0:.2f} '.format(PeakdbA) +
',' +
' {0:.1f} '.format(PeakfreqA)
13294 Bodeca.create_text(PeakxA, PeakyA, text=Peak_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
13295 if len(TBFline) > 4:
13297 if OverRangeFlagB == 1:
13298 Bodeca.create_line(TBFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13300 Bodeca.create_line(TBFline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13301 if ShowMarkerBP.get() == 1:
13302 Peak_label =
' {0:.2f} '.format(PeakdbB) +
',' +
' {0:.1f} '.format(PeakfreqB)
13303 Bodeca.create_text(PeakxB, PeakyB, text=Peak_label, fill=COLORtrace2, anchor=
"w", font=(
"arial", FontSize ))
13304 if len(TAPline) > 4:
13306 Bodeca.create_line(TAPline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13307 if len(TBPline) > 4:
13309 Bodeca.create_line(TBPline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13310 if ShowCA_RdB.get() == 1
and len(TAFRline) > 4:
13311 Bodeca.create_line(TAFRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13312 if ShowMarkerBP.get() == 1:
13313 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
13314 Bodeca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"e", font=(
"arial", FontSize ))
13315 if ShowCB_RdB.get() == 1
and len(TBFRline) > 4:
13316 Bodeca.create_line(TBFRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13317 if ShowMarkerBP.get() == 1:
13318 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
13319 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"w", font=(
"arial", FontSize ))
13320 if ShowCA_RP.get() == 1
and len(TAPRline) > 4:
13321 Bodeca.create_line(TAPRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13322 if ShowCB_RP.get() == 1
and len(TBPRline) > 4:
13323 Bodeca.create_line(TBPRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13324 if ShowMathBP.get() > 0
and len(TBPMline) > 4:
13325 Bodeca.create_line(TBPMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13326 if ShowMarkerBP.get() == 1:
13327 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
13328 Bodeca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"w", font=(
"arial", FontSize ))
13329 if ShowRMathBP.get() == 1
and len(TBPRMline) > 4:
13330 Bodeca.create_line(TBPRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13331 if ShowMarkerBP.get() == 1:
13332 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
13333 Bodeca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"w", font=(
"arial", FontSize ))
13334 if Show_Rseries.get() == 1
and len(TIARline) > 4:
13335 Bodeca.create_line(TIARline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13336 if Show_Xseries.get() == 1
and len(TIAXline) > 4:
13337 Bodeca.create_line(TIAXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13338 if Show_Magnitude.get() == 1
and len(TIAMagline) > 4:
13339 Bodeca.create_line(TIAMagline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13340 if Show_Angle.get() == 1
and len(TIAAngline) > 4:
13341 Bodeca.create_line(TIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13342 if Show_RseriesRef.get() == 1
and len(RefIARline) > 4:
13343 Bodeca.create_line(RefIARline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13344 if Show_XseriesRef.get() == 1
and len(RefIAXline) > 4:
13345 Bodeca.create_line(RefIAXline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13346 if Show_MagnitudeRef.get() == 1
and len(RefIAMagline) > 4:
13347 Bodeca.create_line(RefIAMagline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13348 if Show_AngleRef.get() == 1
and len(RefIAAngline) > 4:
13349 Bodeca.create_line(RefIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13351 Dline = [CurrentFreqX, Y0TBP, CurrentFreqX, Y0TBP+GRHBP]
13352 Bodeca.create_line(Dline, dash=(2,2), fill=COLORgrid, width=GridWidth.get())
13353 if HScaleBP.get() == 1:
13354 xfreq = 10**(((CurrentFreqX-x1)*LogFpixel) + LogFStart)
13356 xfreq = ((CurrentFreqX-x1)*Fpixel)+BeginFreq
13357 XFString =
' {0:.0f} '.format(xfreq)
13358 V_label = XFString +
" Hz"
13359 Bodeca.create_text(CurrentFreqX, Y0TBP+GRHBP+1, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
13362 txt =
" Sample rate: " + str(SAMPLErate)
13363 txt = txt +
" FFT samples: " + str(SMPfft)
13365 txt = txt +
" " + FFTwindowname
13369 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13372 txt = str(BeginFreq) +
" to " + str(EndFreq) +
" Hz"
13373 txt = txt +
" " + str(DBdivlist[DBdivindexBP.get()]) +
" dB/div"
13374 txt = txt +
" Level: " + str(DBlevelBP.get()) +
" dB "
13375 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
13379 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13381 if FreqTraceMode.get() == 1:
13382 txt =
"Normal mode "
13384 if FreqTraceMode.get() == 2:
13385 txt =
"Peak hold mode "
13387 if FreqTraceMode.get() == 3:
13388 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
13390 if ZEROstuffing.get() > 0:
13391 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
13393 if (RUNstatus.get() == 0):
13394 txt = txt +
" Stopped "
13396 if BodeDisp.get() == 1:
13397 txt = txt +
" Running "
13399 txt = txt +
" Display off "
13400 if FSweepMode.get() > 0:
13401 txt = txt +
" Freq Step = " + str(LoopNum.get())
13404 IDtxt = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13408 global FFTBuffA, FFTBuffB
13411 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13428 global PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
13431 global RsystemEntry
13434 global ImpedanceMagnitude
13435 global ImpedanceAngle
13436 global ImpedanceRseries, ImpedanceXseries
13439 DEG2RAD = (math.pi / 180.0)
13442 ResValue = float(RsystemEntry.get())
13446 VA = math.pow(10,(PeakdbA/20))
13447 VB = math.pow(10,(PeakdbB/20))
13448 VVangleCosine = math.cos(math.radians(PeakRelPhase))
13449 if IA_Ext_Conf.get() == 1:
13450 VAB = math.pow(10,(PeakdbAB/20))
13455 VI = math.sqrt(VA**2 + VZ**2 - 2*VA*VZ*VVangleCosine)
13456 costheta = (VA**2 + VI**2 - VZ**2)/(2 * VA * VI)
13457 Za = ResValue * VA / VI
13458 ImpedanceRseries = Za * costheta - ResValue
13459 ImpedanceMagnitude = ResValue * VZ / VI
13461 ImpedanceXseries = math.sqrt(abs(ImpedanceMagnitude**2 - ImpedanceRseries**2))
13463 if(PeakRelPhase < 0.0):
13464 ImpedanceXseries = -ImpedanceXseries
13465 if IA_Ext_Conf.get() == 1:
13466 ImpedanceRseries = -ImpedanceRseries
13467 ImpedanceAngle = math.atan2(ImpedanceXseries, ImpedanceRseries) / DEG2RAD
13470 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
13471 global FFTmemoryB, FFTresultB
13472 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13473 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
13474 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakphaseA, PeakphaseB
13475 global PeakfreqA, PeakfreqB, GainCorEntry, PhaseCorEntry, PhaseCorrection
13481 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
13482 global STARTsample, STOPsample, LoopNum, FSweepMode
13483 global TRACEmode, Two_X_Sample, IA_Ext_Conf
13484 global T1Vline, T2Vline, TMline, T1Pline, T2Pline
13488 global ImpedanceMagnitude
13489 global ImpedanceAngle
13490 global ImpedanceRseries, ImpedanceXseries
13493 TRACEsize = len(FFTresultA)
13494 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13497 STARTsample = int(math.ceil(STARTsample))
13498 if Two_X_Sample.get() == 0:
13499 STOPsample = 45000 / Fsample
13501 STOPsample = 90000 / Fsample
13502 STOPsample = int(math.floor(STOPsample))
13505 GainCorrection = float(eval(GainCorEntry.get()))
13507 GainCorEntry.delete(0,END)
13508 GainCorEntry.insert(0, GainCorrection)
13511 PhaseCorrection = float(eval(PhaseCorEntry.get()))
13513 PhaseCorEntry.delete(0,END)
13514 PhaseCorEntry.insert(0, PhaseCorrection)
13516 MAXsample = TRACEsize
13517 if STARTsample > (MAXsample - 1):
13518 STARTsample = MAXsample - 1
13520 if STOPsample > MAXsample:
13521 STOPsample = MAXsample
13524 PeakfreqA = PeakfreqB = PeakfreqM = F = n * Fsample
13525 PeakphaseA = PhaseA[n]
13526 PeakphaseB = PhaseB[n]
13530 PeakdbA = (10 * math.log10(float(FFTresultA[n])) + 17)
13531 PeakdbB = (10 * math.log10(float(FFTresultB[n])) + 17)
13532 PeakMdb = PeakdbA - PeakdbB
13533 if IA_Ext_Conf.get() == 1:
13534 PeakdbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
13535 while n <= STOPsample:
13538 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
13544 PeakphaseA = PhaseA[n]
13548 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
13554 PeakphaseB = PhaseB[n]
13556 if IA_Ext_Conf.get() == 1:
13558 dbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
13561 if dbAB > PeakdbAB:
13563 PeakphaseAB = PhaseAB[n]
13564 RelPhase = PhaseA[n]-PhaseB[n]
13566 RelPhase = RelPhase - 360
13567 elif RelPhase < -180:
13568 RelPhase = RelPhase + 360
13569 if Two_X_Sample.get() == 0:
13570 PhErr = 0.0018 * n * Fsample
13571 RelPhase = RelPhase + PhErr - 12.0
13573 RelPhase = RelPhase - 9.0
13575 if IA_Ext_Conf.get() == 1:
13576 PeakRelPhase = PeakphaseAB-PeakphaseA
13578 PeakRelPhase = PeakphaseB-PeakphaseA
13580 if PeakRelPhase > 180:
13581 PeakRelPhase = PeakRelPhase - 360
13582 elif PeakRelPhase < -180:
13583 PeakRelPhase = PeakRelPhase + 360
13584 if Two_X_Sample.get() == 0:
13585 PhErr = 0.0018 * PeakSample * Fsample
13586 PeakRelPhase = PeakRelPhase + PhaseCorrection - PhErr
13588 PeakRelPhase = PeakRelPhase + PhaseCorrection
13589 PeakdbB = PeakdbB + GainCorrection
13594 global CANVASheightIA, CANVASwidthIA, IAca, TIAMline, TIAMRline
13595 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13596 global PeakxM, PeakyM, PeakMdb, PeakfreqM, Two_X_Sample
13597 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
13598 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
13599 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
13600 global PeakphaseA, PeakphaseB, PeakRelPhase, PhaseCalEntry
13601 global SmoothCurvesBP, TRACEwidth, GridWidth
13602 global COLORsignalband, COLORtext, COLORgrid, IASweepSaved
13603 global COLORtrace1, COLORtrace2, COLORtrace5, COLORtrace6
13604 global ResScale, DisplaySeries
13605 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
13612 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
13614 global TRACEaverage
13615 global FreqTraceMode
13617 global ImpedanceMagnitude
13618 global ImpedanceAngle
13619 global ImpedanceRseries, ImpedanceXseries
13620 global LoopNum, NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
13622 if LoopNum.get() > 1:
13623 if NetworkScreenStatus.get() > 0:
13624 NSweepSeriesR.append(ImpedanceRseries)
13625 NSweepSeriesX.append(ImpedanceXseries)
13626 NSweepSeriesMag.append(ImpedanceMagnitude)
13627 NSweepSeriesAng.append(ImpedanceAngle)
13630 SmoothBool = SmoothCurvesBP.get()
13635 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
13636 OhmsperPixel = float(ResScale.get())/Radius
13637 TRadius = Radius * Vdiv.get()
13640 xright = 10 + xcenter + ( Vdiv.get() * Radius )
13641 while (i <= Vdiv.get()):
13642 x0 = xcenter - ( i * Radius )
13643 x1 = xcenter + ( i * Radius )
13644 y0 = ycenter - ( i * Radius )
13645 y1 = ycenter + ( i * Radius )
13646 ResTxt =
'{0:.1f}'.format(float(ResScale.get()) * i)
13647 IAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
13648 IAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
13649 IAca.create_text(xright, y0, text=str(ResTxt), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13652 IAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
13653 IAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
13654 RAngle = math.radians(45)
13655 y = TRadius*math.sin(RAngle)
13656 x = TRadius*math.cos(RAngle)
13657 IAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13658 IAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13659 IAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
13660 IAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13661 IAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
13662 IAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
13665 if IASweepSaved.get() > 0:
13666 if len(TIAMRline) > 4:
13667 IAca.create_line(TIAMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13669 x1 = xcenter + ( ImpedanceRseries / OhmsperPixel )
13673 x1 = xcenter - xright
13674 IAca.create_line(xcenter, ycenter, x1, ycenter, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
13675 y1 = ycenter - ( ImpedanceXseries / OhmsperPixel )
13679 y1 = ycenter - xright
13682 IAca.create_line(xcenter, ycenter, xcenter, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
13683 MagRadius = ImpedanceMagnitude / OhmsperPixel
13684 y1 = ycenter - MagRadius*math.sin(math.radians(ImpedanceAngle))
13688 y1 = ycenter - xright
13689 x1 = xcenter + MagRadius*math.cos(math.radians(ImpedanceAngle))
13693 x1 = xcenter - xright
13694 IAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
13697 if len(NSweepSeriesMag) > 2:
13699 while index < len(NSweepSeriesMag):
13700 MagRadius = NSweepSeriesMag[index] / OhmsperPixel
13701 y1 = ycenter - MagRadius*math.sin(math.radians(NSweepSeriesAng[index]))
13705 y1 = ycenter - xright
13706 x1 = xcenter + MagRadius*math.cos(math.radians(NSweepSeriesAng[index]))
13710 x1 = xcenter - xright
13711 TIAMline.append(x1)
13712 TIAMline.append(y1)
13714 IAca.create_line(TIAMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13716 if OverRangeFlagA == 1:
13719 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
13720 IAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
13721 if OverRangeFlagB == 1:
13724 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
13725 IAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
13728 txt =
" Sample rate: " + str(SAMPLErate)
13729 txt = txt +
" FFT samples: " + str(SMPfft)
13731 txt = txt +
" " + FFTwindowname
13735 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13737 x = X0LIA + GRWIA + 4
13739 txt =
"Gain " +
' {0:.2f} '.format(PeakdbB-PeakdbA) +
" dB"
13740 TXT9 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13742 txt =
"Phase " +
' {0:.2f} '.format(PeakRelPhase) +
" Degrees"
13743 TXT10 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13745 txt =
"Freq " +
' {0:.1f} '.format(PeakfreqA) +
" Hertz"
13746 TXT11 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13748 txt =
"Impedance Magnitude"
13749 TXT1 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13751 txt =
' {0:.1f} '.format(ImpedanceMagnitude)
13752 TXT2 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13754 txt =
"Impedance Angle"
13755 TXT3 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13757 txt =
' {0:.1f} '.format(ImpedanceAngle)
13758 TXT4 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13760 txt =
"Impedance R series"
13761 TXT5 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13763 txt =
' {0:.1f} '.format(ImpedanceRseries)
13764 TXT6 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13766 txt =
"Impedance X series"
13767 TXT7 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13769 txt =
' {0:.1f} '.format(ImpedanceXseries)
13770 TXT8 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13772 if ImpedanceXseries < 0:
13775 Cseries = -1 / ( 2 * math.pi * PeakfreqA * ImpedanceXseries )
13778 Qseries = 1/(2*math.pi*PeakfreqA*Cseries*ImpedanceRseries)
13779 Cparallel = Cseries * (Qseries**2 / (1+Qseries**2))
13780 Cparallel = Cparallel * 1E6
13781 Rparallel = ImpedanceRseries * (1+Qseries**2)
13782 Cseries = Cseries * 1E6
13783 if DisplaySeries.get() == 0:
13784 txt =
"Series Capacitance"
13785 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13788 Cseries = Cseries * 1E3
13790 Cseries = Cseries * 1E3
13791 txt =
' {0:.1f} '.format(Cseries) +
"pF"
13793 txt =
' {0:.3f} '.format(Cseries) +
"nF"
13795 txt =
' {0:.3f} '.format(Cseries) +
"uF"
13796 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13799 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13802 Cparallel = Cparallel * 1E3
13804 Cparallel = Cparallel * 1E3
13805 txt =
"Capacitance " +
' {0:.1f} '.format(Cparallel) +
"pF"
13807 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"nF"
13809 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"uF"
13810 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13812 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
13813 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13815 dissp = abs(ImpedanceRseries/ImpedanceXseries) * 100
13816 txt =
'D = {0:.2f} '.format(dissp) +
" %"
13817 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13819 elif ImpedanceXseries > 0:
13822 Lseries = ImpedanceXseries / ( 2 * 3.14159 * PeakfreqA )
13825 Qseries = (2*math.pi*PeakfreqA*Lseries)/ImpedanceRseries
13828 Lparallel = Lseries * ((1+Qseries**2) / Qseries**2)
13829 Lparallel = Lparallel * 1E3
13830 Rparallel = ImpedanceRseries * (1+Qseries**2)
13831 Lseries = Lseries * 1E3
13832 if DisplaySeries.get() == 0:
13833 txt =
"Series Inductance"
13834 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13837 Lseries = Lseries * 1E3
13838 txt =
' {0:.2f} '.format(Lseries) +
"uH"
13840 txt =
' {0:.2f} '.format(Lseries) +
"mH"
13841 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13844 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13847 Lparallel = Lparallel * 1E3
13848 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"uH"
13850 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"mH"
13851 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13853 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
13854 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13856 qf = abs(ImpedanceXseries/ImpedanceRseries) * 100
13857 txt =
'Q = {0:.2f} '.format(qf)
13858 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13860 if Two_X_Sample.get() == 0:
13861 txt =
"0.0 to 45000 Hz"
13863 txt =
"0.0 to 90000 Hz"
13864 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
13868 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13870 if FreqTraceMode.get() == 1:
13871 txt =
"Normal mode "
13873 if FreqTraceMode.get() == 2:
13874 txt =
"Peak hold mode "
13876 if FreqTraceMode.get() == 3:
13877 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
13879 if ZEROstuffing.get() > 0:
13880 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
13882 if (RUNstatus.get() == 0):
13883 txt = txt +
" Stopped "
13885 txt = txt +
" Running "
13887 IDtxt = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13890 global IAca, GRWIA, XOLIA, GRHIA, Y0TIA, CANVASwidthIA, CANVASheightIA, FontSize
13892 CANVASwidthIA = event.width - 4
13893 CANVASheightIA = event.height - 4
13894 GRWIA = CANVASwidthIA - (2 * X0LIA) - int(21.25 * FontSize)
13895 GRHIA = CANVASheightIA - Y0TIA - int(2.25 * FontSize)
13900 global iawindow, IAca, logo, IAScreenStatus, RsystemEntry, IADisp, AWGSync, IASource
13901 global COLORcanvas, CANVASwidthIA, CANVASheightIA, RevDate, AWGAMode, AWGAShape, AWGBMode
13902 global FFTwindow, CutDC, ColorMode, ResScale, GainCorEntry, PhaseCorEntry, DisplaySeries
13903 global GRWIA, X0LIA, GRHIA, Y0TIA, IA_Ext_Conf, DeBugMode, SWRev
13904 global NetworkScreenStatus, IASweepSaved
13905 global FrameRefief, BorderSize
13907 if IAScreenStatus.get() == 0:
13908 IAScreenStatus.set(1)
13912 CANVASwidthIA = 170 + GRWIA + 2 * X0LIA
13913 CANVASheightIA = GRHIA + Y0TIA + 10
13918 iawindow = Toplevel()
13919 iawindow.title(
"Impedance Analyzer " + SWRev + RevDate)
13920 iawindow.protocol(
"WM_DELETE_WINDOW", DestroyIAScreen)
13921 frame2iar = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
13922 frame2iar.pack(side=RIGHT, expand=NO, fill=BOTH)
13924 frame2ia = Frame(iawindow, borderwidth=BorderSize, relief=FrameRefief)
13925 frame2ia.pack(side=TOP, expand=YES, fill=BOTH)
13927 IAca = Canvas(frame2ia, width=CANVASwidthIA, height=CANVASheightIA, background=COLORcanvas, cursor=
'cross')
13928 IAca.bind(
"<Configure>", IACaresize)
13929 IAca.bind(
"<Return>", DoNothing)
13930 IAca.bind(
"<space>", onCanvasSpaceBar)
13931 IAca.pack(side=TOP, expand=YES, fill=BOTH)
13935 dropmenu = Frame( frame2iar )
13936 dropmenu.pack(side=TOP)
13938 IAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
13939 IAFilemenu.menu = Menu(IAFilemenu, tearoff = 0 )
13940 IAFilemenu[
"menu"] = IAFilemenu.menu
13941 IAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
13942 IAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
13943 IAFilemenu.menu.add_command(label=
"Save V Cal", command=BSaveCal)
13944 IAFilemenu.menu.add_command(label=
"Load V Cal", command=BLoadCal)
13945 IAFilemenu.menu.add_command(label=
"Save Data", command=BSaveDataIA)
13946 IAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenIA)
13947 IAFilemenu.menu.add_command(label=
"Help", command=BHelp)
13948 IAFilemenu.pack(side=LEFT, anchor=W)
13950 IAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
13951 IAOptionmenu.menu = Menu(IAOptionmenu, tearoff = 0 )
13952 IAOptionmenu[
"menu"] = IAOptionmenu.menu
13953 IAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
13954 IAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
13955 IAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
13956 IAOptionmenu.menu.add_checkbutton(label=
'Sweep-on', variable=NetworkScreenStatus)
13957 IAOptionmenu.menu.add_checkbutton(label=
'Save Sweep', variable=IASweepSaved, command=BSaveIASweep)
13959 IAOptionmenu.menu.add_command(label=
"-Ext Config-", command=donothing)
13960 IAOptionmenu.menu.add_radiobutton(label=
'1', variable=IA_Ext_Conf, value=0)
13961 IAOptionmenu.menu.add_radiobutton(label=
'2', variable=IA_Ext_Conf, value=1)
13962 IAOptionmenu.menu.add_command(label=
"-Meas As-", command=donothing)
13963 IAOptionmenu.menu.add_radiobutton(label=
'Series', variable=DisplaySeries, value=0)
13964 IAOptionmenu.menu.add_radiobutton(label=
'Parallel', variable=DisplaySeries, value=1)
13965 IAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
13966 IAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
13967 IAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
13968 IAOptionmenu.pack(side=LEFT, anchor=W)
13970 rsemenu = Frame( frame2iar )
13971 rsemenu.pack(side=TOP)
13972 rseb2 = Button(rsemenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
13973 rseb2.pack(side=RIGHT)
13974 rseb3 = Button(rsemenu, text=
"Run", style=
"Run.TButton", command=BStartIA)
13975 rseb3.pack(side=RIGHT)
13977 IAFFTwindmenu = Menubutton(frame2iar, text=
"FFTwindow", style=
"W11.TButton")
13978 IAFFTwindmenu.menu = Menu(IAFFTwindmenu, tearoff = 0 )
13979 IAFFTwindmenu[
"menu"] = IAFFTwindmenu.menu
13980 IAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
13981 IAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
13982 IAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
13983 IAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
13984 IAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
13985 IAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
13986 IAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
13987 IAFFTwindmenu.pack(side=TOP)
13989 smpmenu = Frame( frame2iar )
13990 smpmenu.pack(side=TOP)
13991 smpb1 = Button(smpmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
13992 smpb1.pack(side=LEFT)
13993 smpb2 = Button(smpmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
13994 smpb2.pack(side=LEFT)
13996 rsystem = Frame( frame2iar )
13997 rsystem.pack(side=TOP)
13998 rsystemlab = Label(rsystem, text=
"Ext Res")
13999 rsystemlab.pack(side=LEFT, anchor=W)
14000 RsystemEntry = Entry(rsystem, width=7, cursor=
'double_arrow')
14001 RsystemEntry.bind(
'<Return>', onTextKey)
14002 RsystemEntry.bind(
'<MouseWheel>', onTextScroll)
14003 RsystemEntry.bind(
"<Button-4>", onTextScroll)
14004 RsystemEntry.bind(
"<Button-5>", onTextScroll)
14005 RsystemEntry.bind(
'<Key>', onTextKey)
14006 RsystemEntry.pack(side=LEFT, anchor=W)
14007 RsystemEntry.delete(0,
"end")
14008 RsystemEntry.insert(4,1000)
14010 ressb = Frame( frame2iar )
14011 ressb.pack(side=TOP)
14012 reslab = Label(ressb, text=
"Ohms/div ")
14013 reslab.pack(side=LEFT)
14014 ResScale = Spinbox(ressb, width=7, cursor=
'double_arrow', values=ResScalediv)
14015 ResScale.bind(
'<MouseWheel>', onSpinBoxScroll)
14016 ResScale.bind(
"<Button-4>", onSpinBoxScroll)
14017 ResScale.bind(
"<Button-5>", onSpinBoxScroll)
14018 ResScale.pack(side=LEFT)
14019 ResScale.delete(0,
"end")
14020 ResScale.insert(0,500)
14022 GainCor = Frame( frame2iar )
14023 GainCor.pack(side=TOP)
14024 GainCorlab = Label(GainCor, text=
"Gain Cor dB")
14025 GainCorlab.pack(side=LEFT, anchor=W)
14026 GainCorEntry = Entry(GainCor, width=7, cursor=
'double_arrow')
14027 GainCorEntry.bind(
'<Return>', onTextKey)
14028 GainCorEntry.bind(
'<MouseWheel>', onTextScroll)
14029 GainCorEntry.bind(
"<Button-4>", onTextScroll)
14030 GainCorEntry.bind(
"<Button-5>", onTextScroll)
14031 GainCorEntry.bind(
'<Key>', onTextKey)
14032 GainCorEntry.pack(side=LEFT, anchor=W)
14033 GainCorEntry.delete(0,
"end")
14034 GainCorEntry.insert(4,0.0)
14036 PhaseCor = Frame( frame2iar )
14037 PhaseCor.pack(side=TOP)
14038 PhaseCorlab = Label(PhaseCor, text=
"Phase Cor")
14039 PhaseCorlab.pack(side=LEFT, anchor=W)
14040 PhaseCorEntry = Entry(PhaseCor, width=7, cursor=
'double_arrow')
14041 PhaseCorEntry.bind(
'<Return>', onTextKey)
14042 PhaseCorEntry.bind(
'<MouseWheel>', onTextScroll)
14043 PhaseCorEntry.bind(
"<Button-4>", onTextScroll)
14044 PhaseCorEntry.bind(
"<Button-5>", onTextScroll)
14045 PhaseCorEntry.bind(
'<Key>', onTextKey)
14046 PhaseCorEntry.pack(side=LEFT, anchor=W)
14047 PhaseCorEntry.delete(0,
"end")
14048 PhaseCorEntry.insert(4,0.0)
14050 srclab = Label(frame2iar, text=
"Source")
14051 srclab.pack(side=TOP)
14052 extsrc1 = Radiobutton(frame2iar, text=
"Internal", variable=IASource, value=0, command=IASourceSet)
14053 extsrc1.pack(side=TOP)
14054 extsrc2 = Radiobutton(frame2iar, text=
"External", variable=IASource, value=1, command=IASourceSet)
14055 extsrc2.pack(side=TOP)
14057 dismiss1button = Button(frame2iar, text=
"Dismiss", style=
"W8.TButton", command=DestroyIAScreen)
14058 dismiss1button.pack(side=TOP)
14060 ADI1 = Label(frame2iar, image=logo, anchor=
"sw", compound=
"top")
14061 ADI1.pack(side=TOP)
14064 global iawindow, IAScreenStatus, IAca, IADisp
14066 IAScreenStatus.set(0)
14072 global TIAMline, TIAMRline, IASweepSaved
14074 if IASweepSaved.get() > 0:
14075 TIAMRline = TIAMline
14078 global nqpwindow, NqPca, logo, NqPScreenStatus, NqPDisp
14079 global COLORcanvas, CANVASwidthNqP, CANVASheightNqP, RevDate
14080 global GRWNqP, X0LNqP, GRHNqP, Y0TNqP, DeBugMode, SWRev
14081 global NetworkScreenStatus, NqPSweepSaved
14082 global FrameRefief, BorderSize
14084 if NqPScreenStatus.get() == 0:
14085 NqPScreenStatus.set(1)
14087 CANVASwidthNqP = GRWNqP + (2 * X0LNqP)
14088 CANVASheightNqP = GRHNqP + Y0TNqP + 10
14089 nqpwindow = Toplevel()
14090 nqpwindow.title(
"Nyquist Plot " + SWRev + RevDate)
14091 nqpwindow.protocol(
"WM_DELETE_WINDOW", DestroyNqPScreen)
14093 frame2nqp = Frame(nqpwindow, borderwidth=BorderSize, relief=FrameRefief)
14094 frame2nqp.pack(side=TOP, expand=YES, fill=BOTH)
14096 NqPca = Canvas(frame2nqp, width=CANVASwidthNqP, height=CANVASheightNqP, background=COLORcanvas, cursor=
'cross')
14097 NqPca.bind(
"<Configure>", NqPCaresize)
14098 NqPca.bind(
"<Return>", DoNothing)
14099 NqPca.bind(
"<space>", onCanvasSpaceBar)
14100 NqPca.pack(side=TOP, expand=YES, fill=BOTH)
14103 global nqpwindow, NqPScreenStatus, NqPca, NqPDisp
14105 NqPScreenStatus.set(0)
14107 nqpwindow.destroy()
14110 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, FontSize
14112 CANVASwidthNqP = event.width - 4
14113 CANVASheightNqP = event.height - 4
14114 GRWNqP = CANVASwidthNqP - (2 * X0LNqP)
14115 GRHNqP = CANVASheightNqP - Y0TNqP - int(1.25 * FontSize)
14120 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, COLORtrace1
14121 global COLORgrid, GridWidth, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
14122 global FSweepAdB, FSweepBdB, FSweepBPh, FSweepAPh, ShowMathBP, NqPline, Two_X_Sample, TRACEwidth
14123 global Vdiv, FBins, FStep
14128 SmoothBool = SmoothCurvesBP.get()
14133 Radius = (GRWNqP-X0LNqP)/(1 + Vdiv.get() * 2)
14134 dBperPixel = float(DBdivlist[DBdivindexBP.get()])/Radius
14135 TRadius = Radius * Vdiv.get()
14137 x2 = X0LNqP + GRWNqP
14138 xright = 10 + xcenter + ( Vdiv.get() * Radius )
14139 while (i <= Vdiv.get()):
14140 x0 = xcenter - ( i * Radius )
14141 x1 = xcenter + ( i * Radius )
14142 y0 = ycenter - ( i * Radius )
14143 y1 = ycenter + ( i * Radius )
14144 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
14145 NqPca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
14146 NqPca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
14147 NqPca.create_text(xright, y0, text=str(dBaxis_value), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14150 NqPca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
14151 NqPca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
14152 RAngle = math.radians(45)
14153 y = TRadius*math.sin(RAngle)
14154 x = TRadius*math.cos(RAngle)
14155 NqPca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14156 NqPca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14157 NqPca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
14158 NqPca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14159 NqPca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
14160 NqPca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
14164 if len(FSweepAdB) > 4:
14165 for index
in range(len(FSweepAdB)):
14166 if index < len(FStep):
14167 F = FBins[int(FStep[index])]
14169 F = FBins[int(FStep[0])]
14171 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
14172 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
14173 if ShowMathBP.get() == 1:
14175 elif ShowMathBP.get() == 2:
14177 MagRadius = (-MdB / dBperPixel) + (DBlevelBP.get()/dBperPixel)
14179 RelPhase = FSweepBPh[index] - FSweepAPh[index]
14181 RelPhase = RelPhase - 360
14182 elif RelPhase < -180:
14183 RelPhase = RelPhase + 360
14184 if Two_X_Sample.get() == 0:
14186 RelPhase = RelPhase - PhErr
14188 RelPhase = RelPhase
14189 y1 = ycenter - MagRadius*math.sin(math.radians(RelPhase))
14193 y1 = ycenter - xright
14194 x1 = xcenter + MagRadius*math.cos(math.radians(RelPhase ))
14198 x1 = xcenter - xright
14201 NqPca.create_line(NqPline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14204 global NiCScreenStatus, NiCDisp
14205 global nicwindow, NiCca, logo, SWRev
14206 global COLORcanvas, CANVASwidthNic, CANVASheightNic, RevDate
14207 global GRWNiC, X0LNiC, GRHNiC, Y0TNiC, DeBugMode
14208 global NetworkScreenStatus, NiCSweepSaved
14209 global FrameRefief, BorderSize
14211 if NiCScreenStatus.get() == 0:
14212 NiCScreenStatus.set(1)
14214 CANVASwidthNic = GRWNiC + 18 + X0LNiC
14215 CANVASheightNic = GRHNiC + 60
14216 nicwindow = Toplevel()
14217 nicwindow.title(
"Nichols Plot " + SWRev + RevDate)
14218 nicwindow.protocol(
"WM_DELETE_WINDOW", DestroyNiCScreen)
14220 frame2nic = Frame(nicwindow, borderwidth=BorderSize, relief=FrameRefief)
14221 frame2nic.pack(side=TOP, expand=YES, fill=BOTH)
14223 NiCca = Canvas(frame2nic, width=CANVASwidthNic, height=CANVASheightNic, background=COLORcanvas, cursor=
'cross')
14224 NiCca.bind(
"<Configure>", NiCCaresize)
14225 NiCca.bind(
"<Return>", DoNothing)
14226 NiCca.bind(
"<space>", onCanvasSpaceBar)
14227 NiCca.pack(side=TOP, expand=YES, fill=BOTH)
14230 global nicwindow, NiCScreenStatus, NiCca, NiCDisp
14232 NiCScreenStatus.set(0)
14234 nicwindow.destroy()
14237 global NiCca, GRWNiC, XOLNiC, GRHNiC, Y0TNiC, CANVASwidthNic, CANVASheightNic, FontSize
14239 CANVASwidthNic = event.width - 4
14240 CANVASheightNic = event.height - 4
14241 GRWNiC = CANVASwidthNic - int(2.25 * FontSize) - X0LNiC
14242 GRHNiC = CANVASheightNic - int(7.5 * FontSize)
14247 global NiCline, NiCca, CANVASwidthNic, CANVASheightNic, X0LNiC, GRWNiC, Y0TNiC, GRHNiC, X0TNiC
14248 global COLORzeroline, GridWidth, COLORgrid, FSweepAdB, FSweepBdB, Two_X_Sample, ShowMathBP
14249 global FSweepBPh, FSweepAPh, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
14250 global Vdiv, FBins, FStep, PhCenBodeEntry, RelPhaseCenter
14254 Ymax = Y0TNiC + GRHNiC
14256 Xmax = X0LNiC + GRWNiC
14258 Phasecenter = int(PhCenBodeEntry.get())
14259 RelPhaseCenter.set(Phasecenter)
14261 PhCenBodeEntry.delete(0,
"end")
14262 PhCenBodeEntry.insert(0,0)
14263 RelPhaseCenter.set(0)
14267 SmoothBool = SmoothCurvesBP.get()
14272 x2 = X0TNiC = X0LNiC + GRWNiC
14273 mg_siz = GRWNiC/10.0
14274 mg_inc = mg_siz/5.0
14275 DegPerDiv = 360 / 10
14276 while (i < Vdiv.get()+1):
14277 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
14278 y = Y0TNiC + i * GRHNiC/Vdiv.get()
14279 Dline = [x1,y,x2,y]
14280 if dBaxis_value == 0:
14281 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
14286 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
14287 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14291 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14292 dBaxis_label = str(dBaxis_value)
14293 NiCca.create_text(x1-3, y, text=dBaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
14299 y2 = Y0TNiC + GRHNiC
14300 mg_siz = GRHNiC/10.0
14301 mg_inc = mg_siz/5.0
14304 x = X0LNiC + i * GRWNiC/10.0
14305 Dline = [x,y1,x,y2]
14306 axis_value = Phasecenter - 180 + (i * DegPerDiv)
14307 axis_label = str(axis_value)
14308 if ( axis_value == 0):
14309 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
14314 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
14315 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14319 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
14320 NiCca.create_text(x, y2+3, text=axis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
14324 Yconv = float(GRHNiC) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
14325 Yc = float(Y0TNiC) + Yconv * (DBlevelBP.get())
14326 Xphconv = float(GRWNiC / 360.0)
14327 Xp = float(X0LNiC) + Xphconv * 180.0
14331 if len(FSweepAdB) > 4:
14333 for index
in range(len(FSweepAdB)):
14334 if index < len(FStep):
14335 F = FBins[int(FStep[index])]
14337 F = FBins[int(FStep[0])]
14339 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
14340 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
14341 if ShowMathBP.get() == 1:
14343 elif ShowMathBP.get() == 2:
14345 yb = Yc - Yconv * MdB
14351 RelPhase = FSweepBPh[index] - FSweepAPh[index]
14352 RelPhase = RelPhase - Phasecenter
14354 RelPhase = RelPhase - 360
14355 elif RelPhase < -180:
14356 RelPhase = RelPhase + 360
14357 if Two_X_Sample.get() == 0:
14359 RelPhase = RelPhase - PhErr
14361 RelPhase = RelPhase
14362 xa = Xp + Xphconv * RelPhase
14367 NiCline.append(int(xa + 0.5))
14368 NiCline.append(int(yb + 0.5))
14369 NiCca.create_line(NiCline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
14372 global FFTBuffA, FFTBuffB
14375 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14391 global FFTBuffA, FFTBuffB
14394 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14413 if vat_btn.config(
'text')[-1] ==
'ON':
14414 vat_btn.config(text=
'OFF', style=
"Stop.TButton")
14416 vat_btn.config(text=
'ON', style=
"Run.TButton")
14421 if vabt_btn.config(
'text')[-1] ==
'ON':
14422 vabt_btn.config(text=
'OFF', style=
"Stop.TButton")
14424 vabt_btn.config(text=
'ON', style=
"Run.TButton")
14429 if vbt_btn.config(
'text')[-1] ==
'ON':
14430 vbt_btn.config(text=
'OFF', style=
"Stop.TButton")
14432 vbt_btn.config(text=
'ON', style=
"Run.TButton")
14437 if iat_btn.config(
'text')[-1] ==
'ON':
14438 iat_btn.config(text=
'OFF', style=
"Stop.TButton")
14440 iat_btn.config(text=
'ON', style=
"Run.TButton")
14445 if ibt_btn.config(
'text')[-1] ==
'ON':
14446 ibt_btn.config(text=
'OFF', style=
"Stop.TButton")
14448 ibt_btn.config(text=
'ON', style=
"Run.TButton")
14452 global phawindow, PhAca, logo, PhAScreenStatus, PhADisp, AWGSync
14453 global COLORcanvas, CANVASwidthPhA, CANVASheightPhA, RevDate, AWGAMode, AWGAShape, AWGBMode
14454 global FFTwindow, CutDC, ColorMode, RefPhase, CHvpdiv, CHipdiv
14455 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, DeBugMode, SWRev, PhAPlotMode
14456 global VScale, IScale, RefphEntry, MuxScreenStatus, AppendPhAData
14457 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
14458 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
14459 global FrameRefief, BorderSize
14461 if PhAScreenStatus.get() == 0:
14462 PhAScreenStatus.set(1)
14466 CANVASwidthPhA = 170 + GRWPhA + 2 * X0LPhA
14467 CANVASheightPhA = GRHPhA + Y0TPhA + 10
14468 phawindow = Toplevel()
14469 phawindow.title(
"Phase Analyzer " + SWRev + RevDate)
14470 phawindow.protocol(
"WM_DELETE_WINDOW", DestroyPhAScreen)
14471 frame2phar = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
14472 frame2phar.pack(side=RIGHT, expand=NO, fill=BOTH)
14474 frame2pha = Frame(phawindow, borderwidth=BorderSize, relief=FrameRefief)
14475 frame2pha.pack(side=TOP, expand=YES, fill=BOTH)
14477 PhAca = Canvas(frame2pha, width=CANVASwidthPhA, height=CANVASheightPhA, background=COLORcanvas, cursor=
'cross')
14478 PhAca.bind(
"<Configure>", PhACaresize)
14479 PhAca.bind(
"<Return>", DoNothing)
14480 PhAca.bind(
"<space>", onCanvasSpaceBar)
14481 PhAca.pack(side=TOP, expand=YES, fill=BOTH)
14485 dropmenu = Frame( frame2phar )
14486 dropmenu.pack(side=TOP)
14488 PhAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
14489 PhAFilemenu.menu = Menu(PhAFilemenu, tearoff = 0 )
14490 PhAFilemenu[
"menu"] = PhAFilemenu.menu
14491 PhAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
14492 PhAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
14493 PhAFilemenu.menu.add_command(label=
"Save Data", command=BSavePhAData)
14494 PhAFilemenu.menu.add_checkbutton(label=
' - Append', variable=AppendPhAData)
14495 PhAFilemenu.menu.add_command(label=
"Plot From File", command=PlotPhAFromFile)
14496 PhAFilemenu.menu.add_radiobutton(label=
' - Vectors', variable=PhAPlotMode, value=0)
14497 PhAFilemenu.menu.add_radiobutton(label=
' - Outline', variable=PhAPlotMode, value=1)
14498 PhAFilemenu.menu.add_command(label=
"Help", command=BHelp)
14499 PhAFilemenu.pack(side=LEFT, anchor=W)
14501 PhAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
14502 PhAOptionmenu.menu = Menu(PhAOptionmenu, tearoff = 0 )
14503 PhAOptionmenu[
"menu"] = PhAOptionmenu.menu
14504 PhAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
14505 PhAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
14506 PhAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
14508 PhAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
14509 PhAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
14510 PhAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
14511 PhAOptionmenu.pack(side=LEFT, anchor=W)
14513 rsphmenu = Frame( frame2phar )
14514 rsphmenu.pack(side=TOP)
14515 rsphb2 = Button(rsphmenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
14516 rsphb2.pack(side=RIGHT)
14517 rsphb3 = Button(rsphmenu, text=
"Run", style=
"Run.TButton", command=BStart)
14518 rsphb3.pack(side=RIGHT)
14520 PhAFFTwindmenu = Menubutton(frame2phar, text=
"FFTwindow", style=
"W11.TButton")
14521 PhAFFTwindmenu.menu = Menu(PhAFFTwindmenu, tearoff = 0 )
14522 PhAFFTwindmenu[
"menu"] = PhAFFTwindmenu.menu
14523 PhAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
14524 PhAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
14525 PhAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
14526 PhAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
14527 PhAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
14528 PhAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
14529 PhAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
14530 PhAFFTwindmenu.pack(side=TOP)
14534 smphmenu = Frame( frame2phar )
14535 smphmenu.pack(side=TOP)
14536 smphb1 = Button(smphmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
14537 smphb1.pack(side=LEFT)
14538 smphb2 = Button(smphmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
14539 smphb2.pack(side=LEFT)
14541 refph = Frame( frame2phar )
14542 refph.pack(side=TOP)
14543 refphlab = Label(refph, text=
"Ref Phase")
14544 refphlab.pack(side=LEFT, anchor=W)
14545 RefphEntry = Spinbox(refph, width=5, cursor=
'double_arrow', values=RefPhase)
14546 RefphEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
14547 RefphEntry.bind(
"<Button-4>", onSpinBoxScroll)
14548 RefphEntry.bind(
"<Button-5>", onSpinBoxScroll)
14549 RefphEntry.pack(side=LEFT, anchor=W)
14550 RefphEntry.delete(0,
"end")
14551 RefphEntry.insert(0,
"CA-V")
14552 vatb = Frame( frame2phar )
14553 vatb.pack(side=TOP)
14554 vatblab = Label(vatb, text=
"CA-V ")
14555 vatblab.pack(side=LEFT)
14556 vat_btn = Button(vatb, text=
"OFF", style=
"Stop.TButton", width=4, command=VAtoggle)
14557 vat_btn.pack(side=LEFT)
14558 vbtb = Frame( frame2phar )
14559 vbtb.pack(side=TOP)
14560 if MuxScreenStatus.get() == 0:
14561 vbtblab = Label(vbtb, text=
"CB-V ")
14562 vbtblab.pack(side=LEFT)
14563 vbt_btn = Button(vbtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VBtoggle)
14564 vbt_btn.pack(side=LEFT)
14565 vabtb = Frame( frame2phar )
14566 vabtb.pack(side=TOP)
14567 vabtblab = Label(vabtb, text=
"CA-B V ")
14568 vabtblab.pack(side=LEFT)
14569 vabt_btn = Button(vabtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VABtoggle)
14570 vabt_btn.pack(side=LEFT)
14572 RefphEntry.configure(state=DISABLED)
14573 amuxlab = Label(frame2phar, text=
"Analog Mux In")
14574 amuxlab.pack(side=TOP)
14575 phbt1 = Checkbutton(frame2phar, text=
'CB-A ', style=
"Strace2.TCheckbutton", variable=ShowPB_A)
14576 phbt1.pack(side=TOP)
14577 phbt2 = Checkbutton(frame2phar, text=
'CB-B ', style=
"Strace6.TCheckbutton", variable=ShowPB_B)
14578 phbt2.pack(side=TOP)
14579 phbt3 = Checkbutton(frame2phar, text=
'CB-C ', style=
"Strace7.TCheckbutton", variable=ShowPB_C)
14580 phbt3.pack(side=TOP)
14581 phbt4 = Checkbutton(frame2phar, text=
'CB-D ', style=
"Strace4.TCheckbutton", variable=ShowPB_D)
14582 phbt4.pack(side=TOP)
14585 vssb = Frame( frame2phar )
14586 vssb.pack(side=TOP)
14587 vslab = Label(vssb, text=
"Volts/div ")
14588 vslab.pack(side=LEFT)
14589 VScale = Spinbox(vssb, width=7, cursor=
'double_arrow', values=CHvpdiv)
14590 VScale.bind(
'<MouseWheel>', onSpinBoxScroll)
14591 VScale.bind(
"<Button-4>", onSpinBoxScroll)
14592 VScale.bind(
"<Button-5>", onSpinBoxScroll)
14593 VScale.pack(side=LEFT)
14594 VScale.delete(0,
"end")
14595 VScale.insert(0,0.5)
14597 iatb = Frame( frame2phar )
14598 iatb.pack(side=TOP)
14599 iatblab = Label(iatb, text=
"CA-I ")
14600 iatblab.pack(side=LEFT)
14601 iat_btn = Button(iatb, text=
"OFF", style=
"Stop.TButton", width=4, command=IAtoggle)
14602 iat_btn.pack(side=LEFT)
14603 ibtb = Frame( frame2phar )
14604 ibtb.pack(side=TOP)
14605 ibtblab = Label(ibtb, text=
"CB-I ")
14606 ibtblab.pack(side=LEFT)
14607 ibt_btn = Button(ibtb, text=
"OFF", style=
"Stop.TButton", width=4, command=IBtoggle)
14608 ibt_btn.pack(side=LEFT)
14610 issb = Frame( frame2phar )
14611 issb.pack(side=TOP)
14612 islab = Label(issb, text=
"mA/div ")
14613 islab.pack(side=LEFT)
14614 IScale = Spinbox(issb, width=7, cursor=
'double_arrow', values=CHipdiv)
14615 IScale.bind(
'<MouseWheel>', onSpinBoxScroll)
14616 IScale.bind(
"<Button-4>", onSpinBoxScroll)
14617 IScale.bind(
"<Button-5>", onSpinBoxScroll)
14618 IScale.pack(side=LEFT)
14619 IScale.delete(0,
"end")
14620 IScale.insert(0,10.0)
14622 dismiss1button = Button(frame2phar, text=
"Dismiss", style=
"W8.TButton", command=DestroyPhAScreen)
14623 dismiss1button.pack(side=TOP)
14625 ADI1 = Label(frame2phar, image=logo, anchor=
"sw", compound=
"top")
14626 ADI1.pack(side=TOP)
14630 global phawindow, PhAScreenStatus, PhAca, PhADisp
14632 PhAScreenStatus.set(0)
14635 phawindow.destroy()
14639 global PhAca, GRWPhA, XOLPhA, GRHPhA, Y0TPhA, CANVASwidthPhA, CANVASheightPhA, FontSize
14641 CANVASwidthPhA = event.width - 4
14642 CANVASheightPhA = event.height - 4
14643 GRWPhA = CANVASwidthPhA - (2 * X0LPhA) - int(21.25 * FontSize)
14644 GRHPhA = CANVASheightPhA - Y0TPhA - int(2.25 * FontSize)
14662 global VAresult, VBresult, IAresult, IBresult, VABresult, PhaseIA, PhaseIB, PhaseVA, PhaseVB, PhaseVAB
14663 global VMAresult, VMBresult, VMCresult, VMDresult, PhaseVMD, PhaseVMA, PhaseVMB, PhaseVMC
14664 global PeakVA, PeakVB, PeakIA, PeakIB, PeakVAB
14665 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
14666 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
14667 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB, PeakphaseVAB
14668 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
14671 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
14672 global STARTsample, STOPsample, LoopNum, FSweepMode
14673 global TRACEmode, Two_X_Sample, MuxScreenStatus, MuxChan
14679 if len(VAresult) < 32:
14681 TRACEsize = len(VAresult)
14682 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
14685 STARTsample = int(math.ceil(STARTsample))
14686 if Two_X_Sample.get() == 0:
14687 STOPsample = 45000 / Fsample
14689 STOPsample = 90000 / Fsample
14690 STOPsample = int(math.floor(STOPsample))
14693 MAXsample = TRACEsize
14694 if STARTsample > (MAXsample - 1):
14695 STARTsample = MAXsample - 1
14697 if STOPsample > MAXsample:
14698 STOPsample = MAXsample
14701 PeakVA = PeakVB = PeakIA = PeakIB = PeakVAB = 0.0
14702 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = F = n * Fsample
14703 PeakphaseVA = PhaseVA[n]
14704 if MuxScreenStatus.get() == 0:
14705 PeakphaseVB = PhaseVB[n]
14706 PeakphaseIA = PhaseIA[n]
14707 PeakphaseIB = PhaseIB[n]
14708 PeakSampleVB = PeakSampleVA = PeakSampleIA = PeakSampleIB = n
14711 PeakphaseVMA = PhaseVMA[n]
14713 PeakfreqVMA = PeakfreqVA
14716 PeakphaseVMB = PhaseVMB[n]
14718 PeakfreqVMB = PeakfreqVA
14721 PeakphaseVMC = PhaseVMC[n]
14723 PeakfreqVMC = PeakfreqVA
14726 PeakphaseVMD = PhaseVMD[n]
14728 PeakfreqVMD = PeakfreqVA
14730 while n <= STOPsample:
14733 VA = float(VAresult[n])
14739 PeakphaseVA = PhaseVA[n]
14742 if MuxScreenStatus.get() == 0:
14744 VAB = float(VABresult[n])
14750 PeakphaseVAB = PhaseVAB[n]
14754 VB = float(VBresult[n])
14760 PeakphaseVB = PhaseVB[n]
14765 VMA = float(VMAresult[n])
14771 PeakphaseVMA = PhaseVMA[n]
14775 VMB = float(VMBresult[n])
14781 PeakphaseVMB = PhaseVMB[n]
14785 VMC = float(VMCresult[n])
14791 PeakphaseVMC = PhaseVMC[n]
14795 VMD = float(VMDresult[n])
14801 PeakphaseVMD = PhaseVMD[n]
14804 IA = float(IAresult[n])
14810 PeakphaseIA = PhaseIA[n]
14814 IB = float(IBresult[n])
14820 PeakphaseIB = PhaseIB[n]
14825 if PeakSampleVA != PeakSampleIA:
14826 PeakphaseIA = PhaseIA[PeakSampleVA]
14827 PeakIA = IAresult[PeakSampleVA]
14828 if PeakSampleVB != PeakSampleIB:
14829 PeakphaseIB = PhaseIB[PeakSampleVB]
14830 PeakIB = IBresult[PeakSampleVB]
14834 global PeakVA, PeakVB, PeakIA, PeakIB
14835 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
14836 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB
14837 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
14838 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
14839 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
14840 global CMAphase, CMBphase, CMCphase, CMDphase
14841 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth
14842 global COLORsignalband, COLORtext, COLORgrid
14843 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
14844 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14849 global FontSize, MuxScreenStatus, MuxChan, Mulx
14851 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
14853 global TRACEaverage
14854 global FreqTraceMode
14855 global Vdiv, VScale, IScale
14856 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
14857 global AWGBMode, AWGBIOMode, ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
14858 global ShowC1_V, ShowC2_V, ShowC1_I, ShowC2_I, CHA_RC_HP, CHB_RC_HP
14859 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
14860 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
14861 global InOffA, InGainA, InOffB, InGainB
14862 global CurOffA, CurOffB, CurGainA, CurGainB
14864 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
14865 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
14866 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
14867 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
14868 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
14869 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
14870 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
14871 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
14872 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
14873 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
14874 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
14875 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
14883 ycenter = (GRHPhA/2) + 14
14884 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
14885 VoltsperPixel = float(VScale.get())/Radius
14886 mAperPixel = float(IScale.get())/Radius
14887 TRadius = Radius * Vdiv.get()
14889 x2 = X0LPhA + GRWPhA
14890 xright = 10 + xcenter + ( Vdiv.get() * Radius )
14891 while (i <= Vdiv.get()):
14892 x0 = xcenter - ( i * Radius )
14893 x1 = xcenter + ( i * Radius )
14894 y0 = ycenter - ( i * Radius )
14895 y1 = ycenter + ( i * Radius )
14896 VTxt =
'{0:.2f}'.format(float(VScale.get()) * i)
14897 ITxt =
'{0:.2f}'.format(float(IScale.get()) * i)
14898 TOffset = xright+(4*FontSize)
14899 PhAca.create_oval( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
14900 PhAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
14901 PhAca.create_text(xright, y0, text=str(VTxt), fill=COLORtrace1, anchor=
"w", font=(
"arial", FontSize+2 ))
14902 if iat_btn.config(
'text')[-1] ==
'ON' or ibt_btn.config(
'text')[-1] ==
'ON':
14903 PhAca.create_text(TOffset, y0, text=str(ITxt), fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize+2 ))
14906 PhAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=GridWidth.get())
14907 PhAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=GridWidth.get())
14908 RAngle = math.radians(45)
14909 y = TRadius*math.sin(RAngle)
14910 x = TRadius*math.cos(RAngle)
14911 PhAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14912 PhAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14913 PhAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
14914 PhAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14915 PhAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
14916 PhAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
14919 if Two_X_Sample.get() == 0:
14920 if AWGBMode.get() == 2
or AWGBIOMode.get() > 0:
14921 PhErr = 0.001675 * PeakfreqVA
14928 if RefphEntry.get() ==
"CA-V":
14930 CBVphase = PeakphaseVA - PeakphaseVB + PhErr
14931 CAIphase = PeakphaseVA - PeakphaseIA
14932 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
14933 CABVphase = PeakphaseVA - PeakphaseVAB
14934 elif RefphEntry.get() ==
"CB-V":
14936 CAVphase = PeakphaseVB - PeakphaseVA - PhErr
14937 CAIphase = PeakphaseVB - PeakphaseIA - PhErr
14938 CBIphase = PeakphaseVB - PeakphaseIB
14939 CABVphase = PeakphaseVB - PeakphaseVAB
14940 elif RefphEntry.get() ==
"CA-I":
14942 CAVphase = PeakphaseIA - PeakphaseVA
14943 CBVphase = PeakphaseIA - PeakphaseVB + PhErr
14944 CBIphase = PeakphaseIA - PeakphaseIB + PhErr
14945 CABVphase = PeakphaseIA - PeakphaseVAB
14946 elif RefphEntry.get() ==
"CB-I":
14948 CAVphase = PeakphaseIB - PeakphaseVA - PhErr
14949 CBVphase = PeakphaseIB - PeakphaseVB
14950 CAIphase = PeakphaseIB - PeakphaseIA - PhErr
14951 CABVphase = PeakphaseIB - PeakphaseVAB
14954 CAVphase = CAVphase - 360
14955 elif CAVphase < -180:
14956 CAVphase = CAVphase + 360
14958 CBVphase = CBVphase - 360
14959 elif CBVphase < -180:
14960 CBVphase = CBVphase + 360
14962 CAIphase = CAIphase - 360
14963 elif CAIphase < -180:
14964 CAIphase = CAIphase + 360
14966 CBIphase = CBIphase - 360
14967 elif CBIphase < -180:
14968 CBIphase = CBIphase + 360
14970 if vat_btn.config(
'text')[-1] ==
'ON':
14971 MagRadius = PeakVA / VoltsperPixel
14973 y1 = ycenter - MagRadius*math.sin(math.radians(CAVphase))
14977 y1 = ycenter - xright
14978 x1 = xcenter + MagRadius*math.cos(math.radians(CAVphase))
14982 x1 = xcenter - xright
14983 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
14984 if MuxScreenStatus.get() == 0:
14985 if vbt_btn.config(
'text')[-1] ==
'ON':
14986 MagRadius = PeakVB / VoltsperPixel
14987 y1 = ycenter - MagRadius*math.sin(math.radians(CBVphase))
14991 y1 = ycenter - xright
14992 x1 = xcenter + MagRadius*math.cos(math.radians(CBVphase))
14996 x1 = xcenter - xright
14997 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
14999 if ShowPB_A.get() > 0:
15000 CMAphase = PeakphaseVA - PeakphaseVMA + PhErr
15002 CMAphase = CMAphase - 360
15003 elif CMAphase < -180:
15004 CMAphase = CMAphase + 360
15005 MagRadius = PeakVMA / VoltsperPixel
15006 y1 = ycenter - MagRadius*math.sin(math.radians(CMAphase))
15010 y1 = ycenter - xright
15011 x1 = xcenter + MagRadius*math.cos(math.radians(CMAphase))
15015 x1 = xcenter - xright
15016 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
15017 if ShowPB_B.get() > 0:
15018 CMBphase = PeakphaseVA - PeakphaseVMB + PhErr
15020 CMBphase = CMBphase - 360
15021 elif CMBphase < -180:
15022 CMBphase = CMBphase + 360
15023 MagRadius = PeakVMB / VoltsperPixel
15024 y1 = ycenter - MagRadius*math.sin(math.radians(CMBphase))
15028 y1 = ycenter - xright
15029 x1 = xcenter + MagRadius*math.cos(math.radians(CMBphase))
15033 x1 = xcenter - xright
15034 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
15035 if ShowPB_C.get() > 0:
15036 CMCphase = PeakphaseVA - PeakphaseVMC + PhErr
15038 CMCphase = CMCphase - 360
15039 elif CMCphase < -180:
15040 CMCphase = CMCphase + 360
15041 MagRadius = PeakVMC / VoltsperPixel
15042 y1 = ycenter - MagRadius*math.sin(math.radians(CMCphase))
15046 y1 = ycenter - xright
15047 x1 = xcenter + MagRadius*math.cos(math.radians(CMCphase))
15051 x1 = xcenter - xright
15052 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace7, arrow=
"last", width=TRACEwidth.get())
15053 if ShowPB_D.get() > 0:
15054 CMDphase = PeakphaseVA - PeakphaseVMD + PhErr
15056 CMDphase = CMDphase - 360
15057 elif CMDphase < -180:
15058 CMDphase = CMDphase + 360
15059 MagRadius = PeakVMD / VoltsperPixel
15060 y1 = ycenter - MagRadius*math.sin(math.radians(CMDphase))
15064 y1 = ycenter - xright
15065 x1 = xcenter + MagRadius*math.cos(math.radians(CMDphase))
15069 x1 = xcenter - xright
15070 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
15071 if iat_btn.config(
'text')[-1] ==
'ON':
15072 MagRadius = PeakIA / mAperPixel
15073 y1 = ycenter - MagRadius*math.sin(math.radians(CAIphase))
15077 y1 = ycenter - xright
15078 x1 = xcenter + MagRadius*math.cos(math.radians(CAIphase))
15082 x1 = xcenter - xright
15083 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace3, arrow=
"last", width=TRACEwidth.get())
15084 if ibt_btn.config(
'text')[-1] ==
'ON':
15085 MagRadius = PeakIB / mAperPixel
15086 y1 = ycenter - MagRadius*math.sin(math.radians(CBIphase))
15090 y1 = ycenter - xright
15091 x1 = xcenter + MagRadius*math.cos(math.radians(CBIphase))
15095 x1 = xcenter - xright
15096 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
15097 if MuxScreenStatus.get() == 0:
15098 if vabt_btn.config(
'text')[-1] ==
'ON':
15099 MagRadius = PeakVAB / VoltsperPixel
15101 y1 = ycenter - MagRadius*math.sin(math.radians(CABVphase))
15105 y1 = ycenter - xright
15106 x1 = xcenter + MagRadius*math.cos(math.radians(CABVphase))
15110 x1 = xcenter - xright
15111 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
15113 if OverRangeFlagA == 1:
15114 x = X0LPhA+GRWPhA+10
15115 y = Y0TPhA+GRHPhA-40
15116 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15117 PhAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15118 if OverRangeFlagB == 1:
15119 x = X0LPhA+GRWPhA+10
15120 y = Y0TPhA+GRHPhA-10
15121 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
15122 PhAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
15124 txt =
" Sample rate: " + str(SAMPLErate)
15125 txt = txt +
" FFT samples: " + str(SMPfft)
15126 txt = txt +
" " + FFTwindowname
15130 idTXT = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15132 x = X0LPhA + GRWPhA + 4
15134 txt =
"CA " +
' {0:.3f} '.format(PeakVA) +
" RMS V"
15135 TXT9 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
15137 if MuxScreenStatus.get() == 0:
15138 txt =
"CB " +
' {0:.3f} '.format(PeakVB) +
" RMS V"
15139 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
15142 if ShowPB_A.get() > 0:
15143 txt =
"Mux A " +
' {0:.3f} '.format(PeakVMA) +
" RMS V"
15144 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
15146 if ShowPB_B.get() > 0:
15147 txt =
"Mux B " +
' {0:.3f} '.format(PeakVMB) +
" RMS V"
15148 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
15150 if ShowPB_C.get() > 0:
15151 txt =
"Mux C " +
' {0:.3f} '.format(PeakVMC) +
" RMS V"
15152 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
15154 if ShowPB_D.get() > 0:
15155 txt =
"Mux D " +
' {0:.3f} '.format(PeakVMD) +
" RMS V"
15156 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
15158 if iat_btn.config(
'text')[-1] ==
'ON':
15159 txt =
"CA " +
' {0:.2f} '.format(PeakIA) +
" RMS mA"
15160 TXT11 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
15162 if ibt_btn.config(
'text')[-1] ==
'ON':
15163 txt =
"CB " +
' {0:.2f} '.format(PeakIB) +
" RMS mA"
15164 TXT12 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
15166 txt =
"CA V Phase " +
' {0:.1f} '.format(CAVphase) +
" Degrees"
15167 TXT13 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
15169 if MuxScreenStatus.get() == 0:
15170 txt =
"CB V Phase " +
' {0:.1f} '.format(CBVphase) +
" Degrees"
15171 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
15174 if ShowPB_A.get() > 0:
15175 txt =
"Mux A Phase " +
' {0:.1f} '.format(CMAphase) +
" Degrees"
15176 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
15178 if ShowPB_B.get() > 0:
15179 txt =
"Mux B Phase " +
' {0:.1f} '.format(CMBphase) +
" Degrees"
15180 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
15182 if ShowPB_C.get() > 0:
15183 txt =
"Mux C Phase " +
' {0:.1f} '.format(CMCphase) +
" Degrees"
15184 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
15186 if ShowPB_D.get() > 0:
15187 txt =
"Mux D Phase " +
' {0:.1f} '.format(CMDphase) +
" Degrees"
15188 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
15190 if iat_btn.config(
'text')[-1] ==
'ON':
15191 txt =
"CA I Phase " +
' {0:.1f} '.format(CAIphase) +
" Degrees"
15192 TXT15 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
15194 if ibt_btn.config(
'text')[-1] ==
'ON':
15195 txt =
"CB I Phase " +
' {0:.1f} '.format(CBIphase) +
" Degrees"
15196 TXT16 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
15199 txt =
"CA-V Freq " +
' {0:.1f} '.format(PeakfreqVA) +
" Hertz"
15200 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
15205 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
15206 if ETSDisp.get() > 0:
15207 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
15210 if ShowC1_V.get() == 1:
15211 if MeasAHW.get() == 1:
15212 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
15213 if MeasALW.get() == 1:
15214 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
15215 if MeasADCy.get() == 1:
15216 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
15217 if MeasAPER.get() == 1:
15218 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
15219 if MeasAFREQ.get() == 1:
15220 txt = txt +
" CA Freq = "
15221 ChaF = float(CHAfreq*Mulx)
15223 V1String =
' {0:.2f} '.format(ChaF)
15224 txt = txt + str(V1String) +
" Hz "
15225 if ChaF > 1000
and ChaF < 1000000:
15226 V1String =
' {0:.2f} '.format(ChaF/1000)
15227 txt = txt + str(V1String) +
" KHz "
15229 V1String =
' {0:.2f} '.format(ChaF/1000000)
15230 txt = txt + str(V1String) +
" MHz "
15232 if ShowC2_V.get() == 1:
15233 if MeasBHW.get() == 1:
15234 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
15235 if MeasBLW.get() == 1:
15236 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
15237 if MeasBDCy.get() == 1:
15238 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
15239 if MeasBPER.get() == 1:
15240 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
15241 if MeasBFREQ.get() == 1:
15242 txt = txt +
" CB Freq = "
15243 ChaF = float(CHBfreq*Mulx)
15245 V1String =
' {0:.2f} '.format(ChaF)
15246 txt = txt + str(V1String) +
" Hz "
15247 if ChaF > 1000
and ChaF < 1000000:
15248 V1String =
' {0:.2f} '.format(ChaF/1000)
15249 txt = txt + str(V1String) +
" KHz "
15251 V1String =
' {0:.2f} '.format(ChaF/1000000)
15252 txt = txt + str(V1String) +
" MHz "
15254 if MuxScreenStatus.get() == 0:
15255 if MeasPhase.get() == 1:
15256 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
15257 if MeasDelay.get() == 1:
15258 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
15261 y = YBot + int(2.5 *FontSize)
15262 TXT18 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
15264 if ShowC1_V.get() == 1:
15266 if CHA_RC_HP.get() == 1:
15270 if MeasDCV1.get() == 1:
15271 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
15272 if MeasMaxV1.get() == 1:
15273 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
15274 if MeasTopV1.get() == 1:
15275 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
15276 if MeasMinV1.get() == 1:
15277 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
15278 if MeasBaseV1.get() == 1:
15279 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
15280 if MeasMidV1.get() == 1:
15281 MidV1 = (MaxV1+MinV1)/2.0
15282 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
15283 if MeasPPV1.get() == 1:
15285 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
15286 if MeasRMSV1.get() == 1:
15287 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
15288 if MeasRMSVA_B.get() == 1:
15289 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
15290 if MeasDiffAB.get() == 1:
15291 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
15292 if MeasUserA.get() == 1:
15294 TempValue = eval(UserAString)
15295 V1String =
' {0:.4f} '.format(TempValue)
15298 txt = txt + UserALabel +
" = " + V1String
15299 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
15301 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
15302 txt = txt +
"CHA: "
15304 if ShowC1_I.get() == 1:
15305 if MeasDCI1.get() == 1:
15306 V1String =
' {0:.2f} '.format(DCI1)
15307 txt = txt +
" AvgI = " + V1String
15308 if AWGAShape.get() == 0:
15310 Resvalue = (DCV1/DCI1)*1000
15311 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
15313 txt = txt +
" Res = OverRange"
15314 if MeasMaxI1.get() == 1:
15315 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
15316 if MeasMinI1.get() == 1:
15317 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
15318 if MeasMidI1.get() == 1:
15319 MidI1 = (MaxI1+MinI1)/2.0
15320 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
15321 if MeasPPI1.get() == 1:
15323 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
15324 if MeasRMSI1.get() == 1:
15325 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
15328 y = YBot + int(4*FontSize)
15329 TXT19 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
15332 if MuxScreenStatus.get() == 1:
15334 if Show_CBA.get() > 0:
15336 elif Show_CBB.get() > 0:
15338 elif Show_CBC.get() > 0:
15340 elif Show_CBD.get() > 0:
15342 if MeasPhase.get() == 1:
15343 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
15344 if MeasDelay.get() == 1:
15345 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
15346 if MeasUserB.get() == 1:
15348 TempValue = eval(UserBString)
15349 V1String =
' {0:.4f} '.format(TempValue)
15352 txt = txt + UserBLabel +
" = " + V1String
15353 if ShowC2_V.get() == 1:
15354 if CHB_RC_HP.get() == 1:
15358 if MeasDCV2.get() == 1:
15359 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
15360 if MeasMaxV2.get() == 1:
15361 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
15362 if MeasTopV2.get() == 1:
15363 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
15364 if MeasMinV2.get() == 1:
15365 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
15366 if MeasBaseV2.get() == 1:
15367 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
15368 if MeasMidV2.get() == 1:
15369 MidV2 = (MaxV2+MinV2)/2.0
15370 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
15371 if MeasPPV2.get() == 1:
15373 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
15374 if MeasRMSV2.get() == 1:
15375 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
15376 if MeasDiffBA.get() == 1:
15377 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
15378 if MeasUserB.get() == 1:
15380 TempValue = eval(UserBString)
15381 V1String =
' {0:.4f} '.format(TempValue)
15384 txt = txt + UserBLabel +
" = " + V1String
15385 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
15387 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
15388 txt = txt +
"CHB: "
15389 if ShowC2_I.get() == 1:
15390 if MeasDCI2.get() == 1:
15391 V1String =
' {0:.2f} '.format(DCI2)
15392 txt = txt +
" AvgI = " + V1String
15393 if AWGBShape.get() == 0:
15395 Resvalue = (DCV2/DCI2)*1000
15396 R1String =
' {0:.1f} '.format(Resvalue)
15397 txt = txt +
" Res = " + R1String
15399 txt = txt +
" Res = OverRange"
15400 if MeasMaxI2.get() == 1:
15401 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
15402 if MeasMinI2.get() == 1:
15403 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
15404 if MeasMidI2.get() == 1:
15405 MidI2 = (MaxI2+MinI2)/2.0
15406 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
15407 if MeasPPI2.get() == 1:
15409 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
15410 if MeasRMSI2.get() == 1:
15411 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
15414 y = YBot + int(5.5 *FontSize)
15415 TXT20 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
15418 global PeakVA, PeakVB, PeakIA, PeakIB
15419 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
15420 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
15421 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
15422 global CMAphase, CMBphase, CMCphase, CMDphase
15423 global MuxScreenStatus, AppendPhAData, PhADatafilename
15424 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
15425 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
15428 if AppendPhAData.get() == 0:
15429 PhADatafilename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
15430 DataFile = open(PhADatafilename,
'a')
15431 DataFile.write(
'Amplitude, Phase, @ ' + str(PeakfreqVA) +
' Hertz\n')
15433 if vat_btn.config(
'text')[-1] ==
'ON':
15434 DataFile.write( str(PeakVA) +
', ' + str(CAVphase) +
', CA-V\n')
15435 if MuxScreenStatus.get() == 0:
15436 if vbt_btn.config(
'text')[-1] ==
'ON':
15437 DataFile.write( str(PeakVB) +
', ' + str(CBVphase) +
', CB-V\n')
15439 if ShowPB_A.get() > 0:
15440 DataFile.write( str(PeakVMA) +
', ' + str(CMAphase) +
', Mux A\n')
15441 if ShowPB_B.get() > 0:
15442 DataFile.write( str(PeakVMB) +
', ' + str(CMBphase) +
', Mux B\n')
15443 if ShowPB_C.get() > 0:
15444 DataFile.write( str(PeakVMC) +
', ' + str(CMCphase) +
', Mux C\n')
15445 if ShowPB_D.get() > 0:
15446 DataFile.write( str(PeakVMD) +
', ' + str(CMDphase) +
', Mux D\n')
15447 if iat_btn.config(
'text')[-1] ==
'ON':
15448 DataFile.write( str(PeakIA) +
', ' + str(CAIphase) +
', CA-I\n')
15449 if ibt_btn.config(
'text')[-1] ==
'ON':
15450 DataFile.write( str(PeakIB) +
', ' + str(CBIphase) +
', CB-I\n')
15454 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth, PhAPlotMode
15455 global COLORsignalband, COLORtext, COLORgrid, SmoothCurves
15456 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
15457 global GRWPhA, GRHPhA, X0LPhA, Vdiv, VScale, IScale
15459 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
15462 ycenter = (GRHPhA/2) + 14
15463 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
15464 VoltsperPixel = float(VScale.get())/Radius
15465 mAperPixel = float(IScale.get())/Radius
15466 TRadius = Radius * Vdiv.get()
15468 x2 = X0LPhA + GRWPhA
15472 CSVFile = open(filename)
15473 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
15475 csv_f = csv.reader(CSVFile, dialect)
15478 PeakMag = float(row[0])
15479 PeakPhase = float(row[1])
15480 if row[2] ==
"CA-I" or row[2] ==
"CB-I":
15481 MagRadius = PeakMag / mAperPixel
15483 MagRadius = PeakMag / VoltsperPixel
15485 y1 = ycenter - MagRadius*math.sin(math.radians(PeakPhase))
15489 y1 = ycenter - xright
15490 x1 = xcenter + MagRadius*math.cos(math.radians(PeakPhase))
15494 x1 = xcenter - xright
15495 if PhAPlotMode.get() == 0:
15496 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
15498 PhATrace.append(x1)
15499 PhATrace.append(y1)
15501 print(
'skipping non-numeric row')
15502 if PhAPlotMode.get() == 1:
15503 PhAca.create_line(PhATrace, fill=COLORtrace5, smooth=SmoothCurves.get(), splinestep=5, width=TRACEwidth.get())
15506 showwarning(
"WARNING",
"No such file found or wrong format!")
15510 global FFTmemoryA, FFTresultA
15511 global FFTmemoryB, FFTresultB
15512 global PhaseA, PhaseB, freqwindow
15513 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, ShowC1_VdB, ShowC2_VdB
15516 if ShowC1_VdB.get() == 1:
15517 TRACEsize = len(FFTresultA)
15518 elif ShowC2_VdB.get() == 1:
15519 TRACEsize = len(FFTresultB)
15523 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=freqwindow)
15525 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
15526 filename =
"Spectrum-" + tme
15527 filename = filename +
".csv"
15529 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
15530 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=freqwindow)
15531 DataFile = open(filename,
'a')
15532 HeaderString =
'Frequency-#, '
15533 if ShowC1_VdB.get() == 1:
15535 HeaderString = HeaderString +
'CA-dB, '
15537 HeaderString = HeaderString +
'CA-Mag, '
15538 if ShowC2_VdB.get() == 1:
15540 HeaderString = HeaderString +
'CB-dB, '
15542 HeaderString = HeaderString +
'CB-Mag, '
15543 if ShowC1_P.get() == 1:
15544 HeaderString = HeaderString +
'Phase A-B, '
15545 if ShowC2_P.get() == 1:
15546 HeaderString = HeaderString +
'Phase B-A, '
15547 HeaderString = HeaderString +
'\n'
15548 DataFile.write( HeaderString )
15550 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
15553 while n < TRACEsize:
15556 if ShowC1_VdB.get() == 1:
15557 V = 10 * math.log10(float(FFTresultA[n])) + 17
15560 txt = txt +
"," + str(V)
15561 if ShowC2_VdB.get() == 1:
15562 V = 10 * math.log10(float(FFTresultB[n])) + 17
15565 txt = txt +
"," + str(V)
15566 if ShowC1_P.get() == 1:
15567 RelPhase = PhaseA[n]-PhaseB[n]
15569 RelPhase = RelPhase - 360
15570 elif RelPhase < -180:
15571 RelPhase = RelPhase + 360
15572 txt = txt +
"," + str(RelPhase)
15573 if ShowC2_P.get() == 1:
15574 RelPhase = PhaseB[n]-PhaseA[n]
15576 RelPhase = RelPhase - 360
15577 elif RelPhase < -180:
15578 RelPhase = RelPhase + 360
15579 txt = txt +
"," + str(RelPhase)
15581 DataFile.write(txt)
15588 global CANVASheightF, CANVASwidthF, SmoothCurvesSA
15589 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
15590 global PeakxM, PeakyM, PeakMdb, PeakfreqM
15591 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
15592 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
15593 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM, PeakIndexA, PeakIndexB, Fsample
15595 global COLORsignalband, COLORtext
15596 global COLORtrace1, COLORtrace2
15597 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
15601 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
15608 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SingleShotSA, HScale, HarmonicMarkers
15610 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
15611 global ShowC1_P, ShowC2_P, ShowRA_VdB, ShowRB_VdB, ShowMarker
15612 global ShowRA_P, ShowRB_P, ShowMathSA, FreqDisp, ShowAWGASA, ShowAWGBSA
15613 global ShowFCur, ShowdBCur, FCursor, dBCursor
15614 global T1Fline, T2Fline, T1Pline, T1FRline, T2FRline, TFMline, TFRMline
15615 global T1PRline, T2PRline, TAFline, TBFline
15616 global TRACEaverage
15617 global FreqTraceMode
15624 StartFrequency = float(StartFreqEntry.get())
15626 StartFreqEntry.delete(0,
"end")
15627 StartFreqEntry.insert(0,100)
15628 StartFrequency = 100
15630 StopFrequency = float(StopFreqEntry.get())
15632 StopFreqEntry.delete(0,
"end")
15633 StopFreqEntry.insert(0,10000)
15634 StopFrequency = 10000
15636 Phasecenter = int(PhCenFreqEntry.get())
15637 RelPhaseCenter.set(Phasecenter)
15639 PhCenFreqEntry.delete(0,
"end")
15640 PhCenFreqEntry.insert(0,0)
15641 RelPhaseCenter.set(0)
15647 while (i <= Vdiv.get()):
15648 y = Y0TF + i * GRHF/Vdiv.get()
15649 Dline = [x1,y,x2,y]
15650 if i == 0
or i == Vdiv.get():
15651 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15653 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15654 Vaxis_value = (DBlevel.get() - (i * DBdivlist[DBdivindex.get()]))
15655 Vaxis_label = str(Vaxis_value)
15656 Freqca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
15657 if ShowC1_P.get() == 1
or ShowC2_P.get() == 1:
15658 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get())))
15659 Vaxis_value = Vaxis_value + Phasecenter
15660 Vaxis_label = str(Vaxis_value)
15661 Freqca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
15667 if HScale.get() == 1:
15669 LogFStop = math.log10(StopFrequency)
15671 LogFStart = math.log10(StartFrequency)
15674 LogFpixel = (LogFStop - LogFStart) / GRWF
15676 while F <= StopFrequency:
15677 if F >= StartFrequency:
15679 LogF = math.log10(F)
15680 x = X0LF + (LogF - LogFStart)/LogFpixel
15683 Dline = [x,y1,x,y2]
15684 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
15685 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15686 axis_label = str(F)
15687 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
15689 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15706 Freqdiv = (StopFrequency - StartFrequency) / 10
15708 x = X0LF + i * GRWF/10.0
15709 Dline = [x,y1,x,y2]
15710 if i == 0
or i == 10:
15711 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15713 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15714 axis_value = (StartFrequency + (i * Freqdiv))
15715 axis_label = str(axis_value)
15716 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
15719 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
15720 Yc = float(Y0TF) + Yconv * (DBlevel.get())
15721 Fpixel = (StopFrequency - StartFrequency) / GRWF
15722 if ShowFCur.get() > 0:
15723 Dline = [FCursor, Y0TF, FCursor, Y0TF+GRHF]
15724 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
15726 if HScale.get() == 1:
15727 LogFStop = math.log10(StopFrequency)
15729 LogFStart = math.log10(StartFrequency)
15732 LogFpixel = (LogFStop - LogFStart) / GRWF
15733 xfreq = 10**(((FCursor-X0LF)*LogFpixel) + LogFStart)
15735 Fpixel = (StopFrequency - StartFrequency) / GRWF
15736 xfreq = ((FCursor-X0LF)*Fpixel)+StartFrequency
15737 XFString =
' {0:.2f} '.format(xfreq)
15738 V_label = XFString +
" Hz"
15739 Freqca.create_text(FCursor+1, Y0TF+GRHF+6, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
15742 if ShowdBCur.get() > 0:
15743 Dline = [X0LF, dBCursor, X0LF+GRWF, dBCursor]
15744 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
15746 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
15747 Yc = float(Y0TF) + Yconv * (DBlevel.get())
15748 yvdB = ((Yc-dBCursor)/Yconv)
15749 VdBString =
' {0:.1f} '.format(yvdB)
15750 V_label = VdBString +
" dBV"
15751 Freqca.create_text(X0LF+GRWF+2, dBCursor+5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
15754 SmoothBool = SmoothCurvesSA.get()
15756 if len(T1Fline) > 4:
15758 if OverRangeFlagA == 1:
15759 Freqca.create_line(T1Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15761 Freqca.create_line(T1Fline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15762 if ShowMarker.get() > 0:
15764 while k <= HarmonicMarkers.get():
15766 dbA = (10 * math.log10(float(FFTresultA[PeakIndexA*k])) + 17)
15767 FreqA = k*PeakIndexA*Fsample
15768 if ShowMarker.get() == 2
and k > 1:
15769 Peak_label =
' {0:.2f} '.format(dbA - PeakdbA) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
15771 Peak_label =
' {0:.2f} '.format(dbA) +
',' +
' {0:.1f} '.format(FreqA)
15772 if HScale.get() == 1:
15774 LogF = math.log10(FreqA)
15775 xA = X0LF + int((LogF - LogFStart)/LogFpixel)
15779 xA = X0LF+int((FreqA - StartFrequency)/Fpixel)
15780 yA = Yc - Yconv * dbA
15781 Freqca.create_text(xA, yA, text=Peak_label, fill=COLORtrace1, anchor=
"s", font=(
"arial", FontSize ))
15785 if len(T2Fline) > 4:
15787 if OverRangeFlagB == 1:
15788 Freqca.create_line(T2Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15790 Freqca.create_line(T2Fline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15791 if ShowMarker.get() > 0:
15793 while k <= HarmonicMarkers.get():
15795 dbB = (10 * math.log10(float(FFTresultB[PeakIndexB*k])) + 17)
15796 FreqB = k*PeakIndexB*Fsample
15797 if ShowMarker.get() == 2
and k > 1:
15798 Peak_label =
' {0:.2f} '.format(dbB - PeakdbB) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
15800 Peak_label =
' {0:.2f} '.format(dbB) +
',' +
' {0:.1f} '.format(FreqB)
15801 if HScale.get() == 1:
15803 LogF = math.log10(FreqB)
15804 xB = X0LF + int((LogF - LogFStart)/LogFpixel)
15808 xB = X0LF+int((FreqB - StartFrequency)/Fpixel)
15809 yB = Yc - Yconv * dbB
15810 Freqca.create_text(xB, yB, text=Peak_label, fill=COLORtrace2, anchor=
"s", font=(
"arial", FontSize ))
15814 if len(T1Pline) > 4:
15816 Freqca.create_line(T1Pline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15817 if len(T2Pline) > 4:
15819 Freqca.create_line(T2Pline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15820 if ShowAWGASA.get() > 0
and len(TAFline) > 4:
15821 Freqca.create_line(TAFline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15822 if ShowAWGBSA.get() > 0
and len(TBFline) > 4:
15823 Freqca.create_line(TBFline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15824 if ShowRA_VdB.get() == 1
and len(T1FRline) > 4:
15825 Freqca.create_line(T1FRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15826 if ShowMarker.get() == 1:
15827 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
15828 Freqca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"s", font=(
"arial", FontSize ))
15829 if ShowRB_VdB.get() == 1
and len(T2FRline) > 4:
15830 Freqca.create_line(T2FRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15831 if ShowMarker.get() == 1:
15832 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
15833 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"s", font=(
"arial", FontSize ))
15834 if ShowRA_P.get() == 1
and len(T1PRline) > 4:
15835 Freqca.create_line(T1PRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15836 if ShowRB_P.get() == 1
and len(T2PRline) > 4:
15837 Freqca.create_line(T2PRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15838 if ShowMathSA.get() > 0
and len(TFMline) > 4:
15839 Freqca.create_line(TFMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15840 if ShowMarker.get() ==1:
15841 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
15842 Freqca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"s", font=(
"arial", FontSize ))
15843 if ShowRMath.get() == 1
and len(TFRMline) > 4:
15844 Freqca.create_line(TFRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15845 if ShowMarker.get() ==1:
15846 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
15847 Freqca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"s", font=(
"arial", FontSize ))
15850 txt =
" Sample rate: " + str(SAMPLErate)
15851 txt = txt +
" FFT samples: " + str(SMPfft)
15853 txt = txt +
" " + FFTwindowname
15857 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15860 txt = str(StartFrequency) +
" to " + str(StopFrequency) +
" Hz"
15861 txt = txt +
" " + str(DBdivlist[DBdivindex.get()]) +
" dB/div"
15862 txt = txt +
" Level: " + str(DBlevel.get()) +
" dB "
15863 if FFTwindow.get() < 7:
15864 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
15866 txt = txt +
" FFT Bandwidth = ???"
15870 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15872 if FreqTraceMode.get() == 1:
15873 txt =
"Normal mode "
15875 if FreqTraceMode.get() == 2:
15876 txt =
"Peak hold mode "
15878 if FreqTraceMode.get() == 3:
15879 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
15881 if ZEROstuffing.get() > 0:
15882 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
15884 if (RUNstatus.get() == 0)
and (SingleShotSA.get() == 0):
15885 txt = txt +
" Stopped "
15886 elif SingleShotSA.get() == 1:
15887 txt = txt +
" Single Shot Trace "
15889 if FreqDisp.get() == 1:
15890 txt = txt +
" Running "
15892 txt = txt +
" Display off "
15895 IDtxt = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15898 global SMPfft, FFTwindow
15899 global SMPfftpwrTwo, BodeDisp
15900 global TRACEresetFreq, FreqTraceMode, LoopNum, FSweepMode, FSweepCont
15903 if BodeDisp.get() == 0:
15904 if FFTwindow.get() != 8:
15905 SMPfft = 2 ** int(SMPfftpwrTwo.get())
15908 if FreqTraceMode.get() == 1
and TRACEresetFreq ==
False:
15909 TRACEresetFreq =
True
15910 if FreqTraceMode.get() == 2
and LoopNum.get() == 1
and FSweepMode.get() > 0
and FSweepCont.get() == 0
and BodeDisp.get() >0:
15911 TRACEresetFreq =
True
15914 global FFTbandwidth
15916 global FFTwindowname
15917 global FFTwindowshape
15918 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
15920 global LastWindow, LastSMPfft
15922 if LastWindow == FFTwindow.get()
and LastSMPfft == SMPfft:
15926 FFTwindowname =
"No such window"
15929 if FFTwindow.get() == 0:
15930 FFTwindowname =
" Rectangular (no) window (B=1) "
15933 if FFTwindow.get() == 1:
15934 FFTwindowname =
" Cosine window (B=1.24) "
15937 if FFTwindow.get() == 2:
15938 FFTwindowname =
" Triangular window (B=1.33) "
15941 if FFTwindow.get() == 3:
15942 FFTwindowname =
" Hann window (B=1.5) "
15945 if FFTwindow.get() == 4:
15946 FFTwindowname =
" Blackman window (B=1.73) "
15949 if FFTwindow.get() == 5:
15950 FFTwindowname =
" Nuttall window (B=2.02) "
15953 if FFTwindow.get() == 6:
15954 FFTwindowname =
" Flat top window (B=3.77) "
15957 if FFTwindow.get() == 7:
15958 FFTwindowname = FFTUserWindowString
15961 FFTwindowshape = eval(FFTUserWindowString)
15963 FFTwindowshape = numpy.ones(SMPfft)
15964 print(
"Filling FFT window with Ones")
15965 elif FFTwindow.get() == 8:
15966 FFTwindowname =
"Window Shape From file"
15969 FFTbandwidth = int(FFTbw * SAMPLErate / float(SMPfft))
15971 FFTwindowshape = numpy.ones(SMPfft)
15975 if FFTwindow.get() == 1:
15976 w = math.sin(math.pi * n / (SMPfft - 1))
15977 FFTwindowshape[n] = w * 1.571
15979 if FFTwindow.get() == 2:
15980 w = (2.0 / SMPfft) * ((SMPfft/ 2.0) - abs(n - (SMPfft - 1) / 2.0))
15981 FFTwindowshape[n] = w * 2.0
15983 if FFTwindow.get() == 3:
15984 w = 0.5 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1))
15985 FFTwindowshape[n] = w * 2.000
15987 if FFTwindow.get() == 4:
15988 w = 0.42 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.08 * math.cos(4 * math.pi * n / (SMPfft - 1))
15989 FFTwindowshape[n] = w * 2.381
15991 if FFTwindow.get() == 5:
15992 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))
15993 FFTwindowshape[n] = w * 2.811
15995 if FFTwindow.get() == 6:
15996 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))
15997 FFTwindowshape[n] = w * 1.000
15999 LastWindow = FFTwindow.get()
16000 LastSMPfft = SMPfft
16003 global FFTUserWindowString, freqwindow
16005 TempString = FFTUserWindowString
16006 FFTUserWindowString = askstring(
"User FFT Window",
"Current User Window: " + FFTUserWindowString +
"\n\nNew Window:\n", initialvalue=FFTUserWindowString, parent=freqwindow)
16007 if (FFTUserWindowString ==
None):
16008 FFTUserWindowString = TempString
16011 global FFTwindowshape, SMPfft, LastSMPfft, FFTwindow, LastWindow
16014 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=freqwindow)
16016 CSVFile = open(filename)
16017 csv_f = csv.reader(CSVFile)
16018 FFTwindowshape = []
16021 FFTwindowshape.append(float(row[0]))
16023 print(
'skipping non-numeric row')
16024 FFTwindowshape = numpy.array(FFTwindowshape)
16026 SMPfft = len(FFTwindowshape)
16027 LastSMPfft = SMPfft
16028 LastWindow = FFTwindow.get()
16031 showwarning(
"WARNING",
"No such file found or wrong format!")
16034 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
16038 if RUNstatus.get() == 0:
16040 Freqca.bind(
'<MouseWheel>', onCanvasFreqClickScroll)
16041 Freqca.bind(
"<Button-4>", onCanvasFreqClickScroll)
16042 Freqca.bind(
"<Button-5>", onCanvasFreqClickScroll)
16045 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
16046 if event.widget == Freqca:
16047 ShiftKeyDwn = event.state & 1
16048 if ShowFCur.get() > 0
and ShiftKeyDwn == 0:
16050 if event.num == 5
or event.delta == -120:
16052 if event.num == 4
or event.delta == 120:
16054 elif ShowdBCur.get() > 0
or ShiftKeyDwn == 1:
16056 if event.num == 5
or event.delta == -120:
16058 if event.num == 4
or event.delta == 120:
16060 if RUNstatus.get() == 0:
16069 global Freqca, MarkerLoc, SAMPLErate, BaseSampleRate
16070 global COLORgrid, COLORtext, HScale, ShowC1_VdB, ShowC2_VdB
16071 global COLORtrace1, COLORtrace2, StartFreqEntry, StopFreqEntry
16072 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF
16074 if (RUNstatus.get() == 0):
16075 MarkerFreqNum = MarkerFreqNum + 1
16076 COLORmarker = COLORgrid
16077 if ShowC1_VdB.get() == 1:
16078 COLORmarker = COLORtrace1
16079 elif ShowC2_VdB.get() == 1:
16080 COLORmarker = COLORtrace2
16082 StartFrequency = float(StartFreqEntry.get())
16084 StartFreqEntry.delete(0,
"end")
16085 StartFreqEntry.insert(0,100)
16086 StartFrequency = 100
16088 StopFrequency = float(StopFreqEntry.get())
16090 StopFreqEntry.delete(0,
"end")
16091 StopFreqEntry.insert(0,100)
16092 StopFrequency = 100
16094 Freqca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
16095 Freqca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
16096 Freqca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
16098 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
16099 Yc = float(Y0TF) + Yconv * (DBlevel.get())
16100 Yphconv = float(GRHF) / 360
16101 Yp = float(Y0TF) + Yphconv + 180
16103 if HScale.get() == 1:
16104 LogFStop = math.log10(StopFrequency)
16106 LogFStart = math.log10(StartFrequency)
16109 LogFpixel = (LogFStop - LogFStart) / GRWF
16110 xfreq = 10**(((event.x-X0LF)*LogFpixel) + LogFStart)
16112 Fpixel = (StopFrequency - StartFrequency) / GRWF
16113 xfreq = ((event.x-X0LF)*Fpixel)+StartFrequency
16115 yvdB = ((Yc-event.y)/Yconv)
16116 VdBString =
' {0:.1f} '.format(yvdB)
16117 XFString =
' {0:.2f} '.format(xfreq)
16118 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
16119 if MarkerFreqNum > 1:
16120 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
16121 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
16122 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
16124 y = Y0TF + 3 + (MarkerFreqNum*10)
16126 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
16127 x = X0LF + GRWF - 5
16128 y = Y0TF + 3 + (MarkerFreqNum*10)
16130 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
16132 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
16134 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
16135 x = X0LF + GRWF - 5
16136 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
16138 Freqca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
16144 if ShowC1_VdB.get() == 0:
16151 if ShowC2_VdB.get() == 0:
16158 if ShowC1_P.get() == 0:
16165 if ShowC2_P.get() == 0:
16172 if ShowMarker.get() == 0:
16179 if ShowRA_VdB.get() == 0:
16186 if ShowRB_VdB.get() == 0:
16220 if ShowFCur.get() == 0:
16227 if ShowdBCur.get() == 1:
16234 if ShowdBCur.get() == 2:
16240 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus, Bodeca
16243 BdBCursor = event.y
16244 if RUNstatus.get() == 0:
16247 Bodeca.bind(
'<MouseWheel>', onCanvasBodeClickScroll)
16248 Bodeca.bind(
"<Button-4>", onCanvasBodeClickScroll)
16249 Bodeca.bind(
"<Button-5>", onCanvasBodeClickScroll)
16252 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus
16255 shift_key = event.state & 1
16256 if ShowBPCur.get() > 0
and shift_key == 0:
16258 if event.num == 5
or event.delta == -120:
16260 if event.num == 4
or event.delta == 120:
16262 elif ShowBdBCur.get() > 0
or shift_key == 1:
16264 if event.num == 5
or event.delta == -120:
16266 if event.num == 4
or event.delta == 120:
16268 if RUNstatus.get() == 0:
16277 global Bodeca, MarkerLoc, SAMPLErate
16278 global COLORgrid, COLORtext, HScaleBP, ShowCA_VdB, ShowCB_VdB, DBdivindexBP
16279 global COLORtrace1, COLORtrace2, COLORtrace6, StartBodeEntry, StopBodeEntry, DBlevelBP
16280 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF, Vdiv
16282 if (RUNstatus.get() == 0):
16283 MarkerFreqNum = MarkerFreqNum + 1
16284 COLORmarker = COLORtrace6
16285 if ShowCA_VdB.get() == 1:
16286 COLORmarker = COLORtrace1
16287 elif ShowCB_VdB.get() == 1:
16288 COLORmarker = COLORtrace2
16290 EndFreq = float(StopBodeEntry.get())
16292 StopBodeEntry.delete(0,
"end")
16293 StopBodeEntry.insert(0,10000)
16296 BeginFreq = float(StartBodeEntry.get())
16298 StartBodeEntry.delete(0,
"end")
16299 StartBodeEntry.insert(0,100)
16302 Bodeca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
16303 Bodeca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
16304 Bodeca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
16306 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
16307 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
16308 Yphconv = float(GRHBP) / 360
16309 Yp = float(Y0TBP) + Yphconv + 180
16313 if HScaleBP.get() == 1:
16314 LogFStop = math.log10(EndFreq)
16316 LogFStart = math.log10(BeginFreq)
16319 LogFpixel = (LogFStop - LogFStart) / GRWBP
16320 xfreq = 10**(((event.x-x1)*LogFpixel) + LogFStart)
16322 Fpixel = (EndFreq - BeginFreq) / GRWBP
16323 xfreq = ((event.x-x1)*Fpixel)+BeginFreq
16325 yvdB = ((Yc-event.y)/Yconv)
16326 VdBString =
' {0:.1f} '.format(yvdB)
16327 XFString =
' {0:.2f} '.format(xfreq)
16328 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
16329 if MarkerFreqNum > 1:
16330 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
16331 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
16332 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
16334 y = Y0TBP + 3 + (MarkerFreqNum*10)
16336 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
16338 y = Y0TBP + 3 + (MarkerFreqNum*10)
16340 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
16342 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
16344 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
16346 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
16348 Bodeca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
16354 if ShowCA_VdB.get() == 0:
16361 if ShowCB_VdB.get() == 0:
16368 if ShowCA_P.get() == 0:
16375 if ShowCB_P.get() == 0:
16381 global ShowMarkerBP
16382 if ShowMarkerBP.get() == 0:
16383 ShowMarkerBP.set(1)
16385 ShowMarkerBP.set(0)
16389 if ShowRA_VdB.get() == 0:
16396 if ShowRB_VdB.get() == 0:
16418 if ShowBPCur.get() == 0:
16425 if ShowBdBCur.get() == 1:
16432 if ShowBdBCur.get() == 2:
16454 button = event.widget
16455 cursor_position = button.index(INSERT)
16456 Pos = cursor_position
16457 OldVal = button.get()
16458 OldValfl = float(OldVal)
16461 Dot = OldVal.find (
".")
16462 Decimals = Len - Dot - 1
16465 Step = 10**(Len - Pos)
16467 Step = 10**(Dot - Pos)
16469 Step = 10**(Dot - Pos + 1)
16471 if event.num == 5
or event.delta == -120:
16472 NewVal = OldValfl - Step
16473 if event.num == 4
or event.delta == 120:
16474 NewVal = OldValfl + Step
16475 FormatStr =
"{0:." + str(Decimals) +
"f}"
16476 NewStr = FormatStr.format(NewVal)
16477 NewDot = NewStr.find (
".")
16478 NewPos = Pos + NewDot - Dot
16480 NewLen = len(NewStr)
16481 NewPos = Pos + NewLen - Len
16482 button.delete(0, END)
16483 button.insert(0, NewStr)
16484 button.icursor(NewPos)
16504 button = event.widget
16505 cursor_position = button.index(INSERT)
16506 Pos = cursor_position
16507 OldVal = button.get()
16508 OldValfl = float(OldVal)
16510 Dot = OldVal.find (
".")
16511 Decimals = Len - Dot - 1
16514 Step = 10**(Len - Pos)
16516 Step = 10**(Dot - Pos)
16518 Step = 10**(Dot - Pos + 1)
16519 if platform.system() ==
"Windows":
16520 if event.keycode == 38:
16521 NewVal = OldValfl + Step
16522 elif event.keycode == 40:
16523 NewVal = OldValfl - Step
16526 elif platform.system() ==
"Linux":
16527 if event.keycode == 111:
16528 NewVal = OldValfl + Step
16529 elif event.keycode == 116:
16530 NewVal = OldValfl - Step
16533 elif platform.system() ==
"Darwin":
16534 if event.keycode == 0x7D:
16535 NewVal = OldValfl + Step
16536 elif event.keycode == 0x7E:
16537 NewVal = OldValfl - Step
16543 FormatStr =
"{0:." + str(Decimals) +
"f}"
16544 NewStr = FormatStr.format(NewVal)
16545 NewDot = NewStr.find (
".")
16546 NewPos = Pos + NewDot - Dot
16548 NewLen = len(NewStr)
16549 NewPos = Pos + NewLen - Len
16550 button.delete(0, END)
16551 button.insert(0, NewStr)
16552 button.icursor(NewPos)
16556 spbox = event.widget
16557 if sys.version_info[0] == 3
and sys.version_info[1] > 6:
16559 if event.num == 4
or event.delta > 0:
16560 spbox.invoke(
'buttonup')
16561 if event.num == 5
or event.delta < 0:
16562 spbox.invoke(
'buttondown')
16566 global AWGAMode, AWGATerm, AWGAShape, AWGSync, awgwindow, AWGAPhaseDelay, AWGBPhaseDelay
16567 global AWGBMode, AWGBTerm, AWGBShape, AWGScreenStatus, AWGARepeatFlag, AWGBRepeatFlag
16568 global AWGABurstFlag, AWGBBurstFlag, AWGAShapeLabel, AWGBShapeLabel, AWGShowAdvanced
16569 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGAPhaseEntry, AWGADutyCycleEntry
16570 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBPhaseEntry, AWGBDutyCycleEntry
16571 global AWGALength, AWGBLength, RevDate, phasealab, phaseblab, AWGAModeLabel, AWGBModeLabel
16572 global AWGAIOMode, AWGBIOMode, duty1lab, duty2lab, awgaph, awgadel, awgbph, awgbdel
16573 global AwgLayout, AWG_Amp_Mode, awgsync, SWRev
16574 global amp1lab, amp2lab, off1lab, off2lab, Reset_Freq, AWG_2X, BisCompA, FWRevOne
16575 global ModeAMenu, ShapeAMenu, amp1lab, off1lab, freq1lab, awgaph, awgadel, ModeBMenu, ShapeBMenu
16576 global amp2lab, off2lab, freq2lab, awgbph, awgbdel, bcompa, awgsync
16578 if AWGScreenStatus.get() == 0:
16579 AWGScreenStatus.set(1)
16581 awgwindow = Toplevel()
16582 awgwindow.title(
"AWG Controls " + SWRev + RevDate)
16583 awgwindow.resizable(FALSE,FALSE)
16584 awgwindow.geometry(
'+0+100')
16585 awgwindow.protocol(
"WM_DELETE_WINDOW", DestroyAWGScreen)
16587 frame2 = LabelFrame(awgwindow, text=
"AWG CH A", style=
"A10R1.TLabelframe")
16588 frame3 = LabelFrame(awgwindow, text=
"AWG CH B", style=
"A10R2.TLabelframe")
16590 if AwgLayout ==
"Horz":
16591 frame2.pack(side=LEFT, expand=1, fill=X)
16592 frame3.pack(side=LEFT, expand=1, fill=X)
16594 frame2.pack(side=TOP, expand=1, fill=Y)
16595 frame3.pack(side=TOP, expand=1, fill=Y)
16598 awg1eb = Frame( frame2 )
16599 awg1eb.pack(side=TOP)
16600 ModeAMenu = Menubutton(awg1eb, text=
"Mode", style=
"W5.TButton")
16601 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
16602 ModeAMenu[
"menu"] = ModeAMenu.menu
16603 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
16604 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
16605 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
16606 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
16607 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
16608 ModeAMenu.menu.add_separator()
16609 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
16610 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
16611 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
16612 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
16613 ModeAMenu.pack(side=LEFT, anchor=W)
16614 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", style=
"W6.TButton")
16615 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
16616 ShapeAMenu[
"menu"] = ShapeAMenu.menu
16617 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
16618 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
16619 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
16620 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
16621 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
16622 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
16623 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
16624 if AWGShowAdvanced.get() > 0:
16625 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
16626 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
16627 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
16628 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
16629 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
16630 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
16631 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
16632 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
16633 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
16634 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
16635 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
16636 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
16637 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
16638 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
16640 ShapeAMenu.menu.add_separator()
16641 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
16642 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
16643 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
16644 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
16645 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
16646 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
16647 ShapeAMenu.pack(side=LEFT, anchor=W)
16649 AWGAModeLabel = Label(frame2, text=
"AWG A Mode")
16650 AWGAModeLabel.pack(side=TOP)
16651 AWGAShapeLabel = Label(frame2, text=
"AWG A Shape")
16652 AWGAShapeLabel.pack(side=TOP)
16654 awg1ampl = Frame( frame2 )
16655 awg1ampl.pack(side=TOP)
16656 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
16657 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
16658 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
16659 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
16660 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
16661 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
16662 AWGAAmplEntry.pack(side=LEFT, anchor=W)
16663 AWGAAmplEntry.delete(0,
"end")
16664 AWGAAmplEntry.insert(0,0.0)
16665 amp1lab = Label(awg1ampl)
16666 amp1lab.pack(side=LEFT, anchor=W)
16668 awg1off = Frame( frame2 )
16669 awg1off.pack(side=TOP)
16670 AWGAOffsetEntry = Entry(awg1off, width=5, cursor=
'double_arrow')
16671 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
16672 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
16673 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
16674 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
16675 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
16676 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
16677 AWGAOffsetEntry.delete(0,
"end")
16678 AWGAOffsetEntry.insert(0,0.0)
16679 off1lab = Label(awg1off)
16680 off1lab.pack(side=LEFT, anchor=W)
16681 if AWG_Amp_Mode.get() == 0:
16682 amp1lab.config(text =
"Min Ch A" )
16683 off1lab.config(text =
"Max Ch A" )
16685 amp1lab.config(text =
"Amp Ch A" )
16686 off1lab.config(text =
"Off Ch A" )
16688 awg1freq = Frame( frame2 )
16689 awg1freq.pack(side=TOP)
16690 AWGAFreqEntry = Entry(awg1freq, width=7, cursor=
'double_arrow')
16691 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
16692 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
16693 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
16694 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
16695 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
16696 AWGAFreqEntry.pack(side=LEFT, anchor=W)
16697 AWGAFreqEntry.delete(0,
"end")
16698 AWGAFreqEntry.insert(0,100.0)
16699 freq1lab = Label(awg1freq, text=
"Freq Ch A")
16700 freq1lab.pack(side=LEFT, anchor=W)
16702 awgadelay = Frame( frame2 )
16703 awgadelay.pack(side=TOP)
16704 awgaph = Radiobutton(awgadelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGAPhaseDelay, value=0, command=BAWGAPhaseDelay)
16705 awgaph.pack(side=LEFT, anchor=W)
16706 awgadel = Radiobutton(awgadelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGAPhaseDelay, value=1, command=BAWGAPhaseDelay)
16707 awgadel.pack(side=LEFT, anchor=W)
16709 awg1phase = Frame( frame2 )
16710 awg1phase.pack(side=TOP)
16711 AWGAPhaseEntry = Entry(awg1phase, width=5, cursor=
'double_arrow')
16712 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
16713 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
16714 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
16715 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
16716 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
16717 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
16718 AWGAPhaseEntry.delete(0,
"end")
16719 AWGAPhaseEntry.insert(0,0)
16720 phasealab = Label(awg1phase, text=
"Deg")
16721 phasealab.pack(side=LEFT, anchor=W)
16723 awg1dc = Frame( frame2 )
16724 awg1dc.pack(side=TOP)
16725 AWGADutyCycleEntry = Entry(awg1dc, width=5, cursor=
'double_arrow')
16726 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
16727 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
16728 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
16729 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
16730 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
16731 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
16732 AWGADutyCycleEntry.delete(0,
"end")
16733 AWGADutyCycleEntry.insert(0,50)
16734 duty1lab = Label(awg1dc, text=
"%")
16735 duty1lab.pack(side=LEFT, anchor=W)
16737 AWGALength = Label(frame2, text=
"Length")
16738 AWGALength.pack(side=TOP)
16740 if FWRevOne > 2.16:
16741 awg2x1 = Radiobutton(frame2, text=
"Both CH 1X", variable=AWG_2X, value=0, command=BAWG2X)
16742 awg2x1.pack(side=TOP)
16743 awg2x2 = Radiobutton(frame2, text=
"CH A 2X", variable=AWG_2X, value=1, command=BAWG2X)
16744 awg2x2.pack(side=TOP)
16745 awg2x3 = Radiobutton(frame2, text=
"CH B 2X", variable=AWG_2X, value=2, command=BAWG2X)
16746 awg2x3.pack(side=TOP)
16748 awgsync = Checkbutton(frame2, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
16749 awgsync.pack(side=TOP)
16752 awg2eb = Frame( frame3 )
16753 awg2eb.pack(side=TOP)
16754 ModeBMenu = Menubutton(awg2eb, text=
"Mode", style=
"W5.TButton")
16755 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
16756 ModeBMenu[
"menu"] = ModeBMenu.menu
16757 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
16758 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
16759 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
16760 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
16761 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
16762 ModeBMenu.menu.add_separator()
16763 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
16764 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
16765 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
16766 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
16767 ModeBMenu.pack(side=LEFT, anchor=W)
16768 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", style=
"W6.TButton")
16769 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
16770 ShapeBMenu[
"menu"] = ShapeBMenu.menu
16771 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
16772 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
16773 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
16774 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
16775 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
16776 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
16777 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
16778 if AWGShowAdvanced.get() > 0:
16779 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
16780 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
16781 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
16782 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
16783 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
16784 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
16785 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
16786 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
16787 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
16788 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
16789 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
16790 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
16792 ShapeBMenu.menu.add_separator()
16793 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
16794 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
16795 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
16796 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
16797 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
16798 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
16799 ShapeBMenu.pack(side=LEFT, anchor=W)
16801 AWGBModeLabel = Label(frame3, text=
"AWG B Mode")
16802 AWGBModeLabel.pack(side=TOP)
16803 AWGBShapeLabel = Label(frame3, text=
"AWG B Shape")
16804 AWGBShapeLabel.pack(side=TOP)
16806 awg2ampl = Frame( frame3 )
16807 awg2ampl.pack(side=TOP)
16808 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
16809 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
16810 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
16811 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
16812 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
16813 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
16814 AWGBAmplEntry.pack(side=LEFT, anchor=W)
16815 AWGBAmplEntry.delete(0,
"end")
16816 AWGBAmplEntry.insert(0,0.0)
16817 amp2lab = Label(awg2ampl)
16818 amp2lab.pack(side=LEFT, anchor=W)
16820 awg2off = Frame( frame3 )
16821 awg2off.pack(side=TOP)
16822 AWGBOffsetEntry = Entry(awg2off, width=5, cursor=
'double_arrow')
16823 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
16824 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
16825 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
16826 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
16827 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
16828 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
16829 AWGBOffsetEntry.delete(0,
"end")
16830 AWGBOffsetEntry.insert(0,0.0)
16831 off2lab = Label(awg2off)
16832 off2lab.pack(side=LEFT, anchor=W)
16833 if AWG_Amp_Mode.get() == 0:
16834 amp2lab.config(text =
"Min Ch B" )
16835 off2lab.config(text =
"Max Ch B" )
16837 amp2lab.config(text =
"Amp Ch B" )
16838 off2lab.config(text =
"Off Ch B" )
16840 awg2freq = Frame( frame3 )
16841 awg2freq.pack(side=TOP)
16842 AWGBFreqEntry = Entry(awg2freq, width=7, cursor=
'double_arrow')
16843 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
16844 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
16845 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
16846 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
16847 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
16848 AWGBFreqEntry.pack(side=LEFT, anchor=W)
16849 AWGBFreqEntry.delete(0,
"end")
16850 AWGBFreqEntry.insert(0,100.0)
16851 freq2lab = Label(awg2freq, text=
"Freq Ch B")
16852 freq2lab.pack(side=LEFT, anchor=W)
16854 awgbdelay = Frame( frame3 )
16855 awgbdelay.pack(side=TOP)
16856 awgbph = Radiobutton(awgbdelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGBPhaseDelay, value=0, command=BAWGBPhaseDelay)
16857 awgbph.pack(side=LEFT, anchor=W)
16858 awgbdel = Radiobutton(awgbdelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGBPhaseDelay, value=1, command=BAWGBPhaseDelay)
16859 awgbdel.pack(side=LEFT, anchor=W)
16861 awg2phase = Frame( frame3 )
16862 awg2phase.pack(side=TOP)
16863 AWGBPhaseEntry = Entry(awg2phase, width=5, cursor=
'double_arrow')
16864 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
16865 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
16866 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
16867 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
16868 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
16869 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
16870 AWGBPhaseEntry.delete(0,
"end")
16871 AWGBPhaseEntry.insert(0,0)
16872 phaseblab = Label(awg2phase, text=
"Deg")
16873 phaseblab.pack(side=LEFT, anchor=W)
16875 awg2dc = Frame( frame3 )
16876 awg2dc.pack(side=TOP)
16877 AWGBDutyCycleEntry = Entry(awg2dc, width=5, cursor=
'double_arrow')
16878 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
16879 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
16880 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
16881 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
16882 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
16883 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
16884 AWGBDutyCycleEntry.delete(0,
"end")
16885 AWGBDutyCycleEntry.insert(0,50)
16886 duty2lab = Label(awg2dc, text=
"%")
16887 duty2lab.pack(side=LEFT, anchor=W)
16889 AWGBLength = Label(frame3, text=
"Length")
16890 AWGBLength.pack(side=TOP)
16892 bcompa = Checkbutton(frame3, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
16893 bcompa.pack(side=TOP)
16894 if FWRevOne > 2.16:
16895 awgsync = Checkbutton(frame3, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
16896 awgsync.pack(side=TOP)
16898 dismissbutton = Button(frame3, text=
"Minimize", style=
"W8.TButton", command=DestroyAWGScreen)
16899 dismissbutton.pack(side=TOP)
16901 awgwindow.deiconify()
16904 global AWG_2X, devx, AWGAIOMode, AWGBIOMode, BisCompA
16907 if AWG_2X.get() == 0:
16908 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
16909 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
16910 elif AWG_2X.get() == 1:
16911 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
16912 devx.ctrl_transfer(0x40, 0x25, 0x0, 0, 0, 0, 100)
16913 if AWGBIOMode.get() == 0:
16914 devx.ctrl_transfer(0x40, 0x51, 40, 0, 0, 0, 100)
16915 devx.ctrl_transfer(0x40, 0x51, 52, 0, 0, 0, 100)
16917 elif AWG_2X.get() == 2:
16918 devx.ctrl_transfer(0x40, 0x24, 0x1, 0, 0, 0, 100)
16919 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
16920 if AWGAIOMode.get() == 0:
16921 devx.ctrl_transfer(0x40, 0x51, 35, 0, 0, 0, 100)
16922 devx.ctrl_transfer(0x40, 0x51, 51, 0, 0, 0, 100)
16926 global awgwindow, AWGScreenStatus
16929 awgwindow.iconify()
16933 global MuxScreenStatus, muxwindow, RevDate, DacScreenStatus, DigScreenStatus
16934 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
16935 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, SyncButton
16936 global CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab, CHBlab, CHBofflab
16937 global CHB_Cofflab, CHB_Dofflab, awgsync, SWRev, BorderSize
16938 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb, MuxSync, hipulseimg, lowpulseimg, DualMuxMode
16940 if MuxScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0:
16941 MuxScreenStatus.set(1)
16945 muxwindow = Toplevel()
16946 muxwindow.title(
"CH-B Mux " + SWRev + RevDate)
16947 muxwindow.resizable(FALSE,FALSE)
16948 muxwindow.protocol(
"WM_DELETE_WINDOW", DestroyMuxScreen)
16950 frameM = LabelFrame(muxwindow, text=
"CH B Mux", style=
"A10B.TLabel")
16951 frameM.pack(side=LEFT, expand=1, fill=Y)
16954 frameA = Frame(frameM)
16955 frameA.pack(side=TOP)
16956 cba = Checkbutton(frameA, text=
'CB-A', variable=Show_CBA, command=UpdateTimeTrace)
16957 cba.pack(side=LEFT, anchor=W)
16958 CHB_Asb = Spinbox(frameA, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
16959 CHB_Asb.bind(
'<MouseWheel>', onSpinBoxScroll)
16960 CHB_Asb.bind(
"<Button-4>", onSpinBoxScroll)
16961 CHB_Asb.bind(
"<Button-5>", onSpinBoxScroll)
16962 CHB_Asb.pack(side=LEFT)
16963 CHB_Asb.delete(0,
"end")
16964 CHB_Asb.insert(0,0.5)
16966 CHB_Alab = Button(frameA, text=
"CB-A V/Div", style=
"Rtrace2.TButton", command=SetScaleMuxA)
16967 CHB_Alab.pack(side=LEFT)
16968 CHB_APosEntry = Entry(frameA, width=5, cursor=
'double_arrow')
16969 CHB_APosEntry.bind(
'<Return>', onTextKey)
16970 CHB_APosEntry.bind(
'<MouseWheel>', onTextScroll)
16971 CHB_APosEntry.bind(
"<Button-4>", onTextScroll)
16972 CHB_APosEntry.bind(
"<Button-5>", onTextScroll)
16973 CHB_APosEntry.bind(
'<Key>', onTextKey)
16974 CHB_APosEntry.pack(side=LEFT)
16975 CHB_APosEntry.delete(0,
"end")
16976 CHB_APosEntry.insert(0,2.5)
16977 CHB_Aofflab = Button(frameA, text=
"CB-A Pos", style=
"Rtrace2.TButton", command=SetMuxAPoss)
16978 CHB_Aofflab.pack(side=LEFT)
16980 frameB = Frame(frameM)
16981 frameB.pack(side=TOP)
16982 cbb = Checkbutton(frameB, text=
'CB-B', variable=Show_CBB, command=UpdateTimeTrace)
16983 cbb.pack(side=LEFT, anchor=W)
16984 CHB_Bsb = Spinbox(frameB, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
16985 CHB_Bsb.bind(
'<MouseWheel>', onSpinBoxScroll)
16986 CHB_Bsb.bind(
"<Button-4>", onSpinBoxScroll)
16987 CHB_Bsb.bind(
"<Button-5>", onSpinBoxScroll)
16988 CHB_Bsb.pack(side=LEFT)
16989 CHB_Bsb.delete(0,
"end")
16990 CHB_Bsb.insert(0,0.5)
16991 CHB_Blab = Button(frameB, text=
"CB-B V/Div", style=
"Rtrace6.TButton", command=SetScaleMuxB)
16992 CHB_Blab.pack(side=LEFT)
16993 CHB_BPosEntry = Entry(frameB, width=5, cursor=
'double_arrow')
16994 CHB_BPosEntry.bind(
'<Return>', onTextKey)
16995 CHB_BPosEntry.bind(
'<MouseWheel>', onTextScroll)
16996 CHB_BPosEntry.bind(
"<Button-4>", onTextScroll)
16997 CHB_BPosEntry.bind(
"<Button-5>", onTextScroll)
16998 CHB_BPosEntry.bind(
'<Key>', onTextKey)
16999 CHB_BPosEntry.pack(side=LEFT)
17000 CHB_BPosEntry.delete(0,
"end")
17001 CHB_BPosEntry.insert(0,2.5)
17002 CHB_Bofflab = Button(frameB, text=
"CB-B Pos", style=
"Rtrace6.TButton", command=SetMuxBPoss)
17003 CHB_Bofflab.pack(side=LEFT)
17005 frameC = Frame(frameM)
17006 frameC.pack(side=TOP)
17007 cbc = Checkbutton(frameC, text=
'CB-C', variable=Show_CBC, command=UpdateTimeTrace)
17008 cbc.pack(side=LEFT, anchor=W)
17009 CHB_Csb = Spinbox(frameC, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
17010 CHB_Csb.bind(
'<MouseWheel>', onSpinBoxScroll)
17011 CHB_Csb.bind(
"<Button-4>", onSpinBoxScroll)
17012 CHB_Csb.bind(
"<Button-5>", onSpinBoxScroll)
17013 CHB_Csb.pack(side=LEFT)
17014 CHB_Csb.delete(0,
"end")
17015 CHB_Csb.insert(0,0.5)
17017 CHB_Clab = Button(frameC, text=
"CB-C V/Div", style=
"Rtrace7.TButton", command=SetScaleMuxC)
17018 CHB_Clab.pack(side=LEFT)
17019 CHB_CPosEntry = Entry(frameC, width=5, cursor=
'double_arrow')
17020 CHB_CPosEntry.bind(
'<Return>', onTextKey)
17021 CHB_CPosEntry.bind(
'<MouseWheel>', onTextScroll)
17022 CHB_CPosEntry.bind(
"<Button-4>", onTextScroll)
17023 CHB_CPosEntry.bind(
"<Button-5>", onTextScroll)
17024 CHB_CPosEntry.bind(
'<Key>', onTextKey)
17025 CHB_CPosEntry.pack(side=LEFT)
17026 CHB_CPosEntry.delete(0,
"end")
17027 CHB_CPosEntry.insert(0,2.5)
17028 CHB_Cofflab = Button(frameC, text=
"CB-C Pos", style=
"Rtrace7.TButton", command=SetMuxCPoss)
17029 CHB_Cofflab.pack(side=LEFT)
17031 frameD = Frame(frameM)
17032 frameD.pack(side=TOP)
17033 cbd = Checkbutton(frameD, text=
'CB-D', variable=Show_CBD, command=UpdateTimeTrace)
17034 cbd.pack(side=LEFT, anchor=W)
17035 CHB_Dsb = Spinbox(frameD, width=4, cursor=
'double_arrow', values=CHvpdiv, command=UpdateTimeTrace)
17036 CHB_Dsb.bind(
'<MouseWheel>', onSpinBoxScroll)
17037 CHB_Dsb.bind(
"<Button-4>", onSpinBoxScroll)
17038 CHB_Dsb.bind(
"<Button-5>", onSpinBoxScroll)
17039 CHB_Dsb.pack(side=LEFT)
17040 CHB_Dsb.delete(0,
"end")
17041 CHB_Dsb.insert(0,0.5)
17042 CHB_Dlab = Button(frameD, text=
"CB-D V/Div", style=
"Rtrace4.TButton", command=SetScaleMuxD)
17043 CHB_Dlab.pack(side=LEFT)
17044 CHB_DPosEntry = Entry(frameD, width=5, cursor=
'double_arrow')
17045 CHB_DPosEntry.bind(
'<Return>', onTextKey)
17046 CHB_DPosEntry.bind(
'<MouseWheel>', onTextScroll)
17047 CHB_DPosEntry.bind(
"<Button-4>", onTextScroll)
17048 CHB_DPosEntry.bind(
"<Button-5>", onTextScroll)
17049 CHB_DPosEntry.bind(
'<Key>', onTextKey)
17050 CHB_DPosEntry.pack(side=LEFT)
17051 CHB_DPosEntry.delete(0,
"end")
17052 CHB_DPosEntry.insert(0,2.5)
17053 CHB_Dofflab = Button(frameD, text=
"CB-D Pos", style=
"Rtrace4.TButton", command=SetMuxDPoss)
17054 CHB_Dofflab.pack(side=LEFT)
17055 frameE = Frame(frameM)
17056 frameE.pack(side=TOP)
17058 MuxSync = IntVar(0)
17059 muxenab = Checkbutton(frameE, text=
"Mux-Enb", variable=MuxEnb)
17060 muxenab.pack(side=LEFT)
17061 SyncButton = Checkbutton(frameE, compound=TOP, image=hipulseimg, variable=MuxSync, command=SyncImage)
17062 SyncButton.pack(side=LEFT)
17063 dismissbutton = Button(frameE, text=
"Dismiss", style=
"W8.TButton", command=DestroyMuxScreen)
17064 dismissbutton.pack(side=LEFT)
17065 frameF = Frame(frameM)
17066 frameF.pack(side=TOP)
17067 dmx = Checkbutton(frameF, text=
'Dual Mux Split I/O mode', variable=DualMuxMode, command=SetDualMuxMode)
17068 dmx.pack(side=LEFT)
17070 CHBlab.config(style=
"SGray.TButton")
17071 CHBofflab.config(style=
"SGray.TButton")
17074 global AWGAIOMode, AWGBIOMode, ShowC1_V, DualMuxMode, CHAlab, CHAofflab
17075 global CHB_Clab, CHB_Dlab, CHB_Cofflab, CHB_Dofflab
17077 if DualMuxMode.get() == 1:
17081 CHB_Clab.config(text=
"CA-C V/Div")
17082 CHB_Dlab.config(text=
"CA-D V/Div")
17083 CHB_Cofflab.config(text=
"CA-C Pos")
17084 CHB_Dofflab.config(text=
"CA-D Pos")
17087 CHAlab.config(style=
"SGray.TButton")
17088 CHAofflab.config(style=
"SGray.TButton")
17091 CHB_Clab.config(text=
"CB-C V/Div")
17092 CHB_Dlab.config(text=
"CB-D V/Div")
17093 CHB_Cofflab.config(text=
"CB-C Pos")
17094 CHB_Dofflab.config(text=
"CB-D Pos")
17096 CHAlab.config(style=
"Rtrace1.TButton")
17097 CHAofflab.config(style=
"Rtrace1.TButton")
17100 global MuxSync, hipulseimg, lowpulseimg, SyncButton
17102 if MuxSync.get() == 0:
17103 SyncButton.config(image=hipulseimg)
17105 SyncButton.config(image=lowpulseimg)
17108 global muxwindow, awgsync, MuxScreenStatus, CHAlab, CHAofflab, CHBlab, CHBofflab
17110 MuxScreenStatus.set(0)
17111 awgsync.config(state=NORMAL)
17113 CHBlab.config(style=
"Rtrace2.TButton")
17114 CHBofflab.config(style=
"Rtrace2.TButton")
17115 CHAlab.config(style=
"Rtrace1.TButton")
17116 CHAofflab.config(style=
"Rtrace1.TButton")
17117 muxwindow.destroy()
17120 global Bodeca, GRWBP, XOLBP, GRHBP, Y0TBP, CANVASwidthBP, CANVASheightBP, FontSize
17122 CANVASwidthBP = event.width - 4
17123 CANVASheightBP = event.height - 4
17124 GRWBP = CANVASwidthBP - (2 * X0LBP)
17125 GRHBP = CANVASheightBP - int(10 * FontSize)
17129 global FStepSync, DevOne
17131 if FStepSync.get() == 0:
17132 Tval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
17133 elif FStepSync.get() == 1:
17134 devx.ctrl_transfer( 0x40, 0x50, 0, 0, 0, 0, 100)
17135 elif FStepSync.get() == 2:
17136 devx.ctrl_transfer( 0x40, 0x51, 0, 0, 0, 0, 100)
17139 global FSweepSync, DevOne
17141 if FSweepSync.get() == 0:
17142 Tval = devx.ctrl_transfer( 0xc0, 0x91, 1, 0, 0, 1, 100)
17143 elif FSweepSync.get() == 1:
17144 devx.ctrl_transfer( 0x40, 0x50, 1, 0, 0, 0, 100)
17145 elif FSweepSync.get() == 2:
17146 devx.ctrl_transfer( 0x40, 0x51, 1, 0, 0, 0, 100)
17149 global BDSweepFile, FileSweepFreq, FileSweepAmpl
17151 if BDSweepFile.get() > 0:
17153 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent = bodewindow)
17155 CSVFile = open(filename)
17156 csv_f = csv.reader(CSVFile)
17161 FileSweepFreq.append(float(row[0]))
17162 FileSweepAmpl.append(float(row[1]))
17164 print(
'skipping non-numeric row')
17165 FileSweepFreq = numpy.array(FileSweepFreq)
17166 FileSweepAmpl = numpy.array(FileSweepAmpl)
17167 MaxAmpl = numpy.amax(FileSweepAmpl)
17169 s = askstring(
"Normalize Max Amplitude",
"Max Amplitude = " + str(MaxAmpl) +
"\n\n Enter New Max value:\n in dB", parent = bodewindow)
17178 NormAmpl = MaxAmpl - v
17181 FileSweepAmpl = FileSweepAmpl - NormAmpl
17183 StopBodeEntry.delete(0,
"end")
17184 StopBodeEntry.insert(0,FileSweepFreq[len(FileSweepFreq)-1])
17185 StartBodeEntry.delete(0,
"end")
17186 StartBodeEntry.insert(0,FileSweepFreq[0])
17187 SweepStepBodeEntry.delete(0,
"end")
17188 SweepStepBodeEntry.insert(0,len(FileSweepFreq))
17190 showwarning(
"WARNING",
"No such file found or wrong format!", parent = bodewindow)
17194 global logo, SmoothCurvesBP, CutDC, bodewindow, SWRev
17195 global CANVASwidthBP, CANVASheightBP, FFTwindow, CutDC, AWGAMode, AWGAShape, AWGBMode
17196 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp, RelPhaseCenter
17197 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP, PhCenBodeEntry
17198 global BPSweepMode, BPSweepCont, Bodeca, BodeScreenStatus, RevDate, SweepStepBodeEntry
17199 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
17200 global GRWBP, GRHBP, X0LBP, FStepSync, FSweepSync, BDSweepFile, MinigenScreenStatus
17201 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, ImpedanceCenter, ImCenBodeEntry
17202 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
17203 global FrameRefief, BorderSize, LocalLanguage
17204 global sbode_tip, rbode_tip, bd3_tip, bd4_tip, bd5_tip, bd6_tip, bd7_tip, bd8_tip, bodismiss1button_tip
17205 global bstopfreqlab, bstartfreqlab, ImCenlab, BPhCenlab
17207 if BodeScreenStatus.get() == 0:
17208 BodeScreenStatus.set(1)
17211 CANVASwidthBP = GRWBP + 2 * X0LBP
17212 CANVASheightBP = GRHBP + 80
17217 bodewindow = Toplevel()
17218 bodewindow.title(
"Bode Plotter " + SWRev + RevDate)
17219 bodewindow.protocol(
"WM_DELETE_WINDOW", DestroyBodeScreen)
17220 frame2bp = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
17221 frame2bp.pack(side=RIGHT, expand=NO, fill=BOTH)
17223 frame2b = Frame(bodewindow, borderwidth=BorderSize, relief=FrameRefief)
17224 frame2b.pack(side=TOP, expand=YES, fill=BOTH)
17226 Bodeca = Canvas(frame2b, width=CANVASwidthBP, height=CANVASheightBP, background=COLORcanvas, cursor=
'cross')
17227 Bodeca.bind(
'<Configure>', BodeCaresize)
17228 Bodeca.bind(
'<1>', onCanvasBodeLeftClick)
17229 Bodeca.bind(
'<3>', onCanvasBodeRightClick)
17230 Bodeca.bind(
"<Up>", onCanvasUpArrow)
17231 Bodeca.bind(
"<Down>", onCanvasDownArrow)
17232 Bodeca.bind(
"<Left>", onCanvasLeftArrow)
17233 Bodeca.bind(
"<Right>", onCanvasRightArrow)
17234 Bodeca.bind(
"<space>", onCanvasSpaceBar)
17235 Bodeca.bind(
"1", onCanvasBdOne)
17236 Bodeca.bind(
"2", onCanvasBdTwo)
17237 Bodeca.bind(
"3", onCanvasBdThree)
17238 Bodeca.bind(
"4", onCanvasBdFour)
17239 Bodeca.bind(
"5", onCanvasBdFive)
17240 Bodeca.bind(
"6", onCanvasBdSix)
17241 Bodeca.bind(
"7", onCanvasBdSeven)
17242 Bodeca.bind(
"8", onCanvasBdEight)
17243 Bodeca.bind(
"9", onCanvasBdNine)
17244 Bodeca.bind(
"0", onCanvasBdZero)
17245 Bodeca.bind(
"f", onCanvasShowBPcur)
17246 Bodeca.bind(
"d", onCanvasShowBdBcur)
17247 Bodeca.bind(
"h", onCanvasShowPdBcur)
17248 Bodeca.bind(
"s", onCanvasBdSnap)
17249 Bodeca.pack(side=TOP, expand=YES, fill=BOTH)
17252 dropmenu = Frame( frame2bp )
17253 dropmenu.pack(side=TOP)
17255 BodeFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
17256 BodeFilemenu.menu = Menu(BodeFilemenu, tearoff = 0 )
17257 BodeFilemenu[
"menu"] = BodeFilemenu.menu
17258 BodeFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigBP)
17259 BodeFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigBP)
17260 BodeFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenBP)
17261 BodeFilemenu.menu.add_command(label=
"Save Data", command=BCSVfile)
17262 BodeFilemenu.pack(side=LEFT, anchor=W)
17264 BodeOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
17265 BodeOptionmenu.menu = Menu(BodeOptionmenu, tearoff = 0 )
17266 BodeOptionmenu[
"menu"] = BodeOptionmenu.menu
17267 BodeOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
17268 BodeOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesBP)
17269 BodeOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
17270 BodeOptionmenu.menu.add_command(label=
"Store trace (s)", command=BSTOREtraceBP)
17271 BodeOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
17272 BodeOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
17273 BodeOptionmenu.menu.add_command(label=
"-Step Sync Pulse-", command=donothing)
17274 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FStepSync, value=0, command=BStepSync)
17275 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FStepSync, value=1, command=BStepSync)
17276 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FStepSync, value=2, command=BStepSync)
17277 BodeOptionmenu.menu.add_command(label=
"-Sweep Sync Pulse-", command=donothing)
17278 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FSweepSync, value=0, command=BSweepSync)
17279 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FSweepSync, value=1, command=BSweepSync)
17280 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FSweepSync, value=2, command=BSweepSync)
17281 BodeOptionmenu.pack(side=LEFT, anchor=W)
17283 RUNframe = Frame( frame2bp )
17284 RUNframe.pack(side=TOP)
17285 rbode = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartBP)
17286 rbode.pack(side=LEFT)
17287 sbode = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopBP)
17288 sbode.pack(side=LEFT)
17290 BodeFFTwindmenu = Menubutton(frame2bp, text=
"FFTwindow", style=
"W11.TButton")
17291 BodeFFTwindmenu.menu = Menu(BodeFFTwindmenu, tearoff = 0 )
17292 BodeFFTwindmenu[
"menu"] = BodeFFTwindmenu.menu
17293 BodeFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
17294 BodeFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
17295 BodeFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
17296 BodeFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
17297 BodeFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
17298 BodeFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
17299 BodeFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
17300 BodeFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
17301 BodeFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
17302 BodeFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
17303 BodeFFTwindmenu.pack(side=TOP)
17305 tracemenu = Frame( frame2bp )
17306 tracemenu.pack(side=TOP)
17309 BodeShowmenu = Menubutton(tracemenu, text=
"Curves", style=
"W7.TButton")
17310 BodeShowmenu.menu = Menu(BodeShowmenu, tearoff = 0 )
17311 BodeShowmenu[
"menu"] = BodeShowmenu.menu
17312 BodeShowmenu.menu.add_command(label=
"-Show-", command=donothing)
17313 BodeShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllBP)
17314 BodeShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneBP)
17315 BodeShowmenu.menu.add_checkbutton(label=
'CA-dBV (1)', variable=ShowCA_VdB, command=UpdateBodeAll)
17316 BodeShowmenu.menu.add_checkbutton(label=
'CB-dBV (2)', variable=ShowCB_VdB, command=UpdateBodeAll)
17317 BodeShowmenu.menu.add_checkbutton(label=
'Phase A-B (3)', variable=ShowCA_P, command=UpdateBodeAll)
17318 BodeShowmenu.menu.add_checkbutton(label=
'Phase B-A (4)', variable=ShowCB_P, command=UpdateBodeAll)
17319 BodeShowmenu.menu.add_command(label=
"-Math-", command=donothing)
17320 BodeShowmenu.menu.add_radiobutton(label=
'None (0)', variable=ShowMathBP, value=0, command=UpdateBodeAll)
17321 BodeShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB (9)', variable=ShowMathBP, value=1, command=UpdateBodeAll)
17322 BodeShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB (8)', variable=ShowMathBP, value=2, command=UpdateBodeAll)
17323 BodeShowmenu.menu.add_command(label=
"-Impedance-", command=donothing)
17324 BodeShowmenu.menu.add_checkbutton(label=
'Series R', variable=Show_Rseries, command=UpdateBodeAll)
17325 BodeShowmenu.menu.add_checkbutton(label=
'Series X', variable=Show_Xseries, command=UpdateBodeAll)
17326 BodeShowmenu.menu.add_checkbutton(label=
'Series Mag', variable= Show_Magnitude, command=UpdateBodeAll)
17327 BodeShowmenu.menu.add_checkbutton(label=
'Series Ang', variable=Show_Angle, command=UpdateBodeAll)
17328 BodeShowmenu.menu.add_separator()
17329 BodeShowmenu.menu.add_checkbutton(label=
'RA-dBV (6)', variable=ShowCA_RdB, command=UpdateBodeAll)
17330 BodeShowmenu.menu.add_checkbutton(label=
'RB-dBV (7)', variable=ShowCB_RdB, command=UpdateBodeAll)
17331 BodeShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowCA_RP, command=UpdateBodeAll)
17332 BodeShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowCB_RP, command=UpdateBodeAll)
17333 BodeShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMathBP, command=UpdateBodeAll)
17334 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series R', variable=Show_RseriesRef, command=UpdateBodeAll)
17335 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series X', variable=Show_XseriesRef, command=UpdateBodeAll)
17336 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Mag', variable=Show_MagnitudeRef, command=UpdateBodeAll)
17337 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Ang', variable=Show_AngleRef, command=UpdateBodeAll)
17338 BodeShowmenu.pack(side=LEFT, anchor=W)
17340 BodeMarkmenu = Menubutton(tracemenu, text=
"Cursors", style=
"W7.TButton")
17341 BodeMarkmenu.menu = Menu(BodeMarkmenu, tearoff = 0 )
17342 BodeMarkmenu[
"menu"] = BodeMarkmenu.menu
17343 BodeMarkmenu.menu.add_command(label=
"-Cursors&Markers-", command=donothing)
17344 BodeMarkmenu.menu.add_checkbutton(label=
'Marker (5)', variable=ShowMarkerBP, command=UpdateBodeAll)
17345 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor', variable=ShowBPCur)
17346 BodeMarkmenu.menu.add_checkbutton(label=
'dB Cursor', variable=ShowBdBCur)
17347 BodeMarkmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowBdBCur, value=0)
17348 BodeMarkmenu.menu.add_radiobutton(label=
'dB Cursor (d)', variable=ShowBdBCur, value=1)
17349 BodeMarkmenu.menu.add_radiobutton(label=
'Phase Cursor (h)', variable=ShowBdBCur, value=2)
17350 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor (f)', variable=ShowBPCur)
17351 BodeMarkmenu.pack(side=LEFT, anchor=W)
17354 HzScale = Frame( frame2bp )
17355 HzScale.pack(side=TOP)
17356 brb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScaleBP, value=0, command=UpdateBodeTrace )
17357 brb1.pack(side=LEFT)
17358 brb2 = Radiobutton(HzScale, text=
"Log F", variable=HScaleBP, value=1, command=UpdateBodeTrace )
17359 brb2.pack(side=LEFT)
17361 DBrange = Frame( frame2bp )
17362 DBrange.pack(side=TOP)
17363 bd3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2BP)
17364 bd3.pack(side=LEFT)
17365 bd4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1BP)
17366 bd4.pack(side=LEFT)
17368 LVBrange = Frame( frame2bp )
17369 LVBrange.pack(side=TOP)
17370 bd5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4BP)
17371 bd5.pack(side=LEFT)
17372 bd6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3BP)
17373 bd6.pack(side=LEFT)
17375 LVSrange = Frame( frame2bp )
17376 LVSrange.pack(side=TOP)
17377 bd7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2BP)
17378 bd7.pack(side=LEFT)
17379 bd8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1BP)
17380 bd8.pack(side=LEFT)
17382 PhaseCenter = Frame( frame2bp )
17383 PhaseCenter.pack(side=TOP)
17384 BPhCenlab = Label(PhaseCenter, text=
"Center Phase on")
17385 BPhCenlab.pack(side=LEFT)
17386 PhCenBodeEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
17387 PhCenBodeEntry.bind(
'<Return>', onTextKey)
17388 PhCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17389 PhCenBodeEntry.bind(
"<Button-4>", onTextScroll)
17390 PhCenBodeEntry.bind(
"<Button-5>", onTextScroll)
17391 PhCenBodeEntry.bind(
'<Key>', onTextKey)
17392 PhCenBodeEntry.pack(side=LEFT)
17393 PhCenBodeEntry.delete(0,
"end")
17394 PhCenBodeEntry.insert(0,RelPhaseCenter.get())
17396 ImpedCenter = Frame( frame2bp )
17397 ImpedCenter.pack(side=TOP)
17398 ImCenlab = Label(ImpedCenter, text=
"Center Imped on")
17399 ImCenlab.pack(side=LEFT)
17400 ImCenBodeEntry = Entry(ImpedCenter, width=5, cursor=
'double_arrow')
17401 ImCenBodeEntry.bind(
'<Return>', onTextKey)
17402 ImCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17403 ImCenBodeEntry.bind(
"<Button-4>", onTextScroll)
17404 ImCenBodeEntry.bind(
"<Button-5>", onTextScroll)
17405 ImCenBodeEntry.bind(
'<Key>', onTextKey)
17406 ImCenBodeEntry.pack(side=LEFT)
17407 ImCenBodeEntry.delete(0,
"end")
17408 ImCenBodeEntry.insert(0,ImpedanceCenter.get())
17410 FSweepmenu = Label(frame2bp, text=
"-Sweep Gen-", style=
"A10B.TLabel")
17411 FSweepmenu.pack(side=TOP)
17413 Frange1 = Frame( frame2bp )
17414 Frange1.pack(side=TOP)
17415 bstartfreqlab = Label(Frange1, text=
"Start Freq")
17416 bstartfreqlab.pack(side=LEFT)
17417 StartBodeEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
17418 StartBodeEntry.bind(
'<Return>', onTextKey)
17419 StartBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17420 StartBodeEntry.bind(
"<Button-4>", onTextScroll)
17421 StartBodeEntry.bind(
"<Button-5>", onTextScroll)
17422 StartBodeEntry.bind(
'<Key>', onTextKey)
17423 StartBodeEntry.pack(side=LEFT)
17424 StartBodeEntry.delete(0,
"end")
17425 StartBodeEntry.insert(0,10)
17427 Frange2 = Frame( frame2bp )
17428 Frange2.pack(side=TOP)
17429 bstopfreqlab = Label(Frange2, text=
"Stop Freq")
17430 bstopfreqlab.pack(side=LEFT)
17431 StopBodeEntry = Entry(Frange2, width=5, cursor=
'double_arrow')
17432 StopBodeEntry.bind(
'<Return>', onTextKey)
17433 StopBodeEntry.bind(
'<MouseWheel>', onStopBodeScroll)
17434 StopBodeEntry.bind(
"<Button-4>", onTextScroll)
17435 StopBodeEntry.bind(
"<Button-5>", onTextScroll)
17436 StopBodeEntry.bind(
'<Key>', onTextKey)
17437 StopBodeEntry.pack(side=LEFT)
17438 StopBodeEntry.delete(0,
"end")
17439 StopBodeEntry.insert(0,10000)
17441 sgrb1 = Radiobutton(frame2bp, text=
'None', variable=FSweepMode, value=0)
17442 sgrb1.pack(side=TOP)
17443 Frange4 = Frame( frame2bp )
17444 Frange4.pack(side=TOP)
17445 sgrb2 = Radiobutton(Frange4, text=
'CH-A', variable=FSweepMode, value=1)
17446 sgrb2.pack(side=LEFT)
17447 sgrb3 = Radiobutton(Frange4, text=
'CH-B', variable=FSweepMode, value=2)
17448 sgrb3.pack(side=LEFT)
17449 if MinigenScreenStatus.get() > 0:
17450 sgrb1 = Radiobutton(frame2bp, text=
'MinGen', variable=FSweepMode, value=3)
17451 sgrb1.pack(side=TOP)
17452 ffcb = Checkbutton(frame2bp, text=
'Sweep From File', variable=BDSweepFile, command=BDSweepFromFile)
17453 ffcb.pack(side=TOP)
17454 Frange3 = Frame( frame2bp )
17455 Frange3.pack(side=TOP)
17456 sweepsteplab = Label(Frange3, text=
"Sweep Steps")
17457 sweepsteplab.pack(side=LEFT)
17458 SweepStepBodeEntry = Entry(Frange3, width=5, cursor=
'double_arrow')
17459 SweepStepBodeEntry.bind(
'<Return>', onTextKey)
17460 SweepStepBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17461 SweepStepBodeEntry.bind(
"<Button-4>", onTextScroll)
17462 SweepStepBodeEntry.bind(
"<Button-5>", onTextScroll)
17463 SweepStepBodeEntry.bind(
'<Key>', onTextKey)
17464 SweepStepBodeEntry.pack(side=LEFT)
17465 SweepStepBodeEntry.delete(0,
"end")
17466 SweepStepBodeEntry.insert(0,100)
17468 sgrb5 = Radiobutton(frame2bp, text=
'Single', variable=FSweepCont, value=0)
17469 sgrb5.pack(side=TOP)
17470 sgrb6 = Radiobutton(frame2bp, text=
'Continuous', variable=FSweepCont, value=1)
17471 sgrb6.pack(side=TOP)
17472 Plotsframe = Frame( frame2bp )
17473 Plotsframe.pack(side=TOP)
17474 nyquistplotbutton = Button(Plotsframe, text=
"Polar Plot", style=
"W9.TButton", command=MakeNyquistPlot)
17475 nyquistplotbutton.pack(side=LEFT)
17476 nicholsplotbutton = Button(Plotsframe, text=
"Rect Plot", style=
"W8.TButton", command=MakeNicPlot)
17477 nicholsplotbutton.pack(side=LEFT)
17478 bodismiss1button = Button(frame2bp, text=
"Dismiss", style=
"W8.TButton", command=DestroyBodeScreen)
17479 bodismiss1button.pack(side=TOP)
17481 ADI2 = Label(frame2bp, image=logo, anchor=
"sw", compound=
"top")
17482 ADI2.pack(side=TOP)
17483 if ShowBallonHelp > 0:
17488 bd5_tip =
CreateToolTip(bd5,
'Increase Ref Level by 10 dB')
17489 bd6_tip =
CreateToolTip(bd6,
'Decrease Ref Level by 10 dB')
17492 bodismiss1button_tip =
CreateToolTip(bodismiss1button,
'Dismiss Bode Plot window')
17493 if LocalLanguage !=
"English":
17497 global bodewindow, BodeScreenStatus, ca, FSweepMode
17499 BodeScreenStatus.set(0)
17503 bodewindow.destroy()
17504 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
17507 global Freqca, GRWF, XOLF, GRHF, Y0TF, CANVASwidthF, CANVASheightF, FontSize
17509 CANVASwidthF = event.width - 4
17510 CANVASheightF = event.height - 4
17511 GRWF = CANVASwidthF - (2 * X0LF)
17512 GRHF = CANVASheightF - int(10 * FontSize)
17517 global logo, SmoothCurvesSA, CutDC, SingleShotSA, FFTwindow, freqwindow, SmoothCurvesSA
17518 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMarker, FreqDisp, ShowAWGASA
17519 global ShowRA_VdB, ShowRA_P, ShowRB_VdB, ShowRB_P, ShowMathSA, SWRev, SingleShotSA, ShowAWGBSA
17520 global ShowRMath, FSweepMode, FSweepCont, Freqca, SpectrumScreenStatus, RevDate, AWGShowAdvanced
17521 global HScale, StopFreqEntry, StartFreqEntry, ShowFCur, ShowdBCur, FCursor, dBCursor
17522 global CANVASwidthF, GRWF, X0LF, CANVASheightF, GRHF, FontSize, PhCenFreqEntry, RelPhaseCenter
17523 global FrameRefief, BorderSize, LocalLanguage
17524 global sb_tip, rb_tip, bless_tip, bmore_tip, b3_tip, b4_tip, b5_tip, b6_tip, b7_tip, b8_tip, sadismiss1button_tip
17526 if SpectrumScreenStatus.get() == 0:
17527 SpectrumScreenStatus.set(1)
17530 CANVASwidthF = GRWF + 2 * X0LF
17531 CANVASheightF = GRHF + int(10 * FontSize)
17532 freqwindow = Toplevel()
17533 freqwindow.title(
"Spectrum Analyzer " + SWRev + RevDate)
17534 freqwindow.protocol(
"WM_DELETE_WINDOW", DestroySpectrumScreen)
17535 frame2fr = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
17536 frame2fr.pack(side=RIGHT, expand=NO, fill=BOTH)
17538 frame2f = Frame(freqwindow, borderwidth=BorderSize, relief=FrameRefief)
17539 frame2f.pack(side=TOP, expand=YES, fill=BOTH)
17541 Freqca = Canvas(frame2f, width=CANVASwidthF, height=CANVASheightF, background=COLORcanvas, cursor=
'cross')
17542 Freqca.bind(
'<Configure>', FreqCaresize)
17543 Freqca.bind(
'<1>', onCanvasFreqLeftClick)
17544 Freqca.bind(
'<3>', onCanvasFreqRightClick)
17545 Freqca.bind(
"<Up>", onCanvasUpArrow)
17546 Freqca.bind(
"<Down>", onCanvasDownArrow)
17547 Freqca.bind(
"<Left>", onCanvasLeftArrow)
17548 Freqca.bind(
"<Right>", onCanvasRightArrow)
17549 Freqca.bind(
"<space>", onCanvasSpaceBar)
17550 Freqca.bind(
"1", onCanvasSAOne)
17551 Freqca.bind(
"2", onCanvasSATwo)
17552 Freqca.bind(
"3", onCanvasSAThree)
17553 Freqca.bind(
"4", onCanvasSAFour)
17554 Freqca.bind(
"5", onCanvasSAFive)
17555 Freqca.bind(
"6", onCanvasSASix)
17556 Freqca.bind(
"7", onCanvasSASeven)
17557 Freqca.bind(
"8", onCanvasSAEight)
17558 Freqca.bind(
"9", onCanvasSANine)
17559 Freqca.bind(
"0", onCanvasSAZero)
17560 Freqca.bind(
"a", onCanvasSAAverage)
17561 Freqca.bind(
"n", onCanvasSANormal)
17562 Freqca.bind(
"p", onCanvasSAPeak)
17563 Freqca.bind(
"r", onCanvasSAReset)
17564 Freqca.bind(
"f", onCanvasShowFcur)
17565 Freqca.bind(
"d", onCanvasShowdBcur)
17566 Freqca.bind(
"h", onCanvasShowPcur)
17567 Freqca.bind(
"s", onCanvasSASnap)
17568 Freqca.pack(side=TOP, expand=YES, fill=BOTH)
17570 dropmenu = Frame( frame2fr )
17571 dropmenu.pack(side=TOP)
17573 SAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
17574 SAFilemenu.menu = Menu(SAFilemenu, tearoff = 0 )
17575 SAFilemenu[
"menu"] = SAFilemenu.menu
17576 SAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigSA)
17577 SAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigSA)
17578 SAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenSA)
17579 SAFilemenu.menu.add_command(label=
"Save Data", command=STOREcsvfile)
17580 SAFilemenu.pack(side=LEFT, anchor=W)
17582 SAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
17583 SAOptionmenu.menu = Menu(SAOptionmenu, tearoff = 0 )
17584 SAOptionmenu[
"menu"] = SAOptionmenu.menu
17585 SAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
17586 SAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
17587 SAOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesSA)
17588 SAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
17589 SAOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceSA)
17590 SAOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
17591 SAOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
17592 SAOptionmenu.pack(side=LEFT, anchor=W)
17594 RUNframe = Frame( frame2fr )
17595 RUNframe.pack(side=TOP)
17596 sarb = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartSA)
17597 sarb.pack(side=LEFT)
17598 sasb = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopSA)
17599 sasb.pack(side=LEFT)
17601 Modeframe = Frame( frame2fr )
17602 Modeframe.pack(side=TOP)
17603 Modemenu = Menubutton(Modeframe, text=
"Mode", style=
"W5.TButton")
17604 Modemenu.menu = Menu(Modemenu, tearoff = 0 )
17605 Modemenu[
"menu"] = Modemenu.menu
17606 Modemenu.menu.add_command(label=
"Normal mode [n]", command=BNormalmode)
17607 Modemenu.menu.add_command(label=
"Peak hold [p]", command=BPeakholdmode)
17608 Modemenu.menu.add_command(label=
"Average [a]", command=BAveragemode)
17609 Modemenu.menu.add_command(label=
"Reset Average [r]", command=BResetFreqAvg)
17610 Modemenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShotSA)
17611 Modemenu.pack(side=LEFT)
17613 SAFFTwindmenu = Menubutton(Modeframe, text=
"FFTwindow", style=
"W11.TButton")
17614 SAFFTwindmenu.menu = Menu(SAFFTwindmenu, tearoff = 0 )
17615 SAFFTwindmenu[
"menu"] = SAFFTwindmenu.menu
17616 SAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
17617 SAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
17618 SAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
17619 SAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
17620 SAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
17621 SAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
17622 SAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
17623 SAFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
17624 SAFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
17625 SAFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
17626 SAFFTwindmenu.pack(side=LEFT)
17628 SamplesMenu = Frame( frame2fr )
17629 SamplesMenu.pack(side=TOP)
17630 bless = Button(SamplesMenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
17631 bless.pack(side=LEFT)
17632 bmore = Button(SamplesMenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
17633 bmore.pack(side=LEFT)
17637 MarkersMenu = Frame( frame2fr )
17638 MarkersMenu.pack(side=TOP)
17639 SAShowmenu = Menubutton(MarkersMenu, text=
"Curves", style=
"W7.TButton")
17640 SAShowmenu.menu = Menu(SAShowmenu, tearoff = 0 )
17641 SAShowmenu[
"menu"] = SAShowmenu.menu
17642 SAShowmenu.menu.add_command(label=
"-Show-", command=donothing)
17643 SAShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllSA)
17644 SAShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneSA)
17645 SAShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowC1_VdB, command=UpdateFreqAll)
17646 SAShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowC2_VdB, command=UpdateFreqAll)
17647 SAShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowC1_P, command=UpdateFreqAll)
17648 SAShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowC2_P, command=UpdateFreqAll)
17649 SAShowmenu.menu.add_command(label=
"-Math-", command=donothing)
17650 SAShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathSA, value=0, command=UpdateFreqAll)
17651 SAShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathSA, value=1, command=UpdateFreqAll)
17652 SAShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathSA, value=2, command=UpdateFreqAll)
17653 if AWGShowAdvanced.get() > 0:
17654 SAShowmenu.menu.add_command(label=
"-AWG-", command=donothing)
17655 SAShowmenu.menu.add_checkbutton(label=
'AWG A', variable=ShowAWGASA, command=UpdateFreqAll)
17656 SAShowmenu.menu.add_checkbutton(label=
'AWG B', variable=ShowAWGBSA, command=UpdateFreqAll)
17657 SAShowmenu.menu.add_command(label=
"-Ref Trace-", command=donothing)
17658 SAShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowRA_VdB, command=UpdateFreqAll)
17659 SAShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowRB_VdB, command=UpdateFreqAll)
17660 SAShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowRA_P, command=UpdateFreqAll)
17661 SAShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowRB_P, command=UpdateFreqAll)
17662 SAShowmenu.menu.add_checkbutton(label=
'Ref Math', variable=ShowRMath, command=UpdateFreqAll)
17663 SAShowmenu.pack(side=LEFT)
17664 SACursormenu = Menubutton(MarkersMenu, text=
"Cursors", style=
"W7.TButton")
17665 SACursormenu.menu = Menu(SACursormenu, tearoff = 0 )
17666 SACursormenu[
"menu"] = SACursormenu.menu
17667 SACursormenu.menu.add_command(label=
"-Marker-", command=donothing)
17668 SACursormenu.menu.add_radiobutton(label=
'Markers Off', variable=ShowMarker, value=0, command=UpdateFreqAll)
17669 SACursormenu.menu.add_radiobutton(label=
'Markers [5]', variable=ShowMarker, value=1, command=UpdateFreqAll)
17670 SACursormenu.menu.add_radiobutton(label=
'Delta Markers', variable=ShowMarker, value=2, command=UpdateFreqAll)
17671 SACursormenu.menu.add_command(label=
"-Cursors-", command=donothing)
17672 SACursormenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowdBCur, value=0)
17673 SACursormenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowdBCur, value=1)
17675 SACursormenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowFCur)
17676 SACursormenu.pack(side=LEFT)
17678 Frange1 = Frame( frame2fr )
17679 Frange1.pack(side=TOP)
17680 startfreqlab = Label(Frange1, text=
"Startfreq")
17681 startfreqlab.pack(side=LEFT)
17682 StartFreqEntry = Entry(Frange1, width=5, cursor=
'double_arrow')
17683 StartFreqEntry.bind(
'<Return>', onTextKey)
17684 StartFreqEntry.bind(
'<MouseWheel>', onTextScroll)
17685 StartFreqEntry.bind(
"<Button-4>", onTextScroll)
17686 StartFreqEntry.bind(
"<Button-5>", onTextScroll)
17687 StartFreqEntry.bind(
'<Key>', onTextKey)
17688 StartFreqEntry.pack(side=LEFT)
17689 StartFreqEntry.delete(0,
"end")
17690 StartFreqEntry.insert(0,10)
17692 Frange2 = Frame( frame2fr )
17693 Frange2.pack(side=TOP)
17694 stopfreqlab = Label(Frange2, text=
"Stopfreq")
17695 stopfreqlab.pack(side=LEFT)
17696 StopFreqEntry = Entry(Frange2, width=7, cursor=
'double_arrow')
17697 StopFreqEntry.bind(
'<Return>', onTextKey)
17698 StopFreqEntry.bind(
'<MouseWheel>', onStopfreqScroll)
17699 StopFreqEntry.bind(
"<Button-4>", onStopfreqScroll)
17700 StopFreqEntry.bind(
"<Button-5>", onStopfreqScroll)
17701 StopFreqEntry.bind(
'<Key>', onTextKey)
17702 StopFreqEntry.pack(side=LEFT)
17703 StopFreqEntry.delete(0,
"end")
17704 StopFreqEntry.insert(0,10000)
17707 HzScale = Frame( frame2fr )
17708 HzScale.pack(side=TOP)
17709 sarb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScale, value=0, command=UpdateFreqTrace )
17710 sarb1.pack(side=LEFT)
17711 sarb2 = Radiobutton(HzScale, text=
"Log F", variable=HScale, value=1, command=UpdateFreqTrace )
17712 sarb2.pack(side=LEFT)
17714 PhaseCenter = Frame( frame2fr )
17715 PhaseCenter.pack(side=TOP)
17716 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
17717 PhCenlab.pack(side=LEFT)
17718 PhCenFreqEntry = Entry(PhaseCenter, width=5, cursor=
'double_arrow')
17719 PhCenFreqEntry.bind(
'<Return>', onTextKey)
17720 PhCenFreqEntry.bind(
'<MouseWheel>', onTextScroll)
17721 PhCenFreqEntry.bind(
"<Button-4>", onTextScroll)
17722 PhCenFreqEntry.bind(
"<Button-5>", onTextScroll)
17723 PhCenFreqEntry.bind(
'<Key>', onTextKey)
17724 PhCenFreqEntry.pack(side=LEFT)
17725 PhCenFreqEntry.delete(0,
"end")
17726 PhCenFreqEntry.insert(0,RelPhaseCenter.get())
17728 DBrange = Frame( frame2fr )
17729 DBrange.pack(side=TOP)
17730 sab3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2)
17731 sab3.pack(side=LEFT)
17732 sab4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1)
17733 sab4.pack(side=LEFT)
17735 LVBrange = Frame( frame2fr )
17736 LVBrange.pack(side=TOP)
17737 sab5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4)
17738 sab5.pack(side=LEFT)
17739 sab6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3)
17740 sab6.pack(side=LEFT)
17742 LVSrange = Frame( frame2fr )
17743 LVSrange.pack(side=TOP)
17744 sab7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2)
17745 sab7.pack(side=LEFT)
17746 sab8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1)
17747 sab8.pack(side=LEFT)
17749 sadismiss1button = Button(frame2fr, text=
"Dismiss", style=
"W8.TButton", command=DestroySpectrumScreen)
17750 sadismiss1button.pack(side=TOP)
17752 ADI2 = Label(frame2fr, image=logo, anchor=
"sw", compound=
"top")
17753 ADI2.pack(side=TOP)
17754 if ShowBallonHelp > 0:
17761 b5_tip =
CreateToolTip(sab5,
'Increase Ref Level by 10 dB')
17762 b6_tip =
CreateToolTip(sab6,
'Decrease Ref Level by 10 dB')
17765 sadismiss1button_tip =
CreateToolTip(sadismiss1button,
'Dismiss Spectrum Analyzer window')
17766 if LocalLanguage !=
"English":
17770 global freqwindow, SpectrumScreenStatus, ca
17772 SpectrumScreenStatus.set(0)
17775 freqwindow.destroy()
17776 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
17779 global XYca, GRWXY, XOLXY, GRHXY, Y0TXY, CANVASwidthXY, CANVASheightXY, FontSize
17780 global YminXY, YmaxXY, XminXY, XmaxXY
17782 CANVASwidthXY = event.width - 4
17783 CANVASheightXY = event.height - 4
17784 GRWXY = CANVASwidthXY - int(2.25 * FontSize) - X0LXY
17785 GRHXY = CANVASheightXY - int(10 * FontSize)
17787 YmaxXY = Y0TXY + GRHXY
17789 XmaxXY = X0LXY + GRWXY
17794 global logo, CANVASwidthXY, CANVASheightXY, Xsignal, Ysignal, ShowRXY
17795 global XYScreenStatus, MarkerXYScale, XYca, xywindow, RevDate, SWRev, XYDisp
17796 global CHAsbxy, CHBsbxy, CHAxylab, CHBxylab, CHAVPosEntryxy, CHBVPosEntryxy
17797 global CHAIsbxy, CHBIsbxy, CHAIPosEntryxy, CHBIPosEntryxy, ScreenXYrefresh
17798 global YminXY, Y0TXY, YmaxXY, GRHXY, XminXY, X0LXY, XmaxXY, X0LXY, GRWXY, CANVASwidthXY, CANVASheightXY
17799 global FrameRefief, BorderSize, LocalLanguage
17800 global math_tip, bsxy_tip, brxy_tip, snapbutton_tip, savebutton_tip, dismissxybutton_tip, CHAxylab_tip
17801 global CHBxylab_tip, CHAxyofflab_tip, CHBxyofflab_tip, CHAIxyofflab_tip, CHBIxyofflab_tip
17803 if XYScreenStatus.get() == 0:
17804 XYScreenStatus.set(1)
17808 YmaxXY = Y0TXY + GRHXY
17810 XmaxXY = X0LXY + GRWXY
17811 CANVASwidthXY = GRWXY + 18 + X0LXY
17812 CANVASheightXY = GRHXY + 80
17813 xywindow = Toplevel()
17814 xywindow.title(
"X-Y Plot " + SWRev + RevDate)
17815 xywindow.protocol(
"WM_DELETE_WINDOW", DestroyXYScreen)
17816 frame2xyr = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
17817 frame2xyr.pack(side=RIGHT, expand=NO, fill=BOTH)
17819 frame2xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
17820 frame2xy.pack(side=TOP, expand=YES, fill=BOTH)
17822 frame3xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
17823 frame3xy.pack(side=TOP, expand=NO, fill=BOTH)
17825 frame4xy = Frame(xywindow, borderwidth=BorderSize, relief=FrameRefief)
17826 frame4xy.pack(side=TOP, expand=NO, fill=BOTH)
17828 XYca = Canvas(frame2xy, width=CANVASwidthXY, height=CANVASheightXY, background=COLORcanvas, cursor=
'cross')
17829 XYca.bind(
'<Configure>', XYcaresize)
17830 XYca.bind(
'<1>', onCanvasXYLeftClick)
17831 XYca.bind(
'<3>', onCanvasXYRightClick)
17832 XYca.bind(
"<Motion>",onCanvasMouse_xy)
17833 XYca.bind(
'<MouseWheel>', onCanvasXYScrollClick)
17834 XYca.bind(
"<Button-4>", onCanvasXYScrollClick)
17835 XYca.bind(
"<Button-5>", onCanvasXYScrollClick)
17836 XYca.bind(
"<Up>", onCanvasUpArrow)
17837 XYca.bind(
"<Down>", onCanvasDownArrow)
17838 XYca.bind(
"<Left>", onCanvasLeftArrow)
17839 XYca.bind(
"<Right>", onCanvasRightArrow)
17840 XYca.bind(
"<space>", onCanvasSpaceBar)
17841 XYca.bind(
"a", onCanvasAverage)
17842 XYca.pack(side=TOP, fill=BOTH, expand=YES)
17844 RUNframe = Frame( frame2xyr )
17845 RUNframe.pack(side=TOP)
17846 rbxy = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStart)
17847 rbxy.pack(side=LEFT)
17848 sbxy = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStop)
17849 sbxy.pack(side=LEFT)
17851 mathbt = Button(frame2xyr, text=
"Math", style=
"W5.TButton", command = NewEnterMathControls)
17852 mathbt.pack(side=TOP)
17855 AxisLabX = Label(frame2xyr, text =
"-X Axis-", style=
"A10R1.TLabelframe.Label")
17856 AxisLabX.pack(side=TOP)
17857 chaxmenu = Frame( frame2xyr )
17858 chaxmenu.pack(side=TOP)
17859 rbx2 = Radiobutton(chaxmenu, text=
'CA-V', variable=Xsignal, value=1, command=UpdateXYTrace)
17860 rbx2.pack(side=LEFT, anchor=W)
17861 rbx3 = Radiobutton(chaxmenu, text=
'CA-I', variable=Xsignal, value=2, command=UpdateXYTrace)
17862 rbx3.pack(side=LEFT, anchor=W)
17863 chbxmenu = Frame( frame2xyr )
17864 chbxmenu.pack(side=TOP)
17865 rbx4 = Radiobutton(chbxmenu, text=
'CB-V', variable=Xsignal, value=3, command=UpdateXYTrace)
17866 rbx4.pack(side=LEFT, anchor=W)
17867 rbx5 = Radiobutton(chbxmenu, text=
'CB-I', variable=Xsignal, value=4, command=UpdateXYTrace)
17868 rbx5.pack(side=LEFT, anchor=W)
17869 rbx7 = Radiobutton(frame2xyr, text=
'Histogram CA-V', variable=Xsignal, value=6, command=BHistAsPercent)
17870 rbx7.pack(side=TOP)
17871 rbx8 = Radiobutton(frame2xyr, text=
'Histogram CB-V', variable=Xsignal, value=7, command=BHistAsPercent)
17872 rbx8.pack(side=TOP)
17873 rbx6 = Radiobutton(frame2xyr, text=
'Math', variable=Xsignal, value=5, command=UpdateXYTrace)
17874 rbx6.pack(side=TOP)
17876 AxisLabY = Label(frame2xyr, text =
"-Y Axis-", style=
"A10R2.TLabelframe.Label")
17877 AxisLabY.pack(side=TOP)
17878 chaymenu = Frame( frame2xyr )
17879 chaymenu.pack(side=TOP)
17880 rby2 = Radiobutton(chaymenu, text=
'CA-V', variable=Ysignal, value=1, command=UpdateXYTrace)
17881 rby2.pack(side=LEFT, anchor=W)
17882 rby3 = Radiobutton(chaymenu, text=
'CA-I', variable=Ysignal, value=2, command=UpdateXYTrace)
17883 rby3.pack(side=LEFT, anchor=W)
17884 chbymenu = Frame( frame2xyr )
17885 chbymenu.pack(side=TOP)
17886 rby4 = Radiobutton(chbymenu, text=
'CB-V', variable=Ysignal, value=3, command=UpdateXYTrace)
17887 rby4.pack(side=LEFT, anchor=W)
17888 rby5 = Radiobutton(chbymenu, text=
'CB-I', variable=Ysignal, value=4, command=UpdateXYTrace)
17889 rby5.pack(side=LEFT, anchor=W)
17890 rby6 = Radiobutton(frame2xyr, text=
'Math', variable=Ysignal, value=5, command=UpdateXYTrace)
17891 rby6.pack(side=TOP)
17893 cursormenu = Frame( frame2xyr )
17894 cursormenu.pack(side=TOP)
17895 cb1 = Checkbutton(cursormenu, text=
'X-Cur', variable=ShowXCur)
17896 cb1.pack(side=LEFT, anchor=W)
17897 cb2 = Checkbutton(cursormenu, text=
'Y-Cur', variable=ShowYCur)
17898 cb2.pack(side=LEFT, anchor=W)
17899 cb3 = Checkbutton(frame2xyr, text=
'RX-Y', variable=ShowRXY, command=UpdateXYTrace)
17901 cb4 = Checkbutton(frame2xyr, text=
'Persistance', variable=ScreenXYrefresh, command=UpdateXYTrace)
17904 snapbutton = Button(frame2xyr, style=
"W11.TButton", text=
"SnapShot", command=BSnapShot)
17905 snapbutton.pack(side=TOP)
17906 savebutton = Button(frame2xyr, style=
"W11.TButton", text=
"Save Screen", command=BSaveScreenXY)
17907 savebutton.pack(side=TOP)
17908 dismissxybutton = Button(frame2xyr, style=
"W7.TButton", text=
"Dismiss", command=DestroyXYScreen)
17909 dismissxybutton.pack(side=TOP)
17910 ADI1xy = Label(frame2xyr, image=logo, anchor=
"sw", compound=
"top")
17911 ADI1xy.pack(side=TOP)
17914 MarkerXYScale = IntVar(0)
17915 MarkerXYScale.set(1)
17917 CHAsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
17918 CHAsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17919 CHAsbxy.bind(
"<Button-4>", onSpinBoxScroll)
17920 CHAsbxy.bind(
"<Button-5>", onSpinBoxScroll)
17921 CHAsbxy.pack(side=LEFT)
17922 CHAsbxy.delete(0,
"end")
17923 CHAsbxy.insert(0,0.5)
17924 CHAxylab = Button(frame3xy, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetXYScaleA)
17925 CHAxylab.pack(side=LEFT)
17927 CHAVPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
17928 CHAVPosEntryxy.bind(
'<Return>', onTextKey)
17929 CHAVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17930 CHAVPosEntryxy.bind(
"<Button-4>", onTextScroll)
17931 CHAVPosEntryxy.bind(
"<Button-5>", onTextScroll)
17932 CHAVPosEntryxy.bind(
'<Key>', onTextKey)
17933 CHAVPosEntryxy.pack(side=LEFT)
17934 CHAVPosEntryxy.delete(0,
"end")
17935 CHAVPosEntryxy.insert(0,2.5)
17936 CHAofflabxy = Button(frame3xy, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetXYVAPoss)
17937 CHAofflabxy.pack(side=LEFT)
17939 CHAIsbxy = Spinbox(frame3xy, width=4, cursor=
'double_arrow', values=CHipdiv)
17940 CHAIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17941 CHAIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
17942 CHAIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
17943 CHAIsbxy.pack(side=LEFT)
17944 CHAIsbxy.delete(0,
"end")
17945 CHAIsbxy.insert(0,50.0)
17946 CHAIlabxy = Label(frame3xy, text=
"CA mA/Div", style=
"Strace3.TButton")
17947 CHAIlabxy.pack(side=LEFT)
17949 CHAIPosEntryxy = Entry(frame3xy, width=5, cursor=
'double_arrow')
17950 CHAIPosEntryxy.bind(
'<Return>', onTextKey)
17951 CHAIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17952 CHAIPosEntryxy.bind(
"<Button-4>", onTextScroll)
17953 CHAIPosEntryxy.bind(
"<Button-5>", onTextScroll)
17954 CHAIPosEntryxy.bind(
'<Key>', onTextKey)
17955 CHAIPosEntryxy.pack(side=LEFT)
17956 CHAIPosEntryxy.delete(0,
"end")
17957 CHAIPosEntryxy.insert(0,0.0)
17958 CHAIofflabxy = Button(frame3xy, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetXYIAPoss)
17959 CHAIofflabxy.pack(side=LEFT)
17961 CHBsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHvpdiv)
17962 CHBsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17963 CHBsbxy.bind(
"<Button-4>", onSpinBoxScroll)
17964 CHBsbxy.bind(
"<Button-5>", onSpinBoxScroll)
17965 CHBsbxy.pack(side=LEFT)
17966 CHBsbxy.delete(0,
"end")
17967 CHBsbxy.insert(0,0.5)
17969 CHBxylab = Button(frame4xy, text=
"CB V/Div", style=
"Strace2.TButton", command=SetXYScaleB)
17970 CHBxylab.pack(side=LEFT)
17972 CHBVPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
17973 CHBVPosEntryxy.bind(
'<Return>', onTextKey)
17974 CHBVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17975 CHBVPosEntryxy.bind(
"<Button-4>", onTextScroll)
17976 CHBVPosEntryxy.bind(
"<Button-5>", onTextScroll)
17977 CHBVPosEntryxy.bind(
'<Key>', onTextKey)
17978 CHBVPosEntryxy.pack(side=LEFT)
17979 CHBVPosEntryxy.delete(0,
"end")
17980 CHBVPosEntryxy.insert(0,2.5)
17981 CHBofflabxy = Button(frame4xy, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetXYVBPoss)
17982 CHBofflabxy.pack(side=LEFT)
17984 CHBIsbxy = Spinbox(frame4xy, width=4, cursor=
'double_arrow', values=CHipdiv)
17985 CHBIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17986 CHBIsbxy.bind(
"<Button-4>", onSpinBoxScroll)
17987 CHBIsbxy.bind(
"<Button-5>", onSpinBoxScroll)
17988 CHBIsbxy.pack(side=LEFT)
17989 CHBIsbxy.delete(0,
"end")
17990 CHBIsbxy.insert(0,50.0)
17991 CHBIlabxy = Label(frame4xy, text=
"CB mA/Div", style=
"Strace4.TButton")
17992 CHBIlabxy.pack(side=LEFT)
17994 CHBIPosEntryxy = Entry(frame4xy, width=5, cursor=
'double_arrow')
17995 CHBIPosEntryxy.bind(
'<Return>', onTextKey)
17996 CHBIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17997 CHBIPosEntryxy.bind(
"<Button-4>", onTextScroll)
17998 CHBIPosEntryxy.bind(
"<Button-5>", onTextScroll)
17999 CHBIPosEntryxy.bind(
'<Key>', onTextKey)
18000 CHBIPosEntryxy.pack(side=LEFT)
18001 CHBIPosEntryxy.delete(0,
"end")
18002 CHBIPosEntryxy.insert(0,0.0)
18003 CHBIofflabxy = Button(frame4xy, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetXYIBPoss)
18004 CHBIofflabxy.pack(side=LEFT)
18006 if ShowBallonHelp > 0:
18014 snapbutton_tip =
CreateToolTip(snapbutton,
'Take snap shot of current trace')
18015 savebutton_tip =
CreateToolTip(savebutton,
'Save current trace to EPS file')
18016 dismissxybutton_tip =
CreateToolTip(dismissxybutton,
'Diamiss X-Y plot window')
18017 CHAxylab_tip =
CreateToolTip(CHAxylab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
18018 CHBxylab_tip =
CreateToolTip(CHBxylab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
18019 CHAxyofflab_tip =
CreateToolTip(CHAofflabxy,
'Set CHA-V position to DC average of signal')
18020 CHBxyofflab_tip =
CreateToolTip(CHBofflabxy,
'Set CHB-V position to DC average of signal')
18021 CHAIxyofflab_tip =
CreateToolTip(CHAIofflabxy,
'Set CHA-I position to DC average of signal')
18022 CHBIxyofflab_tip =
CreateToolTip(CHBIofflabxy,
'Set CHB-I position to DC average of signal')
18023 if LocalLanguage !=
"English":
18027 global xywindow, XYScreenStatus, ca, XYDisp
18029 XYScreenStatus.set(0)
18033 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
18038 global DevID, devx, CHA, CHB, RevDate, OnBoardRes, AD584act, FWRevOne
18039 global discontloop, contloop, session, AWGSync, SWRev
18042 if FWRevOne < 2.06:
18043 showwarning(
"WARNING",
"Out of date Firmware Revision!")
18045 calwindow = Toplevel()
18046 calwindow.title(
"ALM1000 Calibration tool " + SWRev + RevDate)
18048 SCallab = Label(calwindow, text=
"Channel Gain / Offset calibration")
18049 SCallab.grid(row=0, column=0, columnspan=2, sticky=W)
18050 labelA0 = Label(calwindow, style=
"A12B.TLabel")
18051 labelA0.grid(row=1, column=0, columnspan=2, sticky=W)
18052 labelA0.config(text =
"CA gnd Volts")
18053 labelAMax = Label(calwindow, style=
"A12B.TLabel")
18054 labelAMax.grid(row=2, column=0, columnspan=2, sticky=W)
18055 labelAMax.config(text =
"CA 584 Volts")
18056 labelAMin = Label(calwindow, style=
"A12B.TLabel")
18057 labelAMin.grid(row=3, column=0, columnspan=2, sticky=W)
18058 labelAMin.config(text =
"CA 5V Src I ")
18059 labelB0 = Label(calwindow, style=
"A12B.TLabel")
18060 labelB0.grid(row=4, column=0, columnspan=2, sticky=W)
18061 labelB0.config(text =
"CA gnd Volts")
18062 labelBMax = Label(calwindow, style=
"A12B.TLabel")
18063 labelBMax.grid(row=5, column=0, columnspan=2, sticky=W)
18064 labelBMax.config(text =
"CB 584 Volts")
18065 labelBMin = Label(calwindow, style=
"A12B.TLabel")
18066 labelBMin.grid(row=6, column=0, columnspan=2, sticky=W)
18067 labelBMin.config(text =
"CB 5V Src I ")
18068 labelAB = Label(calwindow, style=
"A12B.TLabel")
18069 labelAB.grid(row=7, column=0, columnspan=2, sticky=W)
18070 labelAB.config(text =
"CA 0V Src I")
18071 labelBA = Label(calwindow, style=
"A12B.TLabel")
18072 labelBA.grid(row=8, column=0, columnspan=2, sticky=W)
18073 labelBA.config(text =
"CA 0V Src I")
18074 labelSIA0 = Label(calwindow, style=
"A12B.TLabel")
18075 labelSIA0.grid(row=9, column=0, columnspan=2, sticky=W)
18076 labelSIA0.config(text =
"CA 2.5 Src 0 I")
18077 labelSIA = Label(calwindow, style=
"A12B.TLabel")
18078 labelSIA.grid(row=10, column=0, columnspan=2, sticky=W)
18079 labelSIA.config(text =
"CA 50 Src 100 ")
18080 labelSIAN = Label(calwindow, style=
"A12B.TLabel")
18081 labelSIAN.grid(row=11, column=0, columnspan=2, sticky=W)
18082 labelSIAN.config(text =
"CA 50 Src -45")
18083 labelSIB0 = Label(calwindow, style=
"A12B.TLabel")
18084 labelSIB0.grid(row=12, column=0, columnspan=2, sticky=W)
18085 labelSIB0.config(text =
"CB 2.5 Src 0 I")
18086 labelSIB = Label(calwindow, style=
"A12B.TLabel")
18087 labelSIB.grid(row=13, column=0, columnspan=2, sticky=W)
18088 labelSIB.config(text =
"CB 50 Src 100 ")
18089 labelSIBN = Label(calwindow, style=
"A12B.TLabel")
18090 labelSIBN.grid(row=14, column=0, columnspan=2, sticky=W)
18091 labelSIBN.config(text =
"CB 50 Src -45")
18093 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
18094 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
18097 if session.continuous:
18098 print(
"ending session")
18101 if askyesno(
"Reset Calibration",
"Do You Need To Reset Default Calibration?", parent=calwindow):
18104 devx.write_calibration(
"calib_default.txt")
18107 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Default Cal File",
"*.txt")], parent=calwindow)
18108 devx.write_calibration(filename)
18111 devidstr = DevID[17:31]
18112 filename =
"calib" + devidstr +
".txt"
18113 if os.path.isfile(filename):
18114 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?", parent=calwindow):
18115 devx.write_calibration(filename)
18117 calwindow.destroy()
18120 if askyesno(
"Continue?",
"Continure with self calibration?", parent=calwindow):
18123 calwindow.destroy()
18126 CalFile = open(filename,
"w")
18128 CHA.mode = Mode.HI_Z
18129 CHB.mode = Mode.HI_Z
18130 devx.ctrl_transfer( 0x40, 0x50, 34, 0, 0, 0, 100)
18131 devx.ctrl_transfer( 0x40, 0x50, 39, 0, 0, 0, 100)
18133 ADsignal1 = devx.get_samples(1010)
18136 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
18137 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18138 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
18139 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18140 RequestVRef = askstring(
"External Reference",
"Enter External Reference Voltage", initialvalue=AD584act, parent=root)
18142 AD584act = float(RequestVRef)*1.0
18145 showinfo(
"CONNECT",
"Connect External Voltage to both CHA and CHB inputs.", parent=calwindow)
18148 CHA.mode = Mode.HI_Z
18149 CHB.mode = Mode.HI_Z
18150 ADsignal1 = devx.get_samples(1010)
18151 CHA584Raw = CHB584Raw = 0.0
18153 for index
in range(1000):
18154 CHA584Raw += ADsignal1[index+10][0][0]
18155 CHB584Raw += ADsignal1[index+10][1][0]
18157 CHA584Raw = CHA584Raw / 1000.0
18158 CHB584Raw = CHB584Raw / 1000.0
18159 VString =
"Extern A Volts " +
' {0:.4f} '.format(CHA584Raw)
18160 labelAMax.config(text = VString)
18161 VString =
"Extern B Volts " +
' {0:.4f} '.format(CHB584Raw)
18162 labelBMax.config(text = VString)
18163 Lower = AD584act - 0.3
18164 Upper = AD584act + 0.3
18165 if CHA584Raw < Lower
or CHA584Raw > Upper
or CHB584Raw < Lower
or CHB584Raw > Upper:
18166 if askyesno(
"CONNECT",
"Did not get good data from Ref V check connections!\n Abort(Y) or Try again(N)", parent=calwindow):
18167 CHA.mode = Mode.HI_Z
18168 CHB.mode = Mode.HI_Z
18171 calwindow.destroy()
18176 showinfo(
"DISCONNECT",
"Disconnect everything from CHA and CHB pins.", parent=calwindow)
18177 CHAGndRaw = CHBGndRaw = CHAI0gRaw = CHBI0gRaw = 0.0
18179 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
18180 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
18181 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
18182 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
18183 CHA.mode = Mode.HI_Z
18184 CHB.mode = Mode.HI_Z
18185 ADsignal1 = devx.get_samples(1010)
18187 for index
in range(1000):
18188 CHAGndRaw += ADsignal1[index+10][0][0]
18189 CHBGndRaw += ADsignal1[index+10][1][0]
18190 CHAI0gRaw += ADsignal1[index+10][0][1]
18191 CHBI0gRaw += ADsignal1[index+10][1][1]
18193 CHAGndRaw = CHAGndRaw / 1000.0
18194 CHAI0gRaw = CHAI0gRaw / 1000.0
18195 CHBGndRaw = CHBGndRaw / 1000.0
18196 CHBI0gRaw = CHBI0gRaw / 1000.0
18197 VString =
"CA gnd Volts " +
' {0:.4f} '.format(CHAGndRaw)
18198 labelA0.config(text = VString)
18199 VString =
"CB gnd Volts " +
' {0:.4f} '.format(CHBGndRaw)
18200 labelB0.config(text = VString)
18201 CHA2p5Raw = CHB2p5Raw = CHAI02p5Raw = CHBI02p5Raw = 0.0
18203 CHA.mode = Mode.HI_Z
18204 CHB.mode = Mode.HI_Z
18205 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
18206 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18207 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
18208 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18209 ADsignal1 = devx.get_samples(1010)
18211 for index
in range(1000):
18212 CHA2p5Raw += ADsignal1[index+10][0][0]
18213 CHB2p5Raw += ADsignal1[index+10][1][0]
18214 CHAI02p5Raw += ADsignal1[index+10][0][1]
18215 CHBI02p5Raw += ADsignal1[index+10][1][1]
18217 CHA2p5Raw = CHA2p5Raw / 1000.0
18218 CHAI02p5Raw = CHAI02p5Raw / 1000.0
18219 CHB2p5Raw = CHB2p5Raw / 1000.0
18220 CHBI02p5Raw = CHBI02p5Raw / 1000.0
18222 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
18223 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18224 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
18225 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18226 CHA.mode = Mode.SVMI
18228 CHB.mode = Mode.SVMI
18230 ADsignal1 = devx.get_samples(1010)
18231 CHAF0vRaw = CHBF0vRaw = CHAI0F0Raw = CHBI0F0Raw = 0.0
18233 for index
in range(1000):
18234 CHAF0vRaw += ADsignal1[index+10][0][0]
18235 CHBF0vRaw += ADsignal1[index+10][1][0]
18236 CHAI0F0Raw += ADsignal1[index+10][0][1]
18237 CHBI0F0Raw += ADsignal1[index+10][1][1]
18239 CHAF0vRaw = CHAF0vRaw / 1000.0
18240 CHAI0F0Raw = CHAI0F0Raw / 1000.0
18241 CHBF0vRaw = CHBF0vRaw / 1000.0
18242 CHBI0F0Raw = CHBI0F0Raw / 1000.0
18244 CHA.mode = Mode.SVMI
18246 CHB.mode = Mode.SVMI
18248 ADsignal1 = devx.get_samples(1010)
18249 CHAF25vRaw = CHAI0F25Raw = CHBF25vRaw = CHBI0F25Raw = 0.0
18251 for index
in range(1000):
18252 CHAF25vRaw += ADsignal1[index+10][0][0]
18253 CHBF25vRaw += ADsignal1[index+10][1][0]
18254 CHAI0F25Raw += ADsignal1[index+10][0][1]
18255 CHBI0F25Raw += ADsignal1[index+10][1][1]
18257 CHAF25vRaw = CHAF25vRaw / 1000.0
18258 CHAI0F25Raw = CHAI0F25Raw / 1000.0
18259 CHBF25vRaw = CHBF25vRaw / 1000.0
18260 CHBI0F25Raw = CHBI0F25Raw / 1000.0
18263 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
18264 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
18265 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
18266 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
18267 CHA.mode = Mode.SVMI
18269 CHB.mode = Mode.SVMI
18271 ADsignal1 = devx.get_samples(1010)
18272 CHASr5vRaw = CHAISr5vRaw = CHBSr5vRaw = CHBISr5vRaw = 0.0
18273 for index
in range(1000):
18274 CHASr5vRaw += ADsignal1[index+10][0][0]
18275 CHBSr5vRaw += ADsignal1[index+10][1][0]
18276 CHAISr5vRaw += ADsignal1[index+10][0][1]
18277 CHBISr5vRaw += ADsignal1[index+10][1][1]
18279 CHASr5vRaw = CHASr5vRaw / 1000.0
18280 CHAISr5vRaw = CHAISr5vRaw / 1000.0
18281 CHBSr5vRaw = CHBSr5vRaw / 1000.0
18282 CHBISr5vRaw = CHBISr5vRaw / 1000.0
18283 VString =
"CA 5V Src I " +
' {0:.4f} '.format(CHAISr5vRaw)
18284 labelAMin.config(text = VString)
18285 VString =
"CB 5V Src I " +
' {0:.4f} '.format(CHBISr5vRaw)
18286 labelBMin.config(text = VString)
18288 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
18289 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18290 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
18291 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18292 CHA.mode = Mode.SVMI
18293 CHA.constant(0.001)
18294 CHB.mode = Mode.SVMI
18295 CHB.constant(0.001)
18296 ADsignal1 = devx.get_samples(1010)
18297 CHASr0vRaw = CHAISr0vRaw = CHBSr0vRaw = CHBISr0vRaw = 0.0
18298 for index
in range(1000):
18299 CHASr0vRaw += ADsignal1[index+10][0][0]
18300 CHBSr0vRaw += ADsignal1[index+10][1][0]
18301 CHAISr0vRaw += ADsignal1[index+10][0][1]
18302 CHBISr0vRaw += ADsignal1[index+10][1][1]
18304 CHASr0vRaw = CHASr0vRaw / 1000.0
18305 CHAISr0vRaw = CHAISr0vRaw / 1000.0
18306 CHBSr0vRaw = CHBSr0vRaw / 1000.0
18307 CHBISr0vRaw = CHBISr0vRaw / 1000.0
18308 VString =
"CA 0V Src I " +
' {0:.4f} '.format(CHAISr0vRaw)
18309 labelAB.config(text = VString)
18310 VString =
"CB 0V Src I " +
' {0:.4f} '.format(CHBISr0vRaw)
18311 labelBA.config(text = VString)
18314 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
18315 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18316 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
18317 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18318 CHA.mode = Mode.SIMV
18320 CHB.mode = Mode.SIMV
18322 ADsignal1 = devx.get_samples(1010)
18323 CHAVSr0iRaw = CHAISr0iRaw = CHBVSr0iRaw = CHBISr0iRaw = 0.0
18324 for index
in range(1000):
18325 CHAVSr0iRaw += ADsignal1[index+10][0][0]
18326 CHBVSr0iRaw += ADsignal1[index+10][1][0]
18327 CHAISr0iRaw += ADsignal1[index+10][0][1]
18328 CHBISr0iRaw += ADsignal1[index+10][1][1]
18330 CHAVSr0iRaw = CHAVSr0iRaw / 1000.0
18331 CHAISr0iRaw = CHAISr0iRaw / 1000.0
18332 CHBVSr0iRaw = CHBVSr0iRaw / 1000.0
18333 CHBISr0iRaw = CHBISr0iRaw / 1000.0
18334 VString =
"CA 2.5 Src 0 I" +
' {0:.4f} '.format(CHAISr0iRaw)
18335 labelSIA0.config(text = VString)
18336 VString =
"CB 2.5 Src 0 I" +
' {0:.4f} '.format(CHBISr0iRaw)
18337 labelSIB0.config(text = VString)
18340 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
18341 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18342 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
18343 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18344 CHA.mode = Mode.SIMV
18345 CHA.constant(0.045)
18346 CHB.mode = Mode.SIMV
18347 CHB.constant(0.045)
18348 ADsignal1 = devx.get_samples(1010)
18349 CHAVSr100Raw = CHAISr100Raw = CHBVSr100Raw = CHBISr100Raw = 0.0
18350 for index
in range(1000):
18351 CHAVSr100Raw += ADsignal1[index+10][0][0]
18352 CHBVSr100Raw += ADsignal1[index+10][1][0]
18353 CHAISr100Raw += ADsignal1[index+10][0][1]
18354 CHBISr100Raw += ADsignal1[index+10][1][1]
18356 CHAVSr100Raw = CHAVSr100Raw / 1000.0
18357 CHAISr100Raw = CHAISr100Raw / 1000.0
18358 CHBVSr100Raw = CHBVSr100Raw / 1000.0
18359 CHBISr100Raw = CHBISr100Raw / 1000.0
18360 VString =
"CA 50 Src +45 " +
' {0:.4f} '.format(CHAVSr100Raw)
18361 labelSIA.config(text = VString)
18362 VString =
"CB 50 Src +45 " +
' {0:.4f} '.format(CHBVSr100Raw)
18363 labelSIB.config(text = VString)
18366 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
18367 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18368 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
18369 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18370 CHA.mode = Mode.SIMV
18371 CHA.constant(-0.045)
18372 CHB.mode = Mode.SIMV
18373 CHB.constant(-0.045)
18374 ADsignal1 = devx.get_samples(1010)
18375 CHAVSrN45Raw = CHAISrN45Raw = CHBVSrN45Raw = CHBISrN45Raw = 0.0
18376 for index
in range(1000):
18377 CHAVSrN45Raw += ADsignal1[index+10][0][0]
18378 CHBVSrN45Raw += ADsignal1[index+10][1][0]
18379 CHAISrN45Raw += ADsignal1[index+10][0][1]
18380 CHBISrN45Raw += ADsignal1[index+10][1][1]
18382 CHAVSrN45Raw = CHAVSrN45Raw / 1000.0
18383 CHAISrN45Raw = CHAISrN45Raw / 1000.0
18384 CHBVSrN45Raw = CHBVSrN45Raw / 1000.0
18385 CHBISrN45Raw = CHBISrN45Raw / 1000.0
18386 VString =
"CA 50 Src -45 " +
' {0:.4f} '.format(CHAVSrN45Raw)
18387 labelSIAN.config(text = VString)
18388 VString =
"CB 50 Src -45 " +
' {0:.4f} '.format(CHBVSrN45Raw)
18389 labelSIBN.config(text = VString)
18391 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
18392 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
18393 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
18394 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
18397 CHAF25V = CHAF25vRaw * ( AD584act / CHA584Raw )
18398 CHBF25V = CHBF25vRaw * ( AD584act / CHB584Raw )
18400 CHASr5v = CHASr5vRaw * ( AD584act / CHA584Raw )
18401 CHBSr5v = CHBSr5vRaw * ( AD584act / CHB584Raw )
18403 CHA2p5 = CHA2p5Raw * ( AD584act / CHA584Raw )
18405 CHB2p5 = CHB2p5Raw * ( AD584act / CHB584Raw )
18408 CHAActSrI = CHASr5v / OnBoardRes
18409 CHBActSrI = CHBSr5v / OnBoardRes
18411 CHAActSnkI = CHASr0vRaw - CHA2p5 / OnBoardRes
18412 CHBActSnkI = CHBSr0vRaw - CHB2p5 / OnBoardRes
18414 CHASr0i = CHAVSr0iRaw * ( AD584act / CHA584Raw )
18415 CHASr0iAct = CHASr0i / OnBoardRes
18416 CHASr100 = CHAVSr100Raw * ( AD584act / CHA584Raw )
18417 CHASrI100Act = (CHASr100 - CHA2p5) / OnBoardRes
18418 CHASrN45 = CHAVSrN45Raw * ( AD584act / CHA584Raw )
18419 CHASrIN45Act = (CHASrN45 - CHA2p5) / OnBoardRes
18421 CHBSr0i = CHBVSr0iRaw * ( AD584act / CHB584Raw )
18422 CHBSr0iAct = CHBSr0i / OnBoardRes
18423 CHBSr100 = CHBVSr100Raw * ( AD584act / CHB584Raw )
18424 CHBSrI100Act = (CHBSr100 - CHB2p5) / OnBoardRes
18425 CHBSrN45 = CHBVSrN45Raw * ( AD584act / CHB584Raw )
18426 CHBSrIN45Act = (CHBSrN45 - CHB2p5) / OnBoardRes
18429 CalFile.write(
'# Channel A, measure V\n')
18430 CalFile.write(
'</>\n')
18431 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAGndRaw) +
'>\n')
18432 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHA584Raw) +
'>\n')
18433 CalFile.write(
'<>\n')
18434 CalFile.write(
'\n')
18436 CalFile.write(
'# Channel A, measure I\n')
18437 CalFile.write(
'</>\n')
18438 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAI02p5Raw) +
'>\n')
18439 CalFile.write(
'<' +
'{0:.4f}'.format(CHAActSrI) +
', ' +
'{0:.4f}'.format(CHAISr5vRaw) +
'>\n')
18441 CalFile.write(
'<' +
'{0:.4f}'.format(-CHAActSrI) +
', ' +
'{0:.4f}'.format(-CHAISr5vRaw) +
'>\n')
18442 CalFile.write(
'<>\n')
18443 CalFile.write(
'\n')
18445 CalFile.write(
'# Channel A, source V\n')
18446 CalFile.write(
'</>\n')
18447 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAF0vRaw) +
'>\n')
18448 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
18449 CalFile.write(
'<>\n')
18450 CalFile.write(
'\n')
18452 CalFile.write(
'# Channel A, source I\n')
18453 CalFile.write(
'</>\n')
18454 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAISr0iRaw) +
'>\n')
18455 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHASrI100Act) +
'>\n')
18456 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHASrIN45Act) +
'>\n')
18457 CalFile.write(
'<>\n')
18458 CalFile.write(
'\n')
18460 CalFile.write(
'# Channel B, measure V\n')
18461 CalFile.write(
'</>\n')
18462 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBGndRaw) +
'>\n')
18463 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHB584Raw) +
'>\n')
18464 CalFile.write(
'<>\n')
18465 CalFile.write(
'\n')
18467 CalFile.write(
'# Channel B, measure I\n')
18468 CalFile.write(
'</>\n')
18469 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBI02p5Raw) +
'>\n')
18470 CalFile.write(
'<' +
'{0:.4f}'.format(CHBActSrI) +
', ' +
'{0:.4f}'.format(CHBISr5vRaw) +
'>\n')
18472 CalFile.write(
'<' +
'{0:.4f}'.format(-CHBActSrI) +
', ' +
'{0:.4f}'.format(-CHBISr5vRaw) +
'>\n')
18473 CalFile.write(
'<>\n')
18474 CalFile.write(
'\n')
18476 CalFile.write(
'# Channel B, source V\n')
18477 CalFile.write(
'</>\n')
18478 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBF0vRaw) +
'>\n')
18479 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
18480 CalFile.write(
'<>\n')
18481 CalFile.write(
'\n')
18483 CalFile.write(
'# Channel B source I\n')
18484 CalFile.write(
'</>\n')
18485 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBISr0iRaw) +
'>\n')
18486 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHBSrI100Act) +
'>\n')
18487 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHBSrIN45Act) +
'>\n')
18488 CalFile.write(
'<>\n')
18491 showinfo(
"Finish",
"Successfully measured cal factors!", parent=calwindow)
18492 if askyesno(
"Write cal",
"Write Cal Data to Board?", parent=calwindow):
18493 devx.write_calibration(filename)
18497 CHA.mode = Mode.HI_Z_SPLIT
18498 CHB.mode = Mode.HI_Z_SPLIT
18502 calwindow.destroy()
18505 global cal, DevID, devx
18507 devidstr = DevID[17:31]
18508 filename =
"calib" + devidstr +
"test.txt"
18509 if os.path.isfile(filename):
18510 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?"):
18513 if askyesno(
"Continue?",
"Continure with save calibration file?"):
18516 calwindow.destroy()
18519 CalFile = open(filename,
"w")
18523 CalFile.write(
'# Channel A, measure V\n')
18524 CalFile.write(
'</>\n')
18525 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[0][0]) +
'>\n')
18526 CHAgp = (5.0/cal[0][1])+cal[0][0]
18527 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18528 CalFile.write(
'<>\n')
18529 CalFile.write(
'\n')
18531 CalFile.write(
'# Channel A, measure I\n')
18532 CalFile.write(
'</>\n')
18533 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[1][0]) +
'>\n')
18534 CHAgp = (0.1/cal[0][1])+cal[1][0]
18535 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18536 CHAgn = (-0.1/cal[0][2])+cal[1][0]
18537 CalFile.write(
'<-0.1000' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18538 CalFile.write(
'<>\n')
18539 CalFile.write(
'\n')
18541 CalFile.write(
'# Channel A, source V\n')
18542 CalFile.write(
'</>\n')
18543 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[2][0]) +
'>\n')
18544 CHAgp = (5.0/cal[2][1])+cal[2][0]
18545 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18546 CalFile.write(
'<>\n')
18547 CalFile.write(
'\n')
18549 CalFile.write(
'# Channel A, source I\n')
18550 CalFile.write(
'</>\n')
18551 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[3][0]) +
'>\n')
18552 CHAgp = (0.1/cal[3][1])+cal[3][0]
18553 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18554 CHAgn = (-0.1/cal[3][2])+cal[3][0]
18555 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18556 CalFile.write(
'<>\n')
18557 CalFile.write(
'\n')
18559 CalFile.write(
'# Channel B, measure V\n')
18560 CalFile.write(
'</>\n')
18561 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[4][0]) +
'>\n')
18562 CHAgp = (5.0/cal[4][1])+cal[4][0]
18563 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18564 CalFile.write(
'<>\n')
18565 CalFile.write(
'\n')
18567 CalFile.write(
'# Channel B, measure I\n')
18568 CalFile.write(
'</>\n')
18569 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[5][0]) +
'>\n')
18570 CHAgp = (0.1/cal[5][1])+cal[5][0]
18571 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18572 CHAgn = (-0.1/cal[5][2])+cal[5][0]
18573 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18574 CalFile.write(
'<>\n')
18575 CalFile.write(
'\n')
18577 CalFile.write(
'# Channel B, source V\n')
18578 CalFile.write(
'</>\n')
18579 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[6][0]) +
'>\n')
18580 CHAgp = (5.0/cal[6][1])+cal[6][0]
18581 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18582 CalFile.write(
'<>\n')
18583 CalFile.write(
'\n')
18585 CalFile.write(
'# Channel B source I\n')
18586 CalFile.write(
'</>\n')
18587 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[7][0]) +
'>\n')
18588 CHAgp = (0.1/cal[7][1])+cal[7][0]
18589 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18590 CHAgn = (-0.1/cal[7][2])+cal[7][0]
18591 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18592 CalFile.write(
'<>\n')
18598 global devx, PIO_0, PIO_1, PIO_2, PIO_3, SCLKPort, SDATAPort, SLATCHPort
18600 binstr = bin(DValue)
18601 binlen = len(binstr)
18602 datastr = binstr[2:binlen]
18603 datalen = len(datastr)
18605 datastr = str.rjust(datastr , 16 ,
'0')
18606 datalen = len(datastr)
18608 devx.ctrl_transfer(0x40, 0x50, SLATCHPort.get(), 0, 0, 0, 100)
18609 while i < datalen+1:
18611 D1code = 0x50 + int(datastr[i-1])
18612 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
18613 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
18614 devx.ctrl_transfer(0x40, 0x50, SCLKPort.get(), 0, 0, 0, 100)
18615 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
18617 devx.ctrl_transfer(0x40, 0x51, SLATCHPort.get(), 0, 0, 0, 100)
18620 global FminEntry, HtMulEntry, MinigenFout, MinigenMode, etssrlab, EnableMinigenMode
18621 global Two28, mclk, EnableHSsampling, MinigenScreenStatus, ETSts, Two_X_Sample
18624 if MinigenScreenStatus.get() == 0:
18629 if EnableMinigenMode == 2:
18630 MinigenMode.set(40)
18633 FminE = float(eval(FminEntry.get()))*1000
18635 if EnableHSsampling > 0:
18636 FminEntry.delete(0,END)
18637 FminEntry.insert(0, FminE/1000)
18641 Fmin = FminE - (FminE/MulX)
18643 MinigenFout.delete(0,
"end")
18644 MinigenFout.insert(0,Fmin)
18650 global MinigenFclk, MinigenFout, MinigenMode
18651 global Two28, SCLKPort, SDATAPort, SLATCHPort
18653 DValue = 8192 + MinigenMode.get()
18656 fout = float(eval(MinigenFout.get()))
18658 MinigenFout.delete(0,
"end")
18659 MinigenFout.insert(0,100)
18661 mclk = float(eval(MinigenFclk.get()))*1000000
18663 MingenFclk.delete(0,
"end")
18664 MinigenFclk.insert(0,16)
18665 Freg = int((fout*Two28)/mclk)
18666 Foutstr = bin(Freg)
18667 Foutlen = len(Foutstr)
18668 datastr = Foutstr[2:Foutlen]
18669 datalen = len(datastr)
18671 datastr = str.rjust(datastr , 28 ,
'0')
18672 datalen = len(datastr)
18673 Fmsb =
'0b01' + datastr[0:14]
18674 Flsb =
'0b01' + datastr[14:]
18675 FValue = int(eval(Flsb))
18677 FValue = int(eval(Fmsb))
18682 global RevDate, minigenwindow, MinigenMode, MinigenScreenStatus, MinigenFclk, MinigenFout, SWRev
18683 global SCLKPort, SDATAPort, SLATCHPort
18684 global GenericSerialStatus
18685 global PIO_0, PIO_1, PIO_2, PIO_3
18687 if GenericSerialStatus.get() == 1:
18688 GenericSerialStatus.set(0)
18690 if MinigenScreenStatus.get() == 0:
18691 MinigenScreenStatus.set(1)
18692 minigenwindow = Toplevel()
18693 minigenwindow.title(
"-AD983x DDS- " + SWRev + RevDate)
18694 minigenwindow.resizable(FALSE,FALSE)
18695 minigenwindow.protocol(
"WM_DELETE_WINDOW", DestroyMinigenScreen)
18697 MinigenMode = IntVar(0)
18698 mgb1 = Radiobutton(minigenwindow, text=
"Sine", variable=MinigenMode, value=0, command=BSendMG )
18699 mgb1.grid(row=1, column=0, sticky=W)
18700 mgb2 = Radiobutton(minigenwindow, text=
"Triangle", variable=MinigenMode, value=2, command=BSendMG )
18701 mgb2.grid(row=1, column=1, columnspan=2, sticky=W)
18702 mgb3 = Radiobutton(minigenwindow, text=
"Square", variable=MinigenMode, value=40, command=BSendMG )
18703 mgb3.grid(row=2, column=0, sticky=W)
18704 mgb4 = Radiobutton(minigenwindow, text=
"Square/2", variable=MinigenMode, value=32, command=BSendMG )
18705 mgb4.grid(row=2, column=1, columnspan=2, sticky=W)
18706 f0lab = Label(minigenwindow, text=
"Mclk in MHz")
18707 f0lab.grid(row=3, column=0, columnspan=2, sticky=W)
18708 MinigenFclk = Entry(minigenwindow, width=5)
18709 MinigenFclk.grid(row=3, column=1, columnspan=2, sticky=W, padx=6)
18710 MinigenFclk.delete(0,
"end")
18711 MinigenFclk.insert(0,16)
18712 f1lab = Label(minigenwindow, text=
"Output Freq")
18713 f1lab.grid(row=4, column=0, columnspan=2, sticky=W)
18714 MinigenFout = Entry(minigenwindow, width=8, cursor=
'double_arrow')
18715 MinigenFout.bind(
'<MouseWheel>', onMiniGenScroll)
18716 MinigenFout.bind(
"<Button-4>", onMiniGenScroll)
18717 MinigenFout.bind(
"<Button-5>", onMiniGenScroll)
18718 MinigenFout.grid(row=4, column=1, columnspan=2, sticky=W)
18719 MinigenFout.delete(0,
"end")
18720 MinigenFout.insert(0,100)
18721 bsn1 = Button(minigenwindow, text=
'UpDate', style=
"W7.TButton", command=BSendMG)
18722 bsn1.grid(row=5, column=0, sticky=W, pady=4)
18723 dismissmgbutton = Button(minigenwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyMinigenScreen)
18724 dismissmgbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
18726 label3 = Label(minigenwindow,text=
"SCLK PI/O Port ")
18727 label3.grid(row=6, column=0, sticky=W)
18728 sclk1 = Radiobutton(minigenwindow, text=
"0", variable=SCLKPort, value=PIO_0)
18729 sclk1.grid(row=6, column=1, sticky=W)
18730 sclk2 = Radiobutton(minigenwindow, text=
"1", variable=SCLKPort, value=PIO_1)
18731 sclk2.grid(row=6, column=2, sticky=W)
18732 sclk3 = Radiobutton(minigenwindow, text=
"2", variable=SCLKPort, value=PIO_2)
18733 sclk3.grid(row=6, column=3, sticky=W)
18734 sclk4 = Radiobutton(minigenwindow, text=
"3", variable=SCLKPort, value=PIO_3)
18735 sclk4.grid(row=6, column=4, sticky=W)
18737 label4 = Label(minigenwindow,text=
"SData PI/O Port ")
18738 label4.grid(row=7, column=0, sticky=W)
18739 sdat1 = Radiobutton(minigenwindow, text=
"0", variable=SDATAPort, value=PIO_0)
18740 sdat1.grid(row=7, column=1, sticky=W)
18741 sdat2 = Radiobutton(minigenwindow, text=
"1", variable=SDATAPort, value=PIO_1)
18742 sdat2.grid(row=7, column=2, sticky=W)
18743 sdat3 = Radiobutton(minigenwindow, text=
"2", variable=SDATAPort, value=PIO_2)
18744 sdat3.grid(row=7, column=3, sticky=W)
18745 sdat4 = Radiobutton(minigenwindow, text=
"3", variable=SDATAPort, value=PIO_3)
18746 sdat4.grid(row=7, column=4, sticky=W)
18748 label5 = Label(minigenwindow,text=
"FSync PI/O Port ")
18749 label5.grid(row=8, column=0, sticky=W)
18750 slth1 = Radiobutton(minigenwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
18751 slth1.grid(row=8, column=1, sticky=W)
18752 slth2 = Radiobutton(minigenwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
18753 slth2.grid(row=8, column=2, sticky=W)
18754 slth3 = Radiobutton(minigenwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
18755 slth3.grid(row=8, column=3, sticky=W)
18756 slth4 = Radiobutton(minigenwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
18757 slth4.grid(row=8, column=4, sticky=W)
18762 global minigenwindow, MinigenScreenStatus
18764 MinigenScreenStatus.set(0)
18765 minigenwindow.destroy()
18768 global ETSStatus, ETSDisp
18776 global PIO_0, PIO_1, PIO_2, PIO_3
18778 binstr = bin(D1Value)
18779 binlen = len(binstr)
18780 data1str = binstr[2:binlen]
18781 datalen = len(data1str)
18783 data1str = str.rjust(data1str , 16 ,
'0')
18784 datalen = len(data1str)
18786 binstr = bin(D2Value)
18787 binlen = len(binstr)
18788 data2str = binstr[2:binlen]
18789 datalen = len(data2str)
18791 data2str = str.rjust(data2str , 16 ,
'0')
18792 datalen = len(data2str)
18799 devx.ctrl_transfer(0x40, 0x50, 0, 0, 0, 0, 100)
18800 while i < datalen+1:
18802 D1code = 0x50 + int(data1str[i-1])
18803 D2code = 0x50 + int(data2str[i-1])
18804 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
18805 devx.ctrl_transfer(0x40, D2code, PIO_2, 0, 0, 0, 100)
18806 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18807 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18808 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18810 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
18813 global DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry, REFEntry
18816 RefValue = float(eval(REFEntry.get()))
18820 D1Value = float(eval(DAC1Entry.get()))
18823 D1Code = int((D1Value/RefValue)*255)
18826 D1Code = D1Code + 0x2000
18828 D2Value = float(eval(DAC2Entry.get()))
18831 D2Code = int((D2Value/RefValue)*255)
18834 D2Code = D2Code + 0x2400
18836 D3Value = float(eval(DAC3Entry.get()))
18839 D3Code = int((D3Value/RefValue)*255)
18842 D3Code = D3Code + 0x2000
18844 D4Value = float(eval(DAC4Entry.get()))
18847 D4Code = int((D4Value/RefValue)*255)
18850 D4Code = D4Code + 0x2400
18857 global da1window, DA1ScreenStatus, DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry
18858 global REFEntry, RevDate, SWRev
18860 if DA1ScreenStatus.get() == 0:
18861 DA1ScreenStatus.set(1)
18862 da1window = Toplevel()
18863 da1window.title(
"-DA1 PMOD- " + SWRev + RevDate)
18864 da1window.resizable(FALSE,FALSE)
18865 da1window.protocol(
"WM_DELETE_WINDOW", DestroyDA1Screen)
18867 d1lab = Label(da1window, text=
"DAC A1 output")
18868 d1lab.grid(row=0, column=0, columnspan=1, sticky=W)
18869 DAC1Entry = Entry(da1window, width=5)
18870 DAC1Entry.grid(row=0, column=1, sticky=W)
18871 DAC1Entry.delete(0,
"end")
18872 DAC1Entry.insert(0,0)
18873 d2lab = Label(da1window, text=
"DAC B1 output")
18874 d2lab.grid(row=1, column=0, columnspan=1, sticky=W)
18875 DAC2Entry = Entry(da1window, width=5)
18876 DAC2Entry.grid(row=1, column=1, sticky=W)
18877 DAC2Entry.delete(0,
"end")
18878 DAC2Entry.insert(0,0)
18880 d3lab = Label(da1window, text=
"DAC A2 output")
18881 d3lab.grid(row=2, column=0, columnspan=1, sticky=W)
18882 DAC3Entry = Entry(da1window, width=5)
18883 DAC3Entry.grid(row=2, column=1, sticky=W)
18884 DAC3Entry.delete(0,
"end")
18885 DAC3Entry.insert(0,0)
18887 d4lab = Label(da1window, text=
"DAC B2 output")
18888 d4lab.grid(row=3, column=0, columnspan=1, sticky=W)
18889 DAC4Entry = Entry(da1window, width=5)
18890 DAC4Entry.grid(row=3, column=1, sticky=W)
18891 DAC4Entry.delete(0,
"end")
18892 DAC4Entry.insert(0,0)
18894 d5lab = Label(da1window, text=
"Reference V")
18895 d5lab.grid(row=4, column=0, columnspan=1, sticky=W)
18896 REFEntry = Entry(da1window, width=5)
18897 REFEntry.grid(row=4, column=1, sticky=W)
18898 REFEntry.delete(0,
"end")
18899 REFEntry.insert(0,3.3)
18901 bsn1 = Button(da1window, text=
'UpDate', style=
"W7.TButton", command=BSendDA1)
18902 bsn1.grid(row=5, column=0, sticky=W)
18903 dismissdabutton = Button(da1window, text=
"Dismiss", style=
"W8.TButton", command=DestroyDA1Screen)
18904 dismissdabutton.grid(row=5, column=1, sticky=W, pady=4)
18908 global da1window, DA1ScreenStatus
18910 DA1ScreenStatus.set(0)
18911 da1window.destroy()
18914 global devx, SingleDualPot
18915 global PIO_0, PIO_1, PIO_2, PIO_3
18917 binstr = bin(DValue)
18918 binlen = len(binstr)
18919 datastr = binstr[2:binlen]
18920 datalen = len(datastr)
18921 if SingleDualPot.get() == 0:
18923 datastr = str.rjust(datastr , 10 ,
'0')
18924 datalen = len(datastr)
18925 if SingleDualPot.get() == 1:
18927 datastr = str.rjust(datastr , 8 ,
'0')
18928 datalen = len(datastr)
18929 if SingleDualPot.get() == 2:
18931 datastr = str.rjust(datastr , 8 ,
'0')
18932 datalen = len(datastr)
18934 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18935 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
18936 while i < datalen+1:
18941 D1code = 0x50 + int(datastr[i-1])
18942 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
18943 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18944 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18946 devx.ctrl_transfer(0x40, 0x51, 0, 0, 0, 0, 100)
18949 global DigPot1, DigPot2, DigPot3, DigPot4, SendPot1, SendPot2, SendPot3, SendPot4
18950 global SingleDualPot
18952 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
18954 if SingleDualPot.get() == 2:
18957 DValue1 = DigPot1.get()
18958 if DValue1 > NumTaps:
18963 DValue2 = DigPot2.get()
18964 if DValue2 > NumTaps:
18969 DValue3 = DigPot3.get()
18970 if DValue3 > NumTaps:
18975 DValue4 = DigPot4.get()
18976 if DValue4 > NumTaps:
18980 if SendPot1.get() > 0:
18982 if SendPot2.get() > 0:
18984 if SendPot3.get() > 0:
18986 if SendPot4.get() > 0:
18990 global SingleDualPot, DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
18992 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
18993 DPotlabel.config(text=
"Enter number from 0 to 255")
18994 DigPot1.config(from_=0, to=255, length=256)
18995 DigPot2.config(from_=0, to=255, length=256)
18996 DigPot3.config(from_=0, to=255, length=256)
18997 DigPot4.config(from_=0, to=255, length=256)
18998 if SingleDualPot.get() == 2:
18999 DPotlabel.config(text=
"Enter number from 0 to 63")
19000 DigPot1.config(from_=0, to=63, length=64)
19001 DigPot2.config(from_=0, to=63, length=64)
19002 DigPot3.config(from_=0, to=63, length=64)
19003 DigPot4.config(from_=0, to=63, length=64)
19007 global digpotwindow, DigPotScreenStatus, DigPot1, DigPot2, DigPot3, DigPot4, RevDate
19008 global SendPot1, SendPot2, SendPot3, SendPot4, SingleDualPot, SWRev
19009 global DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
19011 if DigPotScreenStatus.get() == 0:
19012 DigPotScreenStatus.set(1)
19013 digpotwindow = Toplevel()
19014 digpotwindow.title(
"Digital Potentiometer " + SWRev + RevDate)
19015 digpotwindow.resizable(FALSE,FALSE)
19016 digpotwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigPotScreen)
19018 SendPot1 = IntVar(0)
19020 SendPot2 = IntVar(0)
19022 SendPot3 = IntVar(0)
19024 SendPot4 = IntVar(0)
19026 DPotlabel = Label(digpotwindow,text=
"Enter number from 0 to 255", style=
"A12B.TLabel")
19027 DPotlabel.grid(row=0, column=0, columnspan=3, sticky=W)
19029 SingleDualPot = IntVar(0)
19030 SingleDualPot.set(0)
19031 CompMenu = Menubutton(digpotwindow, text=
"Sel Comp.", style=
"W8.TButton")
19032 CompMenu.menu = Menu(CompMenu, tearoff = 0 )
19033 CompMenu[
"menu"] = CompMenu.menu
19034 CompMenu.menu.add_radiobutton(label=
"AD840X", variable=SingleDualPot, value=0, command=UpdatePotSlider)
19035 CompMenu.menu.add_radiobutton(label=
"AD5160", variable=SingleDualPot, value=1, command=UpdatePotSlider)
19036 CompMenu.menu.add_radiobutton(label=
"AD5203", variable=SingleDualPot, value=2, command=UpdatePotSlider)
19037 CompMenu.grid(row=1, column=0, columnspan=2, sticky=W)
19038 lab1 = Checkbutton(digpotwindow,text=
"Pot 1", variable=SendPot1)
19039 lab1.grid(row=2, column=0, sticky=W)
19040 DigPot1 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
19041 DigPot1.grid(row=3, column=0, columnspan=3, sticky=W)
19042 lab2 = Checkbutton(digpotwindow,text=
"Pot 2", variable=SendPot2)
19043 lab2.grid(row=4, column=0, sticky=W)
19044 DigPot2 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
19045 DigPot2.grid(row=5, column=0, columnspan=3, sticky=W)
19046 lab3 = Checkbutton(digpotwindow,text=
"Pot 3", variable=SendPot3)
19047 lab3.grid(row=6, column=0, sticky=W)
19048 DigPot3 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
19049 DigPot3.grid(row=7, column=0, columnspan=3, sticky=W)
19050 lab4 = Checkbutton(digpotwindow,text=
"Pot 4", variable=SendPot4)
19051 lab4.grid(row=8, column=0, sticky=W)
19052 DigPot4 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
19053 DigPot4.grid(row=9, column=0, columnspan=3, sticky=W)
19054 dismissdpbutton = Button(digpotwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigPotScreen)
19055 dismissdpbutton.grid(row=10, column=0, sticky=W, pady=4)
19058 global digpotwindow, DigPotScreenStatus
19060 DigPotScreenStatus.set(0)
19061 digpotwindow.destroy()
19064 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
19065 global NumBitsEntry, DataBitsEntry, devx, SerDirection, DValue, NumBits, AD5626SerialStatus, AD5626Entry
19067 if AD5626SerialStatus.get() == 0:
19069 DValue = int(eval(DataBitsEntry.get()))
19075 NumBits = int(NumBitsEntry.get())
19082 DValue = int(eval(AD5626Entry.get())*1000)
19085 AD5626Entry.delete(0,
"end")
19086 AD5626Entry.insert(0,
'0.000')
19089 AD5626Entry.delete(0,
"end")
19090 AD5626Entry.insert(0,DValue/1000.0)
19093 AD5626Entry.delete(0,
"end")
19094 AD5626Entry.insert(0,
'0.000')
19097 binstr = bin(DValue)
19098 binlen = len(binstr)
19099 datastr = binstr[2:binlen]
19100 datalen = len(datastr)
19101 if datalen < NumBits:
19102 datastr = str.rjust(datastr , NumBits ,
'0')
19103 datalen = len(datastr)
19104 if SLatchPhase.get() == 0:
19110 if AD5626SerialStatus.get() > 0:
19113 if SClockPhase.get() == 0:
19119 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
19120 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
19122 while i < datalen+1:
19123 if SerDirection.get() == 1:
19124 D1code = 0x50 + int(datastr[datalen-i])
19126 D1code = 0x50 + int(datastr[i-1])
19127 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
19128 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
19129 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
19131 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
19132 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
19133 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
19134 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
19138 global ad5626window, AD5626SerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
19139 global GenericSerialStatus, AD5626Entry, SerDirection, SWRev
19140 global PIO_0, PIO_1, PIO_2, PIO_3
19142 if GenericSerialStatus.get() == 1:
19143 GenericSerialStatus.set(0)
19145 if AD5626SerialStatus.get() == 0:
19146 AD5626SerialStatus.set(1)
19147 ad5626window = Toplevel()
19148 ad5626window.title(
"AD5626 Output " + SWRev + RevDate)
19149 ad5626window.resizable(FALSE,FALSE)
19150 ad5626window.protocol(
"WM_DELETE_WINDOW", DestroyAD5626Screen)
19152 SLatchPhase = IntVar(0)
19154 SClockPhase = IntVar(0)
19156 SerDirection = IntVar(0)
19157 SerDirection.set(0)
19159 label2 = Label(ad5626window,text=
"Enter Output Volts")
19160 label2.grid(row=1, column=0, columnspan=1, sticky=W)
19161 AD5626Entry = Entry(ad5626window, width=10, cursor=
'double_arrow')
19162 AD5626Entry.bind(
'<MouseWheel>', onAD5626Scroll)
19163 AD5626Entry.bind(
"<Button-4>", onAD5626Scroll)
19164 AD5626Entry.bind(
"<Button-5>", onAD5626Scroll)
19165 AD5626Entry.grid(row=1, column=1, columnspan=3, sticky=W)
19166 AD5626Entry.delete(0,
"end")
19167 AD5626Entry.insert(0,
'0.000')
19169 label3 = Label(ad5626window,text=
"SCLK PI/O Port ")
19170 label3.grid(row=2, column=0, columnspan=1, sticky=W)
19171 sclk1 = Radiobutton(ad5626window, text=
"0", variable=SCLKPort, value=PIO_0)
19172 sclk1.grid(row=2, column=1, sticky=W)
19173 sclk2 = Radiobutton(ad5626window, text=
"1", variable=SCLKPort, value=PIO_1)
19174 sclk2.grid(row=2, column=2, sticky=W)
19175 sclk3 = Radiobutton(ad5626window, text=
"2", variable=SCLKPort, value=PIO_2)
19176 sclk3.grid(row=2, column=3, sticky=W)
19177 sclk4 = Radiobutton(ad5626window, text=
"3", variable=SCLKPort, value=PIO_3)
19178 sclk4.grid(row=2, column=4, sticky=W)
19180 label4 = Label(ad5626window,text=
"SData PI/O Port ")
19181 label4.grid(row=3, column=0, columnspan=1, sticky=W)
19182 sdat1 = Radiobutton(ad5626window, text=
"0", variable=SDATAPort, value=PIO_0)
19183 sdat1.grid(row=3, column=1, sticky=W)
19184 sdat2 = Radiobutton(ad5626window, text=
"1", variable=SDATAPort, value=PIO_1)
19185 sdat2.grid(row=3, column=2, sticky=W)
19186 sdat3 = Radiobutton(ad5626window, text=
"2", variable=SDATAPort, value=PIO_2)
19187 sdat3.grid(row=3, column=3, sticky=W)
19188 sdat4 = Radiobutton(ad5626window, text=
"3", variable=SDATAPort, value=PIO_3)
19189 sdat4.grid(row=3, column=4, sticky=W)
19191 label5 = Label(ad5626window,text=
"Latch PI/O Port ")
19192 label5.grid(row=4, column=0, columnspan=1, sticky=W)
19193 slth1 = Radiobutton(ad5626window, text=
"0", variable=SLATCHPort, value=PIO_0)
19194 slth1.grid(row=4, column=1, sticky=W)
19195 slth2 = Radiobutton(ad5626window, text=
"1", variable=SLATCHPort, value=PIO_1)
19196 slth2.grid(row=4, column=2, sticky=W)
19197 slth3 = Radiobutton(ad5626window, text=
"2", variable=SLATCHPort, value=PIO_2)
19198 slth3.grid(row=4, column=3, sticky=W)
19199 slth4 = Radiobutton(ad5626window, text=
"3", variable=SLATCHPort, value=PIO_3)
19200 slth4.grid(row=4, column=4, sticky=W)
19202 bsn1 = Button(ad5626window, text=
'Send', style=
"W5.TButton", command=BSendGS)
19203 bsn1.grid(row=5, column=0, sticky=W)
19204 dismissgsbutton = Button(ad5626window, text=
"Dismiss", style=
"W8.TButton", command=DestroyAD5626Screen)
19205 dismissgsbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
19212 global ad5626window, AD5626SerialStatus
19214 AD5626SerialStatus.set(0)
19215 ad5626window.destroy()
19218 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
19219 global NumBitsEntry, DataBitsEntry, SerDirection, RevDate, SWRev
19220 global PIO_0, PIO_1, PIO_2, PIO_3
19222 if GenericSerialStatus.get() == 0:
19223 GenericSerialStatus.set(1)
19224 serialwindow = Toplevel()
19225 serialwindow.title(
"Generic Serial Output " + SWRev + RevDate)
19226 serialwindow.resizable(FALSE,FALSE)
19227 serialwindow.protocol(
"WM_DELETE_WINDOW", DestroyGenericSerialScreen)
19229 SCLKPort = IntVar(0)
19230 SCLKPort.set(PIO_2)
19231 SDATAPort = IntVar(0)
19232 SDATAPort.set(PIO_1)
19233 SLATCHPort = IntVar(0)
19234 SLATCHPort.set(PIO_0)
19235 SLatchPhase = IntVar(0)
19236 SClockPhase = IntVar(0)
19237 SerDirection = IntVar(0)
19238 label = Label(serialwindow,text=
"Enter number of Bits")
19239 label.grid(row=1, column=0, columnspan=2, sticky=W)
19240 NumBitsEntry = Entry(serialwindow, width=3)
19241 NumBitsEntry.grid(row=1, column=2, sticky=W)
19242 NumBitsEntry.delete(0,
"end")
19243 NumBitsEntry.insert(0,8)
19245 label2 = Label(serialwindow,text=
"Enter Data Word")
19246 label2.grid(row=2, column=0, columnspan=1, sticky=W)
19247 DataBitsEntry = Entry(serialwindow, width=10)
19248 DataBitsEntry.grid(row=2, column=1, columnspan=3, sticky=W)
19249 DataBitsEntry.delete(0,
"end")
19250 DataBitsEntry.insert(0,0)
19252 label3 = Label(serialwindow,text=
"SCLK PI/O Port ")
19253 label3.grid(row=3, column=0, columnspan=1, sticky=W)
19254 sclk1 = Radiobutton(serialwindow, text=
"0", variable=SCLKPort, value=PIO_0)
19255 sclk1.grid(row=3, column=1, sticky=W)
19256 sclk2 = Radiobutton(serialwindow, text=
"1", variable=SCLKPort, value=PIO_1)
19257 sclk2.grid(row=3, column=2, sticky=W)
19258 sclk3 = Radiobutton(serialwindow, text=
"2", variable=SCLKPort, value=PIO_2)
19259 sclk3.grid(row=3, column=3, sticky=W)
19260 sclk4 = Radiobutton(serialwindow, text=
"3", variable=SCLKPort, value=PIO_3)
19261 sclk4.grid(row=3, column=4, sticky=W)
19263 label4 = Label(serialwindow,text=
"SData PI/O Port ")
19264 label4.grid(row=4, column=0, columnspan=1, sticky=W)
19265 sdat1 = Radiobutton(serialwindow, text=
"0", variable=SDATAPort, value=PIO_0)
19266 sdat1.grid(row=4, column=1, sticky=W)
19267 sdat2 = Radiobutton(serialwindow, text=
"1", variable=SDATAPort, value=PIO_1)
19268 sdat2.grid(row=4, column=2, sticky=W)
19269 sdat3 = Radiobutton(serialwindow, text=
"2", variable=SDATAPort, value=PIO_2)
19270 sdat3.grid(row=4, column=3, sticky=W)
19271 sdat4 = Radiobutton(serialwindow, text=
"3", variable=SDATAPort, value=PIO_3)
19272 sdat4.grid(row=4, column=4, sticky=W)
19274 label5 = Label(serialwindow,text=
"Latch PI/O Port ")
19275 label5.grid(row=5, column=0, columnspan=1, sticky=W)
19276 slth1 = Radiobutton(serialwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
19277 slth1.grid(row=5, column=1, sticky=W)
19278 slth2 = Radiobutton(serialwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
19279 slth2.grid(row=5, column=2, sticky=W)
19280 slth3 = Radiobutton(serialwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
19281 slth3.grid(row=5, column=3, sticky=W)
19282 slth4 = Radiobutton(serialwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
19283 slth4.grid(row=5, column=4, sticky=W)
19285 label6 = Label(serialwindow,text=
"Latch Phase ")
19286 label6.grid(row=6, column=0, columnspan=1, sticky=W)
19287 sph1 = Radiobutton(serialwindow, text=
"0", variable=SLatchPhase, value=0)
19288 sph1.grid(row=6, column=1, sticky=W)
19289 sph2 = Radiobutton(serialwindow, text=
"1", variable=SLatchPhase, value=1)
19290 sph2.grid(row=6, column=2, sticky=W)
19292 label7 = Label(serialwindow,text=
"Clock Phase ")
19293 label7.grid(row=7, column=0, columnspan=1, sticky=W)
19294 sph7 = Radiobutton(serialwindow, text=
"0", variable=SClockPhase, value=0)
19295 sph7.grid(row=7, column=1, sticky=W)
19296 sph8 = Radiobutton(serialwindow, text=
"1", variable=SClockPhase, value=1)
19297 sph8.grid(row=7, column=2, sticky=W)
19299 sdir1 = Radiobutton(serialwindow, text=
"LSB First", variable=SerDirection, value=0 )
19300 sdir1.grid(row=8, column=0, sticky=W)
19301 sdir2 = Radiobutton(serialwindow, text=
"MSB First", variable=SerDirection, value=1 )
19302 sdir2.grid(row=8, column=1, columnspan=2, sticky=W)
19304 bsn1 = Button(serialwindow, text=
'Send', style=
"W5.TButton", command=BSendGS)
19305 bsn1.grid(row=9, column=0, sticky=W)
19306 dismissgsbutton = Button(serialwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyGenericSerialScreen)
19307 dismissgsbutton.grid(row=9, column=1, columnspan=2, sticky=W, pady=4)
19310 global serialwindow, GenericSerialStatus
19312 GenericSerialStatus.set(0)
19313 serialwindow.destroy()
19317 global digfltwindow, DigFiltStatus, RevDate, SWRev
19318 global DigFiltA, DigFiltB, DifFiltALength, DifFiltBLength, DifFiltAFile, DifFiltBFile
19319 global DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
19321 if DigFiltStatus.get() == 0:
19322 DigFiltStatus.set(1)
19323 digfltwindow = Toplevel()
19324 digfltwindow.title(
"Digital Filter " + SWRev + RevDate)
19325 digfltwindow.resizable(FALSE,FALSE)
19326 digfltwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigFiltScreen)
19328 frame2 = LabelFrame(digfltwindow, text=
"CH A Filter", style=
"A10R1.TLabelframe")
19329 frame3 = LabelFrame(digfltwindow, text=
"CH B Filter", style=
"A10R2.TLabelframe")
19330 frame2.pack(side=LEFT, expand=1, fill=X)
19331 frame3.pack(side=LEFT, expand=1, fill=X)
19333 digfilta = Frame( frame2 )
19334 digfilta.pack(side=TOP)
19337 lab1 = Checkbutton(digfilta,text=
"Filter CH A", variable=DigFiltA)
19338 lab1.grid(row=0, column=0, columnspan=2, sticky=W)
19339 lab3 = Checkbutton(digfilta,text=
"Box Car", variable=DigFiltABoxCar, command=BuildBoxCarA)
19340 lab3.grid(row=1, column=0, sticky=W)
19341 BCALenEntry = Entry(digfilta, width=3, cursor=
'double_arrow')
19342 BCALenEntry.bind(
"<Return>", onRetDigFiltA)
19343 BCALenEntry.bind(
'<MouseWheel>', onDigFiltAScroll)
19344 BCALenEntry.bind(
"<Button-4>", onDigFiltAScroll)
19345 BCALenEntry.bind(
"<Button-5>", onDigFiltAScroll)
19347 BCALenEntry.grid(row=1, column=1, sticky=W)
19348 BCALenEntry.delete(0,
"end")
19349 BCALenEntry.insert(0,2)
19350 bcalab = Label(digfilta, text=
"Length")
19351 bcalab.grid(row=1, column=2, sticky=W)
19352 DifFiltALength = Label(digfilta, text=
"Length = 0 ")
19353 DifFiltALength.grid(row=2, column=0, sticky=W)
19354 DifFiltAFile = Label(digfilta, text=
"File Name, none ")
19355 DifFiltAFile.grid(row=3, column=0, sticky=W)
19356 cald = Button(digfilta, text=
'Load CH A Filter Coef', command=BLoadDFiltA)
19357 cald.grid(row=4, column=0, columnspan=2, sticky=W)
19358 camath = Button(digfilta, text=
'CH A Filter formula', command=BDFiltAMath)
19359 camath.grid(row=5, column=0, columnspan=2, sticky=W)
19361 digfiltb = Frame( frame3 )
19362 digfiltb.pack(side=TOP)
19363 lab2 = Checkbutton(digfiltb,text=
"Filter CH B", variable=DigFiltB)
19364 lab2.grid(row=0, column=0, columnspan=2, sticky=W)
19365 lab4 = Checkbutton(digfiltb,text=
"Box Car", variable=DigFiltBBoxCar, command=BuildBoxCarB)
19366 lab4.grid(row=1, column=0, sticky=W)
19367 BCBLenEntry = Entry(digfiltb, width=3, cursor=
'double_arrow')
19368 BCBLenEntry.bind(
"<Return>", onRetDigFiltB)
19369 BCBLenEntry.bind(
'<MouseWheel>', onDigFiltBScroll)
19370 BCBLenEntry.bind(
"<Button-4>", onDigFiltBScroll)
19371 BCBLenEntry.bind(
"<Button-5>", onDigFiltBScroll)
19373 BCBLenEntry.grid(row=1, column=1, sticky=W)
19374 BCBLenEntry.delete(0,
"end")
19375 BCBLenEntry.insert(0,2)
19376 bcblab = Label(digfiltb, text=
"Length")
19377 bcblab.grid(row=1, column=2, sticky=W)
19378 DifFiltBLength = Label(digfiltb,text=
"Length = 0 ")
19379 DifFiltBLength.grid(row=2, column=0, sticky=W)
19380 DifFiltBFile = Label(digfiltb,text=
"File Name, none ")
19381 DifFiltBFile.grid(row=3, column=0, sticky=W)
19382 camath.grid(row=8, column=0, sticky=W)
19383 cbld = Button(digfiltb, text=
'Load CH B Filter Coef', command=BLoadDFiltB)
19384 cbld.grid(row=4, column=0, sticky=W)
19385 cbmath = Button(digfiltb, text=
'CH B Filter formula', command=BDFiltBMath)
19386 cbmath.grid(row=5, column=0, sticky=W)
19387 dismissdfbutton = Button(digfiltb, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigFiltScreen)
19388 dismissdfbutton.grid(row=6, column=0, columnspan=1, sticky=W)
19398 global BCALenEntry, DFiltACoef, DigFiltABoxCar, DifFiltALength
19400 if DigFiltABoxCar.get() == 0:
19403 FLength = int(BCALenEntry.get())
19409 for n
in range(FLength):
19410 DFiltACoef.append(float(1.0/FLength))
19412 DFiltACoef = numpy.array(DFiltACoef)
19413 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19423 global BCBLenEntry, DFiltBCoef, DigFiltBBoxCar, DifFiltBLength
19425 if DigFiltBBoxCar.get() == 0:
19428 FLength = int(BCBLenEntry.get())
19434 for n
in range(FLength):
19435 DFiltBCoef.append(float(1.0/FLength))
19437 DFiltBCoef = numpy.array(DFiltBCoef)
19438 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19441 global digfltwindow, DigFiltStatus
19443 DigFiltStatus.set(0)
19444 digfltwindow.destroy()
19447 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile
19450 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
19452 CSVFile = open(filename)
19453 csv_f = csv.reader(CSVFile)
19455 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
19461 DFiltACoef.append(float(row[0]))
19463 print(
'skipping non-numeric row')
19464 DFiltACoef = numpy.array(DFiltACoef)
19465 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19466 DifFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
19470 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile, DigFilterAString
19472 TempString = DigFilterAString
19473 DigFilterAString = askstring(
"CH A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=DigFilterAString, parent=digfltwindow)
19474 if (DigFilterAString ==
None):
19475 DigFilterAString = TempString
19477 DFiltACoef = eval(DigFilterAString)
19478 DFiltACoef = numpy.array(DFiltACoef)
19479 coefsum = numpy.sum(DFiltACoef)
19480 DFiltACoef = DFiltACoef / coefsum
19481 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19482 DifFiltAFile.config(text =
"Using Filter A formula" )
19485 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile
19488 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
19490 CSVFile = open(filename)
19491 csv_f = csv.reader(CSVFile)
19493 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
19499 DFiltBCoef.append(float(row[0]))
19501 print(
'skipping non-numeric row')
19502 DFiltBCoef = numpy.array(DFiltBCoef)
19503 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19504 DifFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
19508 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile, DigFilterBString
19510 TempString = DigFilterBString
19511 DigFilterBString = askstring(
"CH B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=DigFilterBString, parent=digfltwindow)
19512 if (DigFilterBString ==
None):
19513 DigFilterBString = TempString
19515 DFiltBCoef = eval(DigFilterBString)
19516 DFiltBCoef = numpy.array(DFiltBCoef)
19517 coefsum = numpy.sum(DFiltBCoef)
19518 DFiltBCoef = DFiltBCoef / coefsum
19519 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19520 DifFiltBFile.config(text =
"Using Filter B formula" )
19523 global commandwindow, CommandStatus, ExecString, LastCommand, RevDate, SWRev
19525 if CommandStatus.get() == 0:
19526 CommandStatus.set(1)
19527 commandwindow = Toplevel()
19528 commandwindow.title(
"Command Line " + SWRev + RevDate)
19529 commandwindow.resizable(FALSE,FALSE)
19530 commandwindow.protocol(
"WM_DELETE_WINDOW", DestroyCommandScreen)
19531 toplab = Label(commandwindow,text=
"Command Line Interface ", style=
"A12B.TLabel")
19532 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
19533 cl1 = Label(commandwindow,text=
"Last command:")
19534 cl1.grid(row=1, column=0, sticky=W)
19535 LastCommand = Label(commandwindow,text=
" ")
19536 LastCommand.grid(row=2, column=0, columnspan=4, sticky=W)
19537 ExecString = Entry(commandwindow, width=40)
19538 ExecString.bind(
"<Return>", RExecuteFromString)
19539 ExecString.grid(row=3, column=0, columnspan=4, sticky=W)
19540 ExecString.delete(0,
"end")
19541 ExecString.insert(0,
"global ; ")
19542 executeclbutton = Button(commandwindow, text=
"Execute", style=
"W8.TButton", command=BExecuteFromString)
19543 executeclbutton.grid(row=4, column=0, sticky=W, pady=8)
19545 dismissclbutton = Button(commandwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyCommandScreen)
19546 dismissclbutton.grid(row=4, column=1, sticky=W, pady=7)
19549 global commandwindow, CommandStatus
19551 CommandStatus.set(0)
19552 commandwindow.destroy()
19559 global ExecString, LastCommand
19562 exec( ExecString.get() )
19563 LastCommand.config(text = ExecString.get() )
19565 LastCommand.config(text =
"Syntax Error Encountered" )
19569 global ca, GRW, XOL, GRH, Y0T, CANVASwidth, CANVASheight, FontSize
19572 CANVASwidth = event.width - 4
19573 CANVASheight = event.height - 4
19574 GRW = CANVASwidth - (2 * X0L)
19575 GRH = CANVASheight - (Y0T + (FontSize * 7))
19579 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
19580 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
19581 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
19582 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
19583 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
19584 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
19586 ValueText =
' {0:.4f} '.format(eval(ChaMeasString1))
19587 ChaValue1.config(text = ValueText)
19588 ValueText =
' {0:.4f} '.format(eval(ChaMeasString2))
19589 ChaValue2.config(text = ValueText)
19590 ValueText =
' {0:.4f} '.format(eval(ChaMeasString3))
19591 ChaValue3.config(text = ValueText)
19592 ValueText =
' {0:.4f} '.format(eval(ChaMeasString4))
19593 ChaValue4.config(text = ValueText)
19594 ValueText =
' {0:.4f} '.format(eval(ChaMeasString5))
19595 ChaValue5.config(text = ValueText)
19596 ValueText =
' {0:.4f} '.format(eval(ChaMeasString6))
19597 ChaValue6.config(text = ValueText)
19598 ValueText =
' {0:.4f} '.format(eval(ChbMeasString1))
19599 ChbValue1.config(text = ValueText)
19600 ValueText =
' {0:.4f} '.format(eval(ChbMeasString2))
19601 ChbValue2.config(text = ValueText)
19602 ValueText =
' {0:.4f} '.format(eval(ChbMeasString3))
19603 ChbValue3.config(text = ValueText)
19604 ValueText =
' {0:.4f} '.format(eval(ChbMeasString4))
19605 ChbValue4.config(text = ValueText)
19606 ValueText =
' {0:.4f} '.format(eval(ChbMeasString5))
19607 ChbValue5.config(text = ValueText)
19608 ValueText =
' {0:.4f} '.format(eval(ChbMeasString6))
19609 ChbValue6.config(text = ValueText)
19612 global measurewindow, MeasureStatus, RevDate, SWRev
19613 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
19614 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
19615 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
19616 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
19617 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
19618 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
19620 if MeasureStatus.get() == 0:
19621 MeasureStatus.set(1)
19622 measurewindow = Toplevel()
19623 measurewindow.title(
"Measurements " + SWRev + RevDate)
19624 measurewindow.resizable(FALSE,FALSE)
19625 measurewindow.protocol(
"WM_DELETE_WINDOW", DestroyMeasureScreen)
19626 toplab = Label(measurewindow,text=
"Measurements ", style=
"A12B.TLabel")
19627 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
19628 ChaLab1 = Label(measurewindow,text=ChaLableSrring1, style=
"A10B.TLabel")
19629 ChaLab1.grid(row=1, column=0, columnspan=1, sticky=W)
19630 ChaValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19631 ChaValue1.grid(row=1, column=1, columnspan=1, sticky=W)
19632 ChaLab2 = Label(measurewindow,text=ChaLableSrring2, style=
"A10B.TLabel")
19633 ChaLab2.grid(row=1, column=2, columnspan=1, sticky=W)
19634 ChaValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19635 ChaValue2.grid(row=1, column=3, columnspan=1, sticky=W)
19636 ChaLab3 = Label(measurewindow,text=ChaLableSrring3, style=
"A10B.TLabel")
19637 ChaLab3.grid(row=2, column=0, columnspan=1, sticky=W)
19638 ChaValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19639 ChaValue3.grid(row=2, column=1, columnspan=1, sticky=W)
19640 ChaLab4 = Label(measurewindow,text=ChaLableSrring4, style=
"A10B.TLabel")
19641 ChaLab4.grid(row=2, column=2, columnspan=1, sticky=W)
19642 ChaValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19643 ChaValue4.grid(row=2, column=3, columnspan=1, sticky=W)
19644 ChaLab5 = Label(measurewindow,text=ChaLableSrring5, style=
"A10B.TLabel")
19645 ChaLab5.grid(row=3, column=0, columnspan=1, sticky=W)
19646 ChaValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19647 ChaValue5.grid(row=3, column=1, columnspan=1, sticky=W)
19648 ChaLab6 = Label(measurewindow,text=ChaLableSrring6, style=
"A10B.TLabel")
19649 ChaLab6.grid(row=3, column=2, columnspan=1, sticky=W)
19650 ChaValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19651 ChaValue6.grid(row=3, column=3, columnspan=1, sticky=W)
19653 ChbLab1 = Label(measurewindow,text=ChbLableSrring1, style=
"A10B.TLabel")
19654 ChbLab1.grid(row=4, column=0, columnspan=1, sticky=W)
19655 ChbValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19656 ChbValue1.grid(row=4, column=1, columnspan=1, sticky=W)
19657 ChbLab2 = Label(measurewindow,text=ChbLableSrring2, style=
"A10B.TLabel")
19658 ChbLab2.grid(row=4, column=2, columnspan=1, sticky=W)
19659 ChbValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19660 ChbValue2.grid(row=4, column=3, columnspan=1, sticky=W)
19661 ChbLab3 = Label(measurewindow,text=ChbLableSrring3, style=
"A10B.TLabel")
19662 ChbLab3.grid(row=5, column=0, columnspan=1, sticky=W)
19663 ChbValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19664 ChbValue3.grid(row=5, column=1, columnspan=1, sticky=W)
19665 ChbLab4 = Label(measurewindow,text=ChbLableSrring4, style=
"A10B.TLabel")
19666 ChbLab4.grid(row=5, column=2, columnspan=1, sticky=W)
19667 ChbValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19668 ChbValue4.grid(row=5, column=3, columnspan=1, sticky=W)
19669 ChbLab5 = Label(measurewindow,text=ChbLableSrring5, style=
"A10B.TLabel")
19670 ChbLab5.grid(row=6, column=0, columnspan=1, sticky=W)
19671 ChbValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19672 ChbValue5.grid(row=6, column=1, columnspan=1, sticky=W)
19673 ChbLab6 = Label(measurewindow,text=ChbLableSrring6, style=
"A10B.TLabel")
19674 ChbLab6.grid(row=6, column=2, columnspan=1, sticky=W)
19675 ChbValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19676 ChbValue6.grid(row=6, column=3, columnspan=1, sticky=W)
19679 global measurewindow, MeasureStatus
19681 MeasureStatus.set(0)
19682 measurewindow.destroy()
19685 global boardwindow, BoardStatus, session, devx, dev0, dev1, dev2, MultipleBoards
19686 global RevDate, BrdSel, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
19688 if len(session.devices) > 1
and MultipleBoards.get() > 0:
19689 if BoardStatus.get() == 0:
19691 boardwindow = Toplevel()
19692 boardwindow.title(
"Select Board " + RevDate)
19693 boardwindow.resizable(FALSE,FALSE)
19694 boardwindow.protocol(
"WM_DELETE_WINDOW", DestroyBoardScreen)
19695 toplab = Label(boardwindow,text=
"- Select ALM1000 -", style=
"A12B.TLabel")
19696 toplab.pack(side=TOP)
19697 for idx, devx
in enumerate(session.devices):
19698 BrdText =
"Board # " + str(idx)
19700 devx.set_led(0b010)
19701 FWRevOne = float(devx.fwver)
19702 HWRevOne = devx.hwver
19704 brd = Radiobutton(boardwindow, text=BrdText, style=
"Run.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
19706 devx.set_led(0b100)
19707 FWRevTwo = float(devx.fwver)
19708 HWRevTwo = devx.hwver
19710 brd = Radiobutton(boardwindow, text=BrdText, style=
"Stop.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
19712 devx.set_led(0b001)
19713 FWRevThree = float(devx.fwver)
19714 HWRevThree = devx.hwver
19716 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
19718 dev3 = session.devices[3]
19719 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
19722 devx = session.devices[0]
19724 devx.set_led(0b010)
19726 FWRevOne = float(devx.fwver)
19727 HWRevOne = devx.hwver
19729 FWRevOne =
"Before 2.06"
19731 dev0 = session.devices[0]
19734 global boardwindow, BoardStatus
19737 boardwindow.destroy()
19740 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples, AWGSAMPLErate
19741 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree, SAMPLErate, MultipleBoards
19743 if DevID ==
"No Device" or DevID ==
"m1k":
19745 session = Session(ignore_dataflow=
True, sample_rate=SAMPLErate, queue_size=MaxSamples)
19748 if not session.devices:
19749 print(
'No Device plugged IN!')
19750 DevID =
"No Device"
19752 bcon.configure(text=
"Recon", style=
"RConn.TButton")
19754 session.configure(sample_rate=SAMPLErate)
19758 bcon.configure(text=
"Conn", style=
"GConn.TButton")
19759 devx.set_adc_mux(0)
19760 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
19761 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
19769 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, RUNstatus, FWRevOne, HWRevOne
19770 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7, cal, SAMPLErate, MaxSamples
19771 global IgnoreFirmwareCheck, SDATAPort, SCLKPort, SLATCHPort
19773 if RUNstatus.get() == 1:
19777 if BrdSel.get() == 0:
19779 session.remove(dev1)
19780 print(
"Removing dev1")
19782 print(
"Skipping dev1")
19784 session.remove(dev2)
19785 print(
"Removing dev2")
19787 print(
"Skipping dev2")
19791 if BrdSel.get() == 1:
19793 session.remove(dev0)
19794 print(
"Removing dev0")
19796 print(
"Skipping dev0")
19798 session.remove(dev2)
19799 print(
"Removing dev2")
19801 print(
"Skipping dev2")
19805 DevID = devx.serial
19807 FWRevOne = float(devx.fwver)
19808 HWRevOne = str(devx.hwver)
19809 print( FWRevOne, HWRevOne)
19812 if IgnoreFirmwareCheck == 0:
19813 if FWRevOne < 2.17:
19814 showwarning(
"WARNING",
"This ALICE version Requires Firmware version > 2.16")
19816 cal = devx.calibration
19817 CHA = devx.channels[
'A']
19818 CHA.mode = Mode.HI_Z_SPLIT
19819 CHB = devx.channels[
'B']
19820 CHB.mode = Mode.HI_Z_SPLIT
19833 devx.set_adc_mux(0)
19834 if devx.hwver ==
"F":
19835 print(
"Rev F Board I/O ports set")
19854 SDATAPort.set(PIO_1)
19855 SCLKPort.set(PIO_2)
19856 SLATCHPort.set(PIO_0)
19859 global SAMPLErate, AWGSAMPLErate, BaseSampleRate, session, ETSStatus, etssrlab, RevDate
19860 global Two_X_Sample, ADC_Mux_Mode, SampleRatewindow, SampleRateStatus, BaseRatesb
19861 global Alternate_Sweep_Mode, DeBugMode, FWRevOne, SWRev, SampRateList
19862 global FrameRefief, BorderSize
19864 if SampleRateStatus.get() == 0:
19865 SampleRateStatus.set(1)
19866 SampleRatewindow = Toplevel()
19867 SampleRatewindow.title(
"Set Sample Rate " + SWRev + RevDate)
19868 SampleRatewindow.resizable(FALSE,FALSE)
19869 SampleRatewindow.protocol(
"WM_DELETE_WINDOW", DestroySampleRate)
19870 frame1 = Frame(SampleRatewindow, borderwidth=BorderSize, relief=FrameRefief)
19871 frame1.grid(row=0, column=0, sticky=W)
19873 BaseRATE = Frame( frame1 )
19874 BaseRATE.grid(row=0, column=0, sticky=W)
19875 baseratelab = Label(BaseRATE, text=
"Base Sample Rate", style=
"A10B.TLabel")
19876 baseratelab.pack(side=LEFT)
19877 BaseRatesb = Spinbox(BaseRATE, width=6, values=SampRateList, command=SetSampleRate)
19878 BaseRatesb.bind(
'<MouseWheel>', onSrateScroll)
19879 BaseRatesb.bind(
"<Button-4>", onSrateScroll)
19880 BaseRatesb.bind(
"<Button-5>", onSrateScroll)
19881 BaseRatesb.bind(
"<Return>", onRetSrate)
19882 BaseRatesb.pack(side=LEFT)
19883 BaseRatesb.delete(0,
"end")
19884 BaseRatesb.insert(0,BaseSampleRate)
19887 if FWRevOne > 2.16:
19888 twoX = Checkbutton(frame1, text=
"Double Sample Rate", variable=Two_X_Sample, command=SetADC_Mux )
19889 twoX.grid(row=1, column=0, sticky=W)
19890 muxlab1 = Label(frame1, text=
"ADC MUX Modes", style=
"A10B.TLabel")
19891 muxlab1.grid(row=2, column=0, sticky=W)
19892 AltSweep = Checkbutton(frame1, text=
"Alternate Sweep Mode", variable=Alternate_Sweep_Mode )
19893 AltSweep.grid(row=3, column=0, sticky=W)
19894 chabuttons = Frame( frame1 )
19895 chabuttons.grid(row=4, column=0, sticky=W)
19896 muxrb1 = Radiobutton(chabuttons, text=
"VA and VB", variable=ADC_Mux_Mode, value=0, command=SetADC_Mux )
19897 muxrb1.pack(side=LEFT)
19898 muxrb2 = Radiobutton(chabuttons, text=
"IA and IB", variable=ADC_Mux_Mode, value=1, command=SetADC_Mux )
19899 muxrb2.pack(side=LEFT)
19900 chcbuttons = Frame( frame1 )
19901 chcbuttons.grid(row=5, column=0, sticky=W)
19902 muxrb5 = Radiobutton(chcbuttons, text=
"VA and IA", variable=ADC_Mux_Mode, value=4, command=SetADC_Mux )
19903 muxrb5.pack(side=LEFT)
19904 muxrb6 = Radiobutton(chcbuttons, text=
"VB and IB", variable=ADC_Mux_Mode, value=5, command=SetADC_Mux )
19905 muxrb6.pack(side=LEFT)
19908 chbbuttons = Frame( frame1 )
19909 chbbuttons.grid(row=nextrow, column=0, sticky=W)
19910 muxrb3 = Radiobutton(chbbuttons, text=
"VA and IB", variable=ADC_Mux_Mode, value=2, command=SetADC_Mux )
19911 muxrb3.pack(side=LEFT)
19912 muxrb4 = Radiobutton(chbbuttons, text=
"VB and IA", variable=ADC_Mux_Mode, value=3, command=SetADC_Mux )
19913 muxrb4.pack(side=LEFT)
19914 nextrow = nextrow + 1
19916 sratedismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySampleRate)
19917 sratedismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
19920 global SampleRatewindow, SampleRateStatus
19922 SampleRateStatus.set(0)
19923 SampleRatewindow.destroy()
19937 global SAMPLErate, BaseSampleRate, AWGSAMPLErate, session, ETSStatus, etssrlab, BaseRatesb
19938 global Two_X_Sample, ADC_Mux_Mode, rtsrlab, RUNstatus
19942 if (RUNstatus.get() == 1):
19946 NewRate = int(BaseRatesb.get())
19947 if NewRate <= 100000:
19948 BaseSampleRate = NewRate
19950 BaseSampleRate = 100000
19951 BaseRatesb.delete(0,
"end")
19952 BaseRatesb.insert(0,BaseSampleRate)
19953 SAMPLErate = BaseSampleRate
19956 session.configure(sample_rate=BaseSampleRate)
19957 BaseSampleRate = session.sample_rate
19959 SAMPLErate = BaseSampleRate
19961 AWGSAMPLErate = BaseSampleRate
19962 if ETSStatus.get() > 0:
19963 SRstring =
"RT Sample Rate = " + str(BaseSampleRate)
19964 rtsrlab.config(text=SRstring)
19966 BaseRatesb.delete(0,
"end")
19967 BaseRatesb.insert(0,BaseSampleRate)
19969 if (WasRunning == 1):
19974 global StopFreqEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
19978 StopFrequency = float(StopFreqEntry.get())
19980 StopFreqEntry.delete(0,
"end")
19981 StopFreqEntry.insert(0,50000)
19982 StopFrequency = 50000
19983 if FWRevOne > 2.16:
19984 if StopFrequency >= 50000:
19985 Two_X_Sample.set(1)
19986 ADC_Mux_Mode.set(0)
19989 Two_X_Sample.set(0)
19990 ADC_Mux_Mode.set(0)
19994 global StopBodeEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
19998 StopFrequency = float(StopBodeEntry.get())
20000 StopBodeEntry.delete(0,
"end")
20001 StopBodeEntry.insert(0,20000)
20002 StopFrequency = 20000
20003 if FWRevOne > 2.16:
20004 if StopFrequency >= 20000:
20005 Two_X_Sample.set(1)
20006 ADC_Mux_Mode.set(0)
20009 Two_X_Sample.set(0)
20010 ADC_Mux_Mode.set(0)
20014 global devx, SAMPLErate, BaseSampleRate, Two_X_Sample, ADC_Mux_Mode, CHA, CHB
20015 global v1_adc_conf, i1_adc_conf, v2_adc_conf, i2_adc_conf
20017 if Two_X_Sample.get() == 1:
20018 if ADC_Mux_Mode.get() == 0:
20019 devx.set_adc_mux(1)
20020 elif ADC_Mux_Mode.get() == 1:
20021 devx.set_adc_mux(2)
20022 elif ADC_Mux_Mode.get() == 2:
20024 devx.set_adc_mux(2)
20026 devx.set_adc_mux(7)
20027 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
20028 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
20029 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
20030 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
20032 elif ADC_Mux_Mode.get() == 3:
20035 devx.set_adc_mux(7)
20036 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
20037 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
20038 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
20039 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
20041 elif ADC_Mux_Mode.get() == 4:
20043 devx.set_adc_mux(4)
20044 elif ADC_Mux_Mode.get() == 5:
20046 devx.set_adc_mux(5)
20047 SAMPLErate = BaseSampleRate * 2
20049 devx.set_adc_mux(0)
20050 SAMPLErate = BaseSampleRate
20053 global ADC_Mux_Mode, Alternate_Sweep_Mode, ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
20055 if ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
20056 ADC_Mux_Mode.set(0)
20057 Alternate_Sweep_Mode.set(1)
20058 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 0:
20059 ADC_Mux_Mode.set(0)
20060 Alternate_Sweep_Mode.set(1)
20061 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
20062 ADC_Mux_Mode.set(0)
20063 Alternate_Sweep_Mode.set(1)
20064 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
20065 ADC_Mux_Mode.set(0)
20066 Alternate_Sweep_Mode.set(1)
20067 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
20068 ADC_Mux_Mode.set(0)
20069 Alternate_Sweep_Mode.set(1)
20071 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
20072 ADC_Mux_Mode.set(1)
20073 Alternate_Sweep_Mode.set(0)
20074 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
20075 ADC_Mux_Mode.set(1)
20076 Alternate_Sweep_Mode.set(0)
20077 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
20078 ADC_Mux_Mode.set(1)
20079 Alternate_Sweep_Mode.set(0)
20080 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
20081 ADC_Mux_Mode.set(4)
20082 Alternate_Sweep_Mode.set(0)
20083 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
20084 ADC_Mux_Mode.set(5)
20085 Alternate_Sweep_Mode.set(0)
20087 ADC_Mux_Mode.set(0)
20088 Alternate_Sweep_Mode.set(0)
20093 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples
20094 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
20097 if askyesno(
"Update current firmware",
"Flash new firmware to current device:\n(Yes) or (No)?"):
20098 filename = askopenfilename(defaultextension =
".bin", filetypes=[(
"Binary",
"*.bin")])
20103 print(
"Cancel current session.")
20105 print( session.cancelled)
20107 print(
"Waiting 5...")
20109 print(
"Put board in Samba mode and flash firmware.")
20110 session.flash_firmware(filename)
20112 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
20121 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
20122 showwarning(
"Exit ALICE",
"Must Exit Program: \n Restart ALICE to continue.")
20134 global OhmDisp, OhmStatus, ohmwindow, RevDate, RMode, OhmA0, OhmA1, OhmRunStatus
20135 global CHATestVEntry, CHATestREntry, SWRev, AWGSync, OnBoardRes
20136 global FrameRefief, BorderSize
20138 if OhmStatus.get() == 0:
20143 ohmwindow = Toplevel()
20144 ohmwindow.title(
"DC Ohmmeter " + SWRev + RevDate)
20145 ohmwindow.resizable(FALSE,FALSE)
20146 ohmwindow.protocol(
"WM_DELETE_WINDOW", DestroyOhmScreen)
20147 frame1 = Frame(ohmwindow, borderwidth=BorderSize, relief=FrameRefief)
20148 frame1.grid(row=0, column=0, sticky=W)
20150 buttons = Frame( frame1 )
20151 buttons.grid(row=0, column=0, sticky=W)
20152 omrb2 = Radiobutton(buttons, text=
"Run", style=
"Run.TRadiobutton", variable=OhmRunStatus, value=1, command=BStartOhm )
20153 omrb2.pack(side=LEFT)
20154 omrb1 = Radiobutton(buttons, text=
"Stop", style=
"Stop.TRadiobutton", variable=OhmRunStatus, value=0, command=BStop )
20155 omrb1.pack(side=LEFT)
20157 OhmA0 = Label(frame1, style=
"A16B.TLabel")
20158 OhmA0.grid(row=1, column=0, columnspan=2, sticky=W)
20159 OhmA0.config(text =
"0.000 Ohms")
20161 OhmA1 = Label(frame1, style=
"A12B.TLabel")
20162 OhmA1.grid(row=2, column=0, columnspan=2, sticky=W)
20163 OhmA1.config(text =
"Meas 0.00 mA 0.00 V")
20165 TestVA = Frame( frame1 )
20166 TestVA.grid(row=3, column=0, sticky=W)
20167 chatestvlab = Label(TestVA, text=
"Test Voltage", style=
"A10B.TLabel")
20168 chatestvlab.pack(side=LEFT)
20169 CHATestVEntry = Entry(TestVA, width=6, cursor=
'double_arrow')
20170 CHATestVEntry.pack(side=LEFT)
20171 CHATestVEntry.bind(
'<MouseWheel>', onTextScroll)
20172 CHATestVEntry.bind(
"<Button-4>", onTextScroll)
20173 CHATestVEntry.bind(
"<Button-5>", onTextScroll)
20174 CHATestVEntry.delete(0,
"end")
20175 CHATestVEntry.insert(0,5.0)
20179 TestMode = Frame( frame1 )
20180 TestMode.grid(row=4, column=0, sticky=W)
20181 modelab = Label(TestMode, text=
"Known Res", style=
"A10B.TLabel")
20182 modelab.pack(side=LEFT)
20183 rm3 = Radiobutton(TestMode, text=
"Ext", variable=RMode, value=0)
20184 rm3.pack(side=LEFT)
20185 rm4 = Radiobutton(TestMode, text=
"Int", variable=RMode, value=1)
20186 rm4.pack(side=LEFT)
20188 TestRA = Frame( frame1 )
20189 TestRA.grid(row=5, column=0, sticky=W)
20190 chatestrlab = Label(TestRA, text=
"Known Res", style=
"A10B.TLabel")
20191 chatestrlab.pack(side=LEFT)
20192 CHATestREntry = Entry(TestRA, width=6, cursor=
'double_arrow')
20193 CHATestREntry.pack(side=LEFT)
20194 CHATestREntry.bind(
'<MouseWheel>', onTextScroll)
20195 CHATestREntry.bind(
"<Button-4>", onTextScroll)
20196 CHATestREntry.bind(
"<Button-5>", onTextScroll)
20197 CHATestREntry.delete(0,
"end")
20198 CHATestREntry.insert(0,OnBoardRes)
20200 ohmdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOhmScreen)
20201 ohmdismissclbutton.grid(row=6, column=0, sticky=W, pady=7)
20204 global ohmwindow, OhmStatus, OhmDisp
20209 ohmwindow.destroy()
20212 global FMulXEntry, MulXEntry, etswindow, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate
20213 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, enb1, rtsrlab, etssrlab, RevDate, SWRev
20214 global MinigenScreenStatus, DeBugMode
20215 global FrameRefief, BorderSize
20218 if ETSStatus.get() == 0:
20219 BaseFreq = (-10, -15, -20, -25, -30, -35, -40, -45, -50, -60, -70, -80, -90, -100)
20222 etswindow = Toplevel()
20223 etswindow.title(
"ETS Controls " + SWRev + RevDate)
20224 etswindow.resizable(FALSE,FALSE)
20225 etswindow.protocol(
"WM_DELETE_WINDOW", DestroyETSScreen)
20226 frame1 = Frame(etswindow, borderwidth=BorderSize, relief=FrameRefief)
20227 frame1.grid(row=0, column=0, sticky=W)
20229 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
20230 rtsrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
20231 rtsrlab.grid(row=1, column=0, sticky=W)
20232 ESRstring =
"ET Sample Rate = " + str(SAMPLErate)
20233 etssrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
20234 etssrlab.grid(row=2, column=0, sticky=W)
20235 etssrbutton = Button(frame1, text=
"Set RT Sample Rate", command=MakeSampleRateMenu)
20236 etssrbutton.grid(row=3, column=0, sticky=W, pady=7)
20237 enb1 = Checkbutton(frame1,text=
"Enable ETS", variable=ETSDisp, command=ETSCheckBox)
20238 enb1.grid(row=4, column=0, sticky=W)
20240 Divx = Frame( frame1 )
20241 Divx.grid(row=5, column=0, sticky=W)
20242 DivXEntry = Entry(Divx, width=6, cursor=
'double_arrow')
20243 DivXEntry.bind(
'<MouseWheel>', ETSscroll)
20244 DivXEntry.bind(
"<Button-4>", ETSscroll)
20245 DivXEntry.bind(
"<Button-5>", ETSscroll)
20246 DivXEntry.pack(side=RIGHT)
20247 DivXEntry.delete(0,
"end")
20248 DivXEntry.insert(0,2)
20249 divxlab = Label( Divx, text =
"Divide Factor")
20250 divxlab.pack(side=RIGHT)
20254 FOffEntry = Label(frame1, text=
"Samples")
20255 FOffEntry.grid(row=GridRow+1, column=0, sticky=W)
20256 MulXEntry = Label( frame1, text =
"Rec Len Mul")
20257 MulXEntry.grid(row=GridRow+2, column=0, sticky=W)
20258 GridRow = GridRow + 2
20260 eqivsamplerate = Label(frame1, text=
"MHz", style=
"A10B.TLabel")
20261 eqivsamplerate.grid(row=GridRow+1, column=0, sticky=W)
20263 FConv = Frame( frame1 )
20264 FConv.grid(row=GridRow+2, column=0, sticky=W)
20265 FMulXEntry = Entry(FConv, width=3, cursor=
'double_arrow')
20266 FMulXEntry.bind(
'<MouseWheel>', ETSscroll)
20267 FMulXEntry.bind(
"<Button-4>", ETSscroll)
20268 FMulXEntry.bind(
"<Button-5>", ETSscroll)
20269 FMulXEntry.pack(side=RIGHT)
20270 FMulXEntry.delete(0,
"end")
20271 FMulXEntry.insert(0,1)
20272 fminlab = Label( FConv, text =
"Freq Multiplier")
20273 fminlab.pack(side=RIGHT)
20275 FminDisp = Label(frame1, text=
"32768 Hz", style=
"A10B.TLabel")
20276 FminDisp.grid(row=GridRow+3, column=0, sticky=W)
20278 if MinigenScreenStatus.get() > 0:
20279 mgloadbutton = Button(frame1, text=
"Load to MinGen", command=MGLoad)
20280 mgloadbutton.grid(row=GridRow+4, column=0, sticky=W)
20281 GridRow = GridRow + 1
20283 dirlab = Label(frame1, text=
"Sample Data Order", style=
"A10B.TLabel")
20284 dirlab.grid(row=GridRow+5, column=0, sticky=W)
20285 DataMode = Frame( frame1 )
20286 DataMode.grid(row=GridRow+6, column=0, sticky=W)
20287 dm3 = Radiobutton(DataMode, text=
"Forward", variable=ETSDir, value=0)
20288 dm3.pack(side=LEFT)
20289 dm4 = Radiobutton(DataMode, text=
"Reverse", variable=ETSDir, value=1)
20290 dm4.pack(side=LEFT)
20291 tclab = Label(frame1, text=
"CH B Time Shift", style=
"A10B.TLabel")
20292 tclab.grid(row=GridRow+7, column=0, sticky=W)
20293 TSMode = Frame( frame1 )
20294 TSMode.grid(row=GridRow+8, column=0, sticky=W)
20295 ETSts = Entry(TSMode, width=6, cursor=
'double_arrow')
20296 ETSts.bind(
'<MouseWheel>', ETSscroll)
20297 ETSts.bind(
"<Button-4>", ETSscroll)
20298 ETSts.bind(
"<Button-5>", ETSscroll)
20299 ETSts.pack(side=RIGHT)
20300 ETSts.delete(0,
"end")
20302 ETStslab = Label( TSMode, text =
"Factor")
20303 ETStslab.pack(side=RIGHT)
20305 etsdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyETSScreen)
20306 etsdismissclbutton.grid(row=GridRow+9, column=0, sticky=W, pady=7)
20311 global etswindow, ETSStatus, ETSDisp
20316 etswindow.destroy()
20319 global MinigenFout, Fmin, ETSDir
20321 MinigenFout.delete(0,
"end")
20322 if ETSDir.get() == 0:
20323 MinigenFout.insert(0,Fmin+20)
20325 MinigenFout.insert(0,Fmin-20)
20339 global Two_X_Sample, HtMulEntry, ETSts, etssrlab, SAMPLErate
20344 TscaleX = float(HtMulEntry.get())
20346 HtMulEntry.delete(0,END)
20347 HtMulEntry.insert(0, 1)
20348 if Two_X_Sample.get() == 0:
20349 ToffsetX = TscaleX/10.0
20352 ETSts.delete(0,
"end")
20353 ETSts.insert(0,ToffsetX)
20354 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
20355 etssrlab.config(text=SRstring)
20361 global FMulXEntry, MulXEntry, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate, MaxETSrecord
20362 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, DivX, FOff, MulX, Fmin, FMul, SAMPLErate, TIMEdiv
20363 global FminEntry, HtMulEntry, Two_X_Sample, DeBugMode
20366 MaxETSrecord = int(SAMPLErate * 10 * TIMEdiv / 1000.0)
20368 MaxETSrecord = int(SAMPLErate * 20 * TIMEdiv / 1000.0)
20369 if (MaxETSrecord*100) > MaxSamples:
20370 MaxETSrecord = MaxSamples / 100
20372 DivX = float(eval(DivXEntry.get()))
20377 DivXEntry.delete(0,END)
20378 DivXEntry.insert(0, DivX)
20380 DivXEntry.delete(0,END)
20381 DivXEntry.insert(0, DivX)
20384 MulX = (DivX*SAMPLErate)/(100*FOff)
20385 while MulX > MaxETSrecord:
20387 MulX = (DivX*SAMPLErate)/(100*FOff)
20390 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
20391 MulXEntry.config(text = SRstring)
20392 SRstring =
"Offset = " + str(FOff) +
" samples"
20393 FOffEntry.config(text = SRstring)
20394 baseFreq = SAMPLErate/DivX
20396 FMul = float(eval(FMulXEntry.get()))
20399 FMulXEntry.delete(0,END)
20400 FMulXEntry.insert(0, int(FMul))
20403 FMulXEntry.delete(0,END)
20404 FMulXEntry.insert(0, int(FMul))
20406 FMulXEntry.delete(0,END)
20407 FMulXEntry.insert(0, int(FMul))
20408 FreqMin = baseFreq * FMul
20409 SRstring =
"Multiplied Freq = " +
' {0:.1f} '.format(FreqMin) +
" Hz"
20410 FminDisp.config(text = SRstring)
20411 SRstring =
"Base Frequency = " +
' {0:.2f} '.format(baseFreq) +
" Hz"
20412 eqivsamplerate.config(text = SRstring)
20415 MinFreq = eval(FminEntry.get()) * 1000
20417 FminEntry.delete(0,END)
20418 FminEntry.insert(0, 25)
20421 TscaleX = int((MinFreq)/(DivX * (MinFreq - FreqMin)))
20429 TscaleX = abs(TscaleX)
20430 if Two_X_Sample.get() == 0:
20431 ToffsetX = TscaleX/10.0
20434 ETSts.delete(0,
"end")
20435 ETSts.insert(0,ToffsetX)
20437 HtMulEntry.delete(0,END)
20438 HtMulEntry.insert(0, TscaleX)
20439 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
20440 rtsrlab.config(text=SRstring)
20441 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
20442 etssrlab.config(text=SRstring)
20453 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
20454 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
20455 global AWG_Amp_Mode, SWRev, EnableHSsampling, Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
20456 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry, TrgLPFEntry, Trigger_LPF_length
20457 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20458 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
20459 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20460 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20461 global FrameRefief, BorderSize
20463 if SettingsStatus.get() == 0:
20464 SettingsStatus.set(1)
20465 Settingswindow = Toplevel()
20466 Settingswindow.title(
"Settings " + SWRev + RevDate)
20467 Settingswindow.resizable(FALSE,FALSE)
20468 Settingswindow.protocol(
"WM_DELETE_WINDOW", DestroySettings)
20469 frame1 = Frame(Settingswindow, borderwidth=BorderSize, relief=FrameRefief)
20470 frame1.grid(row=0, column=0, sticky=W)
20472 zstlab = Label(frame1, text=
"FFT Zero Stuffing", style=
"A10B.TLabel")
20473 zstlab.grid(row=0, column=0, sticky=W)
20474 zstMode = Frame( frame1 )
20475 zstMode.grid(row=0, column=1, sticky=W)
20476 ZSTuff = Entry(zstMode, width=4, cursor=
'double_arrow')
20477 ZSTuff.bind(
"<Return>", SettingsTextKey)
20478 ZSTuff.bind(
'<MouseWheel>', Settingsscroll)
20479 ZSTuff.bind(
"<Button-4>", Settingsscroll)
20480 ZSTuff.bind(
"<Button-5>", Settingsscroll)
20481 ZSTuff.bind(
'<Key>', SettingsTextKey)
20482 ZSTuff.pack(side=RIGHT)
20483 ZSTuff.delete(0,
"end")
20484 ZSTuff.insert(0,ZEROstuffing.get())
20486 Avglab = Label(frame1, text=
"Number Traces to Average", style=
"A10B.TLabel")
20487 Avglab.grid(row=1, column=0, sticky=W)
20488 AvgMode = Frame( frame1 )
20489 AvgMode.grid(row=1, column=1, sticky=W)
20490 TAvg = Entry(AvgMode, width=4, cursor=
'double_arrow')
20491 TAvg.bind(
"<Return>", SettingsTextKey)
20492 TAvg.bind(
'<MouseWheel>', Settingsscroll)
20493 TAvg.bind(
"<Button-4>", Settingsscroll)
20494 TAvg.bind(
"<Button-5>", Settingsscroll)
20495 TAvg.bind(
'<Key>', SettingsTextKey)
20496 TAvg.pack(side=RIGHT)
20497 TAvg.delete(0,
"end")
20498 TAvg.insert(0,TRACEaverage.get())
20500 HarMlab = Label(frame1, text=
"Number of Harmonic Markers", style=
"A10B.TLabel")
20501 HarMlab.grid(row=2, column=0, sticky=W)
20502 HarMMode = Frame( frame1 )
20503 HarMMode.grid(row=2, column=1, sticky=W)
20504 HarMon = Entry(HarMMode, width=4, cursor=
'double_arrow')
20505 HarMon.bind(
"<Return>", SettingsTextKey)
20506 HarMon.bind(
'<MouseWheel>', Settingsscroll)
20507 HarMon.bind(
"<Button-4>", Settingsscroll)
20508 HarMon.bind(
"<Button-5>", Settingsscroll)
20509 HarMon.bind(
'<Key>', SettingsTextKey)
20510 HarMon.pack(side=RIGHT)
20511 HarMon.delete(0,
"end")
20512 HarMon.insert(0,HarmonicMarkers.get())
20514 Vdivlab = Label(frame1, text=
"Number Vertical Div (SA, Bode)", style=
"A10B.TLabel")
20515 Vdivlab.grid(row=3, column=0, sticky=W)
20516 VdivMode = Frame( frame1 )
20517 VdivMode.grid(row=3, column=1, sticky=W)
20518 VDivE = Entry(VdivMode, width=4, cursor=
'double_arrow')
20519 VDivE.bind(
"<Return>", SettingsTextKey)
20520 VDivE.bind(
'<MouseWheel>', Settingsscroll)
20521 VDivE.bind(
"<Button-4>", Settingsscroll)
20522 VDivE.bind(
"<Button-5>", Settingsscroll)
20523 VDivE.bind(
'<Key>', SettingsTextKey)
20524 VDivE.pack(side=RIGHT)
20525 VDivE.delete(0,
"end")
20526 VDivE.insert(0,Vdiv.get())
20528 Twdthlab = Label(frame1, text=
"Trace Width in Pixels", style=
"A10B.TLabel")
20529 Twdthlab.grid(row=4, column=0, sticky=W)
20530 TwdthMode = Frame( frame1 )
20531 TwdthMode.grid(row=4, column=1, sticky=W)
20532 TwdthE = Entry(TwdthMode, width=4, cursor=
'double_arrow')
20533 TwdthE.bind(
"<Return>", SettingsTextKey)
20534 TwdthE.bind(
'<MouseWheel>', Settingsscroll)
20535 TwdthE.bind(
"<Button-4>", Settingsscroll)
20536 TwdthE.bind(
"<Button-5>", Settingsscroll)
20537 TwdthE.bind(
'<Key>', SettingsTextKey)
20538 TwdthE.pack(side=RIGHT)
20539 TwdthE.delete(0,
"end")
20540 TwdthE.insert(0,TRACEwidth.get())
20542 Gwdthlab = Label(frame1, text=
"Grid Width in Pixels", style=
"A10B.TLabel")
20543 Gwdthlab.grid(row=5, column=0, sticky=W)
20544 GwdthMode = Frame( frame1 )
20545 GwdthMode.grid(row=5, column=1, sticky=W)
20546 GwdthE = Entry(GwdthMode, width=4, cursor=
'double_arrow')
20547 GwdthE.bind(
"<Return>", SettingsTextKey)
20548 GwdthE.bind(
'<MouseWheel>', Settingsscroll)
20549 GwdthE.bind(
"<Button-4>", Settingsscroll)
20550 GwdthE.bind(
"<Button-5>", Settingsscroll)
20551 GwdthE.bind(
'<Key>', SettingsTextKey)
20552 GwdthE.pack(side=RIGHT)
20553 GwdthE.delete(0,
"end")
20554 GwdthE.insert(0,GridWidth.get())
20556 trglpflab = Label(frame1, text=
"Trigger LPF Length", style=
"A10B.TLabel")
20557 trglpflab.grid(row=6, column=0, sticky=W)
20558 TrgLPFMode = Frame( frame1 )
20559 TrgLPFMode.grid(row=6, column=1, sticky=W)
20560 TrgLPFEntry = Entry(TrgLPFMode, width=4, cursor=
'double_arrow')
20561 TrgLPFEntry.bind(
"<Return>", SettingsTextKey)
20562 TrgLPFEntry.bind(
'<MouseWheel>', Settingsscroll)
20563 TrgLPFEntry.bind(
"<Button-4>", Settingsscroll)
20564 TrgLPFEntry.bind(
"<Button-5>", Settingsscroll)
20565 TrgLPFEntry.bind(
'<Key>', SettingsTextKey)
20566 TrgLPFEntry.pack(side=RIGHT)
20567 TrgLPFEntry.delete(0,
"end")
20568 TrgLPFEntry.insert(0,Trigger_LPF_length.get())
20570 AwgAmplrb1 = Radiobutton(frame1, text=
"AWG Min/Max", variable=AWG_Amp_Mode, value=0, command=UpdateAWGWin)
20571 AwgAmplrb1.grid(row=7, column=0, sticky=W)
20572 AwgAmplrb2 = Radiobutton(frame1, text=
"AWG Amp/Off ", variable=AWG_Amp_Mode, value=1, command=UpdateAWGWin)
20573 AwgAmplrb2.grid(row=7, column=1, sticky=W)
20575 cha_Rcomplab = Label(frame1, text=
"CHA Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20576 cha_Rcomplab.grid(row=8, column=0, sticky=W)
20577 cha_RcomplabMode = Frame( frame1 )
20578 cha_RcomplabMode.grid(row=8, column=1, sticky=W)
20579 cha_TC1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
20580 cha_TC1Entry.bind(
"<Return>", SettingsTextKey)
20581 cha_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20582 cha_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20583 cha_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20584 cha_TC1Entry.bind(
'<Key>', SettingsTextKey)
20585 cha_TC1Entry.pack(side=LEFT)
20586 cha_TC1Entry.delete(0,
"end")
20587 cha_TC1Entry.insert(0,CHA_TC1.get())
20588 cha_A1Entry = Entry(cha_RcomplabMode, width=5, cursor=
'double_arrow')
20589 cha_A1Entry.bind(
"<Return>", SettingsTextKey)
20590 cha_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20591 cha_A1Entry.bind(
"<Button-4>", Settingsscroll)
20592 cha_A1Entry.bind(
"<Button-5>", Settingsscroll)
20593 cha_A1Entry.bind(
'<Key>', SettingsTextKey)
20594 cha_A1Entry.pack(side=LEFT)
20595 cha_A1Entry.delete(0,
"end")
20596 cha_A1Entry.insert(0,CHA_A1.get())
20598 cha_Ccomplab = Label(frame1, text=
"CHA Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20599 cha_Ccomplab.grid(row=9, column=0, sticky=W)
20600 cha_CcomplabMode = Frame( frame1 )
20601 cha_CcomplabMode.grid(row=9, column=1, sticky=W)
20602 cha_TC2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
20603 cha_TC2Entry.bind(
"<Return>", SettingsTextKey)
20604 cha_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20605 cha_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20606 cha_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20607 cha_TC2Entry.bind(
'<Key>', SettingsTextKey)
20608 cha_TC2Entry.pack(side=LEFT)
20609 cha_TC2Entry.delete(0,
"end")
20610 cha_TC2Entry.insert(0,CHA_TC2.get())
20611 cha_A2Entry = Entry(cha_CcomplabMode, width=5, cursor=
'double_arrow')
20612 cha_A2Entry.bind(
"<Return>", SettingsTextKey)
20613 cha_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20614 cha_A2Entry.bind(
"<Button-4>", Settingsscroll)
20615 cha_A2Entry.bind(
"<Button-5>", Settingsscroll)
20616 cha_A2Entry.bind(
'<Key>', SettingsTextKey)
20617 cha_A2Entry.pack(side=LEFT)
20618 cha_A2Entry.delete(0,
"end")
20619 cha_A2Entry.insert(0,CHA_A2.get())
20621 chb_Rcomplab = Label(frame1, text=
"CHB Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20622 chb_Rcomplab.grid(row=10, column=0, sticky=W)
20623 chb_RcomplabMode = Frame( frame1 )
20624 chb_RcomplabMode.grid(row=10, column=1, sticky=W)
20625 chb_TC1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
20626 chb_TC1Entry.bind(
"<Return>", SettingsTextKey)
20627 chb_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20628 chb_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20629 chb_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20630 chb_TC1Entry.bind(
'<Key>', SettingsTextKey)
20631 chb_TC1Entry.pack(side=LEFT)
20632 chb_TC1Entry.delete(0,
"end")
20633 chb_TC1Entry.insert(0,CHB_TC1.get())
20634 chb_A1Entry = Entry(chb_RcomplabMode, width=5, cursor=
'double_arrow')
20635 chb_A1Entry.bind(
"<Return>", SettingsTextKey)
20636 chb_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20637 chb_A1Entry.bind(
"<Button-4>", Settingsscroll)
20638 chb_A1Entry.bind(
"<Button-5>", Settingsscroll)
20639 chb_A1Entry.bind(
'<Key>', SettingsTextKey)
20640 chb_A1Entry.pack(side=LEFT)
20641 chb_A1Entry.delete(0,
"end")
20642 chb_A1Entry.insert(0,CHB_A1.get())
20644 chb_Ccomplab = Label(frame1, text=
"CHB Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20645 chb_Ccomplab.grid(row=11, column=0, sticky=W)
20646 chb_CcomplabMode = Frame( frame1 )
20647 chb_CcomplabMode.grid(row=11, column=1, sticky=W)
20648 chb_TC2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
20649 chb_TC2Entry.bind(
"<Return>", SettingsTextKey)
20650 chb_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20651 chb_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20652 chb_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20653 chb_TC2Entry.bind(
'<Key>', SettingsTextKey)
20654 chb_TC2Entry.pack(side=LEFT)
20655 chb_TC2Entry.delete(0,
"end")
20656 chb_TC2Entry.insert(0,CHB_TC2.get())
20657 chb_A2Entry = Entry(chb_CcomplabMode, width=5, cursor=
'double_arrow')
20658 chb_A2Entry.bind(
"<Return>", SettingsTextKey)
20659 chb_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20660 chb_A2Entry.bind(
"<Button-4>", Settingsscroll)
20661 chb_A2Entry.bind(
"<Button-5>", Settingsscroll)
20662 chb_A2Entry.bind(
'<Key>', SettingsTextKey)
20663 chb_A2Entry.pack(side=LEFT)
20664 chb_A2Entry.delete(0,
"end")
20665 chb_A2Entry.insert(0,CHB_A2.get())
20667 if EnableHSsampling > 0:
20668 hs_ckb1 = Checkbutton(frame1, text=
"Auto Set ETS Comp", variable=Auto_ETS_Comp, command=SetETSComp)
20669 hs_ckb1.grid(row=12, column=0, sticky=W)
20670 hs1_Complab = Label(frame1, text=
"ETS Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20671 hs1_Complab.grid(row=13, column=0, sticky=W)
20672 hs1_ComplabMode = Frame( frame1 )
20673 hs1_ComplabMode.grid(row=13, column=1, sticky=W)
20674 ets_TC1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
20675 ets_TC1Entry.bind(
"<Return>", SettingsTextKey)
20676 ets_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20677 ets_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20678 ets_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20679 ets_TC1Entry.bind(
'<Key>', SettingsTextKey)
20680 ets_TC1Entry.pack(side=LEFT)
20681 ets_TC1Entry.delete(0,
"end")
20682 ets_TC1Entry.insert(0,ETS_TC1.get())
20683 ets_A1Entry = Entry(hs1_ComplabMode, width=5, cursor=
'double_arrow')
20684 ets_A1Entry.bind(
"<Return>", SettingsTextKey)
20685 ets_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20686 ets_A1Entry.bind(
"<Button-4>", Settingsscroll)
20687 ets_A1Entry.bind(
"<Button-5>", Settingsscroll)
20688 ets_A1Entry.bind(
'<Key>', SettingsTextKey)
20689 ets_A1Entry.pack(side=LEFT)
20690 ets_A1Entry.delete(0,
"end")
20691 ets_A1Entry.insert(0,ETS_A1.get())
20693 hs2_Complab = Label(frame1, text=
"ETS Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20694 hs2_Complab.grid(row=14, column=0, sticky=W)
20695 hs2_ComplabMode = Frame( frame1 )
20696 hs2_ComplabMode.grid(row=14, column=1, sticky=W)
20697 ets_TC2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
20698 ets_TC2Entry.bind(
"<Return>", SettingsTextKey)
20699 ets_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20700 ets_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20701 ets_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20702 ets_TC2Entry.bind(
'<Key>', SettingsTextKey)
20703 ets_TC2Entry.pack(side=LEFT)
20704 ets_TC2Entry.delete(0,
"end")
20705 ets_TC2Entry.insert(0,ETS_TC2.get())
20706 ets_A2Entry = Entry(hs2_ComplabMode, width=5, cursor=
'double_arrow')
20707 ets_A2Entry.bind(
"<Return>", SettingsTextKey)
20708 ets_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20709 ets_A2Entry.bind(
"<Button-4>", Settingsscroll)
20710 ets_A2Entry.bind(
"<Button-5>", Settingsscroll)
20711 ets_A2Entry.bind(
'<Key>', SettingsTextKey)
20712 ets_A2Entry.pack(side=LEFT)
20713 ets_A2Entry.delete(0,
"end")
20714 ets_A2Entry.insert(0,ETS_A2.get())
20716 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
20717 Settingsdismissbutton.grid(row=15, column=0, sticky=W, pady=7)
20719 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
20720 Settingsdismissbutton.grid(row=12, column=0, sticky=W, pady=7)
20723 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
20724 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
20725 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20726 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
20727 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20728 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20730 if Auto_ETS_Comp.get() == 1:
20732 MulX = float(HtMulEntry.get())
20734 Value = float(ets_TC1Entry.get()) * MulX
20735 cha_TC1Entry.delete(0,
"end")
20736 cha_TC1Entry.insert(0, Value)
20737 cha_A1Entry.delete(0,
"end")
20738 cha_A1Entry.insert(0, ets_A1Entry.get())
20739 chb_TC1Entry.delete(0,
"end")
20740 chb_TC1Entry.insert(0, Value)
20741 chb_A1Entry.delete(0,
"end")
20742 chb_A1Entry.insert(0, ets_A1Entry.get())
20744 Value = float(ets_TC2Entry.get()) * MulX
20745 cha_TC2Entry.delete(0,
"end")
20746 cha_TC2Entry.insert(0, Value)
20747 cha_A2Entry.delete(0,
"end")
20748 cha_A2Entry.insert(0, ets_A2Entry.get())
20749 chb_TC2Entry.delete(0,
"end")
20750 chb_TC2Entry.insert(0, Value)
20751 chb_A2Entry.delete(0,
"end")
20752 chb_A2Entry.insert(0, ets_A2Entry.get())
20763 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
20764 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
20765 global CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20766 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, TrgLPFEntry, Trigger_LPF_length
20767 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20768 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20771 GW = int(eval(GwdthE.get()))
20774 GwdthE.delete(0,END)
20775 GwdthE.insert(0, int(GW))
20778 GwdthE.delete(0,END)
20779 GwdthE.insert(0, int(GW))
20781 GwdthE.delete(0,END)
20782 GwdthE.insert(0, GridWidth.get())
20786 T_length = int(eval(TrgLPFEntry.get()))
20789 TrgLPFEntry.delete(0,END)
20790 TrgLPFEntry.insert(0, int(GW))
20793 TrgLPFEntry.delete(0,END)
20794 TrgLPFEntry.insert(0, int(GW))
20796 TrgLPFEntry.delete(0,END)
20797 TrgLPFEntry.insert(0, Trigger_LPF_length.get())
20798 Trigger_LPF_length.set(T_length)
20801 TW = int(eval(TwdthE.get()))
20804 TwdthE.delete(0,END)
20805 TwdthE.insert(0, int(TW))
20808 TwdthE.delete(0,END)
20809 TwdthE.insert(0, int(TW))
20811 TwdthE.delete(0,END)
20812 TwdthE.insert(0, TRACEwidth.get())
20816 TA = int(eval(TAvg.get()))
20820 TAvg.insert(0, int(TA))
20824 TAvg.insert(0, int(TA))
20827 TAvg.insert(0, TRACEaverage.get())
20828 TRACEaverage.set(TA)
20831 VDv = int(eval(VDivE.get()))
20834 VDivE.delete(0,END)
20835 VDivE.insert(0, int(VDv))
20838 VDivE.delete(0,END)
20839 VDivE.insert(0, int(VDv))
20841 VDivE.delete(0,END)
20842 VDivE.insert(0, Vdiv.get())
20846 HM = int(eval(HarMon.get()))
20849 HarMon.delete(0,END)
20850 HarMon.insert(0, int(HM))
20853 HarMon.delete(0,END)
20854 HarMon.insert(0, int(HM))
20856 HarMon.delete(0,END)
20857 HarMon.insert(0, HarmonicMarkers.get())
20858 HarmonicMarkers.set(HM)
20861 ZST = int(eval(ZSTuff.get()))
20864 ZSTuff.delete(0,END)
20865 ZSTuff.insert(0, int(ZST))
20868 ZSTuff.delete(0,END)
20869 ZSTuff.insert(0, int(ZST))
20871 ZSTuff.delete(0,END)
20872 ZSTuff.insert(0, ZEROstuffing.get())
20873 ZEROstuffing.set(ZST)
20876 TC1A = float(cha_TC1Entry.get())
20880 cha_TC1Entry.delete(0,END)
20881 cha_TC1Entry.insert(0, TC1A)
20883 cha_TC1Entry.delete(0,END)
20884 cha_TC1Entry.insert(0, CHA_TC1.get())
20886 TC2A = float(cha_TC2Entry.get())
20890 cha_TC2Entry.delete(0,END)
20891 cha_TC2Entry.insert(0, TC2A)
20893 cha_TC2Entry.delete(0,END)
20894 cha_TC2Entry.insert(0, CHA_TC2.get())
20897 Gain1A = float(cha_A1Entry.get())
20900 cha_A1Entry.delete(0,END)
20901 cha_A1Entry.insert(0, CHA_A1.get())
20903 Gain2A = float(cha_A2Entry.get())
20906 cha_A2Entry.delete(0,END)
20907 cha_A2Entry.insert(0, CHA_A2.get())
20910 TC1B = float(chb_TC1Entry.get())
20914 chb_TC1Entry.delete(0, END)
20915 chb_TC1Entry.insert(0, TC1B)
20917 chb_TC1Entry.delete(0,END)
20918 chb_TC1Entry.insert(0, CHB_TC1.get())
20920 TC2B = float(chb_TC2Entry.get())
20924 chb_TC2Entry.delete(0, END)
20925 chb_TC2Entry.insert(0, TC2B)
20927 chb_TC2Entry.delete(0,END)
20928 chb_TC2Entry.insert(0, CHB_TC2.get())
20931 Gain1B = float(chb_A1Entry.get())
20934 chb_A1Entry.delete(0,END)
20935 chb_A1Entry.insert(0, CHB_A1.get())
20937 Gain2B = float(chb_A2Entry.get())
20940 chb_A2Entry.delete(0,END)
20941 chb_A2Entry.insert(0, CHB_A2.get())
20947 global Settingswindow, SettingsStatus
20949 SettingsStatus.set(0)
20951 Settingswindow.destroy()
20954 global MouseX, MouseY, MouseWidget
20956 MouseWidget = event.widget
20957 MouseX, MouseY = event.x, event.y
20960 global FminEntry, CHAfreq
20963 String =
'{0:.3f}'.format(CHAfreq/1000)
20964 FminEntry.delete(0,
"end")
20965 FminEntry.insert(0,String)
20968 global CHAVGainEntry, CHAVOffsetEntry
20970 CHAVGainEntry.delete(0,
"end")
20971 CHAVGainEntry.insert(0,1.0)
20972 CHAVOffsetEntry.delete(0,
"end")
20973 CHAVOffsetEntry.insert(0,0.0)
20976 global CHBVGainEntry, CHBVOffsetEntry
20978 CHBVGainEntry.delete(0,
"end")
20979 CHBVGainEntry.insert(0,1.0)
20980 CHBVOffsetEntry.delete(0,
"end")
20981 CHBVOffsetEntry.insert(0,0.0)
20984 global CHAIGainEntry, CHAIOffsetEntry
20986 CHAIGainEntry.delete(0,
"end")
20987 CHAIGainEntry.insert(0,1.0)
20988 CHAIOffsetEntry.delete(0,
"end")
20989 CHAIOffsetEntry.insert(0,0.0)
20992 global CHBIGainEntry, CHBIOffsetEntry
20994 CHBIGainEntry.delete(0,
"end")
20995 CHBIGainEntry.insert(0,1.0)
20996 CHBIOffsetEntry.delete(0,
"end")
20997 CHBIOffsetEntry.insert(0,0.0)
21000 global EnablePhaseAnalizer, EnableSpectrumAnalizer, EnableBodePlotter, EnableImpedanceAnalizer
21001 global EnableOhmMeter, OOTphckb, OOTBuildPhAScreen, OOTckb3, OOTBuildSpectrumScreen, OOTckb5
21002 global OOTBuildBodeScreen, OOTckb4, OOTBuildIAScreen, OOTckb6, OOTBuildOhmScreen, OOTScreenStatus
21003 global OOTwindow, SWRev, RevDate, BorderSize, FrameRefief, OOTdismissclbutton, EnableDigIO
21004 global EnablePIODACMode, EnableMuxMode, EnableMinigenMode, EnablePmodDA1Mode, EnableDigPotMode, EnableGenericSerialMode
21005 global EnableAD5626SerialMode, EnableDigitalFilter, EnableCommandInterface, EnableMeasureScreen, EnableETSScreen
21007 if OOTScreenStatus.get() == 0:
21008 OOTScreenStatus.set(1)
21009 OOTwindow = Toplevel()
21010 OOTwindow.title(
"Instruments " + SWRev + RevDate)
21011 OOTwindow.resizable(FALSE,FALSE)
21012 OOTwindow.protocol(
"WM_DELETE_WINDOW", DestroyOOTwindow)
21013 frame1 = Frame(OOTwindow, borderwidth=BorderSize, relief=FrameRefief)
21014 frame1.grid(row=0, column=0, sticky=W)
21016 if EnablePhaseAnalizer > 0:
21017 phasebtn = Frame( frame1 )
21018 phasebtn.grid(row=nextrow, column=0, sticky=W)
21019 OOTphckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
21020 OOTphckb.pack(side=LEFT)
21021 OOTBuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
21022 OOTBuildPhAScreen.pack(side=LEFT)
21023 nextrow = nextrow + 1
21025 if EnableSpectrumAnalizer > 0:
21026 freqbtn = Frame( frame1 )
21027 freqbtn.grid(row=nextrow, column=0, sticky=W)
21028 OOTckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
21029 OOTckb3.pack(side=LEFT)
21030 OOTBuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
21031 OOTBuildSpectrumScreen.pack(side=LEFT)
21032 nextrow = nextrow + 1
21034 if EnableBodePlotter > 0:
21035 bodebtn = Frame( frame1 )
21036 bodebtn.grid(row=nextrow, column=0, sticky=W)
21037 OOTckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
21038 OOTckb5.pack(side=LEFT)
21039 OOTBuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
21040 OOTBuildBodeScreen.pack(side=LEFT)
21041 nextrow = nextrow + 1
21043 if EnableImpedanceAnalizer > 0:
21044 impdbtn = Frame( frame1 )
21045 impdbtn.grid(row=nextrow, column=0, sticky=W)
21046 OOTckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
21047 OOTckb4.pack(side=LEFT)
21048 OOTBuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
21049 OOTBuildIAScreen.pack(side=LEFT)
21050 nextrow = nextrow + 1
21052 if EnableOhmMeter > 0:
21053 dcohmbtn = Frame( frame1 )
21054 dcohmbtn.grid(row=nextrow, column=0, sticky=W)
21055 OOTckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
21056 OOTckb6.pack(side=LEFT)
21057 OOTBuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
21058 OOTBuildOhmScreen.pack(side=LEFT)
21059 nextrow = nextrow + 1
21061 if EnableDigIO > 0:
21062 OOTBuildDigScreen = Button(frame1, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
21063 OOTBuildDigScreen.grid(row=nextrow, column=0, sticky=W)
21064 nextrow = nextrow + 1
21066 if EnablePIODACMode > 0:
21067 OOTBuildDacScreen = Button(frame1, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
21068 OOTBuildDacScreen.grid(row=nextrow, column=0, sticky=W)
21069 nextrow = nextrow + 1
21070 if EnableMuxMode > 0:
21071 OOTBuildMuxScreen = Button(frame1, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
21072 OOTBuildMuxScreen.grid(row=nextrow, column=0, sticky=W)
21073 nextrow = nextrow + 1
21074 if EnableMinigenMode > 0:
21075 OOTBuildMinigenScreen = Button(frame1, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
21076 OOTBuildMinigenScreen.grid(row=nextrow, column=0, sticky=W)
21077 nextrow = nextrow + 1
21078 if EnablePmodDA1Mode > 0:
21079 OOTBuildDA1Screen = Button(frame1, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
21080 OOTBuildDA1Screen.grid(row=nextrow, column=0, sticky=W)
21081 nextrow = nextrow + 1
21082 if EnableDigPotMode >0:
21083 OOTBuildDigPotScreen = Button(frame1, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
21084 OOTBuildDigPotScreen.grid(row=nextrow, column=0, sticky=W)
21085 nextrow = nextrow + 1
21086 if EnableGenericSerialMode >0:
21087 OOTGenericSerialScreen = Button(frame1, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
21088 OOTGenericSerialScreen.grid(row=nextrow, column=0, sticky=W)
21089 nextrow = nextrow + 1
21090 if EnableAD5626SerialMode >0:
21091 OOTAD5626SerialScreen = Button(frame1, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
21092 OOTAD5626SerialScreen.grid(row=nextrow, column=0, sticky=W)
21093 nextrow = nextrow + 1
21094 if EnableDigitalFilter >0:
21095 OOTDigFiltScreen = Button(frame1, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
21096 OOTDigFiltScreen.grid(row=nextrow, column=0, sticky=W)
21097 nextrow = nextrow + 1
21098 if EnableCommandInterface > 0:
21099 OOTCommandLineScreen = Button(frame1, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
21100 OOTCommandLineScreen.grid(row=nextrow, column=0, sticky=W)
21101 nextrow = nextrow + 1
21102 if EnableMeasureScreen > 0:
21103 OOTMeasureScreen = Button(frame1, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
21104 OOTMeasureScreen.grid(row=nextrow, column=0, sticky=W)
21105 nextrow = nextrow + 1
21106 if EnableETSScreen > 0:
21107 OOTETSScreen = Button(frame1, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
21108 OOTETSScreen.grid(row=nextrow, column=0, sticky=W)
21109 nextrow = nextrow + 1
21111 OOTdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOOTwindow)
21112 OOTdismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
21115 global OOTwindow, OOTScreenStatus
21117 OOTScreenStatus.set(0)
21118 OOTwindow.destroy()
21122 TgInput = IntVar(0)
21123 SingleShot = IntVar(0)
21124 ManualTrigger = IntVar(0)
21125 AutoLevel = IntVar(0)
21126 ShowC1_V = IntVar(0)
21129 ShowC1_V = IntVar(0)
21130 ShowC1_I = IntVar(0)
21131 ShowC2_V = IntVar(0)
21132 ShowC2_I = IntVar(0)
21133 ShowAV_I = IntVar(0)
21134 ShowBV_I = IntVar(0)
21135 ShowRA_V = IntVar(0)
21136 ShowRA_I = IntVar(0)
21137 ShowRB_V = IntVar(0)
21138 ShowRB_I = IntVar(0)
21139 ShowMath = IntVar(0)
21140 ShowPB_A = IntVar(0)
21141 ShowPB_B = IntVar(0)
21142 ShowPB_C = IntVar(0)
21143 ShowPB_D = IntVar(0)
21145 ShowC1_VdB = IntVar(0)
21146 ShowC1_P = IntVar(0)
21147 ShowC2_VdB = IntVar(0)
21148 ShowC2_P = IntVar(0)
21149 ShowMarker = IntVar(0)
21150 ShowRA_VdB = IntVar(0)
21151 ShowRA_P = IntVar(0)
21152 ShowRB_VdB = IntVar(0)
21153 ShowRB_P = IntVar(0)
21154 ShowMathSA = IntVar(0)
21155 ShowRMath = IntVar(0)
21156 ShowAWGASA = IntVar(0)
21157 ShowAWGBSA = IntVar(0)
21158 HScaleBP = IntVar(0)
21161 Show_MathX = IntVar(0)
21162 Show_MathY = IntVar(0)
21163 AutoCenterA = IntVar(0)
21164 AutoCenterB = IntVar(0)
21165 SmoothCurves = IntVar(0)
21167 TRACEmodeTime = IntVar(0)
21168 TRACEmodeTime.set(0)
21169 DecimateOption = IntVar(0)
21170 MathTrace = IntVar(0)
21172 AWGAMode = IntVar(0)
21173 AWGAIOMode = IntVar(0)
21174 AWGATerm = IntVar(0)
21175 AWGAShape = IntVar(0)
21176 AWGAPhaseDelay = IntVar(0)
21177 AWGARepeatFlag = IntVar(0)
21178 AWGABurstFlag = IntVar(0)
21179 AWGBBurstFlag = IntVar(0)
21180 AWGBMode = IntVar(0)
21181 AWGBIOMode = IntVar(0)
21182 AWGBTerm = IntVar(0)
21183 AWGBShape = IntVar(0)
21184 AWGBPhaseDelay = IntVar(0)
21185 AWGBRepeatFlag = IntVar(0)
21188 AWGSync = IntVar(0)
21190 BisCompA = IntVar(0)
21193 MeasDCV1 = IntVar(0)
21194 MeasMinV1 = IntVar(0)
21195 MeasMaxV1 = IntVar(0)
21196 MeasMidV1 = IntVar(0)
21197 MeasPPV1 = IntVar(0)
21198 MeasRMSV1 = IntVar(0)
21199 MeasRMSVA_B = IntVar(0)
21200 MeasDCI1 = IntVar(0)
21201 MeasMinI1 = IntVar(0)
21202 MeasMaxI1 = IntVar(0)
21203 MeasMidI1 = IntVar(0)
21204 MeasPPI1 = IntVar(0)
21205 MeasRMSI1 = IntVar(0)
21206 MeasDiffAB = IntVar(0)
21207 MeasDCV2 = IntVar(0)
21208 MeasMinV2 = IntVar(0)
21209 MeasMaxV2 = IntVar(0)
21210 MeasMidV2 = IntVar(0)
21211 MeasPPV2 = IntVar(0)
21212 MeasRMSV2 = IntVar(0)
21213 MeasDCI2 = IntVar(0)
21214 MeasMinI2 = IntVar(0)
21215 MeasMaxI2 = IntVar(0)
21216 MeasMidI2 = IntVar(0)
21217 MeasPPI2 = IntVar(0)
21218 MeasRMSI2 = IntVar(0)
21219 MeasDiffBA = IntVar(0)
21220 MeasUserA = IntVar(0)
21221 MeasAHW = IntVar(0)
21222 MeasALW = IntVar(0)
21223 MeasADCy = IntVar(0)
21224 MeasAPER = IntVar(0)
21225 MeasAFREQ = IntVar(0)
21226 MeasBHW = IntVar(0)
21227 MeasBLW = IntVar(0)
21228 MeasBDCy = IntVar(0)
21229 MeasBPER = IntVar(0)
21230 MeasBFREQ = IntVar(0)
21231 MeasPhase = IntVar(0)
21232 MeasTopV1 = IntVar(0)
21233 MeasBaseV1 = IntVar(0)
21234 MeasTopV2 = IntVar(0)
21235 MeasBaseV2 = IntVar(0)
21236 MeasUserB = IntVar(0)
21237 MeasDelay = IntVar(0)
21238 TimeDisp = IntVar(0)
21241 FreqDisp = IntVar(0)
21242 PhADisp = IntVar(0)
21243 BodeDisp = IntVar(0)
21245 OhmDisp = IntVar(0)
21246 OOTScreenStatus = IntVar(0)
21247 OOTScreenStatus.set(0)
21248 PhAScreenStatus = IntVar(0)
21249 PhAScreenStatus.set(0)
21250 AppendPhAData = IntVar(0)
21251 AppendPhAData.set(0)
21252 PhAPlotMode = IntVar(0)
21253 PhADatafilename =
"PhaseData.csv"
21254 BodeScreenStatus = IntVar(0)
21255 BodeScreenStatus.set(0)
21256 DigScreenStatus = IntVar(0)
21257 DigScreenStatus.set(0)
21258 DacScreenStatus = IntVar(0)
21259 DacScreenStatus.set(0)
21260 MuxScreenStatus = IntVar(0)
21261 MuxScreenStatus.set(0)
21262 DualMuxMode = IntVar(0)
21263 MinigenScreenStatus = IntVar(0)
21264 MinigenScreenStatus.set(0)
21265 DA1ScreenStatus = IntVar(0)
21266 DA1ScreenStatus.set(0)
21267 DigPotScreenStatus = IntVar(0)
21268 DigPotScreenStatus.set(0)
21269 GenericSerialStatus = IntVar(0)
21270 GenericSerialStatus.set(0)
21271 AD5626SerialStatus = IntVar(0)
21272 AD5626SerialStatus.set(0)
21273 DigFiltStatus = IntVar(0)
21274 DigFiltStatus.set(0)
21275 CommandStatus = IntVar(0)
21276 CommandStatus.set(0)
21277 MeasureStatus = IntVar(0)
21278 MeasureStatus.set(0)
21279 MarkerScale = IntVar(0)
21281 SettingsStatus = IntVar(0)
21282 CHA_RC_HP = IntVar(0)
21283 CHB_RC_HP = IntVar(0)
21284 CHAI_RC_HP = IntVar(0)
21285 CHBI_RC_HP = IntVar(0)
21287 if GUITheme ==
"Light":
21288 FrameBG =
"#d7d7d7"
21289 ButtonText =
"#000000"
21290 elif GUITheme ==
"Dark":
21291 FrameBG =
"#484848"
21292 ButtonText =
"#ffffff"
21293 elif GUITheme ==
"Blue":
21294 FrameBG =
"#242468"
21295 ButtonText =
"#d0d0ff"
21296 elif GUITheme ==
"LtBlue":
21297 FrameBG =
"#c0e8ff"
21298 ButtonText =
"#000040"
21299 EntryText =
"#000000"
21300 BoxColor =
"#0000ff"
21301 root.style.configure(
"TFrame", background=FrameBG, borderwidth=BorderSize)
21302 root.style.configure(
"TLabelframe", background=FrameBG)
21303 root.style.configure(
"TLabel", foreground=ButtonText, background=FrameBG, relief=LabRelief)
21304 root.style.configure(
"TEntry", foreground=EntryText, background=FrameBG, relief=ButRelief)
21305 root.style.configure(
"TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
21306 root.style.configure(
"TRadiobutton", foreground=ButtonText, background=FrameBG, indicatorcolor=FrameBG)
21307 root.style.configure(
"TButton", foreground=ButtonText, background=FrameBG, highlightcolor=FrameBG, relief=ButRelief)
21309 root.style.configure(
"TSpinbox", arrowsize=13)
21310 root.style.configure(
"W3.TButton", width=3, relief=ButRelief)
21311 root.style.configure(
"W4.TButton", width=4, relief=ButRelief)
21312 root.style.configure(
"W5.TButton", width=5, relief=ButRelief)
21313 root.style.configure(
"W6.TButton", width=6, relief=ButRelief)
21314 root.style.configure(
"W7.TButton", width=7, relief=ButRelief)
21315 root.style.configure(
"W8.TButton", width=8, relief=ButRelief)
21316 root.style.configure(
"W9.TButton", width=9, relief=ButRelief)
21317 root.style.configure(
"W10.TButton", width=10, relief=ButRelief)
21318 root.style.configure(
"W11.TButton", width=11, relief=ButRelief)
21319 root.style.configure(
"W16.TButton", width=16, relief=ButRelief)
21320 root.style.configure(
"W17.TButton", width=17, relief=ButRelief)
21321 root.style.configure(
"Stop.TButton", background=ButtonRed, foreground=
"#000000", width=4, relief=ButRelief)
21322 root.style.configure(
"Run.TButton", background=ButtonGreen, foreground=
"#000000", width=4, relief=ButRelief)
21323 root.style.configure(
"Pwr.TButton", background=ButtonGreen, foreground=
"#000000", width=8, relief=ButRelief)
21324 root.style.configure(
"PwrOff.TButton", background=ButtonRed, foreground=
"#000000", width=8, relief=ButRelief)
21325 root.style.configure(
"RConn.TButton", background=ButtonRed, foreground=
"#000000", width=5, relief=ButRelief)
21326 root.style.configure(
"GConn.TButton", background=ButtonGreen, foreground=
"#000000", width=5, relief=ButRelief)
21327 root.style.configure(
"Rtrace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=RAISED)
21328 root.style.configure(
"Strace1.TButton", background=COLORtrace1, foreground=
"#000000", width=7, relief=SUNKEN)
21329 root.style.configure(
"Ctrace1.TButton", background=COLORtrace1, foreground=
"#000000", relief=ButRelief)
21330 root.style.configure(
"Rtrace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=RAISED)
21331 root.style.configure(
"Strace2.TButton", background=COLORtrace2, foreground=
"#000000", width=7, relief=SUNKEN)
21332 root.style.configure(
"Ctrace2.TButton", background=COLORtrace2, foreground=
"#000000", relief=ButRelief)
21333 root.style.configure(
"Rtrace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=RAISED)
21334 root.style.configure(
"Strace3.TButton", background=COLORtrace3, foreground=
"#000000", width=7, relief=SUNKEN)
21335 root.style.configure(
"Ctrace3.TButton", background=COLORtrace3, foreground=
"#000000", relief=ButRelief)
21336 root.style.configure(
"Rtrace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=RAISED)
21337 root.style.configure(
"Strace4.TButton", background=COLORtrace4, foreground=
"#000000", width=7, relief=SUNKEN)
21338 root.style.configure(
"Ctrace4.TButton", background=COLORtrace4, foreground=
"#000000", relief=ButRelief)
21339 root.style.configure(
"Rtrace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=RAISED)
21340 root.style.configure(
"Strace6.TButton", background=COLORtrace6, foreground=
"#000000", width=7, relief=SUNKEN)
21341 root.style.configure(
"Rtrace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=RAISED)
21342 root.style.configure(
"Strace7.TButton", background=COLORtrace7, foreground=
"#000000", width=7, relief=SUNKEN)
21343 root.style.configure(
"RGray.TButton", background=
"#808080", width=7, relief=RAISED)
21344 root.style.configure(
"SGray.TButton", background=
"#808080", width=7, relief=SUNKEN)
21345 root.style.configure(
"A10R1.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR1, font=(
'Arial', 10,
'bold'))
21346 root.style.configure(
"A10R1.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
21347 root.style.configure(
"A10R2.TLabelframe.Label", background=FrameBG, foreground=COLORtraceR2, font=(
'Arial', 10,
'bold'))
21348 root.style.configure(
"A10R2.TLabelframe", borderwidth=BorderSize, relief=FrameRefief)
21349 root.style.configure(
"A10B.TLabel", foreground=ButtonText, font=
"Arial 10 bold")
21350 root.style.configure(
"A10R.TLabel", foreground=ButtonRed, font=
"Arial 10 bold")
21351 root.style.configure(
"A10G.TLabel", foreground=ButtonGreen, font=
"Arial 10 bold")
21352 root.style.configure(
"A12B.TLabel", foreground=ButtonText, font=
"Arial 12 bold")
21353 root.style.configure(
"A16B.TLabel", foreground=ButtonText, font=
"Arial 16 bold")
21354 root.style.configure(
"Stop.TRadiobutton", background=ButtonRed, indicatorcolor=FrameBG)
21355 root.style.configure(
"Run.TRadiobutton", background=ButtonGreen, indicatorcolor=FrameBG)
21356 root.style.configure(
"Disab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonRed)
21357 root.style.configure(
"Enab.TCheckbutton", foreground=ButtonText, background=FrameBG, indicatorcolor=ButtonGreen)
21358 root.style.configure(
"Strace1.TCheckbutton", background=COLORtrace1, foreground=
"#000000", indicatorcolor=
"#ffffff")
21359 root.style.configure(
"Strace2.TCheckbutton", background=COLORtrace2, foreground=
"#000000", indicatorcolor=
"#ffffff")
21360 root.style.configure(
"Strace3.TCheckbutton", background=COLORtrace3, foreground=
"#000000", indicatorcolor=
"#ffffff")
21361 root.style.configure(
"Strace4.TCheckbutton", background=COLORtrace4, foreground=
"#000000", indicatorcolor=
"#ffffff")
21362 root.style.configure(
"Strace6.TCheckbutton", background=COLORtrace6, foreground=
"#000000", indicatorcolor=
"#ffffff")
21363 root.style.configure(
"Strace7.TCheckbutton", background=COLORtrace7, foreground=
"#000000", indicatorcolor=
"#ffffff")
21364 root.style.configure(
"WPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"white", indicatorcolor=(
"red",
"green"))
21365 root.style.configure(
"GPhase.TRadiobutton", width=5, foreground=
"#000000", background=
"gray", indicatorcolor=(
"red",
"green"))
21367 frame2r = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
21368 frame2r.pack(side=RIGHT, fill=BOTH, expand=NO)
21370 frame1 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
21371 frame1.pack(side=TOP, fill=BOTH, expand=NO)
21373 frame2 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
21374 frame2.pack(side=TOP, fill=BOTH, expand=YES)
21376 frame3 = Frame(root, borderwidth=BorderSize, relief=FrameRefief)
21377 frame3.pack(side=TOP, fill=BOTH, expand=NO)
21380 Triggermenu = Menubutton(frame1, text=
"Trigger", style=
"W7.TButton")
21381 Triggermenu.menu = Menu(Triggermenu, tearoff = 0 )
21382 Triggermenu[
"menu"] = Triggermenu.menu
21383 Triggermenu.menu.add_radiobutton(label=
'None', variable=TgInput, value=0)
21384 Triggermenu.menu.add_radiobutton(label=
'CA-V', variable=TgInput, value=1)
21385 Triggermenu.menu.add_radiobutton(label=
'CA-I', variable=TgInput, value=2)
21386 Triggermenu.menu.add_radiobutton(label=
'CB-V', variable=TgInput, value=3)
21387 Triggermenu.menu.add_radiobutton(label=
'CB-I', variable=TgInput, value=4)
21388 Triggermenu.menu.add_radiobutton(label=
'CA-V or CB-V', variable=TgInput, value=5)
21390 Triggermenu.menu.add_checkbutton(label=
'Auto Level', variable=AutoLevel)
21391 Triggermenu.menu.add_checkbutton(label=
'Low Pass Filter', variable=LPFTrigger)
21392 Triggermenu.menu.add_checkbutton(label=
'Manual Trgger', variable=ManualTrigger)
21393 Triggermenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShot)
21394 Triggermenu.pack(side=LEFT)
21396 Edgemenu = Menubutton(frame1, text=
"Edge", style=
"W5.TButton")
21397 Edgemenu.menu = Menu(Edgemenu, tearoff = 0 )
21398 Edgemenu[
"menu"] = Edgemenu.menu
21399 Edgemenu.menu.add_radiobutton(label=
'Rising (+)', variable=TgEdge, value=0)
21400 Edgemenu.menu.add_radiobutton(label=
'Falling (-)', variable=TgEdge, value=1)
21401 Edgemenu.pack(side=LEFT)
21403 tlab = Label(frame1, text=
"Trig Level")
21404 tlab.pack(side=LEFT)
21405 TRIGGERentry = Entry(frame1, width=5, cursor=
'double_arrow')
21406 TRIGGERentry.bind(
'<MouseWheel>', onTextScroll)
21407 TRIGGERentry.bind(
"<Button-4>", onTextScroll)
21408 TRIGGERentry.bind(
"<Button-5>", onTextScroll)
21409 TRIGGERentry.bind(
"<Return>", BTriglevel)
21410 TRIGGERentry.bind(
'<Key>', onTextKey)
21411 TRIGGERentry.pack(side=LEFT)
21412 TRIGGERentry.delete(0,
"end")
21413 TRIGGERentry.insert(0,0.0)
21415 tgb = Button(frame1, text=
"50%", style=
"W4.TButton", command=BTrigger50p)
21416 tgb.pack(side=LEFT)
21418 hldlab = Button(frame1, text=
"Hold Off", style=
"W8.TButton", command=IncHoldOff)
21419 hldlab.pack(side=LEFT)
21420 HoldOffentry = Entry(frame1, width=4, cursor=
'double_arrow')
21421 HoldOffentry.bind(
'<MouseWheel>', onTextScroll)
21422 HoldOffentry.bind(
"<Button-4>", onTextScroll)
21423 HoldOffentry.bind(
"<Button-5>", onTextScroll)
21424 HoldOffentry.bind(
"<Return>", BHoldOff)
21425 HoldOffentry.bind(
'<Key>', onTextKey)
21426 HoldOffentry.pack(side=LEFT)
21427 HoldOffentry.delete(0,
"end")
21428 HoldOffentry.insert(0,0.0)
21430 hozlab = Button(frame1, text=
"Horz Pos", style=
"W8.TButton", command=SetTriggerPoss)
21431 hozlab.pack(side=LEFT)
21432 HozPossentry = Entry(frame1, width=4, cursor=
'double_arrow')
21433 HozPossentry.bind(
'<MouseWheel>', onTextScroll)
21434 HozPossentry.bind(
"<Button-4>", onTextScroll)
21435 HozPossentry.bind(
"<Button-5>", onTextScroll)
21436 HozPossentry.bind(
"<Return>", BHozPoss)
21437 HozPossentry.bind(
'<Key>', onTextKey)
21438 HozPossentry.pack(side=LEFT)
21439 HozPossentry.delete(0,
"end")
21440 HozPossentry.insert(0,0.0)
21442 bexit = Button(frame1, text=
"Exit", style=
"W4.TButton", command=Bcloseexit)
21443 bexit.pack(side=RIGHT)
21444 bstop = Button(frame1, text=
"Stop", style=
"Stop.TButton", command=BStop)
21445 bstop.pack(side=RIGHT)
21446 brun = Button(frame1, text=
"Run", style=
"Run.TButton", command=BStart)
21447 brun.pack(side=RIGHT)
21448 PwrBt = Button(frame1, text=
"PWR-ON", style=
"Pwr.TButton", command=BPower)
21449 PwrBt.pack(side=RIGHT)
21451 Showmenu = Menubutton(frame1, text=
"Curves", style=
"W7.TButton")
21452 Showmenu.menu = Menu(Showmenu, tearoff = 0 )
21453 Showmenu[
"menu"] = Showmenu.menu
21454 Showmenu.menu.add_command(label=
"-Show-", foreground=
"blue", command=donothing)
21455 Showmenu.menu.add_command(label=
"All", command=BShowCurvesAll)
21456 Showmenu.menu.add_command(label=
"None", command=BShowCurvesNone)
21457 Showmenu.menu.add_checkbutton(label=
'CA-V (1)', background=COLORtrace1, variable=ShowC1_V, command=TraceSelectADC_Mux)
21458 Showmenu.menu.add_checkbutton(label=
'CA-I (3)', background=COLORtrace3, variable=ShowC1_I, command=TraceSelectADC_Mux)
21459 Showmenu.menu.add_checkbutton(label=
'CB-V (2)', background=COLORtrace2, variable=ShowC2_V, command=TraceSelectADC_Mux)
21460 Showmenu.menu.add_checkbutton(label=
'CB-I (4)', background=COLORtrace4,variable=ShowC2_I, command=TraceSelectADC_Mux)
21461 Showmenu.menu.add_checkbutton(label=
'Math-X', background=COLORtrace6, variable=Show_MathX, command=UpdateTimeTrace)
21462 Showmenu.menu.add_checkbutton(label=
'Math-Y', background=COLORtrace7, variable=Show_MathY, command=UpdateTimeTrace)
21463 Showmenu.menu.add_command(label=
"-Auto Vert Center-", foreground=
"blue", command=donothing)
21464 Showmenu.menu.add_checkbutton(label=
'Center CA-V', variable=AutoCenterA)
21465 Showmenu.menu.add_checkbutton(label=
'Center CB-V', variable=AutoCenterB)
21466 Showmenu.menu.add_command(label=
"-Input HP Comp-", foreground=
"blue", command=donothing)
21467 Showmenu.menu.add_checkbutton(label=
'Comp CA-V', variable=CHA_RC_HP)
21468 Showmenu.menu.add_checkbutton(label=
'Comp CB-V', variable=CHB_RC_HP)
21469 if EnableHSsampling > 0:
21470 Showmenu.menu.add_checkbutton(label=
'Comp CA-I', variable=CHAI_RC_HP)
21471 Showmenu.menu.add_checkbutton(label=
'Comp CB-I', variable=CHBI_RC_HP)
21472 Showmenu.menu.add_separator()
21473 Showmenu.menu.add_checkbutton(label=
'RA-V', background=COLORtraceR1, variable=ShowRA_V, command=UpdateTimeTrace)
21474 Showmenu.menu.add_checkbutton(label=
'RA-I', background=COLORtraceR3, variable=ShowRA_I, command=UpdateTimeTrace)
21475 Showmenu.menu.add_checkbutton(label=
'RB-V', background=COLORtraceR2, variable=ShowRB_V, command=UpdateTimeTrace)
21476 Showmenu.menu.add_checkbutton(label=
'RB-I', background=COLORtraceR4, variable=ShowRB_I, command=UpdateTimeTrace)
21477 Showmenu.menu.add_checkbutton(label=
'RMath', background=COLORtraceR5, variable=ShowMath, command=UpdateTimeTrace)
21478 Showmenu.menu.add_separator()
21479 Showmenu.menu.add_checkbutton(label=
'T Cursor (t)', variable=ShowTCur, command=UpdateTimeTrace)
21480 Showmenu.menu.add_checkbutton(label=
'V Cursor (v)', variable=ShowVCur, command=UpdateTimeTrace)
21481 Showmenu.pack(side=RIGHT)
21483 if ShowBallonHelp > 0:
21487 hldlab_tip =
CreateToolTip(hldlab,
'Increment Hold Off setting by one time division')
21488 hozlab_tip =
CreateToolTip(hozlab,
'When triggering, set trigger point to center of screen')
21496 if EnableHSsampling > 0:
21497 fminlab2 = Label(frame1, text=
"KHz")
21498 fminlab2.pack(side=RIGHT)
21499 FminEntry = Entry(frame1, width=6, cursor=
'double_arrow')
21500 FminEntry.bind(
'<MouseWheel>', onFminScroll)
21501 FminEntry.bind(
"<Button-4>", onFminScroll)
21502 FminEntry.bind(
"<Button-5>", onFminScroll)
21503 FminEntry.bind(
"<Return>", SetAD9833)
21504 FminEntry.pack(side=RIGHT)
21505 FminEntry.delete(0,
"end")
21506 FminEntry.insert(0,25)
21507 fminlab = Button(frame1, text=
"Fmin", style=
"W5.TButton", command=BSetFmin)
21508 fminlab.pack(side=RIGHT)
21510 HtMulEntry = Entry(frame1, width=4, cursor=
'double_arrow')
21511 HtMulEntry.bind(
'<MouseWheel>', onMulXScroll)
21512 HtMulEntry.bind(
"<Button-4>", onMulXScroll)
21513 HtMulEntry.bind(
"<Button-5>", onMulXScroll)
21514 HtMulEntry.bind(
"<Return>", SetAD9833)
21515 HtMulEntry.pack(side=RIGHT)
21516 HtMulEntry.delete(0,
"end")
21517 HtMulEntry.insert(0,1)
21518 mulxlab = Label( frame1, text =
"Mul X")
21519 mulxlab.pack(side=RIGHT)
21522 TMsb = Spinbox(frame1, width=5, values= TMpdiv, cursor=
'double_arrow', command=BTime)
21523 TMsb.bind(
'<MouseWheel>', onSpinBoxScroll)
21524 TMsb.bind(
"<Button-4>", onSpinBoxScroll)
21525 TMsb.bind(
"<Button-5>", onSpinBoxScroll)
21526 TMsb.pack(side=RIGHT)
21527 TMsb.delete(0,
"end")
21529 TMlab = Label(frame1, text=
"Time mS/Div")
21530 TMlab.pack(side=RIGHT)
21532 ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas, cursor=
'cross')
21534 ca.bind(
'<Configure>', CAresize)
21535 ca.bind(
'<1>', onCanvasClickLeft)
21536 ca.bind(
'<3>', onCanvasClickRight)
21537 ca.bind(
"<Motion>",onCanvasMouse_xy)
21538 ca.bind(
"<Up>", onCanvasUpArrow)
21539 ca.bind(
"<Down>", onCanvasDownArrow)
21540 ca.bind(
"<Left>", onCanvasLeftArrow)
21541 ca.bind(
"<Right>", onCanvasRightArrow)
21542 ca.bind(
"<space>", onCanvasSpaceBar)
21543 ca.bind(
"1", onCanvasOne)
21544 ca.bind(
"2", onCanvasTwo)
21545 ca.bind(
"3", onCanvasThree)
21546 ca.bind(
"4", onCanvasFour)
21547 ca.bind(
"5", onCanvasFive)
21548 ca.bind(
"6", onCanvasSix)
21549 ca.bind(
"7", onCanvasSeven)
21550 ca.bind(
"8", onCanvasEight)
21551 ca.bind(
"9", onCanvasNine)
21552 ca.bind(
"0", onCanvasZero)
21553 ca.bind(
"a", onCanvasAverage)
21554 ca.bind(
"t", onCanvasShowTcur)
21555 ca.bind(
"v", onCanvasShowVcur)
21556 ca.bind(
"s", onCanvasSnap)
21557 ca.bind(
"+", onCanvasTrising)
21558 ca.bind(
"-", onCanvasTfalling)
21559 ca.bind(
'<MouseWheel>', onCanvasClickScroll)
21560 ca.bind(
"<Button-4>", onCanvasClickScroll)
21561 ca.bind(
"<Button-5>", onCanvasClickScroll)
21562 ca.pack(side=TOP, fill=BOTH, expand=YES)
21565 dropmenu = Frame( frame2r )
21566 dropmenu.pack(side=TOP)
21567 bcon = Button(dropmenu, text=
"Recon", style=
"RConn.TButton", command=ConnectDevice)
21568 bcon.pack(side=LEFT, anchor=W)
21570 Filemenu = Menubutton(dropmenu, text=
"File", style=
"W4.TButton")
21571 Filemenu.menu = Menu(Filemenu, tearoff = 0 )
21572 Filemenu[
"menu"] = Filemenu.menu
21573 Filemenu.menu.add_command(label=
"Save Config", command=BSaveConfigTime)
21574 Filemenu.menu.add_command(label=
"Load Config", command=BLoadConfigTime)
21575 Filemenu.menu.add_command(label=
"Save Adj", command=BSaveCal)
21576 Filemenu.menu.add_command(label=
"Load Adj", command=BLoadCal)
21577 Filemenu.menu.add_command(label=
"Save Screen", command=BSaveScreen)
21578 Filemenu.menu.add_command(label=
"Save To CSV", command=BSaveData)
21579 Filemenu.menu.add_command(label=
"Load From CSV", command=BReadData)
21580 Filemenu.menu.add_command(label=
"Save PWL Data", command=BSaveChannelData)
21581 Filemenu.menu.add_command(label=
"Help", command=BHelp)
21582 Filemenu.menu.add_command(label=
"About", command=BAbout)
21583 Filemenu.pack(side=LEFT, anchor=W)
21585 Optionmenu = Menubutton(dropmenu, text=
"Options", style=
"W7.TButton")
21586 Optionmenu.menu = Menu(Optionmenu, tearoff = 0 )
21587 Optionmenu[
"menu"] = Optionmenu.menu
21588 Optionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
21589 Optionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
21590 Optionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurves, command=UpdateTimeTrace)
21591 Optionmenu.menu.add_checkbutton(label=
'Z-O-Hold', variable=ZOHold, command=UpdateTimeTrace)
21592 Optionmenu.menu.add_checkbutton(label=
'Decimate', variable=DecimateOption)
21593 Optionmenu.menu.add_checkbutton(label=
'Gated Meas', variable=MeasGateStatus)
21594 Optionmenu.menu.add_checkbutton(label=
'Trace Avg (a)', variable=TRACEmodeTime)
21595 Optionmenu.menu.add_checkbutton(label=
'Persistance', variable=ScreenTrefresh)
21596 Optionmenu.menu.add_command(label=
'Set Marker Location', command=BSetMarkerLocation)
21597 Optionmenu.menu.add_command(label=
'Change Plot Label', command=BUserCustomPlotText)
21598 Optionmenu.menu.add_command(label=
"SnapShot (s)", command=BSnapShot)
21599 Optionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
21600 Optionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
21601 Optionmenu.menu.add_command(label=
"Run Self Cal", command=SelfCalibration)
21602 if EnableScopeOnly != 0:
21603 Optionmenu.menu.add_command(label=
"Open Instruments", command=OpenOtherTools)
21604 if AllowFlashFirmware == 1:
21605 Optionmenu.menu.add_command(label=
"Save Cal Settings", command=Save_Cal_file)
21606 Optionmenu.menu.add_command(label=
"Update Firmware", command=UpdateFirmware)
21607 Optionmenu.pack(side=LEFT, anchor=W)
21609 dropmenu2 = Frame( frame2r )
21610 dropmenu2.pack(side=TOP)
21612 mathbt = Button(dropmenu2, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
21613 mathbt.pack(side=RIGHT, anchor=W)
21615 measlab = Label(dropmenu2, text=
"Meas")
21616 measlab.pack(side=LEFT, anchor=W)
21617 MeasmenuA = Menubutton(dropmenu2, text=
"CA", style=
"W3.TButton")
21618 MeasmenuA.menu = Menu(MeasmenuA, tearoff = 0 )
21619 MeasmenuA[
"menu"] = MeasmenuA.menu
21620 MeasmenuA.menu.add_command(label=
"-CA-V-", foreground=
"blue", command=donothing)
21621 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCV1)
21622 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinV1)
21623 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxV1)
21624 MeasmenuA.menu.add_checkbutton(label=
'Base', variable=MeasBaseV1)
21625 MeasmenuA.menu.add_checkbutton(label=
'Top', variable=MeasTopV1)
21626 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidV1)
21627 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPV1)
21628 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV1)
21629 MeasmenuA.menu.add_checkbutton(label=
'CA-CB', variable=MeasDiffAB)
21630 MeasmenuA.menu.add_checkbutton(label=
'CA-CB RMS', variable=MeasRMSVA_B)
21631 MeasmenuA.menu.add_checkbutton(label=
'User', variable=MeasUserA, command=BUserAMeas)
21633 MeasmenuA.menu.add_command(label=
"-CA-I-", foreground=
"blue", command=donothing)
21634 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCI1)
21635 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinI1)
21636 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxI1)
21637 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidI1)
21638 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPI1)
21639 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI1)
21641 MeasmenuA.menu.add_command(label=
"-CA-Time-", foreground=
"blue", command=donothing)
21642 MeasmenuA.menu.add_checkbutton(label=
'H-Width', variable=MeasAHW)
21643 MeasmenuA.menu.add_checkbutton(label=
'L-Width', variable=MeasALW)
21644 MeasmenuA.menu.add_checkbutton(label=
'DutyCyle', variable=MeasADCy)
21645 MeasmenuA.menu.add_checkbutton(label=
'Period', variable=MeasAPER)
21646 MeasmenuA.menu.add_checkbutton(label=
'Freq', variable=MeasAFREQ)
21647 MeasmenuA.menu.add_checkbutton(label=
'A-B Phase', variable=MeasPhase)
21649 MeasmenuA.pack(side=LEFT)
21651 MeasmenuB = Menubutton(dropmenu2, text=
"CB", style=
"W3.TButton")
21652 MeasmenuB.menu = Menu(MeasmenuB, tearoff = 0 )
21653 MeasmenuB[
"menu"] = MeasmenuB.menu
21654 MeasmenuB.menu.add_command(label=
"-CB-V-", foreground=
"blue", command=donothing)
21655 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCV2)
21656 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinV2)
21657 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxV2)
21658 MeasmenuB.menu.add_checkbutton(label=
'Base', variable=MeasBaseV2)
21659 MeasmenuB.menu.add_checkbutton(label=
'Top', variable=MeasTopV2)
21660 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidV2)
21661 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPV2)
21662 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV2)
21663 MeasmenuB.menu.add_checkbutton(label=
'CB-CA', variable=MeasDiffBA)
21664 MeasmenuB.menu.add_checkbutton(label=
'User', variable=MeasUserB, command=BUserBMeas)
21666 MeasmenuB.menu.add_command(label=
"-CB-I-", foreground=
"blue", command=donothing)
21667 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCI2)
21668 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinI2)
21669 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxI2)
21670 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidI2)
21671 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPI2)
21672 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI2)
21674 MeasmenuB.menu.add_command(label=
"-CB-Time-", foreground=
"blue", command=donothing)
21675 MeasmenuB.menu.add_checkbutton(label=
'H-Width', variable=MeasBHW)
21676 MeasmenuB.menu.add_checkbutton(label=
'L-Width', variable=MeasBLW)
21677 MeasmenuB.menu.add_checkbutton(label=
'DutyCyle', variable=MeasBDCy)
21678 MeasmenuB.menu.add_checkbutton(label=
'Period', variable=MeasBPER)
21679 MeasmenuB.menu.add_checkbutton(label=
'Freq', variable=MeasBFREQ)
21680 MeasmenuB.menu.add_checkbutton(label=
'B-A Delay', variable=MeasDelay)
21681 MeasmenuB.pack(side=LEFT)
21683 DigScreenStatus = IntVar(0)
21684 DigScreenStatus.set(0)
21686 if EnableScopeOnly == 0:
21687 BuildAWGScreen = Button(frame2r, text=
"AWG Window", style=
"W16.TButton", command=MakeAWGWindow)
21688 BuildAWGScreen.pack(side=TOP)
21690 timebtn = Frame( frame2r )
21691 timebtn.pack(side=TOP)
21692 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
21693 ckb1.pack(side=LEFT)
21694 timelab = Label(timebtn, text=
"Time Plot")
21695 timelab.pack(side=LEFT)
21696 if EnableXYPlotter > 0:
21697 xybtn = Frame( frame2r )
21698 xybtn.pack(side=TOP)
21699 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
21700 ckb2.pack(side=LEFT)
21701 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
21702 BuildXYScreen.pack(side=TOP)
21704 if EnablePhaseAnalizer > 0:
21705 phasebtn = Frame( frame2r )
21706 phasebtn.pack(side=TOP)
21707 phckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
21708 phckb.pack(side=LEFT)
21709 BuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
21710 BuildPhAScreen.pack(side=LEFT)
21712 if EnableSpectrumAnalizer > 0:
21713 freqbtn = Frame( frame2r )
21714 freqbtn.pack(side=TOP)
21715 ckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
21716 ckb3.pack(side=LEFT)
21717 BuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
21718 BuildSpectrumScreen.pack(side=LEFT)
21720 if EnableBodePlotter > 0:
21721 bodebtn = Frame( frame2r )
21722 bodebtn.pack(side=TOP)
21723 ckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
21724 ckb5.pack(side=LEFT)
21725 BuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
21726 BuildBodeScreen.pack(side=LEFT)
21728 if EnableImpedanceAnalizer > 0:
21729 impdbtn = Frame( frame2r )
21730 impdbtn.pack(side=TOP)
21731 ckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
21732 ckb4.pack(side=LEFT)
21733 BuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
21734 BuildIAScreen.pack(side=LEFT)
21736 if EnableOhmMeter > 0:
21737 dcohmbtn = Frame( frame2r )
21738 dcohmbtn.pack(side=TOP)
21739 ckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
21740 ckb6.pack(side=LEFT)
21741 BuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
21742 BuildOhmScreen.pack(side=LEFT)
21744 if ShowTraceControls > 0:
21745 ckbt1 = Checkbutton(frame2r, text=
'CA-V (1)', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
21746 ckbt1.pack(side=TOP,fill=X)
21747 ckbt2 = Checkbutton(frame2r, text=
'CA-I (3)', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
21748 ckbt2.pack(side=TOP,fill=X)
21749 ckbt3 = Checkbutton(frame2r, text=
'CB-V (2)', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
21750 ckbt3.pack(side=TOP,fill=X)
21751 ckbt4 = Checkbutton(frame2r, text=
'CB-I (4)', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
21752 ckbt4.pack(side=TOP,fill=X)
21754 if ShowBallonHelp > 0:
21759 BuildSpectrumScreen_tip =
CreateToolTip(BuildSpectrumScreen,
'Open Spectrum Analyzer window')
21764 if EnableDigIO > 0:
21765 BuildDigScreen = Button(frame2r, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
21766 BuildDigScreen.pack(side=TOP)
21768 if EnablePIODACMode > 0:
21769 BuildDacScreen = Button(frame2r, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
21770 BuildDacScreen.pack(side=TOP)
21771 if EnableMuxMode > 0:
21772 BuildMuxScreen = Button(frame2r, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
21773 BuildMuxScreen.pack(side=TOP)
21774 if EnableMinigenMode > 0:
21775 BuildMinigenScreen = Button(frame2r, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
21776 BuildMinigenScreen.pack(side=TOP)
21777 if EnablePmodDA1Mode > 0:
21778 BuildDA1Screen = Button(frame2r, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
21779 BuildDA1Screen.pack(side=TOP)
21780 if EnableDigPotMode >0:
21781 BuildDigPotScreen = Button(frame2r, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
21782 BuildDigPotScreen.pack(side=TOP)
21783 if EnableGenericSerialMode >0:
21784 GenericSerialScreen = Button(frame2r, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
21785 GenericSerialScreen.pack(side=TOP)
21786 if EnableAD5626SerialMode >0:
21787 AD5626SerialScreen = Button(frame2r, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
21788 AD5626SerialScreen.pack(side=TOP)
21789 if EnableDigitalFilter >0:
21790 DigFiltScreen = Button(frame2r, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
21791 DigFiltScreen.pack(side=TOP)
21792 if EnableCommandInterface > 0:
21793 CommandLineScreen = Button(frame2r, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
21794 CommandLineScreen.pack(side=TOP)
21795 if EnableMeasureScreen > 0:
21796 MeasureScreen = Button(frame2r, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
21797 MeasureScreen.pack(side=TOP)
21798 if EnableETSScreen > 0:
21799 ETSScreen = Button(frame2r, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
21800 ETSScreen.pack(side=TOP)
21803 timebtn = Frame( frame2r )
21804 timebtn.pack(side=TOP)
21805 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
21806 ckb1.pack(side=LEFT)
21807 timelab = Label(timebtn, text=
"Time Plot")
21808 timelab.pack(side=LEFT)
21809 if EnableXYPlotter > 0:
21810 xybtn = Frame( frame2r )
21811 xybtn.pack(side=TOP)
21812 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
21813 ckb2.pack(side=LEFT)
21814 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
21815 BuildXYScreen.pack(side=TOP)
21817 awg1eb = Frame( frame2r )
21818 awg1eb.pack(side=TOP)
21819 ModeAMenu = Menubutton(awg1eb, text=
"Mode", width=5, style=
"Ctrace1.TButton")
21820 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
21821 ModeAMenu[
"menu"] = ModeAMenu.menu
21822 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
21823 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
21824 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
21825 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
21826 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
21827 ModeAMenu.menu.add_separator()
21828 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
21829 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
21830 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
21831 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
21832 ModeAMenu.pack(side=LEFT, anchor=W)
21833 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", width=6, style=
"Ctrace1.TButton")
21834 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
21835 ShapeAMenu[
"menu"] = ShapeAMenu.menu
21836 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
21837 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
21838 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
21839 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
21840 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
21841 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
21842 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
21843 if AWGShowAdvanced.get() > 0:
21844 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
21845 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
21846 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
21847 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
21848 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
21849 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
21850 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
21851 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
21852 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
21853 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
21854 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
21855 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
21856 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
21857 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
21859 ShapeAMenu.menu.add_separator()
21860 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
21861 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
21862 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
21863 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
21864 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
21865 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
21866 ShapeAMenu.pack(side=LEFT, anchor=W)
21868 AWGAModeLabel = Label(frame2r, text=
"AWG A Mode", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
21869 AWGAModeLabel.pack(side=TOP, fill=X)
21870 AWGAShapeLabel = Label(frame2r, text=
"AWG A Shape", background=COLORtrace1, font=(
'Arial', FontSize,
'bold'))
21871 AWGAShapeLabel.pack(side=TOP, fill=X)
21873 awg1ampl = Frame( frame2r )
21874 awg1ampl.pack(side=TOP)
21875 AWGAAmplEntry = Entry(awg1ampl, width=5, cursor=
'double_arrow')
21876 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
21877 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
21878 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
21879 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
21880 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
21881 AWGAAmplEntry.pack(side=LEFT, anchor=W)
21882 AWGAAmplEntry.delete(0,
"end")
21883 AWGAAmplEntry.insert(0,0.0)
21884 amp1lab = Label(awg1ampl)
21885 amp1lab.pack(side=LEFT, anchor=W)
21887 awg1off = Frame( frame2r )
21888 awg1off.pack(side=TOP)
21889 AWGAOffsetEntry = Entry(awg1off, width=5, cursor=
'double_arrow')
21890 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
21891 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
21892 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
21893 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
21894 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
21895 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
21896 AWGAOffsetEntry.delete(0,
"end")
21897 AWGAOffsetEntry.insert(0,0.0)
21898 off1lab = Label(awg1off)
21899 off1lab.pack(side=LEFT, anchor=W)
21900 if AWG_Amp_Mode.get() == 0:
21901 amp1lab.config(text =
"Min Ch A" )
21902 off1lab.config(text =
"Max Ch A" )
21904 amp1lab.config(text =
"Amp Ch A" )
21905 off1lab.config(text =
"Off Ch A" )
21907 awg1freq = Frame( frame2r )
21908 awg1freq.pack(side=TOP)
21909 AWGAFreqEntry = Entry(awg1freq, width=7, cursor=
'double_arrow')
21910 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
21911 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
21912 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
21913 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
21914 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
21915 AWGAFreqEntry.pack(side=LEFT, anchor=W)
21916 AWGAFreqEntry.delete(0,
"end")
21917 AWGAFreqEntry.insert(0,100.0)
21918 freq1lab = Label(awg1freq, text=
"Freq Ch A")
21919 freq1lab.pack(side=LEFT, anchor=W)
21922 awgadelay = Frame( frame2r )
21923 awgadelay.pack(side=TOP)
21924 awgaph = Radiobutton(awgadelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGAPhaseDelay, value=0, command=BAWGAPhaseDelay)
21925 awgaph.pack(side=LEFT, anchor=W)
21926 awgadel = Radiobutton(awgadelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGAPhaseDelay, value=1, command=BAWGAPhaseDelay)
21927 awgadel.pack(side=LEFT, anchor=W)
21929 awg1phase = Frame( frame2r )
21930 awg1phase.pack(side=TOP)
21931 AWGAPhaseEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
21932 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
21933 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
21934 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
21935 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
21936 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
21937 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
21938 AWGAPhaseEntry.delete(0,
"end")
21939 AWGAPhaseEntry.insert(0,0)
21940 phasealab = Label(awg1phase, text=
"Deg")
21941 phasealab.pack(side=LEFT, anchor=W)
21943 AWGADutyCycleEntry = Entry(awg1phase, width=4, cursor=
'double_arrow')
21944 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
21945 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
21946 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
21947 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
21948 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
21949 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
21950 AWGADutyCycleEntry.delete(0,
"end")
21951 AWGADutyCycleEntry.insert(0,50)
21952 duty1lab = Label(awg1phase, text=
"%")
21953 duty1lab.pack(side=LEFT, anchor=W)
21967 awg2eb = Frame( frame2r )
21968 awg2eb.pack(side=TOP)
21969 ModeBMenu = Menubutton(awg2eb, text=
"Mode", width=5, style=
"Ctrace2.TButton")
21970 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
21971 ModeBMenu[
"menu"] = ModeBMenu.menu
21972 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
21973 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
21974 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
21975 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
21976 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
21977 ModeBMenu.menu.add_separator()
21978 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
21979 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
21980 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
21981 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
21982 ModeBMenu.pack(side=LEFT, anchor=W)
21983 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", width=6, style=
"Ctrace2.TButton")
21984 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
21985 ShapeBMenu[
"menu"] = ShapeBMenu.menu
21986 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
21987 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
21988 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
21989 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
21990 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
21991 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
21992 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
21993 if AWGShowAdvanced.get() > 0:
21994 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
21995 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
21996 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
21997 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
21998 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
21999 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
22000 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
22001 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
22002 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
22003 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
22004 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
22005 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
22007 ShapeBMenu.menu.add_separator()
22008 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
22009 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
22010 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
22011 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
22012 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
22013 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
22014 ShapeBMenu.pack(side=LEFT, anchor=W)
22016 AWGBModeLabel = Label(frame2r, text=
"AWG B Mode", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
22017 AWGBModeLabel.pack(side=TOP, fill=X)
22018 AWGBShapeLabel = Label(frame2r, text=
"AWG B Shape", background=COLORtrace2, font=(
'Arial', FontSize,
'bold'))
22019 AWGBShapeLabel.pack(side=TOP, fill=X)
22021 awg2ampl = Frame( frame2r )
22022 awg2ampl.pack(side=TOP)
22023 AWGBAmplEntry = Entry(awg2ampl, width=5, cursor=
'double_arrow')
22024 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
22025 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
22026 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
22027 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
22028 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
22029 AWGBAmplEntry.pack(side=LEFT, anchor=W)
22030 AWGBAmplEntry.delete(0,
"end")
22031 AWGBAmplEntry.insert(0,0.0)
22032 amp2lab = Label(awg2ampl)
22033 amp2lab.pack(side=LEFT, anchor=W)
22035 awg2off = Frame( frame2r )
22036 awg2off.pack(side=TOP)
22037 AWGBOffsetEntry = Entry(awg2off, width=5, cursor=
'double_arrow')
22038 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
22039 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
22040 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
22041 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
22042 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
22043 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
22044 AWGBOffsetEntry.delete(0,
"end")
22045 AWGBOffsetEntry.insert(0,0.0)
22046 off2lab = Label(awg2off)
22047 off2lab.pack(side=LEFT, anchor=W)
22048 if AWG_Amp_Mode.get() == 0:
22049 amp2lab.config(text =
"Min Ch B" )
22050 off2lab.config(text =
"Max Ch B" )
22052 amp2lab.config(text =
"Amp Ch B" )
22053 off2lab.config(text =
"Off Ch B" )
22055 awg2freq = Frame( frame2r )
22056 awg2freq.pack(side=TOP)
22057 AWGBFreqEntry = Entry(awg2freq, width=7, cursor=
'double_arrow')
22058 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
22059 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
22060 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
22061 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
22062 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
22063 AWGBFreqEntry.pack(side=LEFT, anchor=W)
22064 AWGBFreqEntry.delete(0,
"end")
22065 AWGBFreqEntry.insert(0,100.0)
22066 freq2lab = Label(awg2freq, text=
"Freq Ch B")
22067 freq2lab.pack(side=LEFT, anchor=W)
22069 awgbdelay = Frame( frame2r )
22070 awgbdelay.pack(side=TOP)
22071 awgbph = Radiobutton(awgbdelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGBPhaseDelay, value=0, command=BAWGBPhaseDelay)
22072 awgbph.pack(side=LEFT, anchor=W)
22073 awgbdel = Radiobutton(awgbdelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGBPhaseDelay, value=1, command=BAWGBPhaseDelay)
22074 awgbdel.pack(side=LEFT, anchor=W)
22076 awg2phase = Frame( frame2r )
22077 awg2phase.pack(side=TOP)
22078 AWGBPhaseEntry = Entry(awg2phase, width=5, cursor=
'double_arrow')
22079 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
22080 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
22081 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
22082 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
22083 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
22084 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
22085 AWGBPhaseEntry.delete(0,
"end")
22086 AWGBPhaseEntry.insert(0,0)
22087 phaseblab = Label(awg2phase, text=
"Deg")
22088 phaseblab.pack(side=LEFT, anchor=W)
22090 AWGBDutyCycleEntry = Entry(awg2phase, width=5, cursor=
'double_arrow')
22091 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
22092 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
22093 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
22094 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
22095 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
22096 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
22097 AWGBDutyCycleEntry.delete(0,
"end")
22098 AWGBDutyCycleEntry.insert(0,50)
22099 duty2lab = Label(awg2phase, text=
"%")
22100 duty2lab.pack(side=LEFT, anchor=W)
22102 bcompa = Checkbutton(frame2r, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
22103 bcompa.pack(side=TOP)
22105 awgsync = Checkbutton(frame2r, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
22106 awgsync.pack(side=TOP)
22109 prlab = Label(frame2r, text=
"Adjust Gain / Offset")
22110 prlab.pack(side=TOP)
22112 ProbeA = Frame( frame2r )
22113 ProbeA.pack(side=TOP)
22114 gain1lab = Button(ProbeA, text=
"CA-V", width=4, style=
"Ctrace1.TButton", command=ReSetAGO)
22115 gain1lab.pack(side=LEFT,fill=X)
22116 CHAVGainEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
22117 CHAVGainEntry.bind(
'<Return>', onTextKey)
22118 CHAVGainEntry.bind(
'<MouseWheel>', onTextScroll)
22119 CHAVGainEntry.bind(
"<Button-4>", onTextScroll)
22120 CHAVGainEntry.bind(
"<Button-5>", onTextScroll)
22121 CHAVGainEntry.bind(
'<Key>', onTextKey)
22122 CHAVGainEntry.pack(side=LEFT)
22123 CHAVGainEntry.delete(0,
"end")
22124 CHAVGainEntry.insert(0,1.0)
22125 CHAVOffsetEntry = Entry(ProbeA, width=5, cursor=
'double_arrow')
22126 CHAVOffsetEntry.bind(
'<Return>', onTextKey)
22127 CHAVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
22128 CHAVOffsetEntry.bind(
"<Button-4>", onTextScroll)
22129 CHAVOffsetEntry.bind(
"<Button-5>", onTextScroll)
22130 CHAVOffsetEntry.bind(
'<Key>', onTextKey)
22131 CHAVOffsetEntry.pack(side=LEFT)
22132 CHAVOffsetEntry.delete(0,
"end")
22133 CHAVOffsetEntry.insert(0,0.0)
22135 ProbeB = Frame( frame2r )
22136 ProbeB.pack(side=TOP)
22137 gain2lab = Button(ProbeB, text=
"CB-V", width=4, style=
"Ctrace2.TButton", command=ReSetBGO)
22138 gain2lab.pack(side=LEFT,fill=X)
22139 CHBVGainEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
22140 CHBVGainEntry.bind(
'<Return>', onTextKey)
22141 CHBVGainEntry.bind(
'<MouseWheel>', onTextScroll)
22142 CHBVGainEntry.bind(
"<Button-4>", onTextScroll)
22143 CHBVGainEntry.bind(
"<Button-5>", onTextScroll)
22144 CHBVGainEntry.bind(
'<Key>', onTextKey)
22145 CHBVGainEntry.pack(side=LEFT)
22146 CHBVGainEntry.delete(0,
"end")
22147 CHBVGainEntry.insert(0,1.0)
22148 CHBVOffsetEntry = Entry(ProbeB, width=5, cursor=
'double_arrow')
22149 CHBVOffsetEntry.bind(
'<Return>', onTextKey)
22150 CHBVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
22151 CHBVOffsetEntry.bind(
"<Button-4>", onTextScroll)
22152 CHBVOffsetEntry.bind(
"<Button-5>", onTextScroll)
22153 CHBVOffsetEntry.bind(
'<Key>', onTextKey)
22154 CHBVOffsetEntry.pack(side=LEFT)
22155 CHBVOffsetEntry.delete(0,
"end")
22156 CHBVOffsetEntry.insert(0,0.0)
22158 ProbeAI = Frame( frame2r )
22159 ProbeAI.pack(side=TOP)
22160 gainailab = Button(ProbeAI, text=
"CA-I", width=4, style=
"Ctrace3.TButton", command=ReSetAIGO)
22161 gainailab.pack(side=LEFT,fill=X)
22162 CHAIGainEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
22163 CHAIGainEntry.bind(
'<Return>', onTextKey)
22164 CHAIGainEntry.bind(
'<MouseWheel>', onTextScroll)
22165 CHAIGainEntry.bind(
"<Button-4>", onTextScroll)
22166 CHAIGainEntry.bind(
"<Button-5>", onTextScroll)
22167 CHAIGainEntry.bind(
'<Key>', onTextKey)
22168 CHAIGainEntry.pack(side=LEFT)
22169 CHAIGainEntry.delete(0,
"end")
22170 CHAIGainEntry.insert(0,1.0)
22171 CHAIOffsetEntry = Entry(ProbeAI, width=5, cursor=
'double_arrow')
22172 CHAIOffsetEntry.bind(
'<Return>', onTextKey)
22173 CHAIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
22174 CHAIOffsetEntry.bind(
"<Button-4>", onTextScroll)
22175 CHAIOffsetEntry.bind(
"<Button-5>", onTextScroll)
22176 CHAIOffsetEntry.bind(
'<Key>', onTextKey)
22177 CHAIOffsetEntry.pack(side=LEFT)
22178 CHAIOffsetEntry.delete(0,
"end")
22179 CHAIOffsetEntry.insert(0,0.0)
22181 ProbeBI = Frame( frame2r )
22182 ProbeBI.pack(side=TOP)
22183 gainbilab = Button(ProbeBI, text=
"CB-I", width=4, style=
"Ctrace4.TButton", command=ReSetBIGO)
22184 gainbilab.pack(side=LEFT,fill=X)
22185 CHBIGainEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
22186 CHBIGainEntry.bind(
'<Return>', onTextKey)
22187 CHBIGainEntry.bind(
'<MouseWheel>', onTextScroll)
22188 CHBIGainEntry.bind(
"<Button-4>", onTextScroll)
22189 CHBIGainEntry.bind(
"<Button-5>", onTextScroll)
22190 CHBIGainEntry.bind(
'<Key>', onTextKey)
22191 CHBIGainEntry.pack(side=LEFT)
22192 CHBIGainEntry.delete(0,
"end")
22193 CHBIGainEntry.insert(0,1.0)
22194 CHBIOffsetEntry = Entry(ProbeBI, width=5, cursor=
'double_arrow')
22195 CHBIOffsetEntry.bind(
'<Return>', onTextKey)
22196 CHBIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
22197 CHBIOffsetEntry.bind(
"<Button-4>", onTextScroll)
22198 CHBIOffsetEntry.bind(
"<Button-5>", onTextScroll)
22199 CHBIOffsetEntry.bind(
'<Key>', onTextKey)
22200 CHBIOffsetEntry.pack(side=LEFT)
22201 CHBIOffsetEntry.delete(0,
"end")
22202 CHBIOffsetEntry.insert(0,0.0)
22205 R0lGODlhdAAxAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
22206 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
22207 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
22208 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
22209 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
22210 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
22211 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
22212 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
22213 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
22214 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
22215 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
22216 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
22217 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
22218 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAB0ADEA
22219 AAj/AP8JHEiwoMGDCBMqXMiwocOHEBlSS5WKIUWJfqj9S+XnokGPEUOKdEito0WNCC9OpEbtz7+V
22220 HyuOnEnzI6yMEylWpNgx50aOGkt6LElUoB9VPFHyTAXrYipVNaOSTOWzEEuqA61SXTnxH06ZK7EK
22221 5Ap2J9WdKKWqRVjyJ1c/1ZbqvPnyrKqS215mzEiwo8yfer22XUs4Zse9V31mPFuxbdKxjAU65Si5
22222 8Vm+hTNXrvuWKFKdjs8WJEqR5V63bkP/1bx28E+rK28ihckRayHQnH/yVdUTMtB/1fywHj7TI0iR
22223 x4krd7g0bcjSy6NLn069uvXr2LNr3/6Sip/vU777//EOXjx5P+G/nw/vnCA18gXFOy+JWfL31V6/
22224 s001ZQqK8AdN1B8KJiVETX9TMIGggv0xmOCCEDbYX3sDoTdhXwi6199qFjJRUIMB3iEhgs7x56CC
22225 wrH134r+tcjiiy7G+B+FL7nIYYsp1ojCX9SwuFqLBh343xQc+bGiUjhyhCNbLTbR4oBTODlkk09S
22226 iQKNBz7Z139OotQjkQPxx2WO/3D5kZNUDDSRk8IJOUVabqoo45ww1tkijejt+N9fUM64kX9/GQne
22227 lQMBWdCRGs6Yyp4FFYllhIVM6aCkCFL65kGAHshEjhZa2NiGAlWzJzUK8pngaAmSKVAh/fHWX0Rf
22228 sv+oSnB01iprkIwOWKF//wzIEqBG8drrf4USS9CiYBYEy39/GCrQHzpZFWCVhOoFpZSVRkktheg1
22229 MRaoXhGLbEaM9tpEinmiNGSj4CaaipNTqKltuaPBOF+ftt6JKgpUnGUoFcIaGR6wX371X4rOjnXw
22230 R3tSYexLL+L37YgUmhjhgxSjijHGGln4rYMVoXdihr2eqiETdxhEooUUtuuevQEiayeL7eU5p3B5
22231 ZmXjsHRWlLBAWgA7ULME/rPsqxjuOC2X/tE4VrfUztuef6oCKXDSRBb8MoBc6gSalD1BDVW4E5rW
22232 osQQx+i0mgLbOd/CSWeJwtY7pvvhjLWmDWOOJc3/jHaWHDckd4TOsawxePEeuyGJ7O44opbWDukH
22233 LB8hOGFtAcI4dkNEx7g5d+6xtBBLa8s7ZbUk/XF66aBLFau+D/GntntbwdQo6bXnHmTu83FFO+6k
22234 wxm8QoAzyDrbI186UPIF/vk4in6UStA2DKaC4q4OKp98qsFmnPnsC21jM8zF3izZzB1RTRDRfrBa
22235 dMl1alSrcPgOmVeQVpYuYNRSOtf/RFDbSaaCJzop9cVJFOkPzs6mF3iVjEheo0qzmvAHpcCtXuA7
22236 iJjy5ZyE2Wwi9IpPub4ULzFlhIFP25P6DCKwzQlJVRML3EEstDFLOYdBH7qcyxQ3hUJIJkE7ORip
22237 /5CmptJcEENMQNv3bkW7mc3pcz8bl8xilKN1ka0i7HMfDMsHo42wqIdiWVqlSmSlbGHLVwTRleII
22238 tMFrccpPVnxXeGSnxH+csUk/tFJ96Aa7kuTLbWl82PnmKLn06OeHOxKTTExowoTgCD3i6UvbVqix
22239 wMlue5i80PKIuKoN0VEhCJLd2KzHnushxJSjuySFXnewP3IwkIkrH0WYpRCBkewfWnSTc1TRyvfF
22240 RwuqEtgqy3gt/hkTdXYUVl0cqEiFyE5ozlugL+GXpS32pwkdjNIqncjNWnXwYBZaEVSm+CIyQekv
22241 jYTffaDkpjqpzpOym6a8HmepKk2KcAS5J+OcV0JDAIXJioPMEZQaxJd6Kkqfe1RTNxfquWNRBFo6
22242 oV0qbvNQ6BQxjP/4TOGSpBSKUDQVEH2awHrTupKa9KQoTWl0AgIAOw==
22244 logo = PhotoImage(data=ADIlogo)
22245 ADI1 = Label(frame2r, image=logo, anchor=
"sw", compound=
"top")
22246 ADI1.pack(side=TOP)
22250 if ButtonOrder == 1:
22251 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
22252 CHAlab.pack(side=LEFT)
22253 CHAsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHvpdiv, command=BCHAlevel)
22255 CHAsb.bind(
'<MouseWheel>', onSpinBoxScroll)
22256 CHAsb.bind(
"<Button-4>", onSpinBoxScroll)
22257 CHAsb.bind(
"<Button-5>", onSpinBoxScroll)
22258 CHAsb.pack(side=LEFT)
22259 CHAsb.delete(0,
"end")
22260 CHAsb.insert(0,0.5)
22262 if ButtonOrder == 0:
22263 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
22264 CHAlab.pack(side=LEFT)
22266 if ButtonOrder == 1:
22267 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
22268 CHAofflab.pack(side=LEFT)
22269 CHAVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
22270 CHAVPosEntry.bind(
"<Return>", BOffsetA)
22271 CHAVPosEntry.bind(
'<MouseWheel>', onTextScroll)
22272 CHAVPosEntry.bind(
"<Button-4>", onTextScroll)
22273 CHAVPosEntry.bind(
"<Button-5>", onTextScroll)
22274 CHAVPosEntry.bind(
'<Key>', onTextKey)
22275 CHAVPosEntry.pack(side=LEFT)
22276 CHAVPosEntry.delete(0,
"end")
22277 CHAVPosEntry.insert(0,2.5)
22278 if ButtonOrder == 0:
22279 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
22280 CHAofflab.pack(side=LEFT)
22282 if ButtonOrder == 1:
22283 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
22284 CHAIlab.pack(side=LEFT)
22285 CHAIsb = Spinbox(frame3, cursor=
'double_arrow', width=4, values=CHipdiv, command=BCHAIlevel)
22286 CHAIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
22287 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
22288 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
22289 CHAIsb.pack(side=LEFT)
22290 CHAIsb.delete(0,
"end")
22291 CHAIsb.insert(0,50.0)
22292 if ButtonOrder == 0:
22293 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
22294 CHAIlab.pack(side=LEFT)
22296 if ButtonOrder == 1:
22297 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
22298 CHAIofflab.pack(side=LEFT)
22299 CHAIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
22300 CHAIPosEntry.bind(
"<Return>", BIOffsetA)
22301 CHAIPosEntry.bind(
'<MouseWheel>', onTextScroll)
22302 CHAIPosEntry.bind(
"<Button-4>", onTextScroll)
22303 CHAIPosEntry.bind(
"<Button-5>", onTextScroll)
22304 CHAIPosEntry.bind(
'<Key>', onTextKey)
22305 CHAIPosEntry.pack(side=LEFT)
22306 CHAIPosEntry.delete(0,
"end")
22307 CHAIPosEntry.insert(0,0.0)
22308 if ButtonOrder == 0:
22309 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
22310 CHAIofflab.pack(side=LEFT)
22312 if ButtonOrder == 1:
22313 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
22314 CHBlab.pack(side=LEFT)
22315 CHBsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHvpdiv, command=BCHBlevel)
22316 CHBsb.bind(
'<MouseWheel>', onSpinBoxScroll)
22317 CHAIsb.bind(
"<Button-4>", onSpinBoxScroll)
22318 CHAIsb.bind(
"<Button-5>", onSpinBoxScroll)
22319 CHBsb.pack(side=LEFT)
22320 CHBsb.delete(0,
"end")
22321 CHBsb.insert(0,0.5)
22323 if ButtonOrder == 0:
22324 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
22325 CHBlab.pack(side=LEFT)
22327 if ButtonOrder == 1:
22328 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
22329 CHBofflab.pack(side=LEFT)
22330 CHBVPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
22331 CHBVPosEntry.bind(
"<Return>", BOffsetB)
22332 CHBVPosEntry.bind(
'<MouseWheel>', onTextScroll)
22333 CHBVPosEntry.bind(
"<Button-4>", onTextScroll)
22334 CHBVPosEntry.bind(
"<Button-5>", onTextScroll)
22335 CHBVPosEntry.bind(
'<Key>', onTextKey)
22336 CHBVPosEntry.pack(side=LEFT)
22337 CHBVPosEntry.delete(0,
"end")
22338 CHBVPosEntry.insert(0,2.5)
22339 if ButtonOrder == 0:
22340 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
22341 CHBofflab.pack(side=LEFT)
22343 if ButtonOrder == 1:
22344 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
22345 CHBIlab.pack(side=LEFT)
22346 CHBIsb = Spinbox(frame3, width=4, cursor=
'double_arrow', values=CHipdiv, command=BCHBIlevel)
22347 CHBIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
22348 CHBIsb.bind(
"<Button-4>", onSpinBoxScroll)
22349 CHBIsb.bind(
"<Button-5>", onSpinBoxScroll)
22350 CHBIsb.pack(side=LEFT)
22351 CHBIsb.delete(0,
"end")
22352 CHBIsb.insert(0,50.0)
22353 if ButtonOrder == 0:
22354 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
22355 CHBIlab.pack(side=LEFT)
22357 if ButtonOrder == 1:
22358 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
22359 CHBIofflab.pack(side=LEFT)
22360 CHBIPosEntry = Entry(frame3, width=5, cursor=
'double_arrow')
22361 CHBIPosEntry.bind(
"<Return>", BIOffsetB)
22362 CHBIPosEntry.bind(
'<MouseWheel>', onTextScroll)
22363 CHBIPosEntry.bind(
"<Button-4>", onTextScroll)
22364 CHBIPosEntry.bind(
"<Button-5>", onTextScroll)
22365 CHBIPosEntry.bind(
'<Key>', onTextKey)
22366 CHBIPosEntry.pack(side=LEFT)
22367 CHBIPosEntry.delete(0,
"end")
22368 CHBIPosEntry.insert(0,0.0)
22369 if ButtonOrder == 0:
22370 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
22371 CHBIofflab.pack(side=LEFT)
22373 if ShowBallonHelp > 0:
22374 CHAlab_tip =
CreateToolTip(CHAlab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
22375 CHBlab_tip =
CreateToolTip(CHBlab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
22376 CHAIlab_tip =
CreateToolTip(CHAIlab,
'Select CHA-I vertical range/position axis to be used for markers and drawn color')
22377 CHBIlab_tip =
CreateToolTip(CHBIlab,
'Select CHB-I vertical range/position axis to be used for markers and drawn color')
22378 CHAofflab_tip =
CreateToolTip(CHAofflab,
'Set CHA-V position to DC average of signal')
22379 CHBofflab_tip =
CreateToolTip(CHBofflab,
'Set CHB-V position to DC average of signal')
22380 CHAIofflab_tip =
CreateToolTip(CHAIofflab,
'Set CHA-I position to DC average of signal')
22381 CHBIofflab_tip =
CreateToolTip(CHBIofflab,
'Set CHB-I position to DC average of signal')
22387 root.geometry(
'+300+0')
22388 root.protocol(
"WM_DELETE_WINDOW", Bcloseexit)
22390 if not numpy_found:
22392 showwarning(
"WARNING",
"Numpy not found!")
22397 BoardStatus = IntVar(0)
22402 if EnableScopeOnly == 0:
22405 AWGScreenStatus.set(1)
22407 if LocalLanguage !=
"English":
22415 showwarning(
"WARNING",
"Pysmu not found!")