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 =
"(14 Aug 2020)"
61 Version_url =
'https://github.com/analogdevicesinc/alice/releases/download/1.3.8/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 Syayem is " + str(root.tk.call(
'tk',
'windowingsystem')))
116 MouseX = MouseY = -10
117 MouseCAV = MouseCAI = MouseCBV = MouseCBI = MouseMuxA = MouseMuxB = MouseMuxC = MouseMuxD = -10
119 COLORframes =
"#000080"
120 COLORcanvas =
"#000000"
121 COLORgrid =
"#808080"
122 COLORzeroline =
"#0000ff"
123 COLORtrace1 =
"#00ff00"
124 COLORtrace2 =
"#ff8000"
125 COLORtrace3 =
"#00ffff"
126 COLORtrace4 =
"#ffff00"
127 COLORtrace5 =
"#ff00ff"
128 COLORtrace6 =
"#C80000"
129 COLORtrace7 =
"#8080ff"
130 COLORtraceR1 =
"#008000"
131 COLORtraceR2 =
"#905000"
132 COLORtraceR3 =
"#008080"
133 COLORtraceR4 =
"#808000"
134 COLORtraceR5 =
"#800080"
135 COLORtraceR6 =
"#800000"
136 COLORtraceR7 =
"#4040a0"
137 COLORtext =
"#ffffff"
138 COLORtrigger =
"#ff0000"
139 COLORsignalband =
"#ff0000"
140 ButtonGreen =
"#00ff00"
141 ButtonRed =
"#ff0000"
148 BaseSampleRate = 100000
149 AWGSAMPLErate = BaseSampleRate
150 SAMPLErate = BaseSampleRate
158 MathString =
"VBuffA[t] + VBuffB[t]"
160 MathXString =
"VBuffA[t]"
162 MathYString =
"VBuffB[t]"
164 UserAString =
"MaxV1-VATop"
165 UserALabel =
"OverShoot"
166 UserBString =
"MinV2-VBBase"
167 UserBLabel =
"UnderShoot"
171 AWGAMathString =
"(VBuffA + VBuffB)/2"
172 AWGBMathString =
"(VBuffA + VBuffB)/2"
173 FFTUserWindowString =
"numpy.kaiser(SMPfft, 14) * 3"
174 DigFilterAString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
175 DigFilterBString =
"numpy.sinc(numpy.linspace(-1, 1, 91))"
176 ChaMeasString1 =
"DCV1"
177 ChaMeasString2 =
"DCI1"
178 ChaMeasString3 =
"SV1"
179 ChaMeasString4 =
"MaxV1-MinV1"
180 ChaMeasString5 =
"MaxI1-MinI1"
181 ChaMeasString6 =
"math.sqrt(SV1**2 - DCV1**2)"
182 ChbMeasString1 =
"DCV2"
183 ChbMeasString2 =
"DCI2"
184 ChbMeasString3 =
"SV2"
185 ChbMeasString4 =
"MaxV2-MinV2"
186 ChbMeasString5 =
"MaxI2-MinI2"
187 ChbMeasString6 =
"math.sqrt(SV2**2 - DCV2**2)"
188 ChaLableSrring1 =
"CHA-DCV "
189 ChaLableSrring2 =
"CHA-DCI "
190 ChaLableSrring3 =
"CHA-TRMS "
191 ChaLableSrring4 =
"CHA-VP-P "
192 ChaLableSrring5 =
"CHA-IP-P "
193 ChaLableSrring6 =
"CHA-ACRMS "
194 ChbLableSrring1 =
"CHB-DCV "
195 ChbLableSrring2 =
"CHB-DCI "
196 ChbLableSrring3 =
"CHB-TRMS "
197 ChbLableSrring4 =
"CHB-VP-P "
198 ChbLableSrring5 =
"CHB-IP-P "
199 ChbLableSrring6 =
"CHB-ACRMS "
200 LabelPlotText = IntVar(0)
201 PlotLabelText =
"Custom Plot Label"
203 GridWidth = IntVar(0)
205 TRACEwidth = IntVar(0)
207 TRACEaverage = IntVar(0)
211 LPFTrigger = IntVar(0)
212 Trigger_LPF_length = IntVar(0)
213 Trigger_LPF_length.set(10)
214 HarmonicMarkers = IntVar(0)
215 HarmonicMarkers.set(3)
216 AWGShowAdvanced = IntVar(0)
217 AWGShowAdvanced.set(0)
218 AWG_Amp_Mode = IntVar(0)
220 AWGA_Ext_Gain = DoubleVar(0)
221 AWGA_Ext_Gain.set(1.0)
222 AWGA_Ext_Offset = DoubleVar(0)
223 AWGA_Ext_Offset.set(0.0)
224 AWGB_Ext_Gain = DoubleVar(0)
225 AWGB_Ext_Gain.set(1.0)
226 AWGB_Ext_Offset = DoubleVar(0)
227 AWGB_Ext_Offset.set(0.0)
229 Two_X_Sample = IntVar(0)
231 ADC_Mux_Mode = IntVar(0)
233 Last_ADC_Mux_Mode = 0
234 Alternate_Sweep_Mode = IntVar(0)
235 Alternate_Sweep_Mode.set(0)
237 ZEROstuffing = IntVar(0)
239 FFTwindow = IntVar(0)
242 RelPhaseCorrection = 15
243 RelPhaseCenter = IntVar(0)
244 RelPhaseCenter.set(0)
245 ImpedanceCenter = IntVar(0)
246 ImpedanceCenter.set(0)
247 MultipleBoards = IntVar(0)
248 MultipleBoards.set(0)
249 IgnoreFirmwareCheck = 0
251 EnablePhaseAnalizer = 1
252 EnableSpectrumAnalizer = 1
253 EnableBodePlotter = 1
254 EnableImpedanceAnalizer = 1
257 EnableCommandInterface = 0
260 EnableMinigenMode = 0
261 EnablePmodDA1Mode = 0
263 EnableGenericSerialMode = 0
264 EnableAD5626SerialMode = 0
265 EnableDigitalFilter = 0
266 EnableMeasureScreen = 0
269 AllowFlashFirmware = 0
271 ShowTraceControls = 0
285 CHA_TC1 = DoubleVar(0)
287 CHA_TC2 = DoubleVar(0)
289 CHB_TC1 = DoubleVar(0)
291 CHB_TC2 = DoubleVar(0)
293 CHA_A1 = DoubleVar(0)
295 CHA_A2 = DoubleVar(0)
297 CHB_A1 = DoubleVar(0)
299 CHB_A2 = DoubleVar(0)
301 Auto_ETS_Comp = IntVar(0)
302 ETS_TC1 = DoubleVar(0)
304 ETS_A1 = DoubleVar(0)
306 ETS_TC2 = DoubleVar(0)
308 ETS_A2 = DoubleVar(0)
314 if (root.tk.call(
'tk',
'windowingsystem')==
'aqua'):
315 Style_String =
'aqua'
320 InitFile = open(
"alice_init.ini")
321 for line
in InitFile:
323 exec( line.rstrip() )
325 print(
"Skiping " + line.rstrip())
328 print(
"No Init File Read")
331 XOLF = XOLBP = XOLXY = XOLIA = int(FontSize * 4.625)
332 XOLNqP = XOLNiC = int(FontSize * 3.125)
335 root.style.theme_use(Style_String)
337 root.style.theme_use(
'default')
339 root.tk_focusFollowsMouse()
343 if sys.version_info[0] == 2:
344 default_font = tkFont.nametofont(
"TkDefaultFont")
345 if sys.version_info[0] == 3:
346 default_font = tkinter.font.nametofont(
"TkDefaultFont")
347 default_font.configure(size=FontSize)
349 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)
351 CHipdiv = (0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
353 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)
354 ResScalediv = (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000)
355 SampRateList = (1024, 2048, 4096, 8192, 16384, 32765, 64000, 93023, 93385, 93750, 94118,
356 96385, 96774, 97166, 97561, 97959, 98361, 98765, 99174, 99585, 100000)
358 RefPhase = (
"CA-V",
"CB-V",
"CA-I",
"CB-I")
362 AWGAOffsetvalue = 0.0
366 AWGADutyCyclevalue = 50
369 AWGBOffsetvalue = 0.0
373 AWGBDutyCyclevalue = 50
383 MeasGateStatus = IntVar(0)
384 MeasGateStatus.set(0)
386 DCV1 = DCV2 = MinV1 = MaxV1 = MinV2 = MaxV2 = MidV1 = PPV1 = MidV2 = PPV2 = SV1 = SI1 = 0
388 DCVMuxA = MinVMuxA = MaxVMuxA = MidVMuxA = PPVMuxA = SVMuxA = 0
389 DCVMuxB = MinVMuxB = MaxVMuxB = MidVMuxB = PPVMuxB = SVMuxB = 0
390 DCVMuxC = MinVMuxC = MaxVMuxC = MidVMuxC = PPVMuxC = SVMuxC = 0
391 DCVMuxD = MinVMuxD = MaxVMuxD = MidVMuxD = PPVMuxD = SVMuxD = 0
392 PeakVA = PeakVB = PeakIA = PeakIB = 0.0
393 PeakVMA = PeakVMB = PeakVMC = PeakVMD = 0.0
394 PeakphaseVMA = PeakphaseVMB = PeakphaseVMC = PeakphaseVMD = 0.0
395 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = 0.0
396 PeakphaseVA = PeakphaseVB = PeakphaseIA = PeakphaseIB = PeakphaseVAB = 0.0
398 DCI1 = DCI2 = MinI1 = MaxI1 = MinI2 = MaxI2 = MidI1 = PPI1 = MidI2 = PPI2 = SV2 = SI2 = 0
399 CHAperiod = CHAfreq = CHBperiod = CHBfreq = 0
401 CHAVGain = CHBVGain = 1.0
402 CHAVOffset = CHBVOffset = 0.0
404 CHAOffset = CHBOffset = CHBAOffset = CHBBOffset = CHBCOffset = CHBDOffset = 2.5
405 CHAIOffset = CHBIOffset = InOffA = InGainA = InOffB = InGainB = 0.0
407 CANVASwidth = GRW + 2 * X0L
408 CANVASheight = GRH + Y0T + (FontSize * 7)
436 DigFiltABoxCar = IntVar(0)
437 DigFiltBBoxCar = IntVar(0)
446 SampleRateStatus = IntVar(0)
447 ETSStatus = IntVar(0)
455 VmemoryA = numpy.ones(1)
456 VmemoryB = numpy.ones(1)
457 ImemoryA = numpy.ones(1)
458 ImemoryB = numpy.ones(1)
459 TRACEresetTime =
True
460 TRACEresetFreq =
True
461 AWGScreenStatus = IntVar(0)
493 ScreenTrefresh = IntVar(0)
494 ScreenXYrefresh = IntVar(0)
502 CurrentFreqX = X0LBP + 14
503 FBins = numpy.linspace(0, 50000, num=16384)
504 FStep = numpy.linspace(0, 16384, num=NSteps.get())
505 FSweepMode = IntVar(0)
506 FSweepCont = IntVar(0)
507 FStepSync = IntVar(0)
508 FSweepSync = IntVar(0)
509 ShowCA_VdB = IntVar(0)
511 ShowCB_VdB = IntVar(0)
513 ShowMarkerBP = IntVar(0)
514 ShowCA_RdB = IntVar(0)
515 ShowCA_RP = IntVar(0)
516 ShowCB_RdB = IntVar(0)
517 ShowCB_RP = IntVar(0)
518 ShowMathBP = IntVar(0)
519 ShowRMathBP = IntVar(0)
520 SingleShotSA = IntVar(0)
529 NetworkScreenStatus = IntVar(0)
530 BDSweepFile = IntVar(0)
534 MarkerNum = MarkerFreqNum = 0
537 TCursor = VCursor = 0
540 XCursor = YCursor = 0
542 ShowdBCur = IntVar(0)
543 FCursor = dBCursor = 0
544 ShowBPCur = IntVar(0)
545 ShowBdBCur = IntVar(0)
546 BPCursor = BdBCursor = 0
547 RUNstatus = IntVar(0)
552 DBdivlist = [1, 2, 3, 5, 10, 15, 20]
553 DBdivindex = IntVar(0)
557 DBdivindexBP = IntVar(0)
559 DBlevelBP = IntVar(0)
562 SpectrumScreenStatus = IntVar(0)
563 SmoothCurvesSA = IntVar(0)
564 SmoothCurvesBP = IntVar(0)
566 IAScreenStatus = IntVar(0)
567 NqPScreenStatus = IntVar(0)
569 NiCScreenStatus = IntVar(0)
571 ImpedanceMagnitude = 0.0
573 ImpedanceRseries = 0.0
574 ImpedanceXseries = 0.0
575 Show_Rseries = IntVar(0)
576 Show_Xseries = IntVar(0)
577 Show_Magnitude = IntVar(0)
578 Show_Angle = IntVar(0)
579 Show_RseriesRef = IntVar(0)
580 Show_XseriesRef = IntVar(0)
581 Show_MagnitudeRef = IntVar(0)
582 Show_AngleRef = IntVar(0)
596 DisplaySeries = IntVar(0)
597 IA_Ext_Conf = IntVar(0)
598 IASweepSaved = IntVar(0)
606 OhmStatus = IntVar(0)
607 OhmRunStatus = IntVar(0)
617 FFTmemoryA = numpy.ones(1)
618 PhaseMemoryA = numpy.ones(1)
619 FFTmemoryB = numpy.ones(1)
620 PhaseMemoryB = numpy.ones(1)
621 SMPfftpwrTwo = IntVar(0)
623 SMPfft = 2 ** SMPfftpwrTwo.get()
625 FFTwindowshape = numpy.ones(SMPfft)
637 FreqTraceMode = IntVar(0)
654 MathScreenStatus = IntVar(0)
656 XYScreenStatus = IntVar(0)
685 SDATAPort = IntVar(0)
686 SLATCHPort = IntVar(0)
690 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
691 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
692 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
693 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
694 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
695 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
696 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
697 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
698 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
699 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
700 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
701 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
702 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
703 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
704 sKDBgw8AKFzIsKFChA4jMoQoUSJFAAgHLryYUeDGgx8zhiw4EuRDkxg7ltR4UmRLki9RclQZk2VK
705 lzdh5pTJE+dMnz1/6uyYsKZHowRXHt1pcGREohUbQo2qNKlDolgFBgQAOw==
707 hipulseimg = PhotoImage(data=hipulse)
710 R0lGODlhGQAYAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
711 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
712 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
713 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
714 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
715 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
716 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
717 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
718 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
719 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
720 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
721 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
722 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
723 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///ywAAAAAGQAYAAAIZwAfCBxI
724 sKBBggASKgRwEOHChwsbDoRIkaHEBxQdWpSosGHHix8NhvSYkORGkyhBljw4kuVKkS9TwjzpkubE
725 mDVl6tR4ESPOmzYLtgTac6hAozxzqgzqkynRmhUhmoz6cCpVpD0vBgQAOw==
727 lowpulseimg = PhotoImage(data=lowpulse)
757 self.
widget.after_cancel(id)
761 x, y, cx, cy = self.
widget.bbox(
"insert")
762 x += self.
widget.winfo_rootx() + 25
763 y += self.
widget.winfo_rooty() + 20
767 self.
tw.wm_overrideredirect(
True)
768 self.
tw.wm_geometry(
"+%d+%d" % (x, y))
769 label = Label(self.
tw, text=self.
text, justify=
'left',
770 background=
"#ffffe0", relief=
'solid', borderwidth=1,
784 global TgInput, TgEdge, ManualTrigger, SingleShot, AutoLevel, SingleShotSA
785 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
786 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
787 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
788 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
789 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
790 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
791 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
792 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
793 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
794 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
795 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
796 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
797 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
798 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
799 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
800 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase
801 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
802 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
803 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
804 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, DacScreenStatus, DigScreenStatus
805 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
806 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
807 global TimeDisp, XYDisp, FreqDisp, IADisp, XYScreenStatus, IAScreenStatus, SpectrumScreenStatus
808 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry, AWGAPhaseDelay, AWGBPhaseDelay
809 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasDelay
810 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
811 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
812 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, HozPossentry
813 global SmoothCurvesBP, bodewindow, AWG_Amp_Mode
814 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp
815 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP
816 global BPSweepMode, BPSweepCont, BodeScreenStatus, RevDate, SweepStepBodeEntry
817 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
818 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
819 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
820 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
821 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
822 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
823 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
824 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
825 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
826 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
827 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter, NetworkScreenStatus
828 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
829 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
830 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
831 global AWGABurstFlag, AWGACycles, AWGABurstDelay
832 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
833 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
834 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
835 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
836 global DigFiltStatus, DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
837 global phawindow, PhAca, PhAScreenStatus, PhADisp
838 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA
839 global VScale, IScale, RefphEntry
840 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
841 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
845 ConfgFile = open(filename,
"w")
849 ConfgFile.write(
"root.geometry('+" + str(root.winfo_x()) +
'+' + str(root.winfo_y()) +
"')\n")
850 ConfgFile.write(
"awgwindow.geometry('+" + str(awgwindow.winfo_x()) +
'+' + str(awgwindow.winfo_y()) +
"')\n")
851 ConfgFile.write(
'global GRW; GRW = ' + str(GRW) +
'\n')
852 ConfgFile.write(
'global GRH; GRH = ' + str(GRH) +
'\n')
854 ConfgFile.write(
'global MathString; MathString = "' + MathString +
'"\n')
855 ConfgFile.write(
'global MathUnits; MathUnits = "' + MathUnits +
'"\n')
856 ConfgFile.write(
'global MathAxis; MathAxis = "' + MathAxis +
'"\n')
857 ConfgFile.write(
'global MathXString; MathXString = "' + MathXString +
'"\n')
858 ConfgFile.write(
'global MathXUnits; MathXUnits = "' + MathXUnits +
'"\n')
859 ConfgFile.write(
'global MathXAxis; MathXAxis = "' + MathXAxis +
'"\n')
860 ConfgFile.write(
'global MathYString; MathYString = "' + MathYString +
'"\n')
861 ConfgFile.write(
'global MathYUnits; MathYUnits = "' + MathYUnits +
'"\n')
862 ConfgFile.write(
'global MathYAxis; MathYAxis = "' + MathYAxis +
'"\n')
863 if MathScreenStatus.get() > 0:
864 ConfgFile.write(
'NewEnterMathControls()\n')
865 ConfgFile.write(
"MathWindow.geometry('+" + str(MathWindow.winfo_x()) +
'+' + str(MathWindow.winfo_y()) +
"')\n")
867 ConfgFile.write(
'DestroyMathScreen()\n')
868 if XYScreenStatus.get() > 0:
869 ConfgFile.write(
'global GRWXY; GRWXY = ' + str(GRWXY) +
'\n')
870 ConfgFile.write(
'global GRHXY; GRHXY = ' + str(GRHXY) +
'\n')
871 ConfgFile.write(
'MakeXYWindow()\n')
872 ConfgFile.write(
"xywindow.geometry('+" + str(xywindow.winfo_x()) +
'+' + str(xywindow.winfo_y()) +
"')\n")
873 ConfgFile.write(
'CHAsbxy.delete(0,END)\n')
874 ConfgFile.write(
'CHAsbxy.insert(0, ' + CHAsbxy.get() +
')\n')
875 ConfgFile.write(
'CHAIsbxy.delete(0,END)\n')
876 ConfgFile.write(
'CHAIsbxy.insert(0, ' + CHAIsbxy.get() +
')\n')
877 ConfgFile.write(
'CHAVPosEntryxy.delete(0,END)\n')
878 ConfgFile.write(
'CHAVPosEntryxy.insert(4, ' + CHAVPosEntryxy.get() +
')\n')
879 ConfgFile.write(
'CHAIPosEntryxy.delete(0,END)\n')
880 ConfgFile.write(
'CHAIPosEntryxy.insert(4, ' + CHAIPosEntryxy.get() +
')\n')
881 ConfgFile.write(
'CHBsbxy.delete(0,END)\n')
882 ConfgFile.write(
'CHBsbxy.insert(0, ' + CHBsbxy.get() +
')\n')
883 ConfgFile.write(
'CHBIsbxy.delete(0,END)\n')
884 ConfgFile.write(
'CHBIsbxy.insert(0, ' + CHBIsbxy.get() +
')\n')
885 ConfgFile.write(
'CHBVPosEntryxy.delete(0,END)\n')
886 ConfgFile.write(
'CHBVPosEntryxy.insert(4, ' + CHBVPosEntryxy.get() +
')\n')
887 ConfgFile.write(
'CHBIPosEntryxy.delete(0,END)\n')
888 ConfgFile.write(
'CHBIPosEntryxy.insert(4, ' + CHBIPosEntryxy.get() +
')\n')
890 ConfgFile.write(
'DestroyXYScreen()\n')
891 if IAScreenStatus.get() > 0:
892 ConfgFile.write(
'global GRWIA; GRWIA = ' + str(GRWIA) +
'\n')
893 ConfgFile.write(
'global GRHIA; GRHIA = ' + str(GRHIA) +
'\n')
894 ConfgFile.write(
'MakeIAWindow()\n')
895 ConfgFile.write(
"iawindow.geometry('+" + str(iawindow.winfo_x()) +
'+' + str(iawindow.winfo_y()) +
"')\n")
896 ConfgFile.write(
'IASource.set(' + str(IASource.get()) +
')\n')
897 ConfgFile.write(
'DisplaySeries.set(' + str(DisplaySeries.get()) +
')\n')
898 ConfgFile.write(
'RsystemEntry.delete(0,END)\n')
899 ConfgFile.write(
'RsystemEntry.insert(5, ' + RsystemEntry.get() +
')\n')
900 ConfgFile.write(
'ResScale.delete(0,END)\n')
901 ConfgFile.write(
'ResScale.insert(5, ' + ResScale.get() +
')\n')
902 ConfgFile.write(
'GainCorEntry.delete(0,END)\n')
903 ConfgFile.write(
'GainCorEntry.insert(5, ' + GainCorEntry.get() +
')\n')
904 ConfgFile.write(
'PhaseCorEntry.delete(0,END)\n')
905 ConfgFile.write(
'PhaseCorEntry.insert(5, ' + PhaseCorEntry.get() +
')\n')
906 ConfgFile.write(
'NetworkScreenStatus.set(' + str(NetworkScreenStatus.get()) +
')\n')
908 ConfgFile.write(
'DestroyIAScreen()\n')
909 if SpectrumScreenStatus.get() > 0:
910 ConfgFile.write(
'global GRWF; GRWF = ' + str(GRWF) +
'\n')
911 ConfgFile.write(
'global GRHF; GRHF = ' + str(GRHF) +
'\n')
912 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
913 ConfgFile.write(
'MakeSpectrumWindow()\n')
914 ConfgFile.write(
"freqwindow.geometry('+" + str(freqwindow.winfo_x()) +
'+' + str(freqwindow.winfo_y()) +
"')\n")
915 ConfgFile.write(
'ShowC1_VdB.set(' + str(ShowC1_VdB.get()) +
')\n')
916 ConfgFile.write(
'ShowC1_P.set(' + str(ShowC1_P.get()) +
')\n')
917 ConfgFile.write(
'ShowC2_VdB.set(' + str(ShowC2_VdB.get()) +
')\n')
918 ConfgFile.write(
'ShowC2_P.set(' + str(ShowC2_P.get()) +
')\n')
919 ConfgFile.write(
'StartFreqEntry.delete(0,END)\n')
920 ConfgFile.write(
'StartFreqEntry.insert(5, ' + StartFreqEntry.get() +
')\n')
921 ConfgFile.write(
'StopFreqEntry.delete(0,END)\n')
922 ConfgFile.write(
'StopFreqEntry.insert(5, ' + StopFreqEntry.get() +
')\n')
923 ConfgFile.write(
'HScale.set(' + str(HScale.get()) +
')\n')
924 ConfgFile.write(
'FreqTraceMode.set(' + str(FreqTraceMode.get()) +
')\n')
925 ConfgFile.write(
'SingleShotSA.set(' + str(SingleShotSA.get()) +
')\n')
927 ConfgFile.write(
'DestroySpectrumScreen()\n')
929 if DacScreenStatus.get() > 0:
930 ConfgFile.write(
'MakeDacScreen()\n')
931 ConfgFile.write(
"win1.geometry('+" + str(win1.winfo_x()) +
'+' + str(win1.winfo_y()) +
"')\n")
933 ConfgFile.write(
'DestroyDacScreen()\n')
934 if DigScreenStatus.get() > 0:
935 ConfgFile.write(
'MakeDigScreen()\n')
936 ConfgFile.write(
"win2.geometry('+" + str(win2.winfo_x()) +
'+' + str(win2.winfo_y()) +
"')\n")
938 ConfgFile.write(
'DestroyDigScreen()\n')
939 if EnableHSsampling > 0:
940 ConfgFile.write(
'FminEntry.delete(0,"end")\n')
941 ConfgFile.write(
'FminEntry.insert(0, ' + FminEntry.get() +
')\n')
942 ConfgFile.write(
'HtMulEntry.delete(0,"end")\n')
943 ConfgFile.write(
'HtMulEntry.insert(0, ' + HtMulEntry.get() +
')\n')
944 ConfgFile.write(
'Auto_ETS_Comp.set(' + str(Auto_ETS_Comp.get()) +
')\n')
946 ConfgFile.write(
'ets_TC1Entry.delete(0,"end")\n')
947 ConfgFile.write(
'ets_TC1Entry.insert(0, ' + ets_TC1Entry.get() +
')\n')
948 ConfgFile.write(
'ETS_TC1.set(' + ets_TC1Entry.get() +
')\n')
949 ConfgFile.write(
'ets_A1Entry.delete(0,"end")\n')
950 ConfgFile.write(
'ets_A1Entry.insert(0, ' + ets_A1Entry.get() +
')\n')
951 ConfgFile.write(
'ETS_A1.set(' + ets_A1Entry.get() +
')\n')
952 ConfgFile.write(
'ets_TC2Entry.delete(0,"end")\n')
953 ConfgFile.write(
'ets_TC2Entry.insert(0, ' + ets_TC2Entry.get() +
')\n')
954 ConfgFile.write(
'ETS_TC2.set(' + ets_TC2Entry.get() +
')\n')
955 ConfgFile.write(
'ets_A2Entry.delete(0,"end")\n')
956 ConfgFile.write(
'ets_A2Entry.insert(0, ' + ets_A2Entry.get() +
')\n')
957 ConfgFile.write(
'ETS_A2.set(' + ets_A2Entry.get() +
')\n')
959 ConfgFile.write(
'ETS_TC1.set(' + str(ETS_TC1.get()) +
')\n')
960 ConfgFile.write(
'ETS_A1.set(' + str(ETS_A1.get()) +
')\n')
961 ConfgFile.write(
'ETS_TC2.set(' + str(ETS_TC2.get()) +
')\n')
962 ConfgFile.write(
'ETS_A2.set(' + str(ETS_A2.get()) +
')\n')
963 if DigFiltStatus.get() == 1:
964 ConfgFile.write(
'MakeDigFiltWindow()\n')
965 ConfgFile.write(
'DigFiltABoxCar.set(' + str(DigFiltABoxCar.get()) +
')\n')
966 ConfgFile.write(
'DigFiltBBoxCar.set(' + str(DigFiltBBoxCar.get()) +
')\n')
967 ConfgFile.write(
'BCALenEntry.delete(0,"end")\n')
968 ConfgFile.write(
'BCALenEntry.insert(0, ' + BCALenEntry.get() +
')\n')
969 ConfgFile.write(
'BCBLenEntry.delete(0,"end")\n')
970 ConfgFile.write(
'BCBLenEntry.insert(0, ' + BCBLenEntry.get() +
')\n')
971 ConfgFile.write(
'BuildBoxCarA()\n')
972 ConfgFile.write(
'BuildBoxCarB()\n')
974 ConfgFile.write(
'DestroyDigFiltScreen()\n')
975 if MinigenScreenStatus.get() == 1:
976 ConfgFile.write(
'MakeMinigenWindow()\n')
977 ConfgFile.write(
"minigenwindow.geometry('+" + str(minigenwindow.winfo_x()) +
'+' + str(minigenwindow.winfo_y()) +
"')\n")
978 ConfgFile.write(
'MinigenMode.set(' + str(MinigenMode.get()) +
')\n')
979 ConfgFile.write(
'MinigenFout.delete(0,END)\n')
980 ConfgFile.write(
'MinigenFout.insert(4, ' + MinigenFout.get() +
')\n')
981 ConfgFile.write(
'MinigenFclk.delete(0,END)\n')
982 ConfgFile.write(
'MinigenFclk.insert(4, ' + MinigenFclk.get() +
')\n')
983 ConfgFile.write(
'SCLKPort.set(' + str(SCLKPort.get()) +
')\n')
984 ConfgFile.write(
'SDATAPort.set(' + str(SDATAPort.get()) +
')\n')
985 ConfgFile.write(
'SLATCHPort.set(' + str(SLATCHPort.get()) +
')\n')
987 ConfgFile.write(
'DestroyMinigenScreen()\n')
988 if MuxScreenStatus.get() == 1:
989 ConfgFile.write(
'MakeMuxModeWindow()\n')
990 ConfgFile.write(
"muxwindow.geometry('+" + str(muxwindow.winfo_x()) +
'+' + str(muxwindow.winfo_y()) +
"')\n")
991 ConfgFile.write(
'Show_CBA.set(' + str(Show_CBA.get()) +
')\n')
992 ConfgFile.write(
'Show_CBB.set(' + str(Show_CBB.get()) +
')\n')
993 ConfgFile.write(
'Show_CBC.set(' + str(Show_CBC.get()) +
')\n')
994 ConfgFile.write(
'Show_CBD.set(' + str(Show_CBD.get()) +
')\n')
995 ConfgFile.write(
'MuxEnb.set(' + str(MuxEnb.get()) +
')\n')
996 ConfgFile.write(
'CHB_Asb.delete(0,END)\n')
997 ConfgFile.write(
'CHB_Asb.insert(0, ' + CHB_Asb.get() +
')\n')
998 ConfgFile.write(
'CHB_Bsb.delete(0,END)\n')
999 ConfgFile.write(
'CHB_Bsb.insert(0, ' + CHB_Bsb.get() +
')\n')
1000 ConfgFile.write(
'CHB_Csb.delete(0,END)\n')
1001 ConfgFile.write(
'CHB_Csb.insert(0, ' + CHB_Csb.get() +
')\n')
1002 ConfgFile.write(
'CHB_Dsb.delete(0,END)\n')
1003 ConfgFile.write(
'CHB_Dsb.insert(0, ' + CHB_Dsb.get() +
')\n')
1004 ConfgFile.write(
'CHB_APosEntry.delete(0,END)\n')
1005 ConfgFile.write(
'CHB_APosEntry.insert(4, ' + CHB_APosEntry.get() +
')\n')
1006 ConfgFile.write(
'CHB_BPosEntry.delete(0,END)\n')
1007 ConfgFile.write(
'CHB_BPosEntry.insert(4, ' + CHB_BPosEntry.get() +
')\n')
1008 ConfgFile.write(
'CHB_CPosEntry.delete(0,END)\n')
1009 ConfgFile.write(
'CHB_CPosEntry.insert(4, ' + CHB_CPosEntry.get() +
')\n')
1010 ConfgFile.write(
'CHB_DPosEntry.delete(0,END)\n')
1011 ConfgFile.write(
'CHB_DPosEntry.insert(4, ' + CHB_DPosEntry.get() +
')\n')
1013 ConfgFile.write(
'DestroyMuxScreen()\n')
1015 if PhAScreenStatus.get() > 0:
1016 ConfgFile.write(
'global GRWPhA; GRWPhA = ' + str(GRWPhA) +
'\n')
1017 ConfgFile.write(
'global GRHPhA; GRHPhA = ' + str(GRHPhA) +
'\n')
1018 ConfgFile.write(
'MakePhAWindow()\n')
1019 ConfgFile.write(
"phawindow.geometry('+" + str(phawindow.winfo_x()) +
'+' + str(phawindow.winfo_y()) +
"')\n")
1020 ConfgFile.write(
'VScale.delete(0,END)\n')
1021 ConfgFile.write(
'VScale.insert(0, ' + str(VScale.get()) +
')\n')
1022 ConfgFile.write(
'IScale.delete(0,END)\n')
1023 ConfgFile.write(
'IScale.insert(0, ' + str(IScale.get()) +
')\n')
1024 ConfgFile.write(
'RefphEntry.delete(0,END)\n')
1025 ConfgFile.write(
'RefphEntry.insert(0, "' + str(RefphEntry.get()) +
'")\n')
1026 if vat_btn.config(
'text')[-1] ==
'OFF':
1027 ConfgFile.write(
'vat_btn.config(text="OFF", style="Stop.TButton")\n')
1029 ConfgFile.write(
'vat_btn.config(text="ON", style="Run.TButton")\n')
1030 if MuxScreenStatus.get() == 0:
1031 if vbt_btn.config(
'text')[-1] ==
'OFF':
1032 ConfgFile.write(
'vbt_btn.config(text="OFF", style="Stop.TButton")\n')
1034 ConfgFile.write(
'vbt_btn.config(text="ON", style="Run.TButton")\n')
1035 if vabt_btn.config(
'text')[-1] ==
'OFF':
1036 ConfgFile.write(
'vabt_btn.config(text="OFF", style="Stop.TButton")\n')
1038 ConfgFile.write(
'vabt_btn.config(text="ON", style="Run.TButton")\n')
1040 ConfgFile.write(
'ShowPB_A.set(' + str(ShowPB_A.get()) +
')\n')
1041 ConfgFile.write(
'ShowPB_B.set(' + str(ShowPB_B.get()) +
')\n')
1042 ConfgFile.write(
'ShowPB_C.set(' + str(ShowPB_C.get()) +
')\n')
1043 ConfgFile.write(
'ShowPB_D.set(' + str(ShowPB_D.get()) +
')\n')
1044 if iat_btn.config(
'text')[-1] ==
'OFF':
1045 ConfgFile.write(
'iat_btn.config(text="OFF", style="Stop.TButton")\n')
1047 ConfgFile.write(
'iat_btn.config(text="ON", style="Run.TButton")\n')
1048 if ibt_btn.config(
'text')[-1] ==
'OFF':
1049 ConfgFile.write(
'ibt_btn.config(text="OFF", style="Stop.TButton")\n')
1051 ConfgFile.write(
'ibt_btn.config(text="ON", style="Run.TButton")\n')
1054 ConfgFile.write(
'DestroyPhAScreen()\n')
1055 if BodeScreenStatus.get() == 1:
1056 ConfgFile.write(
'global GRWBP; GRWBP = ' + str(GRWBP) +
'\n')
1057 ConfgFile.write(
'global GRHBP; GRHBP = ' + str(GRHBP) +
'\n')
1058 ConfgFile.write(
'RelPhaseCenter.set(' + str(RelPhaseCenter.get()) +
')\n')
1059 ConfgFile.write(
'ImpedanceCenter.set(' + str(ImpedanceCenter.get()) +
')\n')
1060 ConfgFile.write(
'MakeBodeWindow()\n')
1061 ConfgFile.write(
"bodewindow.geometry('+" + str(bodewindow.winfo_x()) +
'+' + str(bodewindow.winfo_y()) +
"')\n")
1062 ConfgFile.write(
'ShowCA_VdB.set(' + str(ShowCA_VdB.get()) +
')\n')
1063 ConfgFile.write(
'ShowCB_VdB.set(' + str(ShowCB_VdB.get()) +
')\n')
1064 ConfgFile.write(
'ShowCA_P.set(' + str(ShowCA_P.get()) +
')\n')
1065 ConfgFile.write(
'ShowCB_P.set(' + str(ShowCB_P.get()) +
')\n')
1066 ConfgFile.write(
'ShowCA_RdB.set(' + str(ShowCA_RdB.get()) +
')\n')
1067 ConfgFile.write(
'ShowCA_RP.set(' + str(ShowCA_RP.get()) +
')\n')
1068 ConfgFile.write(
'ShowCB_RdB.set(' + str(ShowCB_RdB.get()) +
')\n')
1069 ConfgFile.write(
'ShowCB_RP.set(' + str(ShowCB_RP.get()) +
')\n')
1070 ConfgFile.write(
'BodeDisp.set(' + str(BodeDisp.get()) +
')\n')
1071 ConfgFile.write(
'ShowMarkerBP.set(' + str(ShowMarkerBP.get()) +
')\n')
1072 ConfgFile.write(
'ShowMathBP.set(' + str(ShowMathBP.get()) +
')\n')
1073 ConfgFile.write(
'ShowRMathBP.set(' + str(ShowRMathBP.get()) +
')\n')
1074 ConfgFile.write(
'HScaleBP.set(' + str(HScaleBP.get()) +
')\n')
1075 ConfgFile.write(
'NSteps.set(' + str(NSteps.get()) +
')\n')
1076 ConfgFile.write(
'DBdivindexBP.set(' + str(DBdivindexBP.get()) +
')\n')
1077 ConfgFile.write(
'DBlevelBP.set(' + str(DBlevelBP.get()) +
')\n')
1078 ConfgFile.write(
'FSweepMode.set(' + str(FSweepMode.get()) +
')\n')
1079 ConfgFile.write(
'SweepStepBodeEntry.delete(0,END)\n')
1080 ConfgFile.write(
'SweepStepBodeEntry.insert(4, ' + SweepStepBodeEntry.get() +
')\n')
1081 ConfgFile.write(
'StopBodeEntry.delete(0,END)\n')
1082 ConfgFile.write(
'StopBodeEntry.insert(4, ' + StopBodeEntry.get() +
')\n')
1083 ConfgFile.write(
'StartBodeEntry.delete(0,END)\n')
1084 ConfgFile.write(
'StartBodeEntry.insert(4, ' + StartBodeEntry.get() +
')\n')
1085 ConfgFile.write(
'Show_Rseries.set(' + str(Show_Rseries.get()) +
')\n')
1086 ConfgFile.write(
'Show_Xseries.set(' + str(Show_Xseries.get()) +
')\n')
1087 ConfgFile.write(
'Show_Magnitude.set(' + str(Show_Magnitude.get()) +
')\n')
1088 ConfgFile.write(
'Show_Angle.set(' + str(Show_Angle.get()) +
')\n')
1090 ConfgFile.write(
'DestroyBodeScreen()\n')
1091 if MeasureStatus.get() == 1:
1093 ConfgFile.write(
'global ChaLableSrring1; ChaLableSrring1 = "' + ChaLableSrring1 +
'"\n')
1094 ConfgFile.write(
'global ChaLableSrring2; ChaLableSrring2 = "' + ChaLableSrring2 +
'"\n')
1095 ConfgFile.write(
'global ChaLableSrring3; ChaLableSrring3 = "' + ChaLableSrring3 +
'"\n')
1096 ConfgFile.write(
'global ChaLableSrring4; ChaLableSrring4 = "' + ChaLableSrring4 +
'"\n')
1097 ConfgFile.write(
'global ChaLableSrring5; ChaLableSrring5 = "' + ChaLableSrring5 +
'"\n')
1098 ConfgFile.write(
'global ChaLableSrring6; ChaLableSrring6 = "' + ChaLableSrring6 +
'"\n')
1099 ConfgFile.write(
'global ChbLableSrring1; ChbLableSrring1 = "' + ChbLableSrring1 +
'"\n')
1100 ConfgFile.write(
'global ChbLableSrring2; ChbLableSrring2 = "' + ChbLableSrring2 +
'"\n')
1101 ConfgFile.write(
'global ChbLableSrring3; ChbLableSrring3 = "' + ChbLableSrring3 +
'"\n')
1102 ConfgFile.write(
'global ChbLableSrring4; ChbLableSrring4 = "' + ChbLableSrring4 +
'"\n')
1103 ConfgFile.write(
'global ChbLableSrring5; ChbLableSrring5 = "' + ChbLableSrring5 +
'"\n')
1104 ConfgFile.write(
'global ChbLableSrring6; ChbLableSrring6 = "' + ChbLableSrring6 +
'"\n')
1105 ConfgFile.write(
'global ChaMeasString1; ChaMeasString1 = "' + ChaMeasString1 +
'"\n')
1106 ConfgFile.write(
'global ChaMeasString2; ChaMeasString2 = "' + ChaMeasString2 +
'"\n')
1107 ConfgFile.write(
'global ChaMeasString3; ChaMeasString3 = "' + ChaMeasString3 +
'"\n')
1108 ConfgFile.write(
'global ChaMeasString4; ChaMeasString4 = "' + ChaMeasString4 +
'"\n')
1109 ConfgFile.write(
'global ChaMeasString5; ChaMeasString5 = "' + ChaMeasString5 +
'"\n')
1110 ConfgFile.write(
'global ChaMeasString6; ChaMeasString6 = "' + ChaMeasString6 +
'"\n')
1111 ConfgFile.write(
'global ChbMeasString1; ChbMeasString1 = "' + ChbMeasString1 +
'"\n')
1112 ConfgFile.write(
'global ChbMeasString2; ChbMeasString2 = "' + ChbMeasString2 +
'"\n')
1113 ConfgFile.write(
'global ChbMeasString3; ChbMeasString3 = "' + ChbMeasString3 +
'"\n')
1114 ConfgFile.write(
'global ChbMeasString4; ChbMeasString4 = "' + ChbMeasString4 +
'"\n')
1115 ConfgFile.write(
'global ChbMeasString5; ChbMeasString5 = "' + ChbMeasString5 +
'"\n')
1116 ConfgFile.write(
'global ChbMeasString6; ChbMeasString6 = "' + ChbMeasString6 +
'"\n')
1117 ConfgFile.write(
'MakeMeasureScreen()\n')
1118 ConfgFile.write(
"measurewindow.geometry('+" + str(measurewindow.winfo_x()) +
'+' + str(measurewindow.winfo_y()) +
"')\n")
1120 ConfgFile.write(
'DestroyMeasuewScreen()\n')
1121 if ETSStatus.get() == 1:
1122 ConfgFile.write(
'MakeETSWindow()\n')
1123 ConfgFile.write(
"etswindow.geometry('+" + str(etswindow.winfo_x()) +
'+' + str(etswindow.winfo_y()) +
"')\n")
1124 ConfgFile.write(
'ETSDisp.set(' + str(ETSDisp.get()) +
')\n')
1125 ConfgFile.write(
'ETSDir.set(' + str(ETSDir.get()) +
')\n')
1126 ConfgFile.write(
'FMulXEntry.delete(0,END)\n')
1127 ConfgFile.write(
'FMulXEntry.insert(6, ' + FMulXEntry.get() +
')\n')
1128 ConfgFile.write(
'DivXEntry.delete(0,END)\n')
1129 ConfgFile.write(
'DivXEntry.insert(4, ' + DivXEntry.get() +
')\n')
1130 ConfgFile.write(
'ETSts.delete(0,END)\n')
1131 ConfgFile.write(
'ETSts.insert(4, ' + ETSts.get() +
')\n')
1133 ConfgFile.write(
'DestroyETSScreen()\n')
1135 ConfgFile.write(
'TRIGGERentry.delete(0,END)\n')
1136 ConfgFile.write(
'TRIGGERentry.insert(4, ' + TRIGGERentry.get() +
')\n')
1137 ConfgFile.write(
'HoldOffentry.delete(0,"end")\n')
1138 ConfgFile.write(
'HoldOffentry.insert(0, ' + HoldOffentry.get() +
')\n')
1139 ConfgFile.write(
'HozPossentry.delete(0,"end")\n')
1140 ConfgFile.write(
'HozPossentry.insert(0, ' + HozPossentry.get() +
')\n')
1141 ConfgFile.write(
'TMsb.delete(0,END)\n')
1142 ConfgFile.write(
'TMsb.insert(0, ' + TMsb.get() +
')\n')
1143 ConfgFile.write(
'TgInput.set(' + str(TgInput.get()) +
')\n')
1144 ConfgFile.write(
'AutoLevel.set(' + str(AutoLevel.get()) +
')\n')
1145 ConfgFile.write(
'ManualTrigger.set(' + str(ManualTrigger.get()) +
')\n')
1146 ConfgFile.write(
'SingleShot.set(' + str(SingleShot.get()) +
')\n')
1147 ConfgFile.write(
'TgEdge.set(' + str(TgEdge.get()) +
')\n')
1148 ConfgFile.write(
'Xsignal.set(' + str(Xsignal.get()) +
')\n')
1149 ConfgFile.write(
'Ysignal.set(' + str(Ysignal.get()) +
')\n')
1151 ConfgFile.write(
'TimeDisp.set(' + str(TimeDisp.get()) +
')\n')
1152 ConfgFile.write(
'XYDisp.set(' + str(XYDisp.get()) +
')\n')
1153 ConfgFile.write(
'FreqDisp.set(' + str(FreqDisp.get()) +
')\n')
1154 ConfgFile.write(
'IADisp.set(' + str(IADisp.get()) +
')\n')
1155 ConfgFile.write(
'ShowC1_V.set(' + str(ShowC1_V.get()) +
')\n')
1156 ConfgFile.write(
'ShowC1_I.set(' + str(ShowC1_I.get()) +
')\n')
1157 ConfgFile.write(
'ShowC2_V.set(' + str(ShowC2_V.get()) +
')\n')
1158 ConfgFile.write(
'ShowC2_I.set(' + str(ShowC2_I.get()) +
')\n')
1159 ConfgFile.write(
'Show_MathX.set(' + str(Show_MathX.get()) +
')\n')
1160 ConfgFile.write(
'Show_MathY.set(' + str(Show_MathY.get()) +
')\n')
1161 ConfgFile.write(
'AutoCenterA.set(' + str(AutoCenterA.get()) +
')\n')
1162 ConfgFile.write(
'AutoCenterB.set(' + str(AutoCenterB.get()) +
')\n')
1163 ConfgFile.write(
'TRACEmodeTime.set(' + str(TRACEmodeTime.get()) +
')\n')
1165 ConfgFile.write(
'CHAVPosEntry.delete(0,END)\n')
1166 ConfgFile.write(
'CHAVPosEntry.insert(4, ' + CHAVPosEntry.get() +
')\n')
1167 ConfgFile.write(
'CHAIPosEntry.delete(0,END)\n')
1168 ConfgFile.write(
'CHAIPosEntry.insert(4, ' + CHAIPosEntry.get() +
')\n')
1169 ConfgFile.write(
'CHAsb.delete(0,END)\n')
1170 ConfgFile.write(
'CHAsb.insert(0, ' + CHAsb.get() +
')\n')
1171 ConfgFile.write(
'CHAIsb.delete(0,END)\n')
1172 ConfgFile.write(
'CHAIsb.insert(0, ' + CHAIsb.get() +
')\n')
1174 ConfgFile.write(
'CHBVPosEntry.delete(0,END)\n')
1175 ConfgFile.write(
'CHBVPosEntry.insert(4, ' + CHBVPosEntry.get() +
')\n')
1176 ConfgFile.write(
'CHBIPosEntry.delete(0,END)\n')
1177 ConfgFile.write(
'CHBIPosEntry.insert(4, ' + CHBIPosEntry.get() +
')\n')
1178 ConfgFile.write(
'CHBsb.delete(0,END)\n')
1179 ConfgFile.write(
'CHBsb.insert(0, ' + CHBsb.get() +
')\n')
1180 ConfgFile.write(
'CHBIsb.delete(0,END)\n')
1181 ConfgFile.write(
'CHBIsb.insert(0, ' + CHBIsb.get() +
')\n')
1183 ConfgFile.write(
'AWG_Amp_Mode.set('+ str(AWG_Amp_Mode.get()) +
')\n')
1184 ConfgFile.write(
'AWGAMode.set('+ str(AWGAMode.get()) +
')\n')
1185 ConfgFile.write(
'AWGAIOMode.set('+ str(AWGAIOMode.get()) +
')\n')
1186 ConfgFile.write(
'AWGATerm.set('+ str(AWGATerm.get()) +
')\n')
1187 ConfgFile.write(
'AWGAPhaseDelay.set('+ str(AWGAPhaseDelay.get()) +
')\n')
1188 ConfgFile.write(
'AWGAAmplEntry.delete(0,END)\n')
1189 ConfgFile.write(
'AWGAAmplEntry.insert(4, ' + AWGAAmplEntry.get() +
')\n')
1190 ConfgFile.write(
'AWGAOffsetEntry.delete(0,END)\n')
1191 ConfgFile.write(
'AWGAOffsetEntry.insert(4, ' + AWGAOffsetEntry.get() +
')\n')
1192 ConfgFile.write(
'AWGAFreqEntry.delete(0,END)\n')
1193 ConfgFile.write(
'AWGAFreqEntry.insert(4, ' + AWGAFreqEntry.get() +
')\n')
1194 ConfgFile.write(
'AWGAPhaseEntry.delete(0,END)\n')
1195 ConfgFile.write(
'AWGAPhaseEntry.insert(4, ' + AWGAPhaseEntry.get() +
')\n')
1196 ConfgFile.write(
'AWGADutyCycleEntry.delete(0,END)\n')
1197 ConfgFile.write(
'AWGADutyCycleEntry.insert(4, ' + AWGADutyCycleEntry.get() +
')\n')
1198 ConfgFile.write(
'AWGAShape.set(' + str(AWGAShape.get()) +
')\n')
1199 ConfgFile.write(
'AWGARepeatFlag.set(' + str(AWGARepeatFlag.get()) +
')\n')
1200 ConfgFile.write(
'AWGABurstFlag.set(' + str(AWGABurstFlag.get()) +
')\n')
1201 ConfgFile.write(
'global AWGACycles; AWGACycles = ' + str(AWGACycles) +
'\n')
1202 ConfgFile.write(
'global AWGABurstDelay; AWGABurstDelay = ' + str(AWGABurstDelay) +
'\n')
1204 ConfgFile.write(
'AWGBMode.set('+ str(AWGBMode.get()) +
')\n')
1205 ConfgFile.write(
'AWGBIOMode.set('+ str(AWGBIOMode.get()) +
')\n')
1206 ConfgFile.write(
'AWGBTerm.set('+ str(AWGBTerm.get()) +
')\n')
1207 ConfgFile.write(
'AWGBPhaseDelay.set('+ str(AWGBPhaseDelay.get()) +
')\n')
1208 ConfgFile.write(
'AWGBAmplEntry.delete(0,END)\n')
1209 ConfgFile.write(
'AWGBAmplEntry.insert(4, ' + AWGBAmplEntry.get() +
')\n')
1210 ConfgFile.write(
'AWGBOffsetEntry.delete(0,END)\n')
1211 ConfgFile.write(
'AWGBOffsetEntry.insert(4, ' + AWGBOffsetEntry.get() +
')\n')
1212 ConfgFile.write(
'AWGBFreqEntry.delete(0,END)\n')
1213 ConfgFile.write(
'AWGBFreqEntry.insert(4, ' + AWGBFreqEntry.get() +
')\n')
1214 ConfgFile.write(
'AWGBPhaseEntry.delete(0,END)\n')
1215 ConfgFile.write(
'AWGBPhaseEntry.insert(4, ' + AWGBPhaseEntry.get() +
')\n')
1216 ConfgFile.write(
'AWGBDutyCycleEntry.delete(0,END)\n')
1217 ConfgFile.write(
'AWGBDutyCycleEntry.insert(4, ' + AWGBDutyCycleEntry.get() +
')\n')
1218 ConfgFile.write(
'AWGBShape.set(' + str(AWGBShape.get()) +
')\n')
1219 ConfgFile.write(
'AWGBRepeatFlag.set(' + str(AWGBRepeatFlag.get()) +
')\n')
1220 ConfgFile.write(
'AWGBBurstFlag.set(' + str(AWGBBurstFlag.get()) +
')\n')
1221 ConfgFile.write(
'global AWGBCycles; AWGBCycles = ' + str(AWGBCycles) +
'\n')
1222 ConfgFile.write(
'global AWGBBurstDelay; AWGBBurstDelay = ' + str(AWGBBurstDelay) +
'\n')
1224 ConfgFile.write(
'AWGSync.set(' + str(AWGSync.get()) +
')\n')
1226 ConfgFile.write(
'CHAVGainEntry.delete(0,END)\n')
1227 ConfgFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1228 ConfgFile.write(
'CHBVGainEntry.delete(0,END)\n')
1229 ConfgFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1230 ConfgFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1231 ConfgFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1232 ConfgFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1233 ConfgFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1235 ConfgFile.write(
'MeasDCV1.set(' + str(MeasDCV1.get()) +
')\n')
1236 ConfgFile.write(
'MeasMinV1.set(' + str(MeasMinV1.get()) +
')\n')
1237 ConfgFile.write(
'MeasMaxV1.set(' + str(MeasMaxV1.get()) +
')\n')
1238 ConfgFile.write(
'MeasBaseV1.set(' + str(MeasBaseV1.get()) +
')\n')
1239 ConfgFile.write(
'MeasTopV1.set(' + str(MeasTopV1.get()) +
')\n')
1240 ConfgFile.write(
'MeasMidV1.set(' + str(MeasMidV1.get()) +
')\n')
1241 ConfgFile.write(
'MeasPPV1.set(' + str(MeasPPV1.get()) +
')\n')
1242 ConfgFile.write(
'MeasRMSV1.set(' + str(MeasRMSV1.get()) +
')\n')
1243 ConfgFile.write(
'MeasDCI1.set(' + str(MeasDCI1.get()) +
')\n')
1244 ConfgFile.write(
'MeasMinI1.set(' + str(MeasMinI1.get()) +
')\n')
1245 ConfgFile.write(
'MeasMaxI1.set(' + str(MeasMaxI1.get()) +
')\n')
1246 ConfgFile.write(
'MeasMidI1.set(' + str(MeasMidI1.get()) +
')\n')
1247 ConfgFile.write(
'MeasPPI1.set(' + str(MeasPPI1.get()) +
')\n')
1248 ConfgFile.write(
'MeasRMSI1.set(' + str(MeasRMSI1.get()) +
')\n')
1249 ConfgFile.write(
'MeasDiffAB.set(' + str(MeasDiffAB.get()) +
')\n')
1250 ConfgFile.write(
'MeasDCV2.set(' + str(MeasDCV2.get()) +
')\n')
1251 ConfgFile.write(
'MeasMinV2.set(' + str(MeasMinV2.get()) +
')\n')
1252 ConfgFile.write(
'MeasMaxV2.set(' + str(MeasMaxV2.get()) +
')\n')
1253 ConfgFile.write(
'MeasBaseV2.set(' + str(MeasBaseV2.get()) +
')\n')
1254 ConfgFile.write(
'MeasTopV2.set(' + str(MeasTopV2.get()) +
')\n')
1255 ConfgFile.write(
'MeasMidV2.set(' + str(MeasMidV2.get()) +
')\n')
1256 ConfgFile.write(
'MeasPPV2.set(' + str(MeasPPV2.get()) +
')\n')
1257 ConfgFile.write(
'MeasRMSV2.set(' + str(MeasRMSV2.get()) +
')\n')
1258 ConfgFile.write(
'MeasDCI2.set(' + str(MeasDCI2.get()) +
')\n')
1259 ConfgFile.write(
'MeasMinI2.set(' + str(MeasMinI2.get()) +
')\n')
1260 ConfgFile.write(
'MeasMaxI2.set(' + str(MeasMaxI2.get()) +
')\n')
1261 ConfgFile.write(
'MeasMidI2.set(' + str(MeasMidI2.get()) +
')\n')
1262 ConfgFile.write(
'MeasPPI2.set(' + str(MeasPPI2.get()) +
')\n')
1263 ConfgFile.write(
'MeasRMSI2.set(' + str(MeasRMSI2.get()) +
')\n')
1264 ConfgFile.write(
'MeasDiffBA.set(' + str(MeasDiffBA.get()) +
')\n')
1266 ConfgFile.write(
'MeasAHW.set(' + str(MeasAHW.get()) +
')\n')
1267 ConfgFile.write(
'MeasALW.set(' + str(MeasALW.get()) +
')\n')
1268 ConfgFile.write(
'MeasADCy.set(' + str(MeasADCy.get()) +
')\n')
1269 ConfgFile.write(
'MeasAPER.set(' + str(MeasAPER.get()) +
')\n')
1270 ConfgFile.write(
'MeasAFREQ.set(' + str(MeasAFREQ.get()) +
')\n')
1271 ConfgFile.write(
'MeasBHW.set(' + str(MeasBHW.get()) +
')\n')
1272 ConfgFile.write(
'MeasBLW.set(' + str(MeasBLW.get()) +
')\n')
1273 ConfgFile.write(
'MeasBDCy.set(' + str(MeasBDCy.get()) +
')\n')
1274 ConfgFile.write(
'MeasBPER.set(' + str(MeasBPER.get()) +
')\n')
1275 ConfgFile.write(
'MeasBFREQ.set(' + str(MeasBFREQ.get()) +
')\n')
1276 ConfgFile.write(
'MeasPhase.set(' + str(MeasPhase.get()) +
')\n')
1277 ConfgFile.write(
'MeasDelay.set(' + str(MeasDelay.get()) +
')\n')
1279 ConfgFile.write(
'MathTrace.set(' + str(MathTrace.get()) +
')\n')
1281 ConfgFile.write(
'CHAIGainEntry.delete(0,END)\n')
1282 ConfgFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1283 ConfgFile.write(
'CHBIGainEntry.delete(0,END)\n')
1284 ConfgFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1285 ConfgFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1286 ConfgFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1287 ConfgFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1288 ConfgFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1290 ConfgFile.write(
'global UserAString; UserAString = "' + UserAString +
'"\n')
1291 ConfgFile.write(
'global UserALabel; UserALabel = "' + UserALabel +
'"\n')
1292 ConfgFile.write(
'global UserBString; UserBString = "' + UserBString +
'"\n')
1293 ConfgFile.write(
'global UserBLabel; UserBLabel = "' + UserBLabel +
'"\n')
1294 ConfgFile.write(
'global AWGAMathString; AWGAMathString = "' + AWGAMathString +
'"\n')
1295 ConfgFile.write(
'global AWGBMathString; AWGBMathString = "' + AWGBMathString +
'"\n')
1296 ConfgFile.write(
'global FFTUserWindowString; FFTUserWindowString= "' + FFTUserWindowString +
'"\n')
1297 ConfgFile.write(
'global DigFilterAString; DigFilterAString = "' + DigFilterAString +
'"\n')
1298 ConfgFile.write(
'global DigFilterBString; DigFilterBString = "' + DigFilterBString +
'"\n')
1301 CHA_TC1.set(float(cha_TC1Entry.get()))
1302 CHA_TC2.set(float(cha_TC2Entry.get()))
1303 CHB_TC1.set(float(chb_TC1Entry.get()))
1304 CHB_TC2.set(float(chb_TC2Entry.get()))
1305 CHA_A1.set(float(cha_A1Entry.get()))
1306 CHA_A2.set(float(cha_A2Entry.get()))
1307 CHB_A1.set(float(chb_A1Entry.get()))
1308 CHB_A2.set(float(chb_A2Entry.get()))
1311 ConfgFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1312 ConfgFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1313 ConfgFile.write(
'CHAI_RC_HP.set(' + str(CHAI_RC_HP.get()) +
')\n')
1314 ConfgFile.write(
'CHBI_RC_HP.set(' + str(CHBI_RC_HP.get()) +
')\n')
1315 ConfgFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1316 ConfgFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1317 ConfgFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1318 ConfgFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1319 ConfgFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1320 ConfgFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1321 ConfgFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1322 ConfgFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1323 ConfgFile.write(
'cha_TC1Entry.delete(0,END)\n')
1324 ConfgFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1325 ConfgFile.write(
'cha_TC2Entry.delete(0,END)\n')
1326 ConfgFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1327 ConfgFile.write(
'chb_TC1Entry.delete(0,END)\n')
1328 ConfgFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1329 ConfgFile.write(
'chb_TC2Entry.delete(0,END)\n')
1330 ConfgFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1331 ConfgFile.write(
'cha_A1Entry.delete(0,END)\n')
1332 ConfgFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1333 ConfgFile.write(
'cha_A2Entry.delete(0,END)\n')
1334 ConfgFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1335 ConfgFile.write(
'chb_A1Entry.delete(0,END)\n')
1336 ConfgFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1337 ConfgFile.write(
'chb_A2Entry.delete(0,END)\n')
1338 ConfgFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1341 if SpectrumScreenStatus.get() > 0
or IAScreenStatus.get() > 0
or BodeScreenStatus.get() > 0:
1342 ConfgFile.write(
'SMPfftpwrTwo.set(' + str(SMPfftpwrTwo.get()) +
')\n')
1343 ConfgFile.write(
'FFTwindow.set(' + str(FFTwindow.get()) +
')\n')
1344 ConfgFile.write(
'ZEROstuffing.set(' + str(ZEROstuffing.get()) +
')\n')
1345 ConfgFile.write(
'Vdiv.set(' + str(Vdiv.get()) +
')\n')
1347 ConfgFile.write(
'DBdivindex.set(' + str(DBdivindex.get()) +
')\n')
1348 ConfgFile.write(
'DBlevel.set(' + str(DBlevel.get()) +
')\n')
1350 ConfgFile.write(
'CutDC.set(' + str(CutDC.get()) +
')\n')
1357 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1363 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1369 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1374 filename = asksaveasfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1378 global TgInput, TgEdge, SingleShot, AutoLevel, SingleShotSA, ManualTrigger
1379 global root, freqwindow, awgwindow, iawindow, xywindow, win1, win2
1380 global TRIGGERentry, TMsb, Xsignal, Ysignal, AutoCenterA, AutoCenterB
1381 global CHAsb, CHAIsb, CHBsb, CHBIsb, HScale, FreqTraceMode
1382 global CHAsbxy, CHAIsbxy, CHBsbxy, CHBIsbxy, HoldOffentry
1383 global CHAVPosEntryxy, CHBVPosEntryxy, CHAIPosEntryxy, CHBIPosEntryxy
1384 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, MathTrace, MathXUnits, MathYUnits
1385 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry, HozPossentry
1386 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGADutyCycleEntry
1387 global AWGAPhaseEntry, AWGAShape, AWGATerm, AWGAMode, AWGARepeatFlag, AWGBRepeatFlag
1388 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBDutyCycleEntry
1389 global AWGBPhaseEntry, AWGBShape, AWGBTerm, AWGBMode, AWGSync, AWGAIOMode, AWGBIOMode
1390 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1391 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1, MeasDCI1, MeasMinI1
1392 global MeasMaxI1, MeasMidI1, MeasPPI1, MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2
1393 global MeasPPV2, MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2, MeasDiffAB, MeasDiffBA
1394 global MeasRMSV1, MeasRMSV2, MeasRMSI1, MeasRMSI2, MeasPhase, MeasDelay
1395 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ, IASource, DisplaySeries
1396 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
1397 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1398 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, CutDC, AWG_Amp_Mode
1399 global FFTwindow, DBdivindex, DBlevel, TRACEmodeTime, TRACEaverage, Vdiv
1400 global SMPfftpwrTwo, SMPfft, StartFreqEntry, StopFreqEntry, ZEROstuffing
1401 global TimeDisp, XYDisp, FreqDisp, IADisp, AWGAPhaseDelay, AWGBPhaseDelay
1402 global RsystemEntry, ResScale, GainCorEntry, PhaseCorEntry
1403 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2
1404 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxScreenStatus, MuxEnb
1405 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry, muxwindow
1406 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
1407 global MathString, MathXString, MathYString, UserAString, UserALabel, UserBString, UserBLabel
1408 global MathAxis, MathXAxis, MathYAxis, Show_MathX, Show_MathY, MathScreenStatus, MathWindow
1409 global AWGAMathString, AWGBMathString, FFTUserWindowString, DigFilterAString, DigFilterBString
1410 global GRWF, GRHF, GRWBP, GRHBP, GRWXY, GRHXY, GRWIA, GRHIA, MeasureStatus
1411 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
1412 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
1413 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
1414 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
1415 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
1416 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, RelPhaseCenter, ImpedanceCenter
1417 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1418 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1419 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
1420 global AWGABurstFlag, AWGACycles, AWGABurstDelay
1421 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
1422 global SCLKPort, SDATAPort, SLATCHPort, EnableHSsampling, FminEntry, HtMulEntry
1423 global phawindow, PhAca, PhAScreenStatus, PhADisp
1424 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA
1425 global VScale, IScale, RefphEntry
1426 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
1427 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
1431 ConfgFile = open(filename)
1432 for line
in ConfgFile:
1434 exec( line.rstrip() )
1436 print(
"Skipping " + line.rstrip())
1438 if DevID !=
"No Device":
1456 print(
"Config File Not Found.")
1459 global AWGAShape, AWGBShape, BisCompA, AWGAShapeLabel, AWGBShapeLabel
1461 if AWGAShape.get()==9:
1463 AWGAShapeLabel.config(text =
"Impulse")
1464 elif AWGAShape.get()==11:
1466 AWGAShapeLabel.config(text =
"Trapazoid")
1467 elif AWGAShape.get()==15:
1469 AWGAShapeLabel.config(text =
"SSQ Pulse")
1470 elif AWGAShape.get()==16:
1472 AWGAShapeLabel.config(text =
"Ramp")
1473 elif AWGAShape.get()==17:
1475 AWGAShapeLabel.config(text =
"PWN Sine")
1476 elif AWGAShape.get()==18:
1478 AWGAShapeLabel.config(text =
"Hi Res Sine")
1479 elif AWGAShape.get()==12:
1481 AWGAShapeLabel.config(text =
"Up Down Ramp")
1482 elif AWGAShape.get()==14:
1484 AWGAShapeLabel.config(text =
"Fourier Series")
1485 elif AWGAShape.get()==19:
1487 AWGAShapeLabel.config(text =
"Sinc Pulse")
1488 elif AWGAShape.get()==20:
1490 AWGAShapeLabel.config(text =
"Pulse")
1491 elif AWGAShape.get()==21:
1493 AWGAShapeLabel.config(text =
"FM Sine")
1494 elif AWGAShape.get()==22:
1496 AWGAShapeLabel.config(text =
"AM Sine")
1497 elif AWGAShape.get()==7:
1499 AWGAShapeLabel.config(text =
"UU Noise")
1500 elif AWGAShape.get()==8:
1502 AWGAShapeLabel.config(text =
"UG Noise")
1503 elif AWGAShape.get()==0:
1504 AWGAShapeLabel.config(text =
"DC")
1505 elif AWGAShape.get()==2:
1506 AWGAShapeLabel.config(text =
"Triangle")
1507 elif AWGAShape.get()==4:
1508 AWGAShapeLabel.config(text =
"Square")
1509 elif AWGAShape.get()==3:
1510 AWGAShapeLabel.config(text =
"Saw Tooth")
1511 elif AWGAShape.get()==5:
1512 AWGAShapeLabel.config(text =
"Starestep")
1513 elif AWGAShape.get()==6:
1514 AWGAShapeLabel.config(text =
"CSV File")
1515 elif AWGAShape.get()==13:
1516 AWGAShapeLabel.config(text =
"Wav File")
1518 AWGAShapeLabel.config(text =
"Other Shape")
1520 if BisCompA.get() == 1:
1522 if AWGBShape.get()==9:
1524 AWGBShapeLabel.config(text =
"Impulse")
1525 elif AWGBShape.get()==11:
1527 AWGBShapeLabel.config(text =
"Trapazoid")
1528 elif AWGBShape.get()==15:
1530 AWGBShapeLabel.config(text =
"SSQ Pulse")
1531 elif AWGBShape.get()==16:
1533 AWGBShapeLabel.config(text =
"Ramp")
1534 elif AWGBShape.get()==17:
1536 AWGBShapeLabel.config(text =
"PWN Sine")
1537 elif AWGBShape.get()==18:
1539 AWGBShapeLabel.config(text =
"Hi Res Sine")
1540 elif AWGBShape.get()==12:
1542 AWGBShapeLabel.config(text =
"Up Doen Ramp")
1543 elif AWGBShape.get()==14:
1545 AWGBShapeLabel.config(text =
"Fourier Series")
1546 elif AWGBShape.get()==19:
1548 AWGBShapeLabel.config(text =
"Sinc Pulse")
1549 elif AWGBShape.get()==20:
1551 AWGBShapeLabel.config(text =
"Pulse")
1552 elif AWGBShape.get()==7:
1554 AWGBShapeLabel.config(text =
"UU Noise")
1555 elif AWGBShape.get()==8:
1557 AWGBShapeLabel.config(text =
"UG Noise")
1558 elif AWGBShape.get()==0:
1559 AWGBShapeLabel.config(text =
"DC")
1560 elif AWGBShape.get()==2:
1561 AWGBShapeLabel.config(text =
"Triangle")
1562 elif AWGBShape.get()==4:
1563 AWGBShapeLabel.config(text =
"Square")
1564 elif AWGBShape.get()==3:
1565 AWGBShapeLabel.config(text =
"Saw Tooth")
1566 elif AWGBShape.get()==5:
1567 AWGBShapeLabel.config(text =
"Starestep")
1568 elif AWGBShape.get()==6:
1569 AWGBShapeLabel.config(text =
"CSV File")
1570 elif AWGBShape.get()==13:
1571 AWGBShapeLabel.config(text =
"Wav File")
1573 AWGBShapeLabel.config(text =
"Other Shape")
1580 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=iawindow)
1586 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=freqwindow)
1592 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=bodewindow)
1598 filename = askopenfilename(defaultextension =
".cfg", filetypes=[(
"Config files",
"*.cfg")], parent=root)
1603 global COLORtext, COLORcanvas, ColorMode, Bodeca, BodeScreenStatus, PhAca, PhAScreenStatus
1604 global ca, Freqca, SpectrumScreenStatus, XYca, XYScreenStatus, IAca, IAScreenStatus
1606 if ColorMode.get() > 0:
1607 COLORtext =
"#000000"
1608 COLORtrace4 =
"#a0a000"
1609 COLORtraceR4 =
"#606000"
1610 COLORcanvas =
"#ffffff"
1612 COLORcanvas =
"#000000"
1613 COLORtrace4 =
"#ffff00"
1614 COLORtraceR4 =
"#808000"
1615 COLORtext =
"#ffffff"
1616 ca.config(background=COLORcanvas)
1618 if SpectrumScreenStatus.get() > 0:
1619 Freqca.config(background=COLORcanvas)
1621 if XYScreenStatus.get() > 0:
1622 XYca.config(background=COLORcanvas)
1624 if PhAScreenStatus.get() > 0:
1625 PhAca.config(background=COLORcanvas)
1627 if IAScreenStatus.get() > 0:
1628 IAca.config(background=COLORcanvas)
1630 if BodeScreenStatus.get() > 0:
1631 Bodeca.config(background=COLORcanvas)
1635 global CANVASwidth, CANVASheight
1636 global COLORtext, MarkerNum, ColorMode
1638 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")])
1639 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n")
1640 if MarkerNum > 0
or ColorMode.get() > 0:
1641 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1643 COLORtext =
"#000000"
1646 ca.postscript(file=filename, height=CANVASheight, width=CANVASwidth, colormode=
'color', rotate=Orient)
1650 COLORtext =
"#ffffff"
1654 global CANVASwidthXY, CANVASheightXY, xywindow
1655 global COLORtext, MarkerNum, ColorMode, XYca
1657 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=xywindow)
1658 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=xywindow)
1659 if MarkerNum > 0
or ColorMode.get() > 0:
1660 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1662 COLORtext =
"#000000"
1665 XYca.postscript(file=filename, height=CANVASheightXY, width=CANVASwidthXY, colormode=
'color', rotate=Orient)
1669 COLORtext =
"#ffffff"
1673 global CANVASwidthIA, CANVASheightIA
1674 global COLORtext, IAca, ColorMode, iawindow
1676 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=iawindow)
1677 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=iawindow)
1678 if ColorMode.get() > 0:
1679 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1681 COLORtext =
"#000000"
1684 IAca.postscript(file=filename, height=CANVASheightIA, width=CANVASwidthIA, colormode=
'color', rotate=Orient)
1686 COLORtext =
"#ffffff"
1690 global CANVASwidthBP, CANVASheightBP
1691 global COLORtext, Bodeca, bodewindow
1693 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent = bodewindow)
1694 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=bodewindow)
1695 if MarkerNum > 0
or ColorMode.get() > 0:
1696 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1698 COLORtext =
"#000000"
1701 Bodeca.postscript(file=filename, height=CANVASheightBP, width=CANVASwidthBP, colormode=
'color', rotate=Orient)
1703 COLORtext =
"#ffffff"
1707 global VBuffA, VBuffB, IBuffA, IBuffB, SAMPLErate
1710 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
1711 DataFile = open(filename,
'w')
1712 DataFile.write(
'Sample-#, CA-V, CA-I, CB-V, CB-I \n' )
1713 for index
in range(len(VBuffA)):
1714 TimePnt = float((index+0.0)/SAMPLErate)
1715 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
', ' + str(IBuffA[index]) +
', '
1716 + str(VBuffB[index]) +
', ' + str(IBuffB[index]) +
'\n')
1720 global SAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
1723 Channel = askstring(
"Choose Channel",
"CA-V, CB-V, CA-I or CB-I\n\nChannel:\n", initialvalue=
"CA-V")
1724 if (Channel ==
None):
1727 filename = asksaveasfilename(defaultextension =
".txt", filetypes=[(
"Text Columns",
"*.txt")])
1728 DataFile = open(filename,
'w')
1729 for index
in range(len(VBuffA)):
1730 TimePnt = float((index+0.0)/SAMPLErate)
1731 if Channel ==
"CA-V":
1732 DataFile.write( str(TimePnt) +
', ' + str(VBuffA[index]) +
'\n')
1733 elif Channel ==
"CA-I":
1734 DataFile.write( str(TimePnt) +
', ' + str(IBuffA[index]) +
'\n')
1735 elif Channel ==
"CB-V":
1736 DataFile.write( str(TimePnt) +
', ' + str(VBuffB[index]) +
'\n')
1737 elif Channel ==
"CB-I":
1738 DataFile.write( str(TimePnt) +
', ' + str(IBuffB[index]) +
'\n')
1742 global VBuffA, VBuffB, IBuffA, IBuffB, SHOWsamples
1745 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")])
1747 CSVFile = open(filename)
1748 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
1750 csv_f = csv.reader(CSVFile, dialect)
1758 VBuffA.append(float(row[1]))
1759 IBuffA.append(float(row[2]))
1760 VBuffB.append(float(row[3]))
1761 IBuffB.append(float(row[4]))
1762 SHOWsamples = SHOWsamples + 1
1764 print(
'skipping non-numeric row')
1765 VBuffA = numpy.array(VBuffA)
1766 IBuffA = numpy.array(IBuffA)
1767 VBuffB = numpy.array(VBuffB)
1768 IBuffB = numpy.array(IBuffB)
1772 showwarning(
"WARNING",
"No such file found or wrong format!")
1777 url =
"https://wiki.analog.com/university/tools/m1k/alice/desk-top-users-guide"
1778 webbrowser.open(url,new=2)
1781 global RevDate, SWRev, FWRevOne, HWRevOne, DevID, Version_url
1784 if sys.version_info[0] == 2:
1785 u = urllib2.urlopen(Version_url)
1786 if sys.version_info[0] == 3:
1787 u = urllib.request.urlopen(Version_url)
1789 time_string = str(meta.getheaders(
"Last-Modified"))
1791 time_string =
"Unavailable"
1792 showinfo(
"About ALICE",
"ALICE DeskTop" + SWRev + RevDate +
"\n" +
1793 "Last Released Version: " + time_string[7:18] +
"\n" +
1794 "ADALM1000 Hardware Rev " + str(HWRevOne) +
"\n" +
1795 "Firmware Rev " + str(FWRevOne) +
"\n" +
1796 "Board Serial Number " + DevID +
"\n" +
1797 "Software is provided as is without any Warranty")
1800 global T1Vline, T2Vline, T1Iline, T2Iline
1801 global TXYline, Tmathline, TMRline, TXYRline
1802 global T1VRline, T2VRline, T1IRline, T2IRline, TMCVline, TMDVline
1803 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowMath, MathTrace
1804 global MuxScreenStatus, TMCRline, TMBRline, TMAVline, TMBVline, TMCVline, TMDVline
1805 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb
1807 if ShowC1_V.get() == 1:
1809 if ShowC2_V.get() == 1:
1811 if ShowC1_I.get() == 1:
1813 if ShowC2_I.get() == 1:
1815 if MathTrace.get() > 0:
1817 if MuxScreenStatus.get() > 0:
1818 if Show_CBA.get() > 0:
1820 if Show_CBB.get() > 0:
1822 if Show_CBC.get() > 0:
1824 if Show_CBD.get() > 0:
1826 if len(TXYline) > 4:
1830 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1831 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1833 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1834 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1835 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1836 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1838 devidstr = DevID[17:31]
1839 filename = devidstr +
"_O.cal"
1840 CalFile = open(filename,
"w")
1842 CalFile.write(
'CHAVGainEntry.delete(0,END)\n')
1843 CalFile.write(
'CHAVGainEntry.insert(4, ' + CHAVGainEntry.get() +
')\n')
1844 CalFile.write(
'CHBVGainEntry.delete(0,END)\n')
1845 CalFile.write(
'CHBVGainEntry.insert(4, ' + CHBVGainEntry.get() +
')\n')
1846 CalFile.write(
'CHAVOffsetEntry.delete(0,END)\n')
1847 CalFile.write(
'CHAVOffsetEntry.insert(4, ' + CHAVOffsetEntry.get() +
')\n')
1848 CalFile.write(
'CHBVOffsetEntry.delete(0,END)\n')
1849 CalFile.write(
'CHBVOffsetEntry.insert(4, ' + CHBVOffsetEntry.get() +
')\n')
1851 CalFile.write(
'CHAIGainEntry.delete(0,END)\n')
1852 CalFile.write(
'CHAIGainEntry.insert(4, ' + CHAIGainEntry.get() +
')\n')
1853 CalFile.write(
'CHBIGainEntry.delete(0,END)\n')
1854 CalFile.write(
'CHBIGainEntry.insert(4, ' + CHBIGainEntry.get() +
')\n')
1855 CalFile.write(
'CHAIOffsetEntry.delete(0,END)\n')
1856 CalFile.write(
'CHAIOffsetEntry.insert(4, ' + CHAIOffsetEntry.get() +
')\n')
1857 CalFile.write(
'CHBIOffsetEntry.delete(0,END)\n')
1858 CalFile.write(
'CHBIOffsetEntry.insert(4, ' + CHBIOffsetEntry.get() +
')\n')
1862 CHA_TC1.set(float(cha_TC1Entry.get()))
1863 CHA_TC2.set(float(cha_TC2Entry.get()))
1864 CHB_TC1.set(float(chb_TC1Entry.get()))
1865 CHB_TC2.set(float(chb_TC2Entry.get()))
1866 CHA_A1.set(float(cha_A1Entry.get()))
1867 CHA_A2.set(float(cha_A2Entry.get()))
1868 CHB_A1.set(float(chb_A1Entry.get()))
1869 CHB_A2.set(float(chb_A2Entry.get()))
1872 CalFile.write(
'CHA_RC_HP.set(' + str(CHA_RC_HP.get()) +
')\n')
1873 CalFile.write(
'CHB_RC_HP.set(' + str(CHB_RC_HP.get()) +
')\n')
1874 CalFile.write(
'CHA_TC1.set(' + str(CHA_TC1.get()) +
')\n')
1875 CalFile.write(
'CHA_TC2.set(' + str(CHA_TC2.get()) +
')\n')
1876 CalFile.write(
'CHB_TC1.set(' + str(CHB_TC1.get()) +
')\n')
1877 CalFile.write(
'CHB_TC2.set(' + str(CHB_TC2.get()) +
')\n')
1878 CalFile.write(
'CHA_A1.set(' + str(CHA_A1.get()) +
')\n')
1879 CalFile.write(
'CHA_A2.set(' + str(CHA_A2.get()) +
')\n')
1880 CalFile.write(
'CHB_A1.set(' + str(CHB_A1.get()) +
')\n')
1881 CalFile.write(
'CHB_A2.set(' + str(CHB_A2.get()) +
')\n')
1882 CalFile.write(
'cha_TC1Entry.delete(0,END)\n')
1883 CalFile.write(
'cha_TC1Entry.insert(4, ' + str(CHA_TC1.get()) +
')\n')
1884 CalFile.write(
'cha_TC2Entry.delete(0,END)\n')
1885 CalFile.write(
'cha_TC2Entry.insert(4, ' + str(CHA_TC2.get()) +
')\n')
1886 CalFile.write(
'chb_TC1Entry.delete(0,END)\n')
1887 CalFile.write(
'chb_TC1Entry.insert(4, ' + str(CHB_TC1.get()) +
')\n')
1888 CalFile.write(
'chb_TC2Entry.delete(0,END)\n')
1889 CalFile.write(
'chb_TC2Entry.insert(4, ' + str(CHB_TC2.get()) +
')\n')
1890 CalFile.write(
'cha_A1Entry.delete(0,END)\n')
1891 CalFile.write(
'cha_A1Entry.insert(4, ' + str(CHA_A1.get()) +
')\n')
1892 CalFile.write(
'cha_A2Entry.delete(0,END)\n')
1893 CalFile.write(
'cha_A2Entry.insert(4, ' + str(CHA_A2.get()) +
')\n')
1894 CalFile.write(
'chb_A1Entry.delete(0,END)\n')
1895 CalFile.write(
'chb_A1Entry.insert(4, ' + str(CHB_A1.get()) +
')\n')
1896 CalFile.write(
'chb_A2Entry.delete(0,END)\n')
1897 CalFile.write(
'chb_A2Entry.insert(4, ' + str(CHB_A2.get()) +
')\n')
1902 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
1903 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
1905 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
1906 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
1907 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
1908 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
1910 devidstr = DevID[17:31]
1911 filename = devidstr +
"_O.cal"
1913 CalFile = open(filename)
1914 for line
in CalFile:
1915 exec( line.rstrip() )
1918 print(
"Cal file for this device not found")
1921 global UserAString, UserALabel, MeasUserA
1923 TempString = UserALabel
1924 UserALabel = askstring(
"Measurement Label",
"Current Label: " + UserALabel +
"\n\nNew Label:\n", initialvalue=UserALabel)
1925 if (UserALabel ==
None):
1927 UserALabel = TempString
1929 TempString = UserAString
1930 UserAString = askstring(
"Measurement Formula",
"Current Formula: " + UserAString +
"\n\nNew Formula:\n", initialvalue=UserAString)
1931 if (UserAString ==
None):
1933 UserAString = TempString
1938 global UserBString, UserBLabel, MeasUserB
1940 TempString = UserBLabel
1941 UserBLabel = askstring(
"Measurement Label",
"Current Label: " + UserBLabel +
"\n\nNew Label:\n", initialvalue=UserBLabel)
1942 if (UserBLabel ==
None):
1944 UserBLabel = TempString
1946 TempString = UserBString
1947 UserBString = askstring(
"Measurement Formula",
"Current Formula: " + UserBString +
"\n\nNew Formula:\n", initialvalue=UserBString)
1948 if (UserBString ==
None):
1950 UserBString = TempString
1956 global LabelPlotText, PlotLabelText
1958 TempString = PlotLabelText
1959 PlotLabelText = askstring(
"Custom Label",
"Current Plot Label: " + PlotLabelText +
"\n\nNew Label:\n", initialvalue=PlotLabelText)
1960 if (PlotLabelText ==
None):
1961 LabelPlotText.set(0)
1962 PlotLabelText = TempString
1964 LabelPlotText.set(1)
1967 global RUNstatus, MathScreenStatus, MathWindow, SWRev, RevDate
1968 global MathString, MathUnits, MathXString, MathXUnits, MathYString, MathYUnits
1969 global MathAxis, MathXAxis, MathYAxis, MathTrace
1970 global formentry, unitsentry, axisentry, xformentry, xunitsentry, xaxisentry, yformentry, yunitsentry, yaxisentry
1971 global formlab, xformlab, yformlab
1973 if MathScreenStatus.get() == 0:
1974 MathScreenStatus.set(1)
1976 MathWindow = Toplevel()
1977 MathWindow.title(
"Math Formula " + SWRev + RevDate)
1978 MathWindow.resizable(FALSE,FALSE)
1979 MathWindow.protocol(
"WM_DELETE_WINDOW", DestroyMathScreen)
1980 frame1 = LabelFrame(MathWindow, text=
"Built-in Exp", style=
"A10R1.TLabelframe")
1981 frame2 = LabelFrame(MathWindow, text=
"Math Trace", style=
"A10R1.TLabelframe")
1982 frame3 = LabelFrame(MathWindow, text=
"X Math Trace", style=
"A10R1.TLabelframe")
1983 frame4 = LabelFrame(MathWindow, text=
"Y Math Trace", style=
"A10R1.TLabelframe")
1986 frame1.grid(row = 0, column=0, rowspan=3, sticky=W)
1987 frame2.grid(row = 0, column=1, sticky=W)
1988 frame3.grid(row = 1, column=1, sticky=W)
1989 frame4.grid(row = 2, column=1, sticky=W)
1993 rb1 = Radiobutton(frame1, text=
'none', variable=MathTrace, value=0, command=UpdateTimeTrace)
1994 rb1.grid(row=0, column=0, sticky=W)
1995 rb2 = Radiobutton(frame1, text=
'CAV+CBV', variable=MathTrace, value=1, command=UpdateTimeTrace)
1996 rb2.grid(row=1, column=0, sticky=W)
1997 rb3 = Radiobutton(frame1, text=
'CAV-CBV', variable=MathTrace, value=2, command=UpdateTimeTrace)
1998 rb3.grid(row=2, column=0, sticky=W)
1999 rb4 = Radiobutton(frame1, text=
'CBV-CAV', variable=MathTrace, value=3, command=UpdateTimeTrace)
2000 rb4.grid(row=3, column=0, sticky=W)
2001 rb5 = Radiobutton(frame1, text=
'CAI-CBI', variable=MathTrace, value=8, command=UpdateTimeTrace)
2002 rb5.grid(row=4, column=0, sticky=W)
2003 rb6 = Radiobutton(frame1, text=
'CBI-CAI', variable=MathTrace, value=9, command=UpdateTimeTrace)
2004 rb6.grid(row=5, column=0, sticky=W)
2005 rb7 = Radiobutton(frame1, text=
'CAV*CAI', variable=MathTrace, value=4, command=UpdateTimeTrace)
2006 rb7.grid(row=6, column=0, sticky=W)
2007 rb8 = Radiobutton(frame1, text=
'CBV*CBI', variable=MathTrace, value=5, command=UpdateTimeTrace)
2008 rb8.grid(row=7, column=0, sticky=W)
2009 rb9 = Radiobutton(frame1, text=
'CAV/CAI', variable=MathTrace, value=6, command=UpdateTimeTrace)
2010 rb9.grid(row=8, column=0, sticky=W)
2011 rb10 = Radiobutton(frame1, text=
'CBV/CBI', variable=MathTrace, value=7, command=UpdateTimeTrace)
2012 rb10.grid(row=9, column=0, sticky=W)
2013 rb11 = Radiobutton(frame1, text=
'CBV/CAV', variable=MathTrace, value=10, command=UpdateTimeTrace)
2014 rb11.grid(row=10, column=0, sticky=W)
2015 rb12 = Radiobutton(frame1, text=
'CBI/CAI', variable=MathTrace, value=11, command=UpdateTimeTrace)
2016 rb12.grid(row=11, column=0, sticky=W)
2017 rb13 = Radiobutton(frame1, text=
'Formula', variable=MathTrace, value=12, command=UpdateTimeTrace)
2018 rb13.grid(row=12, column=0, sticky=W)
2022 sframe2a = Frame( frame2 )
2023 sframe2a.pack(side=TOP)
2024 formlab = Label(sframe2a, text=
" Formula ", style=
"A10B.TLabel")
2025 formlab.pack(side=LEFT)
2026 formentry = Entry(sframe2a, width=23)
2027 formentry.pack(side=LEFT)
2028 formentry.delete(0,
"end")
2029 formentry.insert(0,MathString)
2030 sframe2b = Frame( frame2 )
2031 sframe2b.pack(side=TOP)
2032 unitslab = Label(sframe2b, text=
"Units ", style=
"A10B.TLabel")
2033 unitslab.pack(side=LEFT)
2034 unitsentry = Entry(sframe2b, width=6)
2035 unitsentry.pack(side=LEFT)
2036 unitsentry.delete(0,
"end")
2037 unitsentry.insert(0,MathUnits)
2038 checkbt = Button(sframe2b, text=
"Check", command=CheckMathString )
2039 checkbt.pack(side=LEFT)
2040 sframe2c = Frame( frame2 )
2041 sframe2c.pack(side=TOP)
2042 axislab = Label(sframe2c, text=
"Axis ", style=
"A10B.TLabel")
2043 axislab.pack(side=LEFT)
2044 axisentry = Entry(sframe2c, width=3)
2045 axisentry.pack(side=LEFT)
2046 axisentry.delete(0,
"end")
2047 axisentry.insert(0,MathAxis)
2048 applybt = Button(sframe2c, text=
"Apply", command=ApplyMathString )
2049 applybt.pack(side=LEFT)
2053 sframe3a = Frame( frame3 )
2054 sframe3a.pack(side=TOP)
2055 xformlab = Label(sframe3a, text=
"X Formula ", style=
"A10B.TLabel")
2056 xformlab.pack(side=LEFT)
2057 xformentry = Entry(sframe3a, width=23)
2058 xformentry.pack(side=LEFT)
2059 xformentry.delete(0,
"end")
2060 xformentry.insert(0, MathXString)
2061 sframe3b = Frame( frame3 )
2062 sframe3b.pack(side=TOP)
2063 xunitslab = Label(sframe3b, text=
"X Units ", style=
"A10B.TLabel")
2064 xunitslab.pack(side=LEFT)
2065 xunitsentry = Entry(sframe3b, width=6)
2066 xunitsentry.pack(side=LEFT)
2067 xunitsentry.delete(0,
"end")
2068 xunitsentry.insert(0, MathXUnits)
2069 xcheckbt = Button(sframe3b, text=
"Check", command=CheckMathXString )
2070 xcheckbt.pack(side=LEFT)
2071 sframe3c = Frame( frame3 )
2072 sframe3c.pack(side=TOP)
2073 xaxislab = Label(sframe3c, text=
"X Axis ", style=
"A10B.TLabel")
2074 xaxislab.pack(side=LEFT)
2075 xaxisentry = Entry(sframe3c, width=3)
2076 xaxisentry.pack(side=LEFT)
2077 xaxisentry.delete(0,
"end")
2078 xaxisentry.insert(0, MathXAxis)
2079 xapplybt = Button(sframe3c, text=
"Apply", command=ApplyMathXString )
2080 xapplybt.pack(side=LEFT)
2084 sframe4a = Frame( frame4 )
2085 sframe4a.pack(side=TOP)
2086 yformlab = Label(sframe4a, text=
"Y Formula ", style=
"A10B.TLabel")
2087 yformlab.pack(side=LEFT)
2088 yformentry = Entry(sframe4a, width=23)
2089 yformentry.pack(side=LEFT)
2090 yformentry.delete(0,
"end")
2091 yformentry.insert(0,MathYString)
2092 sframe4b = Frame( frame4 )
2093 sframe4b.pack(side=TOP)
2094 yunitslab = Label(sframe4b, text=
"Y Units ", style=
"A10B.TLabel")
2095 yunitslab.pack(side=LEFT)
2096 yunitsentry = Entry(sframe4b, width=6)
2097 yunitsentry.pack(side=LEFT)
2098 yunitsentry.delete(0,
"end")
2099 yunitsentry.insert(0,MathYUnits)
2100 ycheckbt = Button(sframe4b, text=
"Check", command=CheckMathYString )
2101 ycheckbt.pack(side=LEFT)
2102 sframe4c = Frame( frame4 )
2103 sframe4c.pack(side=TOP)
2104 yaxislab = Label(sframe4c, text=
"Y Axis ", style=
"A10B.TLabel")
2105 yaxislab.pack(side=LEFT)
2106 yaxisentry = Entry(sframe4c, width=3)
2107 yaxisentry.pack(side=LEFT)
2108 yaxisentry.delete(0,
"end")
2109 yaxisentry.insert(0,MathYAxis)
2110 yapplybt = Button(sframe4c, text=
"Apply", command=ApplyMathYString )
2111 yapplybt.pack(side=LEFT)
2113 dismissbutton = Button(MathWindow, text=
"Dismiss", command=DestroyMathScreen)
2114 dismissbutton.grid(row=3, column=0, sticky=W)
2116 if RUNstatus.get() > 0:
2120 global MathScreenStatus, MathWindow
2122 if MathScreenStatus.get() == 1:
2123 MathScreenStatus.set(0)
2124 MathWindow.destroy()
2127 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry, formlab
2128 global VBuffA, VBuffB, IBuffA, IBuffB
2129 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2130 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2131 global FFTBuffA, FFTBuffB, FFTwindowshape
2132 global AWGAwaveform, AWGBwaveform
2133 global Show_MathX, Show_MathY
2134 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2135 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2138 TempString = formentry.get()
2140 MathResult = eval(TempString)
2141 formlab.configure(text=
"Formula ", style=
"A10G.TLabel")
2143 formlab.configure(text=
"Formula ", style=
"A10R.TLabel")
2146 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry, xformlab
2147 global VBuffA, VBuffB, IBuffA, IBuffB
2148 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2149 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2150 global FFTBuffA, FFTBuffB, FFTwindowshape
2151 global AWGAwaveform, AWGBwaveform
2152 global Show_MathX, Show_MathY
2153 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2154 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2157 TempString = xformentry.get()
2159 MathResult = eval(TempString)
2160 xformlab.configure(text=
"X Formula ", style=
"A10G.TLabel")
2162 xformlab.configure(text=
"X Formula ", style=
"A10R.TLabel")
2165 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry, yformlab
2166 global VBuffA, VBuffB, IBuffA, IBuffB
2167 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
2168 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
2169 global FFTBuffA, FFTBuffB, FFTwindowshape
2170 global AWGAwaveform, AWGBwaveform
2171 global Show_MathX, Show_MathY
2172 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2173 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2176 TempString = yformentry.get()
2178 MathResult = eval(TempString)
2179 yformlab.configure(text=
"Y Formula ", style=
"A10G.TLabel")
2181 yformlab.configure(text=
"Y Formula ", style=
"A10R.TLabel")
2184 global MathString, formentry, MathUnits, unitsentry, MathAxis, axisentry
2186 MathString = formentry.get()
2187 MathUnits = unitsentry.get()
2188 MathAxis = axisentry.get()
2191 global MathXString, xformentry, MathXUnits, xunitsentry, MathXAxis, xaxisentry
2193 MathXString = xformentry.get()
2194 MathXUnits = xunitsentry.get()
2195 MathXAxis = xaxisentry.get()
2198 global MathYString, yformentry, MathYUnits, yunitsentry, MathYAxis, yaxisentry
2200 MathYString = yformentry.get()
2201 MathYUnits = yunitsentry.get()
2202 MathYAxis = yaxisentry.get()
2207 TempString = MarkerLoc
2208 MarkerLoc = askstring(
"Marker Text Location",
"Current Marker Text Location: " + MarkerLoc +
"\n\nNew Location: (UL, UR, LL, LR)\n", initialvalue=MarkerLoc)
2209 if (MarkerLoc ==
None):
2210 MarkerLoc = TempString
2220 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
2228 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
2242 global TgInput, TRIGGERlevel, TRIGGERentry
2243 global MaxV1, MinV1, MaxV2, MinV2
2244 global MaxI1, MinI1, MaxI2, MinI2
2246 MidV1 = (MaxV1+MinV1)/2
2247 MidV2 = (MaxV2+MinV2)/2
2248 MidI1 = (MaxI1+MinI1)/2
2249 MidI2 = (MaxI2+MinI2)/2
2250 if (TgInput.get() == 0):
2252 elif (TgInput.get() == 1 ):
2253 DCString =
' {0:.2f} '.format(MidV1)
2254 elif (TgInput.get() == 2 ):
2255 DCString =
' {0:.2f} '.format(MidI1)
2256 elif (TgInput.get() == 3 ):
2257 DCString =
' {0:.2f} '.format(MidV2)
2258 elif (TgInput.get() == 4 ):
2259 DCString =
' {0:.2f} '.format(MidI2)
2261 TRIGGERlevel = eval(DCString)
2262 TRIGGERentry.delete(0,END)
2263 TRIGGERentry.insert(4, DCString)
2280 global TRIGGERlevel, TRIGGERentry
2284 TRIGGERlevel = float(eval(TRIGGERentry.get()))
2286 TRIGGERentry.delete(0,END)
2287 TRIGGERentry.insert(0, TRIGGERlevel)
2293 global HoldOff, HoldOffentry
2296 HoldOff = float(eval(HoldOffentry.get()))
2298 HoldOffentry.delete(0,END)
2299 HoldOffentry.insert(0, HoldOff)
2302 global HozPoss, HozPossentry
2305 HozPoss = float(eval(HozPossentry.get()))
2307 HozPossentry.delete(0,END)
2308 HozPossentry.insert(0, HozPoss)
2311 global HozPossentry, TgInput, TMsb
2315 TIMEdiv = float(eval(TMsb.get()))
2318 TMsb.delete(0,
"end")
2319 TMsb.insert(0,TIMEdiv)
2321 if TIMEdiv < 0.0002:
2323 if TgInput.get() > 0:
2324 HozPoss = -5 * TIMEdiv
2325 HozPossentry.delete(0,END)
2326 HozPossentry.insert(0, HozPoss)
2329 global HoldOffentry, HoldOff, TgInput, TMsb
2333 TIMEdiv = float(eval(TMsb.get()))
2336 TMsb.delete(0,
"end")
2337 TMsb.insert(0,TIMEdiv)
2339 if TIMEdiv < 0.0002:
2341 if TgInput.get() == 0:
2342 HoldOff = HoldOff + TIMEdiv
2343 HoldOffentry.delete(0,END)
2344 HoldOffentry.insert(0, HoldOff)
2347 global CHB_APosEntry, DCVMuxA
2349 CHB_APosEntry.delete(0,
"end")
2350 CHB_APosEntry.insert(0,
' {0:.2f} '.format(DCVMuxA))
2353 global CHB_BPosEntry, DCVMuxB
2355 CHB_BPosEntry.delete(0,
"end")
2356 CHB_BPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxB))
2359 global CHB_CPosEntry, DCVMuxC
2361 CHB_CPosEntry.delete(0,
"end")
2362 CHB_CPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxC))
2365 global CHD_BPosEntry, DCVMuxD
2367 CHB_DPosEntry.delete(0,
"end")
2368 CHB_DPosEntry.insert(0,
' {0:.2f} '.format(DCVMuxD))
2371 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2373 if MarkerScale.get() != 1:
2375 CHB_Alab.config(style=
"Rtrace2.TButton")
2376 CHB_Blab.config(style=
"Strace6.TButton")
2377 CHB_Clab.config(style=
"Strace7.TButton")
2378 CHB_Dlab.config(style=
"Strace4.TButton")
2383 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2385 if MarkerScale.get() != 1:
2387 CHB_Alab.config(style=
"Strace2.TButton")
2388 CHB_Blab.config(style=
"Rtrace6.TButton")
2389 CHB_Clab.config(style=
"Strace7.TButton")
2390 CHB_Dlab.config(style=
"Strace4.TButton")
2395 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2397 if MarkerScale.get() != 1:
2399 CHB_Alab.config(style=
"Strace2.TButton")
2400 CHB_Blab.config(style=
"Strace6.TButton")
2401 CHB_Clab.config(style=
"Rtrace7.TButton")
2402 CHB_Dlab.config(style=
"Strace4.TButton")
2407 global MarkerScale, CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab
2409 if MarkerScale.get() != 1:
2411 CHB_Alab.config(style=
"Strace2.TButton")
2412 CHB_Blab.config(style=
"Strace6.TButton")
2413 CHB_Clab.config(style=
"Strace7.TButton")
2414 CHB_Dlab.config(style=
"Rtrace4.TButton")
2419 global CHAVPosEntry, DCV1
2421 CHAVPosEntry.delete(0,
"end")
2422 CHAVPosEntry.insert(0,
' {0:.2f} '.format(DCV1))
2425 global CHBVPosEntry, DCV2
2427 CHBVPosEntry.delete(0,
"end")
2428 CHBVPosEntry.insert(0,
' {0:.2f} '.format(DCV2))
2431 global CHAIPosEntry, DCI1
2433 CHAIPosEntry.delete(0,
"end")
2434 CHAIPosEntry.insert(0,
' {0:.2f} '.format(DCI1))
2437 global CHBIPosEntry, DCI2
2439 CHBIPosEntry.delete(0,
"end")
2440 CHBIPosEntry.insert(0,
' {0:.2f} '.format(DCI2))
2443 global CHAVPosEntryxy, DCV1
2445 CHAVPosEntryxy.delete(0,
"end")
2446 CHAVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV1))
2449 global CHBVPosEntryxy, DCV2
2451 CHBVPosEntryxy.delete(0,
"end")
2452 CHBVPosEntryxy.insert(0,
' {0:.2f} '.format(DCV2))
2455 global CHAIPosEntryxy, DCI1
2457 CHAIPosEntryxy.delete(0,
"end")
2458 CHAIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI1))
2461 global CHBIPosEntryxy, DCI2
2463 CHBIPosEntryxy.delete(0,
"end")
2464 CHBIPosEntryxy.insert(0,
' {0:.2f} '.format(DCI2))
2467 global RUNstatus, session, CHA, CHB, devx, AWG_2X
2475 CHA.mode = Mode.HI_Z_SPLIT
2476 CHB.mode = Mode.HI_Z_SPLIT
2483 if session.continuous:
2492 global RUNstatus, PowerStatus, devx, PwrBt, DevID, FWRevOne, session, AWGSync
2493 global contloop, discontloop, TIMEdiv, First_Slow_sweep
2495 if DevID ==
"No Device":
2496 showwarning(
"WARNING",
"No Device Plugged In!")
2497 elif FWRevOne == 0.0:
2498 showwarning(
"WARNING",
"Out of data Firmware!")
2500 if PowerStatus == 0:
2502 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2503 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2504 if (RUNstatus.get() == 0):
2506 if AWGSync.get() == 0:
2508 CHA.mode = Mode.HI_Z_SPLIT
2509 CHB.mode = Mode.HI_Z_SPLIT
2511 if not session.continuous:
2514 elif session.continuous:
2517 CHA.mode = Mode.HI_Z_SPLIT
2518 CHB.mode = Mode.HI_Z_SPLIT
2535 if session.continuous:
2540 First_Slow_sweep = 0
2542 First_Slow_sweep = 1
2545 global session, AWGSync
2548 if AWGSync.get() == 0:
2550 if not session.continuous:
2553 elif session.continuous:
2559 if session.continuous:
2563 global AWGAFreqEntry, AWGAFreqvalue, Two_X_Sample, FWRevOne
2566 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
2568 AWGAFreqEntry.delete(0,
"end")
2569 AWGAFreqEntry.insert(0, AWGAFreqvalue)
2571 if AWGAFreqvalue > 20000.0:
2580 global IASource, CHA, CHB, AWGAMode, AWGBMode, AWGBIOMode, AWGSync
2582 if AWGSync.get() == 0:
2584 if IASource.get() == 1:
2585 CHA.mode = Mode.HI_Z
2586 CHB.mode = Mode.HI_Z
2589 CHA.mode = Mode.SVMI
2590 CHB.mode = Mode.HI_Z
2592 if AWGBIOMode.get() == 0:
2596 global RUNstatus, TimeDisp, XYDisp, FreqDisp, IADisp, session, AWGSync
2597 global CHA, CHB, contloop, discontloop
2599 if (RUNstatus.get() == 1):
2602 CHA.mode = Mode.HI_Z_SPLIT
2603 CHB.mode = Mode.HI_Z_SPLIT
2604 if AWGSync.get() == 0:
2609 if session.continuous:
2619 if TimeDisp.get() > 0:
2621 if XYDisp.get() > 0:
2623 if FreqDisp.get() > 0:
2625 if IADisp.get() > 0:
2629 global RUNstatus, PowerStatus, devx, PwrBt
2631 if (RUNstatus.get() == 1):
2633 if PowerStatus == 1:
2635 PwrBt.config(style=
"PwrOff.TButton",text=
"PWR-Off")
2636 devx.ctrl_transfer( 0x40, 0x50, 49, 0, 0, 0, 100)
2639 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
2640 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
2643 global TIMEdiv, TMsb, RUNstatus, Two_X_Sample, ETSDisp, FWRevOne
2646 TIMEdiv = float(eval(TMsb.get()))
2647 if TIMEdiv < 0.0002:
2649 TMsb.delete(0,
"end")
2650 TMsb.insert(0,TIMEdiv)
2653 TMsb.delete(0,
"end")
2654 TMsb.insert(0,TIMEdiv)
2656 if ETSDisp.get() == 0:
2657 Samples_per_div = TIMEdiv * 100.0
2659 if Samples_per_div < 20.0:
2665 if RUNstatus.get() == 2:
2674 CH1vpdvLevel = float(eval(CHAsb.get()))
2677 CHAsb.insert(0, CH1vpdvLevel)
2684 CH1ipdvLevel = float(eval(CHAIsb.get()))
2686 CHAIsb.delete(0,END)
2687 CHAIsb.insert(0, CH1ipdvLevel)
2694 CH2vpdvLevel = float(eval(CHBsb.get()))
2697 CHBsb.insert(0, CH2vpdvLevel)
2704 CH2ipdvLevel = float(eval(CHBIsb.get()))
2706 CHBIsb.delete(0,END)
2707 CHBIsb.insert(0, CH2ipdvLevel)
2711 global CHAOffset, CHAVPosEntry
2714 CHAOffset = float(eval(CHAVPosEntry.get()))
2716 CHAVPosEntry.delete(0,END)
2717 CHAVPosEntry.insert(0, CHAOffset)
2722 global CHAIOffset, CHAIPosEntry
2725 CHAIOffset = float(eval(CHAIPosEntry.get()))
2727 CHAIPosEntry.delete(0,END)
2728 CHAIPosEntry.insert(0, CHAIOffset)
2733 global CHBOffset, CHBVPosEntry
2736 CHBOffset = float(eval(CHBVPosEntry.get()))
2738 CHBVPosEntry.delete(0,END)
2739 CHBVPosEntry.insert(0, CHBOffset)
2744 global CHBIOffset, CHBIPosEntry
2747 CHBIOffset = float(eval(CHBIPosEntry.get()))
2749 CHBIPosEntry.delete(0,END)
2750 CHBIPosEntry.insert(0, CHBIOffset)
2755 global TimeDisp, ckb1
2756 if TimeDisp.get() == 1:
2757 ckb1.config(style=
"Enab.TCheckbutton")
2759 ckb1.config(style=
"Disab.TCheckbutton")
2763 if XYDisp.get() == 1:
2764 ckb2.config(style=
"Enab.TCheckbutton")
2766 ckb2.config(style=
"Disab.TCheckbutton")
2769 global FreqDisp, ckb3
2770 if FreqDisp.get() == 1:
2771 ckb3.config(style=
"Enab.TCheckbutton")
2773 ckb3.config(style=
"Disab.TCheckbutton")
2776 global BodeDisp, ckb5, AWGSync
2777 if BodeDisp.get() == 1:
2779 ckb5.config(style=
"Enab.TCheckbutton")
2781 ckb5.config(style=
"Disab.TCheckbutton")
2785 if IADisp.get() == 1:
2786 ckb4.config(style=
"Enab.TCheckbutton")
2788 ckb4.config(style=
"Disab.TCheckbutton")
2791 global PhADisp, Phckb
2792 if PhADisp.get() == 1:
2793 phckb.config(style=
"Enab.TCheckbutton")
2795 phckb.config(style=
"Disab.TCheckbutton")
2798 global OhmDisp, ckb6
2799 if OhmDisp.get() == 1:
2800 ckb6.config(style=
"Enab.TCheckbutton")
2802 ckb6.config(style=
"Disab.TCheckbutton")
2805 global ETSDisp, enb1
2806 if ETSDisp.get() == 1:
2807 enb1.config(style=
"Enab.TCheckbutton")
2810 enb1.config(style=
"Disab.TCheckbutton")
2816 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp, SpectrumScreenStatus, HWRevOne
2817 global IADisp, IAScreenStatus, CutDC, DevOne, AWGBMode, MuxEnb, BodeScreenStatus, BodeDisp
2818 global MuxScreenStatus, VBuffA, VBuffB, MuxSync, AWGBIOMode
2819 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD, MuxChan
2820 global ShowC1_V, ShowC2_V, ShowC2_I, SMPfft
2821 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
2822 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
2823 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
2824 global SV1, SI1, SV2, SI2, SVA_B
2825 global FregPoint, FBins, FStep
2827 global TRACEresetTime, TRACEmodeTime, SettingsStatus
2828 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
2829 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
2830 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
2831 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
2832 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
2833 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
2837 if (RUNstatus.get() == 1)
or (RUNstatus.get() == 2):
2838 if SettingsStatus.get() == 1:
2840 if TimeDisp.get() > 0
or XYDisp.get() > 0:
2841 if MuxScreenStatus.get() == 0:
2845 if DualMuxMode.get() == 1:
2850 if HWRevOne ==
"D" :
2853 if AWGBIOMode.get() == 0:
2855 if MuxEnb.get() == 1:
2859 if MuxSync.get() == 0:
2865 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
2866 TRACEresetTime =
True
2867 elif TRACEmodeTime.get() == 1:
2868 if TRACEresetTime ==
True:
2869 TRACEresetTime =
False
2871 VmemoryMuxA = VBuffMA
2872 VmemoryMuxB = VBuffMB
2873 VmemoryMuxC = VBuffMC
2874 ImemoryMuxD = VBuffMD
2875 if Show_CBA.get() == 1:
2877 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2878 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2879 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2880 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2882 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2884 if Show_CBB.get() == 1:
2886 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2887 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2888 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2889 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2891 devx.ctrl_transfer(0x40, PIO3x, 3, 0, 0, 0, 100)
2893 if Show_CBC.get() == 1:
2895 if DualMuxMode.get() == 1:
2896 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2897 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2899 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2900 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
2901 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2902 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2904 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2906 if Show_CBD.get() == 1:
2908 if DualMuxMode.get() == 1:
2909 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
2910 devx.ctrl_transfer(0x40, 0x50, PIO_1, 0, 0, 0, 100)
2912 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
2913 devx.ctrl_transfer(0x40, 0x51, PIO_1, 0, 0, 0, 100)
2914 devx.ctrl_transfer(0x40, PIO2, PIO_2, 0, 0, 0, 100)
2915 devx.ctrl_transfer(0x40, PIO3, PIO_3, 0, 0, 0, 100)
2917 devx.ctrl_transfer(0x40, PIO3x, PIO_3, 0, 0, 0, 100)
2919 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:
2921 if (FreqDisp.get() > 0
and SpectrumScreenStatus.get() == 1)
or (IADisp.get() > 0
and IAScreenStatus.get() == 1)
or (BodeDisp.get() > 0
and BodeScreenStatus.get() == 1):
2922 if IADisp.get() > 0
or BodeDisp.get() > 0:
2925 if BodeDisp.get() > 0:
2926 if LoopNum.get() <= len(FStep):
2927 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
2928 if FregPoint < 100.0:
2930 elif FregPoint < 500.0:
2932 elif FregPoint < 2000.0:
2936 if Two_X_Sample.get() > 0
and FregPoint < 2000.0:
2940 elif OhmRunStatus.get() == 1
and OhmDisp.get() == 1:
2942 root.update_idletasks()
2946 global RMode, CHATestVEntry, CHATestREntry, CHA, CHB, devx, OhmA0, OhmA1, discontloop
2947 global AWGAMode, AWGBMode, AWGAShape, AWGSync, AWGBTerm, AWGAOffsetEntry
2948 global AWGAIOMode, AWGBIOMode, Two_X_Sample
2952 InOffA = float(eval(CHAVOffsetEntry.get()))
2954 CHAVOffsetEntry.delete(0,END)
2955 CHAVOffsetEntry.insert(0, InOffA)
2957 InGainA = float(eval(CHAVGainEntry.get()))
2959 CHAVGainEntry.delete(0,END)
2960 CHAVGainEntry.insert(0, InGainA)
2962 InOffB = float(eval(CHBVOffsetEntry.get()))
2964 CHBVOffsetEntry.delete(0,END)
2965 CHBVOffsetEntry.insert(0, InOffB)
2967 InGainB = float(eval(CHBVGainEntry.get()))
2969 CHBVGainEntry.delete(0,END)
2970 CHBVGainEntry.insert(0, InGainB)
2972 CurOffA = float(CHAIOffsetEntry.get())
2976 CurOffB = float(CHBIOffsetEntry.get())
2980 CurGainA = float(CHAIGainEntry.get())
2984 CurGainB = float(CHBIGainEntry.get())
2988 chatestv = float(eval(CHATestVEntry.get()))
2991 CHATestVEntry.delete(0,END)
2992 CHATestVEntry.insert(0, chatestv)
2994 CHATestVEntry.delete(0,END)
2995 CHATestVEntry.insert(0, chatestv)
2997 chatestr = float(eval(CHATestREntry.get()))
2999 CHATestREntry.delete(0,END)
3000 CHATestREntry.insert(0, chatestr)
3002 DCVA0 = DCVB0 = DCIA0 = DCIB0 = 0.0
3012 AWGAOffsetEntry.delete(0,
"end")
3013 AWGAOffsetEntry.insert(0, chatestv)
3017 if RMode.get() == 0:
3022 if AWGSync.get() > 0:
3029 ADsignal1 = devx.get_samples(210)
3032 if session.continuous:
3033 ADsignal1 = devx.read(210, -1,
True)
3036 for index
in range(200):
3037 DCVA0 += ADsignal1[index+10][0][0]
3038 DCVB0 += ADsignal1[index+10][1][0]
3039 DCIA0 += ADsignal1[index+10][0][1]
3040 DCIB0 += ADsignal1[index+10][1][1]
3042 DCVA0 = DCVA0 / 200.0
3043 DCVB0 = DCVB0 / 200.0
3044 DCIA0 = DCIA0 / 200.0
3045 DCIB0 = DCIB0 / 200.0
3046 DCVA0 = (DCVA0 - InOffA) * InGainA
3047 DCVB0 = (DCVB0 - InOffB) * InGainB
3048 DCIA0 = ((DCIA0*1000) - CurOffA) * CurGainA
3049 DCIB0 = ((DCIB0*1000) - CurOffB) * CurGainB
3050 if RMode.get() == 0:
3051 DCM = chatestr * (DCVB0/(DCVA0-DCVB0))
3052 DCR = (DCM * RIN) / (RIN - DCM)
3054 DCR = chatestr * ((DCVA0-DCVB0)/DCVB0)
3056 OhmString =
'{0:.2f} '.format(DCR) +
"Ohms "
3058 OhmString =
'{0:.3f} '.format(DCR/1000) +
"KOhms "
3059 IAString =
"Meas " +
' {0:.2f} '.format(DCIA0) +
" mA " +
' {0:.2f} '.format(DCVB0) +
" V"
3060 OhmA0.config(text = OhmString)
3061 OhmA1.config(text = IAString)
3064 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
3068 global TIMEdiv, TMsb, TRACEmodeTime, TRACEresetTime, TRACEaverage
3069 global VBuffMA, VmemoryMuxA, VBuffMB, VmemoryMuxB, VBuffMC, VmemoryMuxC, VBuffMD, VmemoryMuxD
3070 global CHAVOffsetEntry, CHAVGainEntry, CHBVOffsetEntry, CHBVGainEntry
3071 global CHAIOffsetEntry, CHBIOffsetEntry, CHAIGainEntry, CHBIGainEntry
3072 global InOffA, InGainA, InOffB, InGainB
3073 global CurOffA, CurOffB, CurGainA, CurGainB
3074 global PhADisp, PhAScreenStatus, MuxScreenStatus
3075 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3079 TIMEdiv = eval(TMsb.get())
3082 TMsb.delete(0,
"end")
3083 TMsb.insert(0,TIMEdiv)
3084 if TIMEdiv < 0.0002:
3089 InOffA = float(eval(CHAVOffsetEntry.get()))
3091 CHAVOffsetEntry.delete(0,END)
3092 CHAVOffsetEntry.insert(0, InOffA)
3094 InGainA = float(eval(CHAVGainEntry.get()))
3096 CHAVGainEntry.delete(0,END)
3097 CHAVGainEntry.insert(0, InGainA)
3099 InOffB = float(eval(CHBVOffsetEntry.get()))
3101 CHBVOffsetEntry.delete(0,END)
3102 CHBVOffsetEntry.insert(0, InOffB)
3104 InGainB = float(eval(CHBVGainEntry.get()))
3106 CHBVGainEntry.delete(0,END)
3107 CHBVGainEntry.insert(0, InGainB)
3109 CurOffA = float(CHAIOffsetEntry.get())
3113 CurOffB = float(CHBIOffsetEntry.get())
3117 CurGainA = float(CHAIGainEntry.get())
3121 CurGainB = float(CHBIGainEntry.get())
3129 if MuxScreenStatus.get() > 0:
3130 if Show_CBA.get() == 1:
3132 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3134 VBuffMA = VmemoryMuxA + (VBuffMA - VmemoryMuxA) / TRACEaverage.get()
3137 VmemoryMuxA = VBuffMA
3138 if Show_CBB.get() == 1:
3140 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3142 VBuffMB = VmemoryMuxB + (VBuffMB - VmemoryMuxB) / TRACEaverage.get()
3145 VmemoryMuxB = VBuffMB
3146 if Show_CBC.get() == 1:
3148 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3150 VBuffMC = VmemoryMuxC + (VBuffMC - VmemoryMuxC) / TRACEaverage.get()
3153 VmemoryMuxC = VBuffMC
3154 if Show_CBD.get() == 1:
3156 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3158 VBuffMD = VmemoryMuxD + (VBuffMD - VmemoryMuxD) / TRACEaverage.get()
3161 VmemoryMuxD = VBuffMD
3162 if PhADisp.get() > 0
and PhAScreenStatus.get() == 1:
3167 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB
3168 global VBuffMA, VBuffMB, VBuffMC, VBuffMD
3169 global VAresult, VBresult, IAresult, IBresult, VABresult
3170 global PhaseVA, PhaseVB, PhaseIA, PhaseIB, PhaseVAB
3171 global VMAresult, VMBresult,VMCresult, VMDresult
3172 global PhaseVMA, PhaseVMB, PhaseVMC, PhaseVMD
3173 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3174 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3175 global DCVMuxA, DCVMuxB, DCVMuxC, DCVMuxD
3176 global SHOWsamples, SMPfft, hldn, MuxScreenStatus, MuxChan
3177 global FFTwindowshape, ZEROstuffing
3179 if len(VBuffA) < SMPfft:
3186 StopSmp = hldn + SMPfft
3194 REX = numpy.array(VBuffA[StartSmp:StopSmp]-DCV1)
3200 REX = REX * FFTwindowshape[0:len(REX)]
3202 ALL = numpy.fft.fft(REX, n=SMPfft)
3203 PhaseVA = numpy.angle(ALL, deg=
True)
3204 ALL = numpy.absolute(ALL)
3206 le = int(len(ALL) / 2)
3208 PhaseVA = PhaseVA[0:le]
3209 Totalcorr = 7.07106 / SMPfft
3210 VAresult = Totalcorr * ALL
3212 if MuxScreenStatus.get() == 0:
3216 REX = numpy.array(VBuffB[StartSmp:StopSmp]-DCV2)
3222 REX = REX * FFTwindowshape[0:len(REX)]
3225 ALL = numpy.fft.fft(REX, n=SMPfft)
3226 PhaseVB = numpy.angle(ALL, deg=
True)
3227 ALL = numpy.absolute(ALL)
3229 le = int(len(ALL) / 2)
3231 PhaseVB = PhaseVB[0:le]
3232 Totalcorr = 7.07106 / SMPfft
3233 VBresult = Totalcorr * ALL
3236 REX = numpy.array(VBuffA[StartSmp:StopSmp]-VBuffB[StartSmp:StopSmp])
3237 REX = REX - (DCV1-DCV2)
3242 REX = REX * FFTwindowshape[0:len(REX)]
3245 ALL = numpy.fft.fft(REX, n=SMPfft)
3246 PhaseVAB = numpy.angle(ALL, deg=
True)
3247 ALL = numpy.absolute(ALL)
3249 le = int(len(ALL) / 2)
3251 PhaseVAB = PhaseVAB[0:le]
3252 Totalcorr = 7.07106 / SMPfft
3253 VABresult = Totalcorr * ALL
3258 REX = numpy.array(VBuffMA[StartSmp:StopSmp]-DCVMuxA)
3264 REX = REX * FFTwindowshape[0:len(REX)]
3267 ALL = numpy.fft.fft(REX, n=SMPfft)
3268 PhaseVMA = numpy.angle(ALL, deg=
True)
3269 ALL = numpy.absolute(ALL)
3271 le = int(len(ALL) / 2)
3273 PhaseVMA = PhaseVMA[0:le]
3274 Totalcorr = 7.07106 / SMPfft
3275 VMAresult = Totalcorr * ALL
3279 REX = numpy.array(VBuffMB[StartSmp:StopSmp]-DCVMuxB)
3285 REX = REX * FFTwindowshape[0:len(REX)]
3288 ALL = numpy.fft.fft(REX, n=SMPfft)
3289 PhaseVMB = numpy.angle(ALL, deg=
True)
3290 ALL = numpy.absolute(ALL)
3292 le = int(len(ALL) / 2)
3294 PhaseVMB = PhaseVMB[0:le]
3295 Totalcorr = 7.07106 / SMPfft
3296 VMBresult = Totalcorr * ALL
3300 REX = numpy.array(VBuffMC[StartSmp:StopSmp]-DCVMuxC)
3306 REX = REX * FFTwindowshape[0:len(REX)]
3309 ALL = numpy.fft.fft(REX, n=SMPfft)
3310 PhaseVMC = numpy.angle(ALL, deg=
True)
3311 ALL = numpy.absolute(ALL)
3313 le = int(len(ALL) / 2)
3315 PhaseVMC = PhaseVMC[0:le]
3316 Totalcorr = 7.07106 / SMPfft
3317 VMCresult = Totalcorr * ALL
3321 REX = numpy.array(VBuffMD[StartSmp:StopSmp]-DCVMuxD)
3327 REX = REX * FFTwindowshape[0:len(REX)]
3330 ALL = numpy.fft.fft(REX, n=SMPfft)
3331 PhaseVMD = numpy.angle(ALL, deg=
True)
3332 ALL = numpy.absolute(ALL)
3334 le = int(len(ALL) / 2)
3336 PhaseVMD = PhaseVMD[0:le]
3337 Totalcorr = 7.07106 / SMPfft
3338 VMDresult = Totalcorr * ALL
3340 REX = numpy.array(IBuffA[StartSmp:StopSmp])
3346 REX = REX * FFTwindowshape[0:len(REX)]
3349 ALL = numpy.fft.fft(REX, n=SMPfft)
3350 PhaseIA = numpy.angle(ALL, deg=
True)
3351 ALL = numpy.absolute(ALL)
3353 le = int(len(ALL) / 2)
3355 PhaseIA = PhaseIA[0:le]
3356 Totalcorr = 0.707106 / SMPfft
3357 IAresult = Totalcorr * ALL
3360 REX = numpy.array(IBuffB[StartSmp:StopSmp])
3366 REX = REX * FFTwindowshape[0:len(REX)]
3369 ALL = numpy.fft.fft(REX, n=SMPfft)
3370 PhaseIB = numpy.angle(ALL, deg=
True)
3371 ALL = numpy.absolute(ALL)
3373 le = int(len(ALL) / 2)
3375 PhaseIB = PhaseIB[0:le]
3376 Totalcorr = 0.707106 / SMPfft
3377 IBresult = Totalcorr * ALL
3384 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3385 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3386 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3387 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3388 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3389 global CHA, CHB, session, devx, discontloop, contloop
3390 global TRACES, TRACESread, TRACEsize, First_Slow_sweep, ShiftPointer
3391 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3392 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered
3393 global SAMPLErate, SHOWsamples, MinSamples, MaxSamples, AWGSAMPLErate
3394 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3395 global SCREENrefresh, DCrefresh
3396 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3397 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3398 global SV1, SI1, SV2, SI2, SVA_B
3399 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3400 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3401 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3402 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3403 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3404 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
3405 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3406 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3407 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3408 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3409 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3410 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3411 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3412 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3413 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3414 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3415 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3416 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3417 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3418 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3419 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3422 DCVA0 = DCVB0 = DCIA0 = DCIB0= 0.0
3425 if First_Slow_sweep == 0:
3426 BufferLen = TIMEdiv*12.0
3427 VBuffA = numpy.ones(BufferLen)
3428 VBuffB = numpy.ones(BufferLen)
3429 IBuffA = numpy.ones(BufferLen)
3430 IBuffB = numpy.ones(BufferLen)
3431 First_Slow_sweep = 1
3433 if AWGScreenStatus.get() == 1:
3434 if AWGSync.get() > 0:
3440 ADsignal1 = devx.get_samples(NumSamples)
3442 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3443 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3444 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3445 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3448 if session.continuous:
3449 if MuxScreenStatus.get() > 0:
3450 devx.flush(-1,
True)
3451 DummySamples = NumSamples*2
3452 if DummySamples < 10000:
3453 DummySamples = 10000
3454 ADsignal1 = devx.read(DummySamples, -1,
True)
3455 ADsignal1 = devx.read(NumSamples, -1,
True)
3458 ADsignal1 = devx.get_samples(NumSamples)
3461 for index
in range(NumSamples):
3462 DCVA0 += ADsignal1[index][0][0]
3463 DCVB0 += ADsignal1[index][1][0]
3464 DCIA0 += ADsignal1[index][0][1]
3465 DCIB0 += ADsignal1[index][1][1]
3466 DCVA0 = DCVA0/(NumSamples)
3467 DCVB0 = DCVB0/(NumSamples)
3468 DCVA0 = (DCVA0 - InOffA) * InGainA
3469 DCVB0 = (DCVB0 - InOffB) * InGainB
3470 DCIA0 = DCIA0/(NumSamples)
3471 DCIB0 = DCIB0/(NumSamples)
3472 DCIA0 = DCIA0 * 1000
3473 DCIB0 = DCIB0 * 1000
3474 DCIA0 = (DCIA0 - CurOffA) * CurGainA
3475 DCIB0 = (DCIB0 - CurOffB) * CurGainB
3482 DCV1 = numpy.mean(VBuffA)
3483 DCV2 = numpy.mean(VBuffB)
3484 DCI1 = numpy.mean(IBuffA)
3485 DCI2 = numpy.mean(IBuffB)
3487 MinV1 = numpy.amin(VBuffA)
3488 MaxV1 = numpy.amax(VBuffA)
3489 MinV2 = numpy.amin(VBuffB)
3490 MaxV2 = numpy.amax(VBuffB)
3491 MinI1 = numpy.amin(IBuffA)
3492 MaxI1 = numpy.amax(IBuffA)
3493 MinI2 = numpy.amin(IBuffB)
3494 MaxI2 = numpy.amax(IBuffB)
3496 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA)))
3497 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA)))
3498 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB)))
3499 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB)))
3500 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA-VBuffB)))
3502 if TimeDisp.get() > 0:
3504 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3506 if MeasureStatus.get() > 0:
3508 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
3509 if RUNstatus.get() == 3:
3511 if RUNstatus.get() == 4:
3513 if TimeDisp.get() > 0:
3515 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
3521 global ADsignal1, VBuffA, VBuffB, IBuffA, IBuffB, VFilterA, VFilterB
3522 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
3523 global AWGSync, AWGAMode, AWGBMode, TMsb, HoldOff, HoldOffentry, HozPoss, HozPossentry
3524 global AWGAIOMode, AWGBIOMode, DecimateOption, DualMuxMode, MuxChan
3525 global TRACEresetTime, TRACEmodeTime, TRACEaverage, TRIGGERsample, TgInput, LShift
3526 global CHA, CHB, session, devx, discontloop, contloop, DeBugMode
3527 global TRACES, TRACESread, TRACEsize
3528 global RUNstatus, SingleShot, ManualTrigger, TimeDisp, XYDisp, FreqDisp
3529 global TIMEdiv1x, TIMEdiv, hldn, Is_Triggered, Trigger_LPF_length, LPFTrigger
3530 global SAMPLErate, SHOWsamples, SMPfft, MinSamples, MaxSamples, AWGSAMPLErate
3531 global TRACErefresh, AWGScreenStatus, XYScreenStatus, MeasureStatus
3532 global SCREENrefresh, DCrefresh, ETSrecord
3533 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
3534 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
3535 global SV1, SI1, SV2, SI2, SVA_B
3536 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
3537 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
3538 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
3539 global InOffA, InGainA, InOffB, InGainB, CurOffA, CurOffB, CurGainA, CurGainB
3540 global DigFiltA, DigFiltB, DFiltACoef, DFiltBCoef, DigBuffA, DigBuffB
3541 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2, CHAI_RC_HP, CHBI_RC_HP
3542 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
3543 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
3544 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
3545 global VAets, VBets, Samples_Cycle, MulX, ETSDisp, ETSDir, ETSts, Fmin, FminE, eqivsamplerate
3546 global DivXEntry, FOffEntry, FminDisp, FOff, DivX, FMulXEntry, FBase, MaxETSrecord
3547 global cal, Two_X_Sample, ADC_Mux_Mode, Alternate_Sweep_Mode, Last_ADC_Mux_Mode
3548 global MeasGateLeft, MeasGateRight, MeasGateNum, MeasGateStatus
3549 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, DualMuxMode
3550 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
3551 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
3552 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
3553 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
3554 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
3555 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
3556 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
3558 if TRACEmodeTime.get() == 0
and TRACEresetTime ==
False:
3559 TRACEresetTime =
True
3560 elif TRACEmodeTime.get() == 1:
3561 if TRACEresetTime ==
True:
3562 TRACEresetTime =
False
3570 HoldOff = float(eval(HoldOffentry.get()))
3573 HoldOffentry.delete(0,END)
3574 HoldOffentry.insert(0, HoldOff)
3576 HoldOffentry.delete(0,END)
3577 HoldOffentry.insert(0, HoldOff)
3580 HozPoss = float(eval(HozPossentry.get()))
3582 HozPossentry.delete(0,END)
3583 HozPossentry.insert(0, HozPoss)
3585 hldn = int(HoldOff * SAMPLErate/1000 )
3586 hozpos = int(HozPoss * SAMPLErate/1000 )
3589 twoscreens = int(SAMPLErate * 20.0 * TIMEdiv / 1000.0)
3590 onescreen = int(twoscreens/2)
3591 if hldn+hozpos > MaxSamples-twoscreens:
3592 hldn = MaxSamples-twoscreens-hozpos
3593 HoldOffentry.delete(0,END)
3594 HoldOffentry.insert(0, hldn*1000/SAMPLErate)
3595 if ETSDisp.get() > 0:
3597 MaxETSrecord = int(AWGSAMPLErate * 10 * TIMEdiv / 1000.0)
3599 MaxETSrecord = int(AWGSAMPLErate * 20 * TIMEdiv / 1000.0)
3600 if (MaxETSrecord*100) > MaxSamples:
3601 MaxETSrecord = MaxSamples / 100
3603 DivX = float(eval(DivXEntry.get()))
3608 DivXEntry.delete(0,END)
3609 DivXEntry.insert(0, DivX)
3611 DivXEntry.delete(0,END)
3612 DivXEntry.insert(0, DivX)
3614 MulX = (DivX*SAMPLErate)/(100*FOff)
3615 while MulX > MaxETSrecord:
3617 MulX = (DivX*SAMPLErate)/(100*FOff)
3620 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
3621 MulXEntry.config(text = SRstring)
3622 SRstring =
"Offset = " + str(FOff) +
" samples"
3623 FOffEntry.config(text = SRstring)
3624 SHOWsamples = int(MulX * 100)
3626 SHOWsamples = twoscreens + hldn + hozpos
3627 if SHOWsamples > MaxSamples:
3628 SHOWsamples = MaxSamples
3629 if SHOWsamples < MinSamples:
3630 SHOWsamples = MinSamples
3631 if PhAScreenStatus.get() > 0:
3632 if SHOWsamples < SMPfft:
3633 SHOWsamples = SMPfft + hldn + hozpos
3635 TRIGGERsample = hldn
3637 TRIGGERsample = abs(hozpos)
3638 TRIGGERsample = TRIGGERsample + hozpos
3640 if AWGScreenStatus.get() == 1:
3641 if AWGSync.get() > 0:
3648 ADsignal1 = devx.get_samples(SHOWsamples)
3650 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3651 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3652 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3653 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3655 if session.continuous:
3656 if MuxScreenStatus.get() > 0:
3657 devx.flush(-1,
True)
3658 DummySamples = SHOWsamples*2
3659 if DummySamples < 20000:
3660 DummySamples = 20000
3661 ADsignal1 = devx.read(DummySamples, -1,
True)
3662 ADsignal1 = devx.read(SHOWsamples, -1,
True)
3665 ADsignal1 = devx.get_samples(SHOWsamples)
3667 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
3668 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
3669 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
3670 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
3672 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3673 if ADC_Mux_Mode.get() == 0:
3676 elif ADC_Mux_Mode.get() == 1:
3679 elif ADC_Mux_Mode.get() == 4:
3682 elif ADC_Mux_Mode.get() == 5:
3692 if SHOWsamples >= 20000
and DecimateOption.get() > 0:
3694 SAMPLErate = int(AWGSAMPLErate/increment)
3695 if SHOWsamples >= 40000
and DecimateOption.get() > 0:
3697 SAMPLErate = int(AWGSAMPLErate/increment)
3699 if SHOWsamples != len(ADsignal1):
3700 SHOWsamples = len(ADsignal1)
3701 while index < SHOWsamples:
3702 if Two_X_Sample.get() == 1
and ADC_Mux_Mode.get() < 6:
3703 if ADC_Mux_Mode.get() == 0:
3704 VBuffA.append(ADsignal1[index][0][0])
3705 VBuffA.append(ADsignal1[index][1][1])
3706 VBuffB.append(ADsignal1[index][0][1])
3707 VBuffB.append(ADsignal1[index][1][0])
3708 if Alternate_Sweep_Mode.get() == 0:
3713 elif ADC_Mux_Mode.get() == 1:
3714 IBuffA.append(ADsignal1[index][0][1])
3715 IBuffA.append(ADsignal1[index][1][0])
3716 IBuffB.append(ADsignal1[index][0][0])
3717 IBuffB.append(ADsignal1[index][1][1])
3718 if Alternate_Sweep_Mode.get() == 0:
3723 elif ADC_Mux_Mode.get() == 2:
3724 VBuffA.append((ADsignal1[index][0][1])/1024.0)
3725 VBuffA.append((ADsignal1[index][1][0])/1024.0)
3727 IBuffB.append( ((ADsignal1[index][0][0])/4096.0)-0.5 )
3728 IBuffB.append( ((ADsignal1[index][1][1])/4096.0)-0.5 )
3730 if Alternate_Sweep_Mode.get() == 0:
3735 elif ADC_Mux_Mode.get() == 3:
3736 VBuffB.append((ADsignal1[index][0][0])/1024.0)
3737 VBuffB.append((ADsignal1[index][1][1])/1024.0)
3739 IBuffA.append( ((ADsignal1[index][0][1])/4096.0)-0.5 )
3740 IBuffA.append( ((ADsignal1[index][1][0])/4096.0)-0.5 )
3742 if Alternate_Sweep_Mode.get() == 0:
3747 elif ADC_Mux_Mode.get() == 4:
3748 VBuffA.append(ADsignal1[index][0][0])
3749 VBuffA.append(ADsignal1[index][1][1])
3750 IBuffA.append(ADsignal1[index][0][1])
3751 IBuffA.append(ADsignal1[index][1][0])
3752 if Alternate_Sweep_Mode.get() == 0:
3757 elif ADC_Mux_Mode.get() == 5:
3758 VBuffB.append(ADsignal1[index][0][1])
3759 VBuffB.append(ADsignal1[index][1][0])
3760 IBuffB.append(ADsignal1[index][0][0])
3761 IBuffB.append(ADsignal1[index][1][1])
3762 if Alternate_Sweep_Mode.get() == 0:
3768 VBuffA.append(ADsignal1[index][0][0])
3769 IBuffA.append(ADsignal1[index][0][1])
3770 VBuffB.append(ADsignal1[index][1][0])
3771 IBuffB.append(ADsignal1[index][1][1])
3772 index = index + increment
3774 SHOWsamples = len(VBuffA)
3775 if Alternate_Sweep_Mode.get() == 1
and Two_X_Sample.get() == 1:
3776 if ADC_Mux_Mode.get() == 0:
3777 VBuffA = numpy.array(VBuffA)
3778 VBuffB = numpy.array(VBuffB)
3779 VBuffA = (VBuffA - InOffA) * InGainA
3780 VBuffB = (VBuffB - InOffB) * InGainB
3782 Last_ADC_Mux_Mode = 0
3783 elif ADC_Mux_Mode.get() == 1:
3784 IBuffA = numpy.array(IBuffA) * 1000
3785 IBuffB = numpy.array(IBuffB) * 1000
3786 IBuffA = (IBuffA - CurOffA) * CurGainA
3787 IBuffB = (IBuffB - CurOffB) * CurGainB
3788 ADC_Mux_Mode.set(Last_ADC_Mux_Mode)
3789 elif ADC_Mux_Mode.get() == 4:
3790 VBuffA = numpy.array(VBuffA)
3791 IBuffA = numpy.array(IBuffA) * 1000
3792 IBuffA = (IBuffA - CurOffA) * CurGainA
3793 VBuffA = (VBuffA - InOffA) * InGainA
3795 Last_ADC_Mux_Mode = 4
3796 elif ADC_Mux_Mode.get() == 5:
3797 VBuffB = numpy.array(VBuffB)
3798 VBuffB = (VBuffB - InOffB) * InGainB
3799 IBuffB = numpy.array(IBuffB) * 1000
3800 IBuffB = (IBuffB - CurOffB) * CurGainB
3802 Last_ADC_Mux_Mode = 5
3806 VBuffA = numpy.array(VBuffA)
3807 VBuffB = numpy.array(VBuffB)
3808 IBuffA = numpy.array(IBuffA) * 1000
3809 IBuffB = numpy.array(IBuffB) * 1000
3810 VBuffA = (VBuffA - InOffA) * InGainA
3811 VBuffB = (VBuffB - InOffB) * InGainB
3812 IBuffA = (IBuffA - CurOffA) * CurGainA
3813 IBuffB = (IBuffB - CurOffB) * CurGainB
3816 if ETSDisp.get() > 0:
3817 baseFreq = SAMPLErate/DivX
3825 FMul = float(eval(FminEntry.get()))
3828 FMulXEntry.delete(0,END)
3829 FMulXEntry.insert(0, int(FMul))
3832 FMulXEntry.delete(0,END)
3833 FMulXEntry.insert(0, int(FMul))
3835 FMulXEntry.delete(0,END)
3836 FMulXEntry.insert(0, int(FMul))
3837 Fmin = baseFreq * FMul
3838 FminE = float(SAMPLErate + FOff)
3839 Samples_Cycle = SAMPLErate/FminE
3841 tot_cycles = int((MulX*100)/Samples_Cycle)
3842 tot_cycles = tot_cycles + 0.1
3843 ETSrecord = int((MulX*50)/Samples_Cycle)
3844 if tot_cycles > SHOWsamples:
3845 tot_cycles = SHOWsamples-1
3847 while index < SHOWsamples:
3848 Ipart, Dpart = divmod( index*Samples_Cycle, 1)
3849 IndexValue = int(tot_cycles * Dpart)
3850 if IndexValue > SHOWsamples:
3851 IndexValue = SHOWsamples-1
3852 if IndexValue > tot_cycles:
3853 IndexValue = tot_cycles
3854 if ETSDir.get() == 0:
3855 VAets.append(VBuffA[IndexValue])
3856 VBets.append(VBuffB[IndexValue])
3857 IAets.append(IBuffA[IndexValue])
3858 IBets.append(IBuffB[IndexValue])
3860 VAets.append(VBuffA[tot_cycles-IndexValue])
3861 VBets.append(VBuffB[tot_cycles-IndexValue])
3862 IAets.append(IBuffA[tot_cycles-IndexValue])
3863 IBets.append(IBuffB[tot_cycles-IndexValue])
3866 TimeCorrection = int(SHiftFact )
3871 VBuffA = numpy.array(VBuffA)
3872 VBuffB = numpy.array(VBuffB)
3873 IBuffA = numpy.array(IBuffA)
3874 IBuffB = numpy.array(IBuffB)
3876 TimeCorrection = int(float(eval(ETSts.get())) * TimeCorrection)
3878 TimeCorrection = SHiftFact
3879 if ETSDir.get() == 0:
3880 VBuffB = numpy.roll(VBuffB, TimeCorrection)
3881 IBuffB = numpy.roll(IBuffB, TimeCorrection)
3883 VBuffB = numpy.roll(VBuffB, TimeCorrection)
3884 IBuffB = numpy.roll(IBuffB, TimeCorrection)
3885 SHOWsamples = twoscreens + hldn + hozpos
3887 if CHA_RC_HP.get() == 1
or CHAI_RC_HP.get() == 1:
3889 TC1A = float(cha_TC1Entry.get())
3892 cha_TC1Entry.delete(0,END)
3893 cha_TC1Entry.insert(0, TC1A)
3895 TC1A = CHA_TC1.get()
3897 TC2A = float(cha_TC2Entry.get())
3900 cha_TC2Entry.delete(0,END)
3901 cha_TC2Entry.insert(0, TC2A)
3903 TC2A = CHA_TC2.get()
3906 Gain1A = float(cha_A1Entry.get())
3908 Gain1A = CHA_A1.get()
3910 Gain2A = float(cha_A2Entry.get())
3912 Gain2A = CHA_A2.get()
3917 if CHAI_RC_HP.get() == 1:
3920 if CHB_RC_HP.get() == 1
or CHBI_RC_HP.get() == 1:
3922 TC1B = float(chb_TC1Entry.get())
3925 chb_TC1Entry.delete(0, END)
3926 chb_TC1Entry.insert(0, TC1B)
3928 TC1B = CHB_TC1.get()
3930 TC2B = float(chb_TC2Entry.get())
3933 chb_TC2Entry.delete(0, END)
3934 chb_TC2Entry.insert(0, TC2B)
3936 TC2B = CHB_TC2.get()
3939 Gain1B = float(chb_A1Entry.get())
3941 Gain1B = CHB_A1.get()
3943 Gain2B = float(chb_A2Entry.get())
3945 Gain2B = CHB_A2.get()
3950 if CHBI_RC_HP.get() == 1:
3954 if DigFiltA.get() == 1:
3955 if len(DFiltACoef) > 1:
3956 VBuffA = numpy.convolve(VBuffA, DFiltACoef)
3957 if DigFiltB.get() == 1:
3958 if len(DFiltBCoef) > 1:
3959 VBuffB = numpy.convolve(VBuffB, DFiltBCoef)
3962 if TgInput.get() == 1:
3964 if TgInput.get() == 2:
3966 if TgInput.get() == 3:
3968 if TgInput.get() == 4:
3970 if TRACEmodeTime.get() == 1
and TRACEresetTime ==
False:
3972 if TgInput.get() > 0:
3973 LShift = 0 - TRIGGERsample
3974 VBuffA = numpy.roll(VBuffA, LShift)
3975 VBuffB = numpy.roll(VBuffB, LShift)
3976 IBuffA = numpy.roll(IBuffA, LShift)
3977 IBuffB = numpy.roll(IBuffB, LShift)
3978 TRIGGERsample = hozpos
3980 if DualMuxMode.get() == 0
and MuxScreenStatus.get() == 0:
3981 VBuffA = VmemoryA + (VBuffA - VmemoryA) / TRACEaverage.get()
3982 IBuffA = ImemoryA + (IBuffA - ImemoryA) / TRACEaverage.get()
3983 if MuxScreenStatus.get() == 0:
3984 VBuffB = VmemoryB + (VBuffB - VmemoryB) / TRACEaverage.get()
3985 IBuffB = ImemoryB + (IBuffB - ImemoryB) / TRACEaverage.get()
3989 if MuxScreenStatus.get() == 0:
3993 if TgInput.get() == 1:
3995 if TgInput.get() == 2:
3997 if TgInput.get() == 3:
3999 if TgInput.get() == 4:
4002 if CHA_RC_HP.get() == 1
or CHB_RC_HP.get() == 1:
4003 Endsample = hldn+onescreen
4005 Endsample = SHOWsamples - 10
4006 if MeasGateStatus.get() == 1:
4007 if (MeasGateRight-MeasGateLeft) > 0:
4008 hldn = int(MeasGateLeft * SAMPLErate/1000) + TRIGGERsample
4009 Endsample = int(MeasGateRight * SAMPLErate/1000) + TRIGGERsample
4010 if Endsample <= hldn:
4011 Endsample = hldn + 2
4012 DCV1 = numpy.mean(VBuffA[hldn:Endsample])
4013 DCV2 = numpy.mean(VBuffB[hldn:Endsample])
4015 DCI1 = numpy.mean(IBuffA[hldn:Endsample])
4016 DCI2 = numpy.mean(IBuffB[hldn:Endsample])
4018 MinV1 = numpy.amin(VBuffA[hldn:Endsample])
4019 MaxV1 = numpy.amax(VBuffA[hldn:Endsample])
4020 MinV2 = numpy.amin(VBuffB[hldn:Endsample])
4021 MaxV2 = numpy.amax(VBuffB[hldn:Endsample])
4022 MinI1 = numpy.amin(IBuffA[hldn:Endsample])
4023 MaxI1 = numpy.amax(IBuffA[hldn:Endsample])
4024 MinI2 = numpy.amin(IBuffB[hldn:Endsample])
4025 MaxI2 = numpy.amax(IBuffB[hldn:Endsample])
4027 SV1 = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample])))
4028 SI1 = numpy.sqrt(numpy.mean(numpy.square(IBuffA[hldn:Endsample])))
4029 SV2 = numpy.sqrt(numpy.mean(numpy.square(VBuffB[hldn:Endsample])))
4030 SI2 = numpy.sqrt(numpy.mean(numpy.square(IBuffB[hldn:Endsample])))
4031 SVA_B = numpy.sqrt(numpy.mean(numpy.square(VBuffA[hldn:Endsample]-VBuffB[hldn:Endsample])))
4033 if TgInput.get() > 0
and MuxChan > -1
and TRACEmodeTime.get() != 1:
4035 LShift = 0 - TRIGGERsample
4036 VBuffA = numpy.roll(VBuffA, LShift)
4037 VBuffB = numpy.roll(VBuffB, LShift)
4038 IBuffA = numpy.roll(IBuffA, LShift)
4039 IBuffB = numpy.roll(IBuffB, LShift)
4040 TRIGGERsample = hozpos
4042 Dval0 = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4043 Dval1 = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4044 if Show_CBA.get() == 1
and Dval0[0] == 0
and Dval1[0] == 0:
4048 MidVMuxA = (MaxV2+MinV2)/2.0
4049 PPVMuxA = MaxV2-MinV2
4052 if Show_CBB.get() == 1
and Dval0[0] == 1
and Dval1[0] == 0:
4056 MidVMuxB = (MaxV2+MinV2)/2.0
4057 PPVMuxB = MaxV2-MinV2
4060 if Show_CBC.get() == 1
and Dval0[0] == 0
and Dval1[0] == 1:
4061 if DualMuxMode.get() == 1:
4065 MidVMuxC = (MaxV1+MinV1)/2.0
4066 PPVMuxC = MaxV1-MinV1
4073 MidVMuxC = (MaxV2+MinV2)/2.0
4074 PPVMuxC = MaxV2-MinV2
4077 if Show_CBD.get() == 1
and Dval0[0] == 1
and Dval1[0] == 1:
4078 if DualMuxMode.get() == 1:
4082 MidVMuxD = (MaxV1+MinV1)/2.0
4083 PPVMuxD = MaxV1-MinV1
4090 MidVMuxD = (MaxV2+MinV2)/2.0
4091 PPVMuxD = MaxV2-MinV2
4095 if TimeDisp.get() > 0:
4097 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4099 if SingleShot.get() > 0
and Is_Triggered == 1:
4102 if ManualTrigger.get() == 1:
4104 if MeasureStatus.get() > 0:
4106 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
4107 if RUNstatus.get() == 3:
4109 if RUNstatus.get() == 4:
4111 if TimeDisp.get() > 0:
4113 if XYDisp.get() > 0
and XYScreenStatus.get() > 0:
4129 Delta = 1.0/SAMPLErate
4131 Alpha = TC / (TC + Delta)
4132 OutBuff.append(InBuff[1]-InBuff[0])
4135 OutBuff.append( Alpha * (OutBuff[i-1] + InBuff[i] - InBuff[i-1]) )
4137 OutBuff = numpy.array(OutBuff)
4138 OutBuff = InBuff + (OutBuff * Gain)
4147 Delta = 1.0/SAMPLErate
4149 Alpha = Delta / (TC + Delta)
4151 OutBuff.append(Alpha*InBuff[0])
4153 OutBuff.append( OutBuff[i-1] + (Alpha * (InBuff[i] - InBuff[i-1])) )
4155 OutBuff = numpy.array(OutBuff)
4156 OutBuff = (OutBuff * Gain)
4163 result = numpy.empty_like(arr)
4165 result[:num] = fill_value
4166 result[num:] = arr[:-num]
4168 result[num:] = fill_value
4169 result[:num] = arr[-num:]
4177 global ADsignal1, FFTBuffA, FFTBuffB, SMPfft
4178 global AWGSync, AWGAMode, AWGBMode, AWGAShape, AWGAIOMode, AWGBIOMode
4179 global AWGAFreqvalue, AWGBFreqvalue, FStepSync, FSweepSync
4180 global NSteps, LoopNum, FSweepMode, FStep, FBins
4181 global StartFreqEntry, StopFreqEntry, HoldOffentry
4182 global session, CHA, CHB, devx, MaxSamples, discontloop
4183 global RUNstatus, SingleShotSA, FSweepCont, Two_X_Sample, ADC_Mux_Mode
4184 global AWGSAMPLErate, IAScreenStatus, SpectrumScreenStatus, BodeScreenStatus
4185 global NiCScreenStatus, NiCDisp, NqPScreenStatus, NqPDisp
4186 global OverRangeFlagA, OverRangeFlagB, BodeDisp, FreqDisp, IADisp
4187 global DCA, DCB, InOffA, InGainA, InOffB, InGainB
4188 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
4189 global DigFiltA, DFiltACoef, DigFiltB, DFiltBCoef
4190 global BDSweepFile, FileSweepFreq, FileSweepAmpl
4191 global PIO_0, PIO_1, PIO_2, PIO_3
4192 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
4193 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
4194 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
4195 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
4196 global Reset_Freq, AWGAFreqEntry, AWGBFreqEntry, MinigenFout, IASource, IA_Ext_Conf
4198 HalfSAMPLErate = SAMPLErate/2
4201 InOffA = float(eval(CHAVOffsetEntry.get()))
4203 CHAVOffsetEntry.delete(0,END)
4204 CHAVOffsetEntry.insert(0, InOffA)
4206 InGainA = float(eval(CHAVGainEntry.get()))
4208 CHAVGainEntry.delete(0,END)
4209 CHAVGainEntry.insert(0, InGainA)
4211 InOffB = float(eval(CHBVOffsetEntry.get()))
4213 CHBVOffsetEntry.delete(0,END)
4214 CHBVOffsetEntry.insert(0, InOffB)
4216 InGainB = float(eval(CHBVGainEntry.get()))
4218 CHBVGainEntry.delete(0,END)
4219 CHBVGainEntry.insert(0, InGainB)
4221 HoldOff = float(eval(HoldOffentry.get()))
4224 HoldOffentry.delete(0,END)
4225 HoldOffentry.insert(0, HoldOff)
4227 HoldOffentry.delete(0,END)
4228 HoldOffentry.insert(0, HoldOff)
4233 if BodeDisp.get() == 0:
4234 if AWGAShape.get() == 7
and AWGAMode.get() == 0:
4236 elif AWGAShape.get() == 8
and AWGAMode.get() == 0:
4238 elif AWGBShape.get() == 7
and AWGBMode.get() == 0:
4240 elif AWGBShape.get() == 8
and AWGBMode.get() == 0:
4242 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
4243 if BDSweepFile.get() == 0:
4244 if LoopNum.get() <= len(FStep):
4245 FregPoint = FBins[int(FStep[LoopNum.get()-1])]
4247 FregPoint = FBins[FStep[0]]
4249 if LoopNum.get() <= len(FileSweepFreq):
4250 FreqIndex = int((FileSweepFreq[LoopNum.get()-1]*16384)/HalfSAMPLErate)
4251 FregPoint = FBins[FreqIndex]
4252 VRMSAmpl = 10**(FileSweepAmpl[LoopNum.get()-1]/20)
4254 FregPoint = FBins[FileSweepFreq[0]]
4255 VRMSAmpl = 10**(FileSweepAmpl[0]/20)
4256 VMax = 2.5 + (1.414*VRMSAmpl)
4257 VMin = 2.5 - (1.414*VRMSAmpl)
4258 if FSweepMode.get() == 1:
4259 AWGAAmplEntry.delete(0,END)
4260 AWGAAmplEntry.insert(4, VMin)
4261 AWGAOffsetEntry.delete(0,END)
4262 AWGAOffsetEntry.insert(4, VMax)
4263 if FSweepMode.get() == 2:
4264 AWGBAmplEntry.delete(0,END)
4265 AWGBAmplEntry.insert(4, VMin)
4266 AWGBOffsetEntry.delete(0,END)
4267 AWGBOffsetEntry.insert(4, VMax)
4268 if FSweepMode.get() == 1:
4269 AWGAFreqEntry.delete(0,END)
4270 AWGAFreqEntry.insert(4, FregPoint)
4272 if FSweepMode.get() == 2:
4273 AWGBFreqEntry.delete(0,END)
4274 AWGBFreqEntry.insert(4, FregPoint)
4276 if FSweepMode.get() == 3:
4277 MinigenFout.delete(0,END)
4278 MinigenFout.insert(4, FregPoint)
4280 if AWGSync.get() > 0:
4281 if IAScreenStatus.get() > 0
and IASource.get() == 0:
4282 if Two_X_Sample.get() == 1:
4289 hldn = int(HoldOff * 100 )
4290 if hldn > MaxSamples-SMPfft:
4291 hldn = MaxSamples-SMPfft
4292 HoldOffentry.delete(0,END)
4293 HoldOffentry.insert(0, hldn/100)
4296 SHOWsamples = SMPfft + hldn
4297 if BodeDisp.get() > 0:
4298 if FStepSync.get() == 1:
4299 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4300 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4301 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4302 if FStepSync.get() == 2:
4303 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4304 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4305 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4306 if LoopNum.get() == 1
and FSweepSync.get() == 1:
4307 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4308 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4309 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4310 if LoopNum.get() == 1
and FSweepSync.get() == 2:
4311 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4312 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4313 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4314 if AWGScreenStatus.get() == 1:
4315 if IAScreenStatus.get() > 0
and IASource.get() == 0:
4316 if Two_X_Sample.get() == 1:
4321 if AWGSync.get() > 0:
4328 ADsignal1 = devx.get_samples(SHOWsamples)
4332 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4333 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4334 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4335 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4337 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4340 if session.continuous:
4341 ADsignal1 = devx.read(SHOWsamples, -1,
True)
4343 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
4344 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
4345 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
4346 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
4349 OverRangeFlagA = OverRangeFlagB = 0
4351 if SHOWsamples != len(ADsignal1):
4352 SHOWsamples = len(ADsignal1)
4353 while index < SHOWsamples:
4354 if Two_X_Sample.get() == 1:
4355 if ADC_Mux_Mode.get() == 0:
4356 FFTBuffA.append(ADsignal1[index][0][0])
4357 FFTBuffA.append(ADsignal1[index][1][1])
4358 FFTBuffB.append(ADsignal1[index][0][1])
4359 FFTBuffB.append(ADsignal1[index][1][0])
4361 VAdata = ADsignal1[index][0][0]
4362 FFTBuffA.append(VAdata)
4363 VBdata = ADsignal1[index][1][0]
4364 FFTBuffB.append(VBdata)
4365 if VAdata > 5.0
or VAdata < 0.0:
4368 if VBdata > 5.0
or VBdata < 0.0:
4372 FFTBuffA = numpy.array(FFTBuffA)
4373 FFTBuffB = numpy.array(FFTBuffB)
4374 FFTBuffA = (FFTBuffA - InOffA) * InGainA
4375 FFTBuffB = (FFTBuffB - InOffB) * InGainB
4376 DCA = numpy.average(FFTBuffA)
4377 DCB = numpy.average(FFTBuffB)
4378 if CutDC.get() == 1:
4379 FFTBuffA = FFTBuffA - DCA
4380 FFTBuffB = FFTBuffB - DCB
4382 if CHA_RC_HP.get() == 1:
4384 TC1A = float(cha_TC1Entry.get())
4387 cha_TC1Entry.delete(0,END)
4388 cha_TC1Entry.insert(0, TC1A)
4390 TC1A = CHA_TC1.get()
4392 TC2A = float(cha_TC2Entry.get())
4395 cha_TC2Entry.delete(0,END)
4396 cha_TC2Entry.insert(0, TC2A)
4398 TC2A = CHA_TC2.get()
4401 Gain1A = float(cha_A1Entry.get())
4403 Gain1A = CHA_A1.get()
4405 Gain2A = float(cha_A2Entry.get())
4407 Gain2A = CHA_A2.get()
4411 if CHB_RC_HP.get() == 1:
4413 TC1B = float(chb_TC1Entry.get())
4416 chb_TC1Entry.delete(0, END)
4417 chb_TC1Entry.insert(0, TC1B)
4419 TC1B = CHB_TC1.get()
4421 TC2B = float(chb_TC2Entry.get())
4424 chb_TC2Entry.delete(0, END)
4425 chb_TC2Entry.insert(0, TC2B)
4427 TC2B = CHB_TC2.get()
4430 Gain1B = float(chb_A1Entry.get())
4432 Gain1B = CHB_A1.get()
4434 Gain2B = float(chb_A2Entry.get())
4436 Gain2B = CHB_A2.get()
4441 if DigFiltA.get() == 1:
4442 FFTBuffA = numpy.convolve(FFTBuffA, DFiltACoef)
4443 if DigFiltB.get() == 1:
4444 FFTBuffB = numpy.convolve(FFTBuffB, DFiltBCoef)
4446 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
4448 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
4450 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
4452 if NqPScreenStatus.get() > 0
and NqPDisp.get() > 0:
4454 if NiCScreenStatus.get() > 0
and NiCDisp.get() > 0:
4456 if SingleShotSA.get() == 1:
4460 if (RUNstatus.get() == 3)
or (RUNstatus.get() == 4):
4461 if RUNstatus.get() == 3:
4463 if RUNstatus.get() == 4:
4465 if SpectrumScreenStatus.get() > 0
and FreqDisp.get() > 0:
4467 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
4469 if FSweepMode.get() > 0
and BodeDisp.get() > 0:
4470 LoopNum.set(LoopNum.get() + 1)
4471 if LoopNum.get() > NSteps.get():
4472 if FSweepMode.get() == 1:
4473 AWGAFreqEntry.delete(0,
"end")
4474 AWGAFreqEntry.insert(0, Reset_Freq)
4475 if FSweepMode.get() == 2:
4476 AWGBFreqEntry.delete(0,
"end")
4477 AWGBFreqEntry.insert(0, Reset_Freq)
4480 if FSweepCont.get() == 0:
4485 global VBuffA, VBuffB, IBuffA, IBuffB, HBuffA, HBuffB
4486 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
4487 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, Xsignal
4488 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
4489 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
4490 global VABase, VATop, VBBase, VBTop
4492 if ShowC1_V.get() == 1
or Xsignal.get() == 6:
4493 CHAGridMax = (5 * CH1pdvRange ) + CHAOffset
4494 CHAGridMin = (-5 * CH1pdvRange ) + CHAOffset
4495 VAMid = (MinV1 + MaxV1)/2
4496 HBuffA = numpy.histogram(VBuffA, bins=5000, range=[CHAGridMin, CHAGridMax] )
4501 if HBuffA[0][b] > HBuffA[0][LowerPeak]
and HBuffA[1][b] < VAMid:
4503 VABase = HBuffA[1][b]
4504 if HBuffA[0][b] > HBuffA[0][UpperPeak]
and HBuffA[1][b] > VAMid:
4506 VATop = HBuffA[1][b]
4508 if ShowC2_V.get() == 1
or Xsignal.get() == 7:
4509 CHBGridMax = (5 * CH2pdvRange ) + CHBOffset
4510 CHBGridMin = (-5 * CH2pdvRange ) + CHBOffset
4511 VBMid = (MinV2 + MaxV2)/2
4512 HBuffB = numpy.histogram(VBuffB, bins=5000, range=[CHBGridMin, CHBGridMax] )
4517 if HBuffB[0][b] > HBuffB[0][LowerPeak]
and HBuffB[1][b] < VBMid:
4519 VBBase = HBuffB[1][b]
4520 if HBuffB[0][b] > HBuffB[0][UpperPeak]
and HBuffB[1][b] > VBMid:
4522 VBTop = HBuffB[1][b]
4526 global HistAsPercent
4528 if askyesno(
"Plot as Percent",
"Plot Histogram as Percent?", parent=xywindow):
4534 global MinV1, MaxV1, MinV2, MaxV2, HoldOff, TRIGGERsample, TgInput, LShift
4535 global ETSrecord, DISsamples
4536 global SHOWsamples, SAMPLErate, CHAperiod, CHAfreq, CHBperiod, CHBfreq
4537 global CHAHW, CHALW, CHADCy, CHBHW, CHBLW, CHBDCy, ShowC1_V, ShowC2_V
4538 global CHABphase, CHBADelayR1, CHBADelayR2, CHBADelayF
4543 hldn = int(HoldOff * SAMPLErate/1000)
4545 if TgInput.get() > 0:
4546 Trace1 = numpy.roll(Trace1, -LShift)
4547 Trace2 = numpy.roll(Trace2, -LShift)
4549 Trace1 = numpy.roll(Trace1, -hldn)
4550 Trace2 = numpy.roll(Trace2, -hldn)
4552 MidV1 = (numpy.amax(Trace1)+numpy.amin(Trace1))/2.0
4553 MidV2 = (numpy.amax(Trace2)+numpy.amin(Trace2))/2.0
4555 MidV1 = (MinV1+MaxV1)/2
4556 MidV2 = (MinV2+MaxV2)/2
4565 Arising = [i
for (i, val)
in enumerate(Trace1)
if val >= MidV1
and Trace1[i-1] < MidV1]
4566 Afalling = [i
for (i, val)
in enumerate(Trace1)
if val <= MidV1
and Trace1[i-1] > MidV1]
4567 AIrising = [i - (Trace1[i] - MidV1)/(Trace1[i] - Trace1[i-1])
for i
in Arising]
4568 AIfalling = [i - (MidV1 - Trace1[i])/(Trace1[i-1] - Trace1[i])
for i
in Afalling]
4570 CHAfreq = SAMPLErate / numpy.mean(numpy.diff(AIrising))
4571 CHAperiod = (numpy.mean(numpy.diff(AIrising)) * 1000.0) / SAMPLErate
4574 Dummy_read = Arising[0]
4577 if len(Arising) > 0
or len(Afalling) > 0:
4588 if AIfalling[0] < AIrising[0]:
4604 if AIfalling[1] < AIrising[1]:
4618 Brising = [i
for (i, val)
in enumerate(Trace2)
if val >= MidV2
and Trace2[i-1] < MidV2]
4619 Bfalling = [i
for (i, val)
in enumerate(Trace2)
if val <= MidV2
and Trace2[i-1] > MidV2]
4620 BIrising = [i - (Trace2[i] - MidV2)/(Trace2[i] - Trace2[i-1])
for i
in Brising]
4621 BIfalling = [i - (MidV2 - Trace2[i])/(Trace2[i-1] - Trace2[i])
for i
in Bfalling]
4623 CHBfreq = SAMPLErate / numpy.mean(numpy.diff(BIrising))
4624 CHBperiod = (numpy.mean(numpy.diff(BIrising)) * 1000.0) / SAMPLErate
4627 Dummy_read = Brising[0]
4630 if len(Brising) > 0
or len(Bfalling) > 0:
4641 if BIfalling[0] < BIrising[0]:
4657 if BIfalling[1] < BIrising[1]:
4664 CHAHW = float(((anf1 - anr1) * 1000.0) / SAMPLErate)
4665 CHALW = float(((anr2 - anf1) * 1000.0) / SAMPLErate)
4666 CHADCy = float(anf1 - anr1) / float(anr2 - anr1) * 100.0
4667 CHBHW = float(((bnf1 - bnr1) * 1000.0) / SAMPLErate)
4668 CHBLW = float(((bnr2 - bnf1) * 1000.0) / SAMPLErate)
4669 CHBDCy = float(bnf1 - bnr1) / float(bnr2 - bnr1) * 100.0
4672 CHBADelayR1 = float((bnr1 - anr1) * 1000.0 / SAMPLErate)
4674 CHBADelayR1 = float((bnr2 - anr1) * 1000.0 / SAMPLErate)
4675 CHBADelayR2 = float((bnr2 - anr2) * 1000.0 / SAMPLErate)
4676 CHBADelayF = float((bnf1 - anf1) * 1000.0 / SAMPLErate)
4678 CHABphase = 360.0*(float((bnr1 - anr1) * 1000.0 / SAMPLErate))/CHAperiod
4682 CHABphase = CHABphase + 360.0
4685 global DX, TRIGGERsample, TRIGGERlevel
4689 DY = TrgBuff[int(n)] - TrgBuff[int(n+1)]
4691 DX = (TRIGGERlevel - TrgBuff[int(n+1)])/DY
4696 global AutoLevel, TgInput, TRIGGERlevel, TRIGGERentry, DX, SAMPLErate, Is_Triggered
4697 global HoldOffentry, HozPossentry, TRIGGERsample, TRACEsize, HozPoss, hozpos
4698 global Trigger_LPF_length, LPFTrigger
4701 TRACEsize = SHOWsamples
4704 if LPFTrigger.get() > 0:
4706 for n
in range(Trigger_LPF_length.get()):
4707 TFiltCoef.append(float(1.0/Trigger_LPF_length.get()))
4708 TFiltCoef = numpy.array(TFiltCoef)
4709 TrgBuff = numpy.convolve(TrgBuff, TFiltCoef)
4711 if len(TrgBuff) == 0:
4714 TrgMin = numpy.amin(TrgBuff)
4718 TrgMax = numpy.amax(TrgBuff)
4723 if AutoLevel.get() == 1:
4724 TRIGGERlevel = (TrgMin + TrgMax)/2
4725 TRIGGERentry.delete(0,
"end")
4726 TRIGGERentry.insert(0,
' {0:.4f} '.format(TRIGGERlevel))
4728 TRIGGERlevel = eval(TRIGGERentry.get())
4730 TRIGGERentry.delete(0,END)
4731 TRIGGERentry.insert(0, TRIGGERlevel)
4734 HoldOff = float(eval(HoldOffentry.get()))
4737 HoldOffentry.delete(0,END)
4738 HoldOffentry.insert(0, HoldOff)
4740 HoldOffentry.delete(0,END)
4741 HoldOffentry.insert(0, HoldOff)
4744 HozPoss = float(eval(HozPossentry.get()))
4746 HozPossentry.delete(0,END)
4747 HozPossentry.insert(0, HozPoss)
4749 hldn = int(HoldOff * SAMPLErate/1000)
4750 hozpos = int(HozPoss * SAMPLErate/1000)
4752 TRIGGERsample = hldn
4754 TRIGGERsample = abs(hozpos)
4756 Nmax = int(TRACEsize / 1.5)
4759 TRIGGERlevel2 = 0.99 * TRIGGERlevel
4760 if TRIGGERlevel2 < TrgMin:
4761 TRIGGERlevel2 = TrgMin
4762 if TRIGGERlevel2 > TrgMax:
4763 TRIGGERlevel2 = TrgMax
4764 ChInput = TrgBuff[int(n)]
4766 while ( ChInput >= TRIGGERlevel2)
and n < Nmax:
4768 ChInput = TrgBuff[int(n)]
4769 while (ChInput <= TRIGGERlevel)
and n < Nmax:
4772 ChInput = TrgBuff[int(n)]
4775 DX = (TRIGGERlevel - Prev)/DY
4778 if TgEdge.get() == 1:
4779 TRIGGERlevel2 = 1.01 * TRIGGERlevel
4780 if TRIGGERlevel2 < TrgMin:
4781 TRIGGERlevel2 = TrgMin
4782 if TRIGGERlevel2 > TrgMax:
4783 TRIGGERlevel2 = TrgMax
4784 ChInput = TrgBuff[int(n)]
4786 while (ChInput <= TRIGGERlevel2)
and n < Nmax:
4788 ChInput = TrgBuff[int(n)]
4789 while (ChInput >= TRIGGERlevel)
and n < Nmax:
4792 ChInput = TrgBuff[int(n)]
4795 DX = (Prev - TRIGGERlevel)/DY
4801 TRIGGERsample = n - 1
4804 TRIGGERsample = 1 + hldn
4812 TRIGGERsample = TRIGGERsample + hozpos
4815 global win2, DigScreenStatus
4817 DigScreenStatus.set(0)
4822 global D0, D1, D2, D3, D4, D5, D6, D7
4823 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4826 devx.ctrl_transfer( 0x40, D0.get(), PIO_0, 0, 0, 0, 100)
4828 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4830 devx.ctrl_transfer( 0x40, D1.get(), PIO_1, 0, 0, 0, 100)
4832 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4834 devx.ctrl_transfer( 0x40, D2.get(), PIO_2, 0, 0, 0, 100)
4836 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
4838 devx.ctrl_transfer( 0x40, D3.get(), PIO_3, 0, 0, 0, 100)
4840 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
4842 devx.ctrl_transfer( 0x40, D4.get(), PIO_4, 0, 0, 0, 100)
4844 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4846 devx.ctrl_transfer( 0x40, D5.get(), PIO_5, 0, 0, 0, 100)
4848 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4850 devx.ctrl_transfer( 0x40, D6.get(), PIO_6, 0, 0, 0, 100)
4852 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
4854 devx.ctrl_transfer( 0x40, D7.get(), PIO_7, 0, 0, 0, 100)
4856 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
4859 global D0, D1, D2, D3, D4, D5, D6, D7
4860 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7
4861 global DigScreenStatus, DacScreenStatus, win2, MuxScreenStatus
4863 if DigScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
4864 DigScreenStatus.set(1)
4866 win2.title(
"Dig Out")
4867 win2.resizable(FALSE,FALSE)
4868 win2.protocol(
"WM_DELETE_WINDOW", DestroyDigScreen)
4869 rb1 = Radiobutton(win2, text=
"D0-0", variable=D0, value=0x50, command=sel )
4870 rb1.grid(row=2, column=0, sticky=W)
4871 rb0z = Radiobutton(win2, text=
"D0-Z", variable=D0, value=0, command=sel )
4872 rb0z.grid(row=2, column=1, sticky=W)
4873 rb2 = Radiobutton(win2, text=
"D0-1", variable=D0, value=0x51, command=sel )
4874 rb2.grid(row=2, column=2, sticky=W)
4875 rb3 = Radiobutton(win2, text=
"D1-0", variable=D1, value=0x50, command=sel )
4876 rb3.grid(row=3, column=0, sticky=W)
4877 rb3z = Radiobutton(win2, text=
"D1-Z", variable=D1, value=0, command=sel )
4878 rb3z.grid(row=3, column=1, sticky=W)
4879 rb4 = Radiobutton(win2, text=
"D1-1", variable=D1, value=0x51, command=sel )
4880 rb4.grid(row=3, column=2, sticky=W)
4881 rb5 = Radiobutton(win2, text=
"D2-0", variable=D2, value=0x50, command=sel )
4882 rb5.grid(row=4, column=0, sticky=W)
4883 rb5z = Radiobutton(win2, text=
"D2-Z", variable=D2, value=0, command=sel )
4884 rb5z.grid(row=4, column=1, sticky=W)
4885 rb6 = Radiobutton(win2, text=
"D2-1", variable=D2, value=0x51, command=sel )
4886 rb6.grid(row=4, column=2, sticky=W)
4887 rb7 = Radiobutton(win2, text=
"D3-0", variable=D3, value=0x50, command=sel )
4888 rb7.grid(row=5, column=0, sticky=W)
4889 rb7z = Radiobutton(win2, text=
"D3-Z", variable=D3, value=0, command=sel )
4890 rb7z.grid(row=5, column=1, sticky=W)
4891 rb8 = Radiobutton(win2, text=
"D3-1", variable=D3, value=0x51, command=sel )
4892 rb8.grid(row=5, column=2, sticky=W)
4893 rb9 = Radiobutton(win2, text=
"D4-0", variable=D4, value=0x50, command=sel )
4894 rb9.grid(row=6, column=0, sticky=W)
4895 rb9z = Radiobutton(win2, text=
"D4-Z", variable=D4, value=0, command=sel )
4896 rb9z.grid(row=6, column=1, sticky=W)
4897 rb10 = Radiobutton(win2, text=
"D4-1", variable=D4, value=0x51, command=sel )
4898 rb10.grid(row=6, column=2, sticky=W)
4899 rb11 = Radiobutton(win2, text=
"D5-0", variable=D5, value=0x50, command=sel )
4900 rb11.grid(row=7, column=0, sticky=W)
4901 rb11z = Radiobutton(win2, text=
"D5-Z", variable=D5, value=0, command=sel )
4902 rb11z.grid(row=7, column=1, sticky=W)
4903 rb12 = Radiobutton(win2, text=
"D5-1", variable=D5, value=0x51, command=sel )
4904 rb12.grid(row=7, column=2, sticky=W)
4905 rb13 = Radiobutton(win2, text=
"D6-0", variable=D6, value=0x50, command=sel )
4906 rb13.grid(row=8, column=0, sticky=W)
4907 rb13z = Radiobutton(win2, text=
"D6-Z", variable=D6, value=0, command=sel )
4908 rb13z.grid(row=8, column=1, sticky=W)
4909 rb13 = Radiobutton(win2, text=
"D6-1", variable=D6, value=0x51, command=sel )
4910 rb13.grid(row=8, column=2, sticky=W)
4911 rb14 = Radiobutton(win2, text=
"D7-0", variable=D7, value=0x50, command=sel )
4912 rb14.grid(row=9, column=0, sticky=W)
4913 rb14z = Radiobutton(win2, text=
"D7-Z", variable=D7, value=0, command=sel )
4914 rb14z.grid(row=9, column=1, sticky=W)
4915 rb15 = Radiobutton(win2, text=
"D7-1", variable=D7, value=0x51, command=sel )
4916 rb15.grid(row=9, column=2, sticky=W)
4918 dismissbutton = Button(win2, text=
"Dismiss", command=DestroyDigScreen)
4919 dismissbutton.grid(row=10, column=0, sticky=W)
4922 global win1, DacScreenStatus
4924 DacScreenStatus.set(0)
4933 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4934 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4935 elif DAC0.get() == 4:
4936 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4937 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4938 elif DAC0.get() == 2:
4939 devx.ctrl_transfer( 0x40, 0x50, PIO_0, 0, 0, 0, 100)
4940 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4941 elif DAC0.get() == 3:
4942 Dval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
4943 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4944 elif DAC0.get() == 5:
4945 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4946 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4947 elif DAC0.get() == 7:
4948 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_0, 0, 0, 1, 100)
4949 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4950 elif DAC0.get() == 8:
4951 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4952 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_4, 0, 0, 1, 100)
4953 elif DAC0.get() == 6:
4954 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4955 devx.ctrl_transfer( 0x40, 0x50, PIO_4, 0, 0, 0, 100)
4956 elif DAC0.get() == 9:
4957 devx.ctrl_transfer( 0x40, 0x51, PIO_0, 0, 0, 0, 100)
4958 devx.ctrl_transfer( 0x40, 0x51, PIO_4, 0, 0, 0, 100)
4966 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4967 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4968 elif DAC1.get() == 4:
4969 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4970 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4971 elif DAC1.get() == 2:
4972 devx.ctrl_transfer( 0x40, 0x50, PIO_1, 0, 0, 0, 100)
4973 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4974 elif DAC1.get() == 3:
4975 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4976 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4977 elif DAC1.get() == 5:
4978 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4979 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4980 elif DAC1.get() == 7:
4981 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_1, 0, 0, 1, 100)
4982 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4983 elif DAC1.get() == 8:
4984 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4985 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_5, 0, 0, 1, 100)
4986 elif DAC1.get() == 6:
4987 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4988 devx.ctrl_transfer( 0x40, 0x50, PIO_5, 0, 0, 0, 100)
4989 elif DAC1.get() == 9:
4990 devx.ctrl_transfer( 0x40, 0x51, PIO_1, 0, 0, 0, 100)
4991 devx.ctrl_transfer( 0x40, 0x51, PIO_5, 0, 0, 0, 100)
4999 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5000 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5001 elif DAC2.get() == 4:
5002 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5003 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5004 elif DAC2.get() == 2:
5005 devx.ctrl_transfer( 0x40, 0x50, PIO_2, 0, 0, 0, 100)
5006 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5007 elif DAC2.get() == 3:
5008 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5009 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5010 elif DAC2.get() == 5:
5011 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5012 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5013 elif DAC2.get() == 7:
5014 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_2, 0, 0, 1, 100)
5015 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5016 elif DAC2.get() == 8:
5017 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5018 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_6, 0, 0, 1, 100)
5019 elif DAC2.get() == 6:
5020 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5021 devx.ctrl_transfer( 0x40, 0x50, PIO_6, 0, 0, 0, 100)
5022 elif DAC2.get() == 9:
5023 devx.ctrl_transfer( 0x40, 0x51, PIO_2, 0, 0, 0, 100)
5024 devx.ctrl_transfer( 0x40, 0x51, PIO_6, 0, 0, 0, 100)
5032 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5033 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5034 elif DAC3.get() == 4:
5035 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5036 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5037 elif DAC3.get() == 2:
5038 devx.ctrl_transfer( 0x40, 0x50, PIO_3, 0, 0, 0, 100)
5039 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5040 elif DAC3.get() == 3:
5041 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5042 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5043 elif DAC3.get() == 5:
5044 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5045 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5046 elif DAC3.get() == 7:
5047 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_3, 0, 0, 1, 100)
5048 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5049 elif DAC3.get() == 8:
5050 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5051 Dval = devx.ctrl_transfer( 0xc0, 0x91, PIO_7, 0, 0, 1, 100)
5052 elif DAC3.get() == 6:
5053 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5054 devx.ctrl_transfer( 0x40, 0x50, PIO_7, 0, 0, 0, 100)
5055 elif DAC3.get() == 9:
5056 devx.ctrl_transfer( 0x40, 0x51, PIO_3, 0, 0, 0, 100)
5057 devx.ctrl_transfer( 0x40, 0x51, PIO_7, 0, 0, 0, 100)
5060 global DAC0, DAC1, DAC2, DAC3, SWRev, RevDate
5061 global DacScreenStatus, DigScreenStatus, win1, MuxScreenStatus
5063 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0
and MuxScreenStatus.get() == 0:
5064 DacScreenStatus.set(1)
5066 win1.title(
"DAC Out "+ SWRev + RevDate)
5067 win1.resizable(FALSE,FALSE)
5068 win1.protocol(
"WM_DELETE_WINDOW", DestroyDacScreen)
5069 DAC0 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel0, length=90)
5070 DAC0.grid(row=0, column=0, sticky=W)
5071 DAC1 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel1, length=90)
5072 DAC1.grid(row=0, column=1, sticky=W)
5073 DAC2 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel2, length=90)
5074 DAC2.grid(row=0, column=2, sticky=W)
5075 DAC3 = Scale(win1, from_=9, to=1, orient=VERTICAL, command=sel3, length=90)
5076 DAC3.grid(row=0, column=3, sticky=W)
5078 dismissbutton = Button(win1, text=
"Dismiss", command=DestroyDacScreen)
5079 dismissbutton.grid(row=1, column=0, columnspan=4, sticky=W)
5112 global VBuffA, VBuffB, IBuffA, IBuffB
5113 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
5114 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
5115 global VmemoryMuxA, VmemoryMuxB, VmemoryMuxC, VmemoryMuxD
5116 global FFTBuffA, FFTBuffB, FFTwindowshape
5117 global AWGAwaveform, AWGBwaveform
5118 global T1Vline, T2Vline, T1Iline, T2Iline
5119 global TMAVline, TMBVline, TMCVline, TMDVline
5120 global Tmathline, TMXline, TMYline
5121 global MathString, MathAxis, MathXString, MathYString, MathXAxis, MathYAxis
5122 global Triggerline, Triggersymbol, TgInput, TgEdge, HoldOff, HoldOffentry
5123 global X0L, Y0T, GRW, GRH, MouseX, MouseY, MouseCAV, MouseCAI, MouseCBV, MouseCBI
5124 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
5125 global SHOWsamples, ZOHold, AWGBMode
5126 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
5127 global Show_CBA, Show_CBB, Show_CBC, Show_CBD
5128 global Show_MathX, Show_MathY
5129 global TRACES, TRACESread, RUNstatus
5130 global AutoCenterA, AutoCenterB
5131 global CHAsb, CHBsb, CHAOffset, CHBOffset, CHAIsb, CHBIsb, CHAIOffset, CHBIOffset
5135 global SAMPLErate, SCstart, Two_X_Sample, DISsamples
5136 global TRIGGERsample, TRACEsize, DX
5137 global TRIGGERlevel, TRIGGERentry, AutoLevel
5138 global InOffA, InGainA, InOffB, InGainB
5139 global CurOffA, CurOffB, CurGainA, CurGainB
5140 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
5141 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
5142 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
5143 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
5144 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
5145 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
5146 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
5147 global HozPoss, HozPossentry
5150 if len(VBuffA) < 100:
5152 TRACEsize = SHOWsamples
5162 if TIMEdiv < 0.0002:
5165 if AutoCenterA.get() > 0:
5167 CHAVPosEntry.delete(0,END)
5168 CHAVPosEntry.insert(0,
' {0:.2f} '.format(CHAOffset))
5169 if AutoCenterB.get() > 0:
5171 CHBVPosEntry.delete(0,END)
5172 CHBVPosEntry.insert(0,
' {0:.2f} '.format(CHBOffset))
5175 CH1pdvRange = float(eval(CHAsb.get()))
5178 CHAsb.insert(0, CH1vpdvRange)
5180 CH2pdvRange = float(eval(CHBsb.get()))
5183 CHBsb.insert(0, CH2vpdvRange)
5185 CH1IpdvRange = float(eval(CHAIsb.get()))
5187 CHAIsb.delete(0,END)
5188 CHAIsb.insert(0, CH1IpdvRange)
5190 CH2IpdvRange = float(eval(CHBIsb.get()))
5192 CHBIsb.delete(0,END)
5193 CHBIsb.insert(0, CH2IpdvRange)
5196 CHAOffset = float(eval(CHAVPosEntry.get()))
5198 CHAVPosEntry.delete(0,END)
5199 CHAVPosEntry.insert(0, CHAOffset)
5201 CHAIOffset = float(eval(CHAIPosEntry.get()))
5203 CHAIPosEntry.delete(0,END)
5204 CHAIPosEntry.insert(0, CHAIOffset)
5206 CHBOffset = float(eval(CHBVPosEntry.get()))
5208 CHBVPosEntry.delete(0,END)
5209 CHBVPosEntry.insert(0, CHBOffset)
5211 CHBIOffset = float(eval(CHBIPosEntry.get()))
5213 CHBIPosEntry.delete(0,END)
5214 CHBIPosEntry.insert(0, CHBIOffset)
5216 if CH1pdvRange < 0.001:
5218 if CH2pdvRange < 0.001:
5220 if CH1IpdvRange < 0.1:
5222 if CH2IpdvRange < 0.1:
5226 HoldOff = float(eval(HoldOffentry.get()))
5229 HoldOffentry.delete(0,END)
5230 HoldOffentry.insert(0, HoldOff)
5232 HoldOffentry.delete(0,END)
5233 HoldOffentry.insert(0, HoldOff)
5236 HozPoss = float(eval(HozPossentry.get()))
5238 HozPossentry.delete(0,END)
5239 HozPossentry.insert(0, HozPoss)
5241 hldn = int(HoldOff * SAMPLErate/1000 )
5242 hozpos = int(HozPoss * SAMPLErate/1000 )
5259 if TgInput.get() > 0:
5260 SCmin = int(-1 * TRIGGERsample)
5261 SCmax = int(TRACEsize - TRIGGERsample - 0)
5264 SCmax = TRACEsize - 1
5272 Yconv1 = float(GRH/10.0) / CH1pdvRange
5273 Yconv2 = float(GRH/10.0) / CH2pdvRange
5274 YIconv1 = float(GRH/10.0) / CH1IpdvRange
5275 YIconv2 = float(GRH/10.0) / CH2IpdvRange
5276 Xconv1 = float(GRW/10.0) / CH1pdvRange
5277 Xconv2 = float(GRW/10.0) / CH2pdvRange
5278 XIconv1 = float(GRW/10.0) / CH1IpdvRange
5279 XIconv2 = float(GRW/10.0) / CH2IpdvRange
5280 if MuxScreenStatus.get() == 1:
5282 CHMApdvRange = float(eval(CHB_Asb.get()))
5284 CHB_Asb.delete(0,END)
5285 CHB_Asb.insert(0, CHMApdvRange)
5287 CHMBpdvRange = float(eval(CHB_Bsb.get()))
5289 CHB_Bsb.delete(0,END)
5290 CHB_Bsb.insert(0, CHMBpdvRange)
5292 CHMCpdvRange = float(eval(CHB_Csb.get()))
5294 CHB_Csb.delete(0,END)
5295 CHB_Csb.insert(0, CHMCpdvRange)
5297 CHMDpdvRange = float(eval(CHB_Dsb.get()))
5299 CHB_Dsb.delete(0,END)
5300 CHB_Dsb.insert(0, CHMDpdvRange)
5301 YconvMA = float(GRH/10.0) / CHMApdvRange
5302 YconvMB = float(GRH/10.0) / CHMBpdvRange
5303 YconvMC = float(GRH/10.0) / CHMCpdvRange
5304 YconvMD = float(GRH/10.0) / CHMDpdvRange
5306 CHBAOffset = float(eval(CHB_APosEntry.get()))
5308 CHB_APosEntry.delete(0,END)
5309 CHB_APosEntry.insert(0, CHBAOffset)
5311 CHBBOffset = float(eval(CHB_BPosEntry.get()))
5313 CHB_BPosEntry.delete(0,END)
5314 CHB_BPosEntry.insert(0, CHBBOffset)
5316 CHBCOffset = float(eval(CHB_CPosEntry.get()))
5318 CHB_CPosEntry.delete(0,END)
5319 CHB_CPosEntry.insert(0, CHBCOffset)
5321 CHBDOffset = float(eval(CHB_DPosEntry.get()))
5323 CHB_DPosEntry.delete(0,END)
5324 CHB_DPosEntry.insert(0, CHBDOffset)
5325 if MathAxis ==
"V-A":
5327 CHMOffset = CHAOffset
5328 elif MathAxis ==
"V-B":
5330 CHMOffset = CHBOffset
5331 elif MathAxis ==
"I-A":
5333 CHMOffset = CHAIOffset
5334 elif MathAxis ==
"I-B":
5336 CHMOffset = CHBIOffset
5339 CHMOffset = CHAOffset
5341 if MathYAxis ==
"V-A":
5343 CHMYOffset = CHAOffset
5344 elif MathYAxis ==
"V-B":
5346 CHMYOffset = CHBOffset
5347 elif MathYAxis ==
"I-A":
5349 CHMYOffset = CHAIOffset
5350 elif MathYAxis ==
"I-B":
5352 CHMYOffset = CHBIOffset
5355 CHMYOffset = CHAOffset
5357 if MathXAxis ==
"V-A":
5359 CHMXOffset = CHAOffset
5360 elif MathXAxis ==
"V-B":
5362 CHMXOffset = CHBOffset
5363 elif MathXAxis ==
"I-A":
5365 CHMXOffset = CHAIOffset
5366 elif MathXAxis ==
"I-B":
5368 CHMXOffset = CHBIOffset
5371 CHMXOffset = CHAOffset
5373 c1 = GRH / 2.0 + Y0T
5374 c2 = GRH / 2.0 + Y0T
5376 DISsamples = SAMPLErate * 10.0 * TIMEdiv / 1000.0
5388 if len(VBuffA) < 4
and len(VBuffB) < 4
and len(IBuffA) < 4
and len(IBuffB) < 4:
5390 t = int(SCstart + TRIGGERsample)
5395 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5396 ypi1 = int(c1 - YIconv1 * (IBuffA[t] - CHAIOffset))
5397 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5398 ypi2 = int(c1 - YIconv2 * (IBuffB[t] - CHBIOffset))
5399 DvY1 = DvY2 = DiY1 = DiY2 = 0
5401 if (DISsamples <= GRW):
5402 Xstep = GRW / DISsamples
5403 if AWGBMode.get() == 2
and Two_X_Sample.get() == 0:
5404 xa = int((Xstep/-2.5) - (Xstep*DX))
5406 xa = 0 - int(Xstep*DX)
5407 x = 0 - int(Xstep*DX)
5412 ypv1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5414 ypi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
5415 ypv2 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5416 if MuxScreenStatus.get() == 1:
5417 if len(VBuffMA) > 4:
5418 ypvma = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
5419 if len(VBuffMB) > 4:
5420 ypvmb = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
5421 if len(VBuffMC) > 4:
5422 ypvmc = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
5423 if len(VBuffMD) > 4:
5424 ypvmd = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
5426 ypi2 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
5427 ypm = ypmx = ypmy = GRH / 2.0 + Y0T
5428 if TgInput.get() == 0:
5436 y1 = int(c1 - Yconv1 * (VBuffA[t] - CHAOffset))
5438 yi1 = int(c1 - YIconv1 * (ytemp - CHAIOffset))
5448 if ShowC1_V.get() == 1 :
5449 if ZOHold.get() == 1:
5450 T1Vline.append(int(xa1))
5451 T1Vline.append(int(ypv1))
5452 T1Vline.append(int(xa1))
5453 T1Vline.append(int(y1))
5455 T1Vline.append(int(xa1))
5456 T1Vline.append(int(y1))
5459 if ShowC1_I.get() == 1:
5460 if ZOHold.get() == 1:
5461 T1Iline.append(int(xa1))
5462 T1Iline.append(int(ypi1))
5463 T1Iline.append(int(xa1))
5464 T1Iline.append(int(yi1))
5466 T1Iline.append(int(xa1))
5467 T1Iline.append(int(yi1))
5470 if ShowC2_V.get() == 1:
5471 y1 = int(c2 - Yconv2 * (VBuffB[t] - CHBOffset))
5476 if ZOHold.get() == 1:
5477 T2Vline.append(int(x1))
5478 T2Vline.append(int(ypv2))
5479 T2Vline.append(int(x1))
5480 T2Vline.append(int(y1))
5482 T2Vline.append(int(x1))
5483 T2Vline.append(int(y1))
5486 if Show_CBA.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMA)>4:
5487 y1 = int(c2 - YconvMA * (VBuffMA[t] - CHBAOffset))
5492 if ZOHold.get() == 1:
5493 TMAVline.append(int(x1))
5494 TMAVline.append(int(ypvma))
5495 TMAVline.append(int(x1))
5496 TMAVline.append(int(y1))
5498 TMAVline.append(int(x1))
5499 TMAVline.append(int(y1))
5501 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5502 Xfine = MouseX - X0L - x
5503 MouseMuxA = ypvma - (y1 - ypvma) * (Xfine/Xstep)
5504 if Show_CBB.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMB)>4:
5505 y1 = int(c2 - YconvMB * (VBuffMB[t] - CHBBOffset))
5510 if ZOHold.get() == 1:
5511 TMBVline.append(int(x1))
5512 TMBVline.append(int(ypvmb))
5513 TMBVline.append(int(x1))
5514 TMBVline.append(int(y1))
5516 TMBVline.append(int(x1))
5517 TMBVline.append(int(y1))
5519 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5520 Xfine = MouseX - X0L - x
5521 MouseMuxB = ypvmb - (y1 - ypvmb) * (Xfine/Xstep)
5522 if Show_CBC.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMC)>4:
5523 y1 = int(c2 - YconvMC * (VBuffMC[t] - CHBCOffset))
5528 if ZOHold.get() == 1:
5529 TMCVline.append(int(x1))
5530 TMCVline.append(int(ypvmc))
5531 TMCVline.append(int(x1))
5532 TMCVline.append(int(y1))
5534 TMCVline.append(int(x1))
5535 TMCVline.append(int(y1))
5537 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5538 Xfine = MouseX - X0L - x
5539 MouseMuxC = ypvmc - (y1 - ypvmc) * (Xfine/Xstep)
5540 if Show_CBD.get() == 1
and MuxScreenStatus.get() == 1
and len(VBuffMD)>4:
5541 y1 = int(c2 - YconvMD * (VBuffMD[t] - CHBDOffset))
5546 if ZOHold.get() == 1:
5547 TMDVline.append(int(x1))
5548 TMDVline.append(int(ypvmd))
5549 TMDVline.append(int(x1))
5550 TMDVline.append(int(y1))
5552 TMDVline.append(int(x1))
5553 TMDVline.append(int(y1))
5555 if (MouseX - X0L) >= x
and (MouseX - X0L) < (x + Xstep):
5556 Xfine = MouseX - X0L - x
5557 MouseMuxD = ypvmd - (y1 - ypvmd) * (Xfine/Xstep)
5558 if ShowC2_I.get() == 1:
5560 yi1 = int(c1 - YIconv2 * (ytemp - CHBIOffset))
5565 if (ZOHold.get() == 1):
5566 T2Iline.append(int(x1))
5567 T2Iline.append(int(ypi2))
5568 T2Iline.append(int(x1))
5569 T2Iline.append(int(yi1))
5571 T2Iline.append(int(x1))
5572 T2Iline.append(int(yi1))
5575 if MathTrace.get() > 0:
5576 if MathTrace.get() == 1:
5577 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
5579 elif MathTrace.get() == 2:
5580 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
5582 elif MathTrace.get() == 3:
5583 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
5585 elif MathTrace.get() == 4:
5586 Ypower = VBuffA[t] * IBuffA[t]
5587 ytemp = YIconv1 * (Ypower - CHAIOffset)
5588 y1 = int(c1 - ytemp)
5590 elif MathTrace.get() == 5:
5591 Ypower = VBuffB[t] * IBuffB[t]
5592 ytemp = YIconv2 * (Ypower - CHBIOffset)
5593 y1 = int(c2 - ytemp)
5595 elif MathTrace.get() == 6:
5596 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
5597 ytemp = YIconv1 * (Yohms - CHAIOffset)
5598 y1 = int(c1 - ytemp)
5600 elif MathTrace.get() == 7:
5601 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
5602 ytemp = YIconv2 * (Yohms - CHBIOffset)
5603 y1 = int(c2 - ytemp)
5605 elif MathTrace.get() == 8:
5606 Ydif = (IBuffA[t] - IBuffB[t])
5607 ytemp = YIconv1 * (Ydif - CHAIOffset)
5608 y1 = int(c2 - ytemp)
5610 elif MathTrace.get() == 9:
5611 Ydif = (IBuffB[t] - IBuffA[t])
5612 ytemp = YIconv2 * (Ydif - CHBIOffset)
5613 y1 = int(c2 - ytemp)
5615 elif MathTrace.get() == 10:
5617 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
5619 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
5621 elif MathTrace.get() == 11:
5623 Y1 = (IBuffB[t] / IBuffA[t])
5625 Y1 = (IBuffB[t] / 0.000001)
5626 ytemp = YIconv2 * (Y1 - CHBIOffset)
5627 y1 = int(c2 - ytemp)
5629 elif MathTrace.get() == 12:
5632 MathResult = eval(MathString)
5633 MathResult = MathResult - CHMOffset
5634 y1 = int(c1 - YconvM * MathResult)
5643 if ZOHold.get() == 1:
5644 Tmathline.append(int(x1))
5645 Tmathline.append(int(ypm))
5646 Tmathline.append(int(x1))
5647 Tmathline.append(int(y1))
5649 Tmathline.append(int(x1))
5650 Tmathline.append(int(y1))
5652 if Show_MathX.get() > 0:
5654 MathResult = eval(MathXString)
5655 MathResult = MathResult - CHMXOffset
5656 y1 = int(c1 - XconvMxy * MathResult)
5665 if ZOHold.get() == 1:
5666 TMXline.append(int(x1))
5667 TMXline.append(int(ypmx))
5668 TMXline.append(int(x1))
5669 TMXline.append(int(y1))
5671 TMXline.append(int(x1))
5672 TMXline.append(int(y1))
5674 if Show_MathY.get() > 0:
5676 MathResult = eval(MathYString)
5677 MathResult = MathResult - CHMYOffset
5678 y1 = int(c1 - YconvMxy * MathResult)
5687 if ZOHold.get() == 1:
5688 TMYline.append(int(x1))
5689 TMYline.append(int(ypmy))
5690 TMYline.append(int(x1))
5691 TMYline.append(int(y1))
5693 TMYline.append(int(x1))
5694 TMYline.append(int(y1))
5697 if MouseX - X0L >= x
and MouseX - X0L < (x + Xstep):
5698 Xfine = MouseX - X0L - x
5699 MouseCAV = ypv1 - (DvY1 * (Xfine/Xstep))
5700 MouseCAI = ypi1 - (DiY1 * (Xfine/Xstep))
5701 MouseCBV = ypv2 - (DvY2 * (Xfine/Xstep))
5702 MouseCBI = ypi2 - (DiY2 * (Xfine/Xstep))
5709 Tstep = DISsamples / GRW
5714 t = int(SCstart + TRIGGERsample)
5715 if t > len(VBuffA)-1:
5723 if (t >= len(VBuffA)):
5727 ylo = VBuffA[t] - CHAOffset
5728 ilo = IBuffA[t] - CHAIOffset
5732 while n < (t + Tstep)
and n < TRACEsize:
5733 if ( ShowC1_V.get() == 1 ):
5734 v = VBuffA[t] - CHAOffset
5739 if ( ShowC1_I.get() == 1 ):
5740 i = IBuffA[t] - CHAIOffset
5746 if ( ShowC1_V.get() == 1 ):
5747 ylo = int(c1 - Yconv1 * ylo)
5748 yhi = int(c1 - Yconv1 * yhi)
5757 T1Vline.append(int(x1))
5758 T1Vline.append(int(ylo))
5759 T1Vline.append(int(x1))
5760 T1Vline.append(int(yhi))
5762 if ( ShowC1_I.get() == 1 ):
5763 ilo = int(c1 - YIconv1 * ilo)
5764 ihi = int(c1 - YIconv1 * ihi)
5773 T1Iline.append(int(x1))
5774 T1Iline.append(int(ilo))
5775 T1Iline.append(int(x1))
5776 T1Iline.append(int(ihi))
5778 ylo = VBuffB[t] - CHBOffset
5779 ilo = IBuffB[t] - CHBIOffset
5783 if MuxScreenStatus.get() == 0:
5784 while n < (t + Tstep)
and n < TRACEsize:
5785 if ( ShowC2_V.get() == 1 ):
5786 v = VBuffB[t] - CHBOffset
5791 if ( ShowC2_I.get() == 1 ):
5792 i = IBuffB[t] - CHBIOffset
5798 if ( ShowC2_V.get() == 1 ):
5799 ylo = int(c2 - Yconv2 * ylo)
5800 yhi = int(c2 - Yconv2 * yhi)
5810 T2Vline.append(int(x1))
5811 T2Vline.append(int(ylo))
5812 T2Vline.append(int(x1))
5813 T2Vline.append(int(yhi))
5815 if ( ShowC2_I.get() == 1 ):
5816 ilo = int(c2 - YIconv2 * ilo)
5817 ihi = int(c2 - YIconv2 * ihi)
5826 T2Iline.append(int(x1))
5827 T2Iline.append(int(ilo))
5828 T2Iline.append(int(x1))
5829 T2Iline.append(int(ihi))
5832 if Show_CBA.get() == 1
and len(VBuffMA)>4:
5833 if t < len(VBuffMA):
5834 ylo = VBuffMA[t] - CHBAOffset
5837 while n < (t + Tstep)
and n < len(VBuffMA):
5838 v = VBuffMA[t] - CHBAOffset
5844 ylo = int(c2 - YconvMA * ylo)
5845 yhi = int(c2 - YconvMA * yhi)
5854 TMAVline.append(int(x1))
5855 TMAVline.append(int(ylo))
5856 TMAVline.append(int(x1))
5857 TMAVline.append(int(yhi))
5858 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5860 if Show_CBB.get() == 1
and len(VBuffMB)>4:
5861 if t < len(VBuffMB):
5862 ylo = VBuffMB[t] - CHBBOffset
5865 while n < (t + Tstep)
and n < len(VBuffMB):
5866 v = VBuffMB[t] - CHBBOffset
5872 ylo = int(c2 - YconvMB * ylo)
5873 yhi = int(c2 - YconvMB * yhi)
5882 TMBVline.append(int(x1))
5883 TMBVline.append(int(ylo))
5884 TMBVline.append(int(x1))
5885 TMBVline.append(int(yhi))
5886 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5888 if Show_CBC.get() == 1
and len(VBuffMC)>4:
5889 if t < len(VBuffMC):
5890 ylo = VBuffMC[t] - CHBCOffset
5893 while n < (t + Tstep)
and n < len(VBuffMC):
5894 v = VBuffMC[t] - CHBCOffset
5900 ylo = int(c2 - YconvMC * ylo)
5901 yhi = int(c2 - YconvMC * yhi)
5910 TMCVline.append(int(x1))
5911 TMCVline.append(int(ylo))
5912 TMCVline.append(int(x1))
5913 TMCVline.append(int(yhi))
5914 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5916 if Show_CBD.get() == 1
and len(VBuffMD)>4:
5917 if t < len(VBuffMD):
5918 ylo = VBuffMD[t] - CHBDOffset
5921 while n < (t + Tstep)
and n < len(VBuffMD):
5922 v = VBuffMD[t] - CHBDOffset
5928 ylo = int(c2 - YconvMD * ylo)
5929 yhi = int(c2 - YconvMD * yhi)
5938 TMDVline.append(int(x1))
5939 TMDVline.append(int(ylo))
5940 TMDVline.append(int(x1))
5941 TMDVline.append(int(yhi))
5942 if (MouseX - X0L) > (x - Xstep)
and (MouseX - X0L) < (x + Xstep):
5944 if ( ShowC2_I.get() == 1 ):
5945 while n < (t + Tstep)
and n < TRACEsize:
5946 i = IBuffB[t] - CHBIOffset
5952 ilo = int(c2 - YIconv2 * ilo)
5953 ihi = int(c2 - YIconv2 * ihi)
5962 T2Iline.append(int(x1))
5963 T2Iline.append(int(ilo))
5964 T2Iline.append(int(x1))
5965 T2Iline.append(int(ihi))
5966 if MathTrace.get() > 0:
5967 if MathTrace.get() == 1:
5968 y1 = int(c1 - Yconv1 * (VBuffA[t] + VBuffB[t] - CHAOffset))
5970 elif MathTrace.get() == 2:
5971 y1 = int(c1 - Yconv1 * (VBuffA[t] - VBuffB[t] - CHAOffset))
5973 elif MathTrace.get() == 3:
5974 y1 = int(c2 - Yconv2 * (VBuffB[t] - VBuffA[t] - CHBOffset))
5976 elif MathTrace.get() == 4:
5977 Ypower = VBuffA[t] * IBuffA[t]
5978 ytemp = YIconv1 * (Ypower - CHAIOffset)
5979 y1 = int(c1 - ytemp)
5981 elif MathTrace.get() == 5:
5982 Ypower = VBuffB[t] * IBuffB[t]
5983 ytemp = YIconv2 * (Ypower - CHBIOffset)
5984 y1 = int(c2 - ytemp)
5986 elif MathTrace.get() == 6:
5987 Yohms = VBuffA[t] / (IBuffA[t] / 1000.0)
5988 ytemp = YIconv1 * (Yohms- CHAIOffset)
5989 y1 = int(c1 - ytemp)
5991 elif MathTrace.get() == 7:
5992 Yohms = VBuffB[t] / (IBuffB[t] / 1000.0)
5993 ytemp = YIconv2 * (Yohms - CHBIOffset)
5994 y1 = int(c2 - ytemp)
5996 elif MathTrace.get() == 8:
5997 Ydif = (IBuffA[t] - IBuffB[t])
5998 ytemp = YIconv1 * (Ydif - CHAIOffset)
5999 y1 = int(c2 - ytemp)
6001 elif MathTrace.get() == 9:
6002 Ydif = (IBuffB[t] - IBuffA[t])
6003 ytemp = YIconv2 * (Ydif - CHBIOffset)
6004 y1 = int(c2 - ytemp)
6006 elif MathTrace.get() == 10:
6008 y1 = int(c1 - Yconv2 * ((VBuffB[t] / VBuffA[t]) - CHBOffset))
6010 y1 = int(c1 - Yconv2 * ((VBuffB[t] / 0.000001) - CHBOffset))
6011 elif MathTrace.get() == 11:
6013 Y1 = (IBuffB[t] / IBuffA[t])
6015 Y1 = (IBuffB[t] / 0.000001)
6016 ytemp = YIconv2 * (Y1 - CHBIOffset)
6017 y1 = int(c2 - ytemp)
6019 elif MathTrace.get() == 12:
6022 MathResult = eval(MathString)
6023 MathResult = MathResult - CHMOffset
6024 y1 = int(c1 - YconvM * MathResult)
6033 if (ZOHold.get() == 1):
6034 Tmathline.append(int(x1))
6035 Tmathline.append(int(ypm))
6036 Tmathline.append(int(x1))
6037 Tmathline.append(int(y1))
6039 Tmathline.append(int(x1))
6040 Tmathline.append(int(y1))
6042 if Show_MathX.get() > 0:
6044 MathResult = eval(MathXString)
6045 MathResult = MathResult - CHMXOffset
6046 y1 = int(c1 - XconvMxy * MathResult)
6055 if ZOHold.get() == 1:
6056 TMXline.append(int(x1))
6057 TMXline.append(int(ypmx))
6058 TMXline.append(int(x1))
6059 TMXline.append(int(y1))
6061 TMXline.append(int(x1))
6062 TMXline.append(int(y1))
6064 if Show_MathY.get() > 0:
6066 MathResult = eval(MathYString)
6067 MathResult = MathResult - CHMYOffset
6068 y1 = int(c1 - YconvMxy * MathResult)
6077 if ZOHold.get() == 1:
6078 TMYline.append(int(x1))
6079 TMYline.append(int(ypmy))
6080 TMYline.append(int(x1))
6081 TMYline.append(int(y1))
6083 TMYline.append(int(x1))
6084 TMYline.append(int(y1))
6087 if (MouseX - X0L) == x:
6093 if (t > len(VBuffA)):
6101 if TgInput.get() > 0:
6102 if TgInput.get() == 1 :
6104 ytemp = Yconv1 * (float(TRIGGERlevel)-CHAOffset)
6105 y1 = int(c1 - ytemp)
6106 elif TgInput.get() == 2:
6108 y1 = int(c1 - YIconv1 * (float(TRIGGERlevel) - CHAIOffset))
6109 elif TgInput.get() == 3:
6111 ytemp = Yconv2 * (float(TRIGGERlevel)-CHBOffset)
6112 y1 = int(c2 - ytemp)
6113 elif TgInput.get() == 4:
6115 y1 = int(c2 - YIconv2 * (float(TRIGGERlevel) - CHBIOffset))
6121 Triggerline.append(int(x1-5))
6122 Triggerline.append(int(y1+5))
6123 Triggerline.append(int(x1+5))
6124 Triggerline.append(int(y1))
6125 Triggerline.append(int(x1-5))
6126 Triggerline.append(int(y1-5))
6127 Triggerline.append(int(x1-5))
6128 Triggerline.append(int(y1+5))
6130 if TgEdge.get() == 0:
6136 Triggersymbol.append(int(x1-10))
6137 Triggersymbol.append(int(Ymin+y1))
6138 Triggersymbol.append(int(x1))
6139 Triggersymbol.append(int(Ymin+y1))
6140 Triggersymbol.append(int(x1))
6141 Triggersymbol.append(int(Ymin+y2))
6142 Triggersymbol.append(int(x1+10))
6143 Triggersymbol.append(int(Ymin+y2))
6146 global VBuffA, VBuffB, IBuffA, IBuffB
6147 global VmemoryA, VmemoryB, ImemoryA, ImemoryB
6148 global TXYline, MathXString, MathYString, MathXAxis, MathYAxis
6149 global HoldOff, HoldOffentry
6150 global X0LXY, Y0TXY, GRWXY, GRHXY
6151 global YminXY, YmaxXY, XminXY, XmaxXY
6152 global SHOWsamples, ZOHold, AWGBMode
6153 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
6154 global TRACES, TRACESread, RUNstatus
6155 global Xsignal, Ysignal
6156 global CHAsbxy, CHBsbxy, CHAOffset, CHBOffset, CHAIsbxy, CHBIsbxy, CHAIOffset, CHBIOffset
6161 global SCstart, MathString
6162 global TRIGGERsample, TRACEsize, DX
6163 global TRIGGERlevel, TRIGGERentry, AutoLevel
6164 global InOffA, InGainA, InOffB, InGainB
6165 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2
6166 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2
6167 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6168 global CHAVPosEntryxy, CHAIPosEntryxy, CHAVPosEntryxy, CHBIPosEntryxy
6169 global CHAIGainEntry, CHBIGainEntry, CHAIOffsetEntry, CHBIOffsetEntry
6170 global HozPoss, HozPossentry
6173 if len(VBuffA) < 100:
6175 TRACEsize = SHOWsamples
6181 CH1pdvRange = float(eval(CHAsbxy.get()))
6183 CHAsbxy.delete(0,END)
6184 CHAsbxy.insert(0, CH1vpdvRange)
6186 CH2pdvRange = float(eval(CHBsbxy.get()))
6188 CHBsbxy.delete(0,END)
6189 CHBsbxy.insert(0, CH2vpdvRange)
6191 CH1IpdvRange = float(eval(CHAIsbxy.get()))
6193 CHAIsbxy.delete(0,END)
6194 CHAIsbxy.insert(0, CH1IpdvRange)
6196 CH2IpdvRange = float(eval(CHBIsbxy.get()))
6198 CHBIsbxy.delete(0,END)
6199 CHBIsbxy.insert(0, CH2IpdvRange)
6202 CHAOffset = float(eval(CHAVPosEntryxy.get()))
6204 CHAVPosEntryxy.delete(0,END)
6205 CHAVPosEntryxy.insert(0, CHAOffset)
6207 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
6209 CHAIPosEntryxy.delete(0,END)
6210 CHAIPosEntryxy.insert(0, CHAIOffset)
6212 CHBOffset = float(eval(CHBVPosEntryxy.get()))
6214 CHBVPosEntry.delete(0,END)
6215 CHBVPosEntry.insert(0, CHBOffset)
6217 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
6219 CHBIPosEntryxy.delete(0,END)
6220 CHBIPosEntryxy.insert(0, CHBIOffset)
6222 if CH1pdvRange < 0.001:
6224 if CH2pdvRange < 0.001:
6226 if CH1IpdvRange < 0.1:
6228 if CH2IpdvRange < 0.1:
6231 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
6232 Yconv2 = float(GRHXY/10.0) / CH2pdvRange
6233 YIconv1 = float(GRHXY/10.0) / CH1IpdvRange
6234 YIconv2 = float(GRHXY/10.0) / CH2IpdvRange
6235 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
6236 Xconv2 = float(GRWXY/10.0) / CH2pdvRange
6237 XIconv1 = float(GRWXY/10.0) / CH1IpdvRange
6238 XIconv2 = float(GRWXY/10.0) / CH2IpdvRange
6240 if MathYAxis ==
"V-A":
6242 CHMYOffset = CHAOffset
6243 elif MathYAxis ==
"V-B":
6245 CHMYOffset = CHBOffset
6246 elif MathYAxis ==
"I-A":
6248 CHMYOffset = CHAIOffset
6249 elif MathYAxis ==
"I-B":
6251 CHMYOffset = CHBIOffset
6254 CHMYOffset = CHAOffset
6255 if MathXAxis ==
"V-A":
6257 CHMXOffset = CHAOffset
6258 elif MathXAxis ==
"V-B":
6260 CHMXOffset = CHBOffset
6261 elif MathYAxis ==
"I-A":
6263 CHMXOffset = CHAIOffset
6264 elif MathXAxis ==
"I-B":
6266 CHMXOffset = CHBIOffset
6269 CHMXOffset = CHAOffset
6272 t = int(TRIGGERsample)
6273 c1 = GRHXY / 2.0 + Y0TXY
6274 c2 = GRWXY / 2.0 + X0LXY
6275 while (t < TRACEsize):
6276 if (Xsignal.get() == 3
and Ysignal.get() == 1):
6277 ylo = VBuffA[t] - CHAOffset
6278 xlo = VBuffB[t] - CHBOffset
6279 ylo = int(c1 - Yconv1 * ylo)
6280 xlo = int(c2 + Xconv2 * xlo)
6281 elif (Xsignal.get() == 1
and Ysignal.get() == 3):
6282 ylo = VBuffB[t] - CHBOffset
6283 xlo = VBuffA[t] - CHAOffset
6284 ylo = int(c1 - Yconv2 * ylo)
6285 xlo = int(c2 + Xconv1 * xlo)
6286 elif (Xsignal.get() == 5
and Ysignal.get() == 3):
6287 if ( MathTrace.get() == 2):
6288 ylo = VBuffB[t] - CHBOffset
6289 ylo = int(c1 - Yconv2 * ylo)
6290 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
6291 xlo = int(c2 + Xconv1 * xlo)
6292 elif (Xsignal.get() == 5
and Ysignal.get() == 4):
6293 if ( MathTrace.get() == 2):
6294 ylo = (IBuffB[t]) - CHBIOffset
6295 ylo = int(c1 - YIconv2 * ylo)
6296 xlo = VBuffA[t] - VBuffB[t] - CHAOffset
6297 xlo = int(c2 + Xconv1 * xlo)
6298 elif (Xsignal.get() == 5
and Ysignal.get() == 2):
6299 if MathTrace.get() == 3:
6300 ylo = (IBuffA[t]) - CHAIOffset
6301 ylo = int(c1 - YIconv1 * ylo)
6302 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
6303 xlo = int(c2 + Xconv2 * xlo)
6304 elif (Xsignal.get() == 3
and Ysignal.get() == 5):
6305 if MathTrace.get() == 2:
6306 ylo = VBuffA[t] - VBuffB[t] - CHAOffset
6307 ylo = int(c1 - Yconv1 * ylo)
6308 xlo = VBuffB[t] - CHBOffset
6309 xlo = int(c2 + Xconv2 * xlo)
6310 elif (Xsignal.get() == 5
and Ysignal.get() == 1):
6311 if MathTrace.get() == 3:
6312 ylo = VBuffA[t] - CHAOffset
6313 ylo = int(c1 - Yconv1 * ylo)
6314 xlo = VBuffB[t] - VBuffA[t] - CHBOffset
6315 xlo = int(c2 + Xconv2 * xlo)
6316 elif (Xsignal.get() == 1
and Ysignal.get() == 5):
6317 if MathTrace.get() == 3:
6318 ylo = VBuffB[t] - VBuffA[t] - CHBOffset
6319 ylo = int(c1 - Yconv2 * ylo)
6320 xlo = VBuffA[t] - CHAOffset
6321 xlo = int(c2 + Xconv1 * xlo)
6322 elif (Xsignal.get() == 1
and Ysignal.get() == 2):
6323 ylo = (IBuffA[t]) - CHAIOffset
6324 xlo = VBuffA[t] - CHAOffset
6325 ylo = int(c1 - YIconv1 * ylo)
6326 xlo = int(c2 + Xconv1 * xlo)
6327 elif (Xsignal.get() == 3
and Ysignal.get() == 2):
6328 ylo = (IBuffA[t]) - CHAIOffset
6329 xlo = VBuffB[t] - CHBOffset
6330 ylo = int(c1 - YIconv1 * ylo)
6331 xlo = int(c2 + Xconv2 * xlo)
6332 elif (Xsignal.get() == 2
and Ysignal.get() == 1):
6333 ylo = VBuffA[t] - CHAOffset
6334 xlo = (IBuffA[t]) - CHAIOffset
6335 ylo = int(c1 - Yconv1 * ylo)
6336 xlo = int(c2 + XIconv1 * xlo)
6337 elif (Xsignal.get() == 2
and Ysignal.get() == 3):
6338 ylo = VBuffB[t] - CHBOffset
6339 xlo = (IBuffA[t]) - CHAIOffset
6340 ylo = int(c1 - Yconv2 * ylo)
6341 xlo = int(c2 + XIconv1 * xlo)
6342 elif (Xsignal.get() == 3
and Ysignal.get() == 4):
6343 ylo = (IBuffB[t]) - CHBIOffset
6344 xlo = VBuffB[t] - CHBOffset
6345 ylo = int(c1 - YIconv2 * ylo)
6346 xlo = int(c2 + Xconv2 * xlo)
6347 elif (Xsignal.get() == 4
and Ysignal.get() == 3):
6348 ylo = VBuffB[t] - CHBOffset
6349 xlo = (IBuffB[t]) - CHBIOffset
6350 ylo = int(c1 - Yconv2 * ylo)
6351 xlo = int(c2 + XIconv2 * xlo)
6352 elif (Xsignal.get() == 4
and Ysignal.get() == 2):
6353 ylo = (IBuffA[t]) - CHAIOffset
6354 xlo = (IBuffB[t]) - CHBIOffset
6355 ylo = int(c1 - YIconv1 * ylo)
6356 xlo = int(c2 + XIconv2 * xlo)
6357 elif (Xsignal.get() == 2
and Ysignal.get() == 4):
6358 ylo = (IBuffB[t]) - CHBIOffset
6359 xlo = (IBuffA[t]) - CHAIOffset
6360 ylo = int(c1 - YIconv2 * ylo)
6361 xlo = int(c2 + XIconv1 * xlo)
6362 elif (Xsignal.get() == 1
and Ysignal.get() == 4):
6363 ylo = (IBuffB[t]) - CHBIOffset
6364 xlo = VBuffA[t] - CHAOffset
6365 ylo = int(c1 - YIconv2 * ylo)
6366 xlo = int(c2 + Xconv1 * xlo)
6367 elif (Xsignal.get() == 5
and Ysignal.get() == 5):
6369 MathResult = eval(MathYString)
6370 MathResult = MathResult - CHMYOffset
6371 ylo = int(c1 - YconvMxy * MathResult)
6375 MathResult = eval(MathXString)
6376 MathResult = MathResult - CHMXOffset
6377 xlo = int(c2 + XconvMxy * MathResult)
6388 TXYline.append(int(xlo))
6389 TXYline.append(int(ylo))
6393 global T1Vline, T2Vline, T1Iline, T2Iline, TXYline
6394 global TMXline, TMYline
6395 global T1VRline, T2VRline, T1IRline, T2IRline
6396 global Triggerline, Triggersymbol, Tmathline, TMRline, TXYRline
6397 global VBuffA, VBuffB, IBuffA, IBuffB
6398 global VBuffMA, VBuffMB, VBuffMC, VBuffMD, MuxScreenStatus
6399 global TMAVline, TMBVline, TMCVline, TMDVline, TMCRline, TMBRline
6400 global VmemoryA, VmemoryB, VmemoryA, ImemoryB
6405 global FontSize, EnableHSsampling, ETSDisp, MinigenScreenStatus
6406 global LabelPlotText, PlotLabelText
6407 global MouseX, MouseY, MouseWidget, MouseCAV, MouseCAI, MouseCBV, MouseCBI
6408 global MouseMuxA, MouseMuxB, MouseMuxC, MouseMuxD
6409 global ShowXCur, ShowYCur, TCursor, VCursor
6411 global ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I, ShowRXY, Show_MathX, Show_MathY
6412 global ShowRA_V, ShowRA_I, ShowRB_V, ShowRB_I, ShowMath
6413 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MathUnits, MathXUnits, MathYUnits
6414 global Xsignal, Ysignal, MathTrace, MathAxis, MathXAxis, MathYAxis
6415 global RUNstatus, SingleShot, ManualTrigger, session
6426 global TIMEdiv, Mulx, DISsamples
6427 global SAMPLErate, contloop, discontloop, HtMulEntry
6428 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry, TgInput
6429 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7, COLORtraceR7
6430 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6
6431 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5, COLORtraceR6
6432 global CANVASwidth, CANVASheight
6433 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
6434 global ScreenTrefresh, SmoothCurves, Is_Triggered
6435 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
6436 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
6437 global InOffA, InGainA, InOffB, InGainB
6438 global CurOffA, CurOffB, CurGainA, CurGainB
6440 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
6441 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
6442 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
6443 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
6444 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
6445 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
6446 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
6447 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
6448 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
6449 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
6450 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
6451 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
6452 global AWGAShape, AWGBShape, MeasDiffAB, MeasDiffBA
6453 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
6454 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
6455 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
6456 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
6457 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
6458 global DacScreenStatus, DigScreenStatus, CHA_RC_HP, CHB_RC_HP
6459 global D0, D1, D2, D3, D4, D5, D6, D7
6460 global DevID, devx, MarkerNum, MarkerScale, MeasGateLeft, MeasGateRight, MeasGateStatus
6461 global HozPoss, HozPossentry
6462 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
6463 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
6464 global CHBADelayR1, CHBADelayR2, CHBADelayF, MeasDelay
6470 Tstep = (10.0 * TIMEdiv) / GRW
6473 CH1pdvRange = float(eval(CHAsb.get()))
6476 CHAsb.insert(0, CH1vpdvRange)
6478 CH2pdvRange = float(eval(CHBsb.get()))
6481 CHBsb.insert(0, CH2vpdvRange)
6483 CH1IpdvRange = float(eval(CHAIsb.get()))
6485 CHAIsb.delete(0,END)
6486 CHAIsb.insert(0, CH1IpdvRange)
6488 CH2IpdvRange = float(eval(CHBIsb.get()))
6490 CHBIsb.delete(0,END)
6491 CHBIsb.insert(0, CH2IpdvRange)
6494 CHAOffset = float(eval(CHAVPosEntry.get()))
6496 CHAVPosEntry.delete(0,END)
6497 CHAVPosEntry.insert(0, CHAOffset)
6499 CHAIOffset = float(eval(CHAIPosEntry.get()))
6501 CHAIPosEntry.delete(0,END)
6502 CHAIPosEntry.insert(0, CHAIOffset)
6504 CHBOffset = float(eval(CHBVPosEntry.get()))
6506 CHBVPosEntry.delete(0,END)
6507 CHBVPosEntry.insert(0, CHBOffset)
6509 CHBIOffset = float(eval(CHBIPosEntry.get()))
6511 CHBIPosEntry.delete(0,END)
6512 CHBIPosEntry.insert(0, CHBIOffset)
6514 HoldOff = float(eval(HoldOffentry.get()))
6518 HoldOffentry.delete(0,END)
6519 HoldOffentry.insert(0, HoldOff)
6520 if ETSDisp.get() > 0
or MinigenScreenStatus.get() > 0:
6522 Mulx = float(eval(HtMulEntry.get()))
6527 if EnableHSsampling > 0:
6528 HtMulEntry.delete(0,END)
6529 HtMulEntry.insert(0, 1)
6534 HozPoss = float(eval(HozPossentry.get()))
6536 HozPossentry.delete(0,END)
6537 HozPossentry.insert(0, HozPoss)
6538 if MuxScreenStatus.get() == 1:
6540 CHMApdvRange = float(eval(CHB_Asb.get()))
6542 CHB_Asb.delete(0,END)
6543 CHB_Asb.insert(0, CHMApdvRange)
6545 CHMBpdvRange = float(eval(CHB_Bsb.get()))
6547 CHB_Bsb.delete(0,END)
6548 CHB_Bsb.insert(0, CHMBpdvRange)
6550 CHMCpdvRange = float(eval(CHB_Csb.get()))
6552 CHB_Csb.delete(0,END)
6553 CHB_Csb.insert(0, CHMCpdvRange)
6555 CHMDpdvRange = float(eval(CHB_Dsb.get()))
6557 CHB_Dsb.delete(0,END)
6558 CHB_Dsb.insert(0, CHMDpdvRange)
6559 if CHMApdvRange < 0.001:
6560 CHMApdvRange = 0.001
6561 if CHMBpdvRange < 0.001:
6562 CHMBpdvRange = 0.001
6563 if CHMCpdvRange < 0.001:
6564 CHMCpdvRange = 0.001
6565 if CHMDpdvRange < 0.001:
6566 CHMDpdvRange = 0.001
6568 CHBAOffset = float(eval(CHB_APosEntry.get()))
6570 CHB_APosEntry.delete(0,END)
6571 CHB_APosEntry.insert(0, CHBAOffset)
6573 CHBBOffset = float(eval(CHB_BPosEntry.get()))
6575 CHB_BPosEntry.delete(0,END)
6576 CHB_BPosEntry.insert(0, CHBBOffset)
6578 CHBCOffset = float(eval(CHB_CPosEntry.get()))
6580 CHB_CPosEntry.delete(0,END)
6581 CHB_CPosEntry.insert(0, CHBCOffset)
6583 CHBDOffset = float(eval(CHB_DPosEntry.get()))
6585 CHB_DPosEntry.delete(0,END)
6586 CHB_DPosEntry.insert(0, CHBDOffset)
6588 if CH1pdvRange < 0.001:
6590 if CH2pdvRange < 0.001:
6592 if CH1IpdvRange < 0.1:
6594 if CH2IpdvRange < 0.1:
6596 vt = HoldOff + HozPoss
6597 if ScreenTrefresh.get() == 0:
6607 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)
6608 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)
6609 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)
6610 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)
6612 RightOffset = FontSize * 3
6613 LeftOffset = int(FontSize/2)
6614 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6615 ca.create_text(x1-LeftOffset, 12, text=
"CA-V", fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize-1 ))
6616 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6617 ca.create_text(x2+LeftOffset, 12, text=
"CA-I", fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize-1 ))
6618 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6619 ca.create_text(x1-RightOffset+2, 12, text=
"CB-V", fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize-1 ))
6620 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6621 ca.create_text(x2+RightOffset+4, 12, text=
"CB-I", fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize-1 ))
6624 y = Y0T + i * GRH/10.0
6627 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6632 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
6633 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6637 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6639 if (ShowC1_V.get() == 1
or MathTrace.get() == 1
or MathTrace.get() == 2
or MathFlag1):
6640 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
6642 Vaxis_label = str(round(Vaxis_value,3 ))
6643 ca.create_text(x1-LeftOffset, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
6645 if (ShowC1_I.get() == 1
or MathTrace.get() == 4
or MathTrace.get() == 6
or MathTrace.get() == 8
or MathFlag3):
6646 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
6647 Iaxis_label = str(round(Iaxis_value, 3))
6648 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
6650 if (ShowC2_V.get() == 1
or MathTrace.get() == 3
or MathTrace.get() == 10
or MathFlag2):
6651 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
6652 Vaxis_label = str(round(Vaxis_value, 3))
6653 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6655 if (ShowC2_I.get() == 1
or MathTrace.get() == 5
or MathTrace.get() == 7
or MathTrace.get() == 9
or MathTrace.get() == 11
or MathFlag4):
6656 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
6657 Iaxis_label = str(round(Iaxis_value, 3))
6658 ca.create_text(x2+RightOffset+4, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6659 if MuxScreenStatus.get() == 1:
6660 if Show_CBA.get() == 1:
6661 Vaxis_value = (((5-i) * CHMApdvRange ) + CHBAOffset)
6662 Vaxis_label = str(round(Vaxis_value, 3))
6663 ca.create_text(x1-RightOffset+2, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
6664 if Show_CBB.get() == 1:
6665 Iaxis_value = 1.0 * (((5-i) * CHMBpdvRange ) + CHBBOffset)
6666 Iaxis_label = str(round(Iaxis_value, 3))
6667 ca.create_text(x2+LeftOffset, y, text=Iaxis_label, fill=COLORtrace6, anchor=
"w", font=(
"arial", FontSize ))
6668 if Show_CBC.get() == 1:
6669 Iaxis_value = 1.0 * (((5-i) * CHMCpdvRange ) + CHBCOffset)
6670 Iaxis_label = str(round(Iaxis_value, 3))
6671 ca.create_text(x2+RightOffset-3, y, text=Iaxis_label, fill=COLORtrace7, anchor=
"w", font=(
"arial", FontSize ))
6672 if Show_CBD.get() == 1:
6673 Iaxis_value = 1.0 * (((5-i) * CHMDpdvRange ) + CHBDOffset)
6674 Iaxis_label = str(round(Iaxis_value, 3))
6675 ca.create_text(x2+RightOffset+10, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"w", font=(
"arial", FontSize ))
6687 x = X0L + i * GRW/10.0
6690 ca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
6695 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
6696 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6701 axis_value = ((i * vx)+ vt) / 1000.0
6702 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6703 if vx < 1000
and vx >= 1:
6704 axis_value = (i * vx) + vt
6705 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6707 axis_value = ((i * vx) + vt) * 1000.0
6708 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6709 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6711 ca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
6713 axis_value = ((i * vx)+ vt) / 1000.0
6714 axis_label =
' {0:.1f} '.format(axis_value) +
" S"
6715 if vx < 1000
and vx >= 1:
6716 axis_value = (i * vx) + vt
6717 axis_label =
' {0:.1f} '.format(axis_value) +
" mS"
6719 axis_value = ((i * vx) + vt) * 1000.0
6720 axis_label =
' {0:.1f} '.format(axis_value) +
" uS"
6721 ca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
6725 if len(Triggerline) > 2:
6726 ca.create_polygon(Triggerline, outline=COLORtrigger, fill=COLORtrigger, width=1)
6727 ca.create_line(Triggersymbol, fill=COLORtrigger, width=GridWidth.get())
6728 if TgInput.get() == 1:
6730 if TgInput.get() == 2:
6732 if TgInput.get() == 3:
6734 if TgInput.get() == 4:
6736 if Is_Triggered == 1:
6737 TgLabel = TgLabel +
" Triggered"
6739 TgLabel = TgLabel +
" Not Triggered"
6740 if SingleShot.get() > 0:
6741 TgLabel = TgLabel +
" Armed"
6742 x = X0L + (GRW/2) + 12
6743 ca.create_text(x, Ymin-FontSize, text=TgLabel, fill=COLORtrigger, anchor=
"w", font=(
"arial", FontSize ))
6745 if MarkerScale.get() == 0:
6746 Yconv1 = float(GRH/10.0) / CH1pdvRange
6747 Yoffset1 = CHAOffset
6748 COLORmarker = COLORtrace1
6750 if MarkerScale.get() == 1:
6752 Yconv1 = float(GRH/10.0) / CH1pdvRange
6753 Yoffset1 = CHAOffset
6754 COLORmarker = COLORtrace1
6756 if MarkerScale.get() == 2:
6758 Yconv1 = float(GRH/10.0) / CH2pdvRange
6759 Yoffset1 = CHBOffset
6760 COLORmarker = COLORtrace2
6762 if MarkerScale.get() == 3:
6764 Yconv1 = float(GRH/10.0) / CH1IpdvRange
6765 Yoffset1 = CHAIOffset
6766 COLORmarker = COLORtrace3
6768 if MarkerScale.get() == 4:
6770 Yconv1 = float(GRH/10.0) / CH2IpdvRange
6771 Yoffset1 = CHBIOffset
6772 COLORmarker = COLORtrace4
6775 if MarkerScale.get() == 5:
6777 Yconv1 = float(GRH/10.0) / CHMApdvRange
6778 Yoffset1 = CHBAOffset
6779 COLORmarker = COLORtrace2
6781 if MarkerScale.get() == 6:
6783 Yconv1 = float(GRH/10.0) / CHMBpdvRange
6784 Yoffset1 = CHBBOffset
6785 COLORmarker = COLORtrace6
6787 if MarkerScale.get() == 7:
6789 Yconv1 = float(GRH/10.0) / CHMCpdvRange
6790 Yoffset1 = CHBCOffset
6791 COLORmarker = COLORtrace7
6793 if MarkerScale.get() == 8:
6795 Yconv1 = float(GRH/10.0) / CHMDpdvRange
6796 Yoffset1 = CHBDOffset
6797 COLORmarker = COLORtrace4
6800 if ShowTCur.get() > 0:
6801 Dline = [TCursor, Y0T, TCursor, Y0T+GRH]
6802 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6803 Tpoint = ((TCursor-X0L) * Tstep) + vt
6804 Tpoint = Tpoint/Mulx
6806 axis_value = Tpoint / 1000.0
6807 V_label =
' {0:.2f} '.format(axis_value) +
" S"
6808 if Tpoint < 1000
and Tpoint >= 1:
6810 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
6812 axis_value = Tpoint * 1000.0
6813 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
6814 ca.create_text(TCursor+1, VCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
6815 if ShowVCur.get() > 0:
6816 Dline = [X0L, VCursor, X0L+GRW, VCursor]
6817 ca.create_line(Dline, dash=(4,3), fill=COLORmarker, width=GridWidth.get())
6819 yvolts = ((VCursor-c1)/Yconv1) - Yoffset1
6820 V1String =
' {0:.3f} '.format(-yvolts)
6821 V_label = V1String + Units
6822 ca.create_text(TCursor+1, VCursor+5, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
6823 if ShowTCur.get() == 0
and ShowVCur.get() == 0
and MouseWidget == ca:
6824 if MouseX > X0L
and MouseX < X0L+GRW
and MouseY > Y0T
and MouseY < Y0T+GRH:
6825 Dline = [MouseX, Y0T, MouseX, Y0T+GRH]
6826 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6827 Tpoint = ((MouseX-X0L) * Tstep) + vt
6828 Tpoint = Tpoint/Mulx
6830 axis_value = Tpoint / 1000.0
6831 V_label =
' {0:.2f} '.format(axis_value) +
" S"
6832 if Tpoint < 1000
and Tpoint >= 1:
6834 V_label =
' {0:.2f} '.format(axis_value) +
" mS"
6836 axis_value = Tpoint * 1000.0
6837 V_label =
' {0:.2f} '.format(axis_value) +
" uS"
6838 ca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
6839 Dline = [X0L, MouseY, X0L+GRW, MouseY]
6840 ca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
6842 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
6843 V1String =
' {0:.3f} '.format(-yvolts)
6844 V_label = V1String + Units
6845 ca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
6847 if MeasGateStatus.get() == 1:
6848 LeftGate = X0L + MeasGateLeft / Tstep
6849 RightGate = X0L + MeasGateRight / Tstep
6850 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace5)
6851 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, dash=(5,3), width=GridWidth.get(), fill=COLORtrace7)
6854 DT = (MeasGateRight-MeasGateLeft)/Mulx
6858 axis_value = DT / 1000.0
6859 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
6860 if DT < 1000
and DT >= 1:
6862 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
6864 axis_value = DT * 1000.0
6865 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
6867 DFreq =
' {0:.3f} '.format(1.0/DT)
6868 V_label =
" Delta T" + DeltaT
6870 V_label = V_label +
", Freq " + DFreq +
" KHz"
6875 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
6879 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
6881 y = Y0T + GRH + 7 - (MarkerNum*10)
6883 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
6887 ca.create_text(x, y, text=V_label, fill=COLORtrace5, anchor=Justify, font=(
"arial", FontSize ))
6890 SmoothBool = SmoothCurves.get()
6892 if len(T1Vline) > 4:
6893 ca.create_line(T1Vline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6894 if len(T1Iline) > 4:
6895 ca.create_line(T1Iline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6896 if len(T2Vline) > 4:
6897 ca.create_line(T2Vline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6898 if len(T2Iline) > 4:
6899 ca.create_line(T2Iline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6900 if len(Tmathline) > 4
and MathTrace.get() > 0:
6901 ca.create_line(Tmathline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6902 if len(TMXline) > 4 :
6903 ca.create_line(TMXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6904 if len(TMYline) > 4 :
6905 ca.create_line(TMYline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6906 if MuxScreenStatus.get() == 1:
6907 if len(TMAVline) > 4:
6908 ca.create_line(TMAVline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6909 if len(TMBVline) > 4:
6910 ca.create_line(TMBVline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6911 if len(TMCVline) > 4:
6912 ca.create_line(TMCVline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6913 if len(TMDVline) > 4:
6914 ca.create_line(TMDVline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6915 if ShowRB_V.get() == 1
and len(TMBRline) > 4:
6916 ca.create_line(TMBRline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6917 if ShowRB_I.get() == 1
and len(TMCRline) > 4:
6918 ca.create_line(TMCRline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6919 if ShowRA_V.get() == 1
and len(T1VRline) > 4:
6920 ca.create_line(T1VRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6921 if ShowRA_I.get() == 1
and len(T1IRline) > 4:
6922 ca.create_line(T1IRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6923 if ShowRB_V.get() == 1
and len(T2VRline) > 4:
6924 ca.create_line(T2VRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6925 if ShowRB_I.get() == 1
and len(T2IRline) > 4:
6926 ca.create_line(T2IRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6927 if ShowMath.get() == 1
and len(TMRline) > 4:
6928 ca.create_line(TMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
6932 if session.continuous:
6933 sttxt =
"Running Continuous"
6935 sttxt =
"Running Discontinuous"
6936 if TRACEmodeTime.get() == 1:
6937 sttxt = sttxt +
" Averaging"
6938 if ManualTrigger.get() == 1:
6939 sttxt =
"Manual Trigger"
6940 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
6942 if ScreenTrefresh.get() == 1:
6943 sttxt = sttxt +
" Persistance ON"
6945 de = ca.find_enclosed( X0L-1, Y0T+GRH+12, CANVASwidth, Y0T+GRH+100)
6949 de = ca.find_enclosed( X0L-1, -1, CANVASwidth, 20)
6952 if LabelPlotText.get() > 0:
6953 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
6955 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
6958 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
6961 BoxColor =
"#808080"
6962 if DacScreenStatus.get() == 0
and (DigScreenStatus.get() == 1
or MuxScreenStatus.get() == 1):
6963 if D0.get() == 0
and D4.get() == 0:
6964 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
6966 BoxColor =
"#00ff00"
6968 BoxColor =
"#ff0000"
6969 ca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
6971 ca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
6972 if D1.get() == 0
and D5.get() == 0:
6973 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
6975 BoxColor =
"#00ff00"
6977 BoxColor =
"#ff0000"
6978 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
6980 ca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
6981 if D2.get() == 0
and D6.get() == 0:
6982 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
6984 BoxColor =
"#00ff00"
6986 BoxColor =
"#ff0000"
6987 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
6989 ca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
6990 if D3.get() == 0
and D7.get() == 0:
6991 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
6993 BoxColor =
"#00ff00"
6995 BoxColor =
"#ff0000"
6996 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
6998 ca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
6999 ca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7003 txt =
' {0:.2f} '.format(vx / 1000.0) +
" S/div"
7004 if vx < 1000
and vx >= 1:
7005 txt =
' {0:.2f} '.format(vx) +
" mS/div"
7007 txt =
' {0:.2f} '.format(vx * 1000.0) +
" uS/div"
7011 txt = txt +
"View at "
7013 txt = txt + str(int(vt / 1000.0)) +
" S "
7014 if abs(vt) < 1000
and abs(vt) >= 1:
7015 txt = txt + str(int(vt)) +
" mS "
7017 txt = txt + str(int(vt * 1000.0)) +
" uS "
7019 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
7020 if ETSDisp.get() > 0:
7021 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
7024 if ShowC1_V.get() == 1:
7025 if MeasAHW.get() == 1:
7026 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
7027 if MeasALW.get() == 1:
7028 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
7029 if MeasADCy.get() == 1:
7030 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
7031 if MeasAPER.get() == 1:
7032 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
7033 if MeasAFREQ.get() == 1:
7034 txt = txt +
" CA Freq = "
7037 V1String =
' {0:.1f} '.format(ChaF)
7038 txt = txt + str(V1String) +
" Hz "
7039 if ChaF > 1000
and ChaF < 1000000:
7040 V1String =
' {0:.1f} '.format(ChaF/1000)
7041 txt = txt + str(V1String) +
" KHz "
7043 V1String =
' {0:.1f} '.format(ChaF/1000000)
7044 txt = txt + str(V1String) +
" MHz "
7046 if ShowC2_V.get() == 1:
7047 if MeasBHW.get() == 1:
7048 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
7049 if MeasBLW.get() == 1:
7050 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
7051 if MeasBDCy.get() == 1:
7052 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
7053 if MeasBPER.get() == 1:
7054 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
7055 if MeasBFREQ.get() == 1:
7056 txt = txt +
" CB Freq = "
7059 V1String =
' {0:.1f} '.format(ChaF)
7060 txt = txt + str(V1String) +
" Hz "
7061 if ChaF > 1000
and ChaF < 1000000:
7062 V1String =
' {0:.1f} '.format(ChaF/1000)
7063 txt = txt + str(V1String) +
" KHz "
7065 V1String =
' {0:.1f} '.format(ChaF/1000000)
7066 txt = txt + str(V1String) +
" MHz "
7068 if MuxScreenStatus.get() == 0:
7069 if MeasPhase.get() == 1:
7070 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7071 if MeasDelay.get() == 1:
7072 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
7075 y = Y0T+GRH+int(2.5 *FontSize)
7076 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7077 if MeasTopV1.get() == 1
or MeasBaseV1.get() == 1
or MeasTopV2.get() == 1
or MeasBaseV2.get() == 1:
7080 if ShowC1_V.get() == 1:
7082 if CHA_RC_HP.get() == 1:
7086 txt = txt + str(CH1pdvRange) +
" V/div"
7087 if MeasDCV1.get() == 1:
7088 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
7089 if MeasMaxV1.get() == 1:
7090 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
7091 if MeasTopV1.get() == 1:
7092 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
7093 if MeasMinV1.get() == 1:
7094 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
7095 if MeasBaseV1.get() == 1:
7096 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
7097 if MeasMidV1.get() == 1:
7098 MidV1 = (MaxV1+MinV1)/2.0
7099 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
7100 if MeasPPV1.get() == 1:
7102 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
7103 if MeasRMSV1.get() == 1:
7104 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
7105 if MeasRMSVA_B.get() == 1:
7106 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
7107 if MeasDiffAB.get() == 1:
7108 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
7109 if MeasUserA.get() == 1:
7111 TempValue = eval(UserAString)
7112 V1String =
' {0:.4f} '.format(TempValue)
7115 txt = txt + UserALabel +
" = " + V1String
7116 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
7118 txt = txt + str(CH1IpdvRange) +
" mA/div"
7119 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
7121 txt = txt + str(CH1IpdvRange) +
" mA/div"
7122 if ShowC1_I.get() == 1:
7123 if MeasDCI1.get() == 1:
7124 V1String =
' {0:.2f} '.format(DCI1)
7125 txt = txt +
" AvgI = " + V1String
7126 if AWGAShape.get() == 0:
7128 Resvalue = (DCV1/DCI1)*1000
7129 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7131 txt = txt +
" Res = OverRange"
7132 if MeasMaxI1.get() == 1:
7133 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
7134 if MeasMinI1.get() == 1:
7135 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
7136 if MeasMidI1.get() == 1:
7137 MidI1 = (MaxI1+MinI1)/2.0
7138 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
7139 if MeasPPI1.get() == 1:
7141 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
7142 if MeasRMSI1.get() == 1:
7143 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
7146 y = Y0T+GRH+(4*FontSize)
7147 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7150 if MuxScreenStatus.get() == 1:
7152 if Show_CBA.get() > 0:
7154 elif Show_CBB.get() > 0:
7156 elif Show_CBC.get() > 0:
7158 elif Show_CBD.get() > 0:
7160 if MeasPhase.get() == 1:
7161 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7162 if MeasDelay.get() == 1:
7163 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
7164 if MeasUserB.get() == 1:
7166 TempValue = eval(UserBString)
7167 V1String =
' {0:.4f} '.format(TempValue)
7170 txt = txt + UserBLabel +
" = " + V1String
7171 if ShowC2_V.get() == 1:
7172 if CHB_RC_HP.get() == 1:
7176 txt = txt + str(CH2pdvRange) +
" V/div"
7177 if MeasDCV2.get() == 1:
7178 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
7179 if MeasMaxV2.get() == 1:
7180 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
7181 if MeasTopV2.get() == 1:
7182 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
7183 if MeasMinV2.get() == 1:
7184 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
7185 if MeasBaseV2.get() == 1:
7186 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
7187 if MeasMidV2.get() == 1:
7188 MidV2 = (MaxV2+MinV2)/2.0
7189 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
7190 if MeasPPV2.get() == 1:
7192 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
7193 if MeasRMSV2.get() == 1:
7194 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
7195 if MeasDiffBA.get() == 1:
7196 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
7197 if MeasUserB.get() == 1:
7199 TempValue = eval(UserBString)
7200 V1String =
' {0:.4f} '.format(TempValue)
7203 txt = txt + UserBLabel +
" = " + V1String
7204 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
7206 txt = txt + str(CH2IpdvRange) +
" mA/div"
7207 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
7209 txt = txt + str(CH2IpdvRange) +
" mA/div"
7210 if ShowC2_I.get() == 1:
7211 if MeasDCI2.get() == 1:
7212 V1String =
' {0:.2f} '.format(DCI2)
7213 txt = txt +
" AvgI = " + V1String
7214 if AWGBShape.get() == 0:
7216 Resvalue = (DCV2/DCI2)*1000
7217 R1String =
' {0:.1f} '.format(Resvalue)
7218 txt = txt +
" Res = " + R1String
7220 txt = txt +
" Res = OverRange"
7221 if MeasMaxI2.get() == 1:
7222 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
7223 if MeasMinI2.get() == 1:
7224 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
7225 if MeasMidI2.get() == 1:
7226 MidI2 = (MaxI2+MinI2)/2.0
7227 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
7228 if MeasPPI2.get() == 1:
7230 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
7231 if MeasRMSI2.get() == 1:
7232 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
7235 y = Y0T+GRH+int(5.5*FontSize)
7236 ca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7240 global Tmathline, TMRline, TXYRline
7245 global FontSize, LabelPlotText, PlotLabelText
7246 global XYca, MouseX, MouseY, MouseWidget
7247 global ShowXCur, ShowYCur, XCursor, YCursor
7249 global ShowRXY, ShowMath, MathUnits, MathXUnits, MathYUnits
7250 global Xsignal, Ysignal, MathXAxis, MathYAxis
7251 global RUNstatus, SingleShot, ManualTrigger
7264 global TRIGGERsample, TRIGGERlevel, HoldOff, HoldOffentry
7265 global COLORgrid, COLORzeroline, COLORtext, COLORtrigger, COLORtrace7
7266 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5
7267 global COLORtraceR1, COLORtraceR2, COLORtraceR3, COLORtraceR4, COLORtraceR5
7268 global CANVASwidthXY, CANVASheightXY, COLORXmarker, COLORYmarker
7269 global TRACErefresh, TRACEmode, TRACEwidth, GridWidth
7270 global ScreenXYrefresh, SmoothCurves
7271 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
7272 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
7273 global SV1, SI1, SV2, SI2, CHABphase
7274 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
7275 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
7276 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
7277 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
7278 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase
7279 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
7280 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
7281 global AWGAShape, AWGBShape
7282 global CHAVGainEntry, CHBVGainEntry, CHAVOffsetEntry, CHBVOffsetEntry
7283 global CHAVPosEntry, CHAIPosEntry, CHAVPosEntry, CHBIPosEntry
7284 global CH1pdvRange, CHAOffset, CH2pdvRange, CHBOffset
7285 global DacScreenStatus, DigScreenStatus
7286 global D0, D1, D2, D3, D4, D5, D6, D7
7287 global DevID, devx, MarkerNum, MarkerScale
7288 global HozPoss, HozPossentry
7289 global HistAsPercent, VBuffA, VBuffB, HBuffA, HBuffB
7290 global VABase, VATop, VBBase, VBTop, UserALabel, UserAString, UserBLabel, UserBString
7291 global MeasTopV1, MeasBaseV1, MeasTopV2, MeasBaseV2, MeasUserA, MeasUserB
7294 Ymax = Y0TXY + GRHXY
7296 InOffA = float(eval(CHAVOffsetEntry.get()))
7298 CHAVOffsetEntry.delete(0,END)
7299 CHAVOffsetEntry.insert(0, InOffA)
7301 InGainA = float(eval(CHAVGainEntry.get()))
7303 CHAVGainEntry.delete(0,END)
7304 CHAVGainEntry.insert(0, InGainA)
7306 InOffB = float(eval(CHBVOffsetEntry.get()))
7308 CHBVOffsetEntry.delete(0,END)
7309 CHBVOffsetEntry.insert(0, InOffB)
7311 InGainB = float(eval(CHBVGainEntry.get()))
7313 CHBVGainEntry.delete(0,END)
7314 CHBVGainEntry.insert(0, InGainB)
7317 CH1pdvRange = float(eval(CHAsbxy.get()))
7319 CHAsbxy.delete(0,END)
7320 CHAsbxy.insert(0, CH1vpdvRange)
7322 CH2pdvRange = float(eval(CHBsbxy.get()))
7324 CHBsbxy.delete(0,END)
7325 CHBsbxy.insert(0, CH2vpdvRange)
7327 CH1IpdvRange = float(eval(CHAIsbxy.get()))
7329 CHAIsbxy.delete(0,END)
7330 CHAIsbxy.insert(0, CH1IpdvRange)
7332 CH2IpdvRange = float(eval(CHBIsbxy.get()))
7334 CHBIsbxy.delete(0,END)
7335 CHBIsbxy.insert(0, CH2IpdvRange)
7338 CHAOffset = float(eval(CHAVPosEntryxy.get()))
7340 CHAVPosEntryxy.delete(0,END)
7341 CHAVPosEntryxy.insert(0, CHAOffset)
7343 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
7345 CHAIPosEntryxy.delete(0,END)
7346 CHAIPosEntryxy.insert(0, CHAIOffset)
7348 CHBOffset = float(eval(CHBVPosEntryxy.get()))
7350 CHBVPosEntry.delete(0,END)
7351 CHBVPosEntry.insert(0, CHBOffset)
7353 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
7355 CHBIPosEntryxy.delete(0,END)
7356 CHBIPosEntryxy.insert(0, CHBIOffset)
7358 if CH1pdvRange < 0.001:
7360 if CH2pdvRange < 0.001:
7362 if CH1IpdvRange < 0.05:
7364 if CH2IpdvRange < 0.05:
7367 if Xsignal.get() == 6:
7368 CHAIOffset = 5 * CH1IpdvRange
7369 if Xsignal.get() == 7:
7370 CHBIOffset = 5 * CH2IpdvRange
7371 if ScreenXYrefresh.get() == 0:
7382 y = Y0TXY + i * GRHXY/10.0
7385 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7390 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
7391 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7395 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7396 if Ysignal.get() == 2
or Xsignal.get() == 6:
7397 Iaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7398 Iaxis_label = str(round(Iaxis_value, 3))
7399 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace3, anchor=
"e", font=(
"arial", FontSize ))
7400 elif Ysignal.get() == 4
or Xsignal.get() == 7:
7401 Iaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7402 Iaxis_label = str(round(Iaxis_value, 3))
7403 XYca.create_text(x1-3, y, text=Iaxis_label, fill=COLORtrace4, anchor=
"e", font=(
"arial", FontSize ))
7404 elif Ysignal.get() == 1:
7405 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7406 Vaxis_label = str(round(Vaxis_value, 3))
7407 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
7408 elif Ysignal.get() == 3:
7409 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7410 Vaxis_label = str(round(Vaxis_value, 3))
7411 XYca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace2, anchor=
"e", font=(
"arial", FontSize ))
7412 elif Ysignal.get() == 5:
7413 TempCOLOR = COLORtrace5
7414 if MathTrace.get() == 2:
7415 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7416 elif MathTrace.get() == 3:
7417 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7419 if MathYAxis ==
"V-A":
7420 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7421 TempCOLOR = COLORtrace1
7422 elif MathYAxis ==
"V-B":
7423 Vaxis_value = (((5-i) * CH2pdvRange ) + CHBOffset)
7424 TempCOLOR = COLORtrace2
7425 elif MathYAxis ==
"I-A":
7426 Vaxis_value = 1.0 * (((5-i) * CH1IpdvRange ) + CHAIOffset)
7427 TempCOLOR = COLORtrace3
7428 elif MathYAxis ==
"I-B":
7429 Vaxis_value = 1.0 * (((5-i) * CH2IpdvRange ) + CHBIOffset)
7430 TempCOLOR = COLORtrace4
7432 Vaxis_value = (((5-i) * CH1pdvRange ) + CHAOffset)
7433 Vaxis_label = str(round(Vaxis_value, 3))
7434 XYca.create_text(x1-3, y, text=Vaxis_label, fill=TempCOLOR, anchor=
"e", font=(
"arial", FontSize ))
7444 x = X0LXY + i * GRWXY/10.0
7447 XYca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
7452 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
7453 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7456 if Xsignal.get() == 1
or Xsignal.get() == 6:
7457 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7458 Vaxis_label = str(round(Vaxis_value, 3))
7459 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
7460 elif Xsignal.get() == 3
or Xsignal.get() == 7:
7461 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7462 Vaxis_label = str(round(Vaxis_value, 3))
7463 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
7464 elif Xsignal.get() == 2:
7465 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7466 Iaxis_label = str(round(Iaxis_value, 3))
7467 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
7468 elif Xsignal.get() == 4:
7469 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7470 Iaxis_label = str(round(Iaxis_value, 3))
7471 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7472 elif Xsignal.get() == 5:
7473 TempCOLOR = COLORtrace5
7474 if MathTrace.get() == 2:
7475 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7476 elif MathTrace.get() == 3:
7477 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7479 if MathXAxis ==
"V-A":
7480 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7481 TempCOLOR = COLORtrace1
7482 elif MathXAxis ==
"V-B":
7483 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7484 TempCOLOR = COLORtrace2
7485 elif MathXAxis ==
"I-A":
7486 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7487 TempCOLOR = COLORtrace3
7488 elif MathXAxis ==
"I-B":
7489 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7490 TempCOLOR = COLORtrace4
7492 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7493 TempCOLOR = COLORtrace5
7494 Vaxis_label = str(round(Vaxis_value, 3))
7495 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7497 XYca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
7498 if Xsignal.get() == 1
or Xsignal.get() == 6:
7499 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7500 Vaxis_label = str(round(Vaxis_value, 3))
7501 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace1, anchor=
"n", font=(
"arial", FontSize ))
7502 elif Xsignal.get() == 3
or Xsignal.get() == 7:
7503 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7504 Vaxis_label = str(round(Vaxis_value, 3))
7505 XYca.create_text(x, y2+3, text=Vaxis_label, fill=COLORtrace2, anchor=
"n", font=(
"arial", FontSize ))
7506 elif Xsignal.get() == 2:
7507 Iaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7508 Iaxis_label = str(round(Iaxis_value, 3))
7509 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
7510 elif Xsignal.get() == 4:
7511 Iaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7512 Iaxis_label = str(round(Iaxis_value, 3))
7513 XYca.create_text(x, y2+3, text=Iaxis_label, fill=COLORtrace4, anchor=
"n", font=(
"arial", FontSize ))
7514 elif Xsignal.get() == 5:
7515 TempCOLOR = COLORtrace5
7516 if MathTrace.get() == 2:
7517 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7518 elif MathTrace.get() == 3:
7519 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7521 if MathXAxis ==
"V-A":
7522 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7523 TempCOLOR = COLORtrace1
7524 elif MathXAxis ==
"V-B":
7525 Vaxis_value = (((i-5) * CH2pdvRange ) + CHBOffset)
7526 TempCOLOR = COLORtrace2
7527 elif MathXAxis ==
"I-A":
7528 Vaxis_value = 1.0 * (((i-5) * CH1IpdvRange ) + CHAIOffset)
7529 TempCOLOR = COLORtrace3
7530 elif MathXAxis ==
"I-B":
7531 Vaxis_value = 1.0 * (((i-5) * CH2IpdvRange ) + CHBIOffset)
7532 TempCOLOR = COLORtrace4
7534 Vaxis_value = (((i-5) * CH1pdvRange ) + CHAOffset)
7535 Vaxis_label = str(round(Vaxis_value, 3))
7536 XYca.create_text(x, y2+3, text=Vaxis_label, fill=TempCOLOR, anchor=
"n", font=(
"arial", FontSize ))
7539 if len(TXYline) > 4:
7540 if Xsignal.get() == 1:
7541 XYca.create_line(TXYline, fill=COLORtrace1, width=TRACEwidth.get())
7542 elif Xsignal.get() == 2:
7543 XYca.create_line(TXYline, fill=COLORtrace3, width=TRACEwidth.get())
7544 elif Xsignal.get() == 3:
7545 XYca.create_line(TXYline, fill=COLORtrace2, width=TRACEwidth.get())
7546 elif Xsignal.get() == 4:
7547 XYca.create_line(TXYline, fill=COLORtrace4, width=TRACEwidth.get())
7548 elif Xsignal.get() == 5
or Ysignal.get() == 5:
7549 XYca.create_line(TXYline, fill=COLORtrace5, width=TRACEwidth.get())
7550 if len(TXYRline) > 4
and ShowRXY.get() == 1:
7551 XYca.create_line(TXYRline, fill=COLORtraceR1, width=TRACEwidth.get())
7553 if Xsignal.get() == 6:
7556 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7557 Xconv1 = float(GRWXY/10.0) / CH1pdvRange
7560 c2 = GRWXY / 2.0 + X0LXY
7562 if HistAsPercent == 1:
7563 ylo = float(HBuffA[0][b]) / len(VBuffA)
7567 ylo = int(y1 - (Yconv1 * ylo))
7572 xlo = HBuffA[1][b] - CHAOffset
7573 xlo = int(c2 + Xconv1 * xlo)
7574 Dline = [xlo,y1,xlo,ylo]
7575 XYca.create_line(Dline, fill=COLORtrace1)
7577 if Xsignal.get() == 7:
7580 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7581 Xconv1 = float(GRWXY/10.0) / CH2pdvRange
7583 c2 = GRWXY / 2.0 + X0LXY
7585 if HistAsPercent == 1:
7586 ylo = float(HBuffB[0][b]) / len(VBuffB)
7590 ylo = int(y1 - Yconv1 * ylo)
7595 xlo = HBuffB[1][b] - CHBOffset
7596 xlo = int(c2 + Xconv1 * xlo)
7597 Dline = [xlo,y1,xlo,ylo]
7598 XYca.create_line(Dline, fill=COLORtrace2)
7601 COLORXmarker = COLORtrace1
7602 COLORYmarker = COLORtrace2
7603 if Xsignal.get() == 1
or Xsignal.get() == 6:
7604 Xconv1 = float(GRWXY/10) / CH1pdvRange
7605 Xoffset1 = CHAOffset
7606 COLORXmarker = COLORtrace1
7608 if Xsignal.get() == 2:
7609 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7610 Xoffset1 = CHAIOffset
7611 COLORXmarker = COLORtrace3
7613 if Xsignal.get() == 3
or Xsignal.get() == 7:
7614 Xconv1 = float(GRWXY/10) / CH2pdvRange
7615 Xoffset1 = CHBOffset
7616 COLORXmarker = COLORtrace2
7618 if Xsignal.get() == 4:
7619 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7620 Xoffset1 = CHBIOffset
7621 COLORmarker = COLORtrace4
7623 if Xsignal.get() == 5:
7624 X_label = MathXUnits
7625 if MathXAxis ==
"V-A":
7626 Xconv1 = float(GRWXY/10) / CH1pdvRange
7627 Xoffset1 = CHAOffset
7628 COLORXmarker = COLORtrace1
7629 elif MathXAxis ==
"V-B":
7630 Xconv1 = float(GRWXY/10) / CH2pdvRange
7631 Xoffset1 = CHBOffset
7632 COLORXmarker = COLORtrace2
7633 elif MathXAxis ==
"I-A":
7634 Xconv1 = float(GRWXY/10) / CH1IpdvRange
7635 Xoffset1 = CHAIOffset
7636 COLORXmarker = COLORtrace3
7637 elif MathXAxis ==
"I-B":
7638 Xconv1 = float(GRWXY/10) / CH2IpdvRange
7639 Xoffset1 = CHBIOffset
7640 COLORXmarker = COLORtrace4
7642 Xconv1 = float(GRWXY/10) / CH1pdvRange
7643 Xoffset1 = CHAOffset
7644 COLORXmarker = COLORtrace1
7646 if Ysignal.get() == 1
or Ysignal.get() == 6:
7647 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7648 Yoffset1 = CHAOffset
7649 COLORYmarker = COLORtrace1
7651 if Ysignal.get() == 2:
7652 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7653 Yoffset1 = CHAIOffset
7654 COLORYmarker = COLORtrace3
7656 if Ysignal.get() == 3
or Ysignal.get() == 7:
7657 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7658 Yoffset1 = CHBOffset
7659 COLORYmarker = COLORtrace2
7661 if Ysignal.get() == 4:
7662 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7663 Yoffset1 = CHBIOffset
7664 COLORYmarker = COLORtrace4
7666 if Ysignal.get() == 5:
7667 Y_label = MathYUnits
7668 if MathYAxis ==
"V-A":
7669 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7670 Yoffset1 = CHAOffset
7671 COLORYmarker = COLORtrace1
7672 elif MathYAxis ==
"V-B":
7673 Yconv1 = float(GRHXY/10.0) / CH2pdvRange
7674 Yoffset1 = CHBOffset
7675 COLORYmarker = COLORtrace2
7676 elif MathYAxis ==
"I-A":
7677 Yconv1 = float(GRHXY/10.0) / CH1IpdvRange
7678 Yoffset1 = CHAIOffset
7679 COLORYmarker = COLORtrace3
7680 elif MathYAxis ==
"I-B":
7681 Yconv1 = float(GRHXY/10.0) / CH2IpdvRange
7682 Yoffset1 = CHBIOffset
7683 COLORYmarker = COLORtrace4
7685 Yconv1 = float(GRHXY/10.0) / CH1pdvRange
7686 Yoffset1 = CHAOffset
7687 COLORYmarker = COLORtrace1
7688 if ShowXCur.get() > 0:
7689 Dline = [XCursor, Y0TXY, XCursor, Y0TXY+GRHXY]
7690 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7691 c1 = GRWXY / 2.0 + X0LXY
7692 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7693 XString =
' {0:.3f} '.format(xvolts)
7694 V_label = XString + X_label
7695 XYca.create_text(XCursor+1, YCursor-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7696 if ShowYCur.get() > 0:
7697 Dline = [X0LXY, YCursor, X0LXY+GRWXY, YCursor]
7698 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7699 c1 = GRHXY / 2.0 + Y0TXY
7700 yvolts = ((YCursor-c1)/Yconv1) - Yoffset1
7701 V1String =
' {0:.3f} '.format(-yvolts)
7702 V_label = V1String + Y_label
7703 XYca.create_text(XCursor+1, YCursor+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7704 if ShowXCur.get() == 0
and ShowYCur.get() == 0
and MouseWidget == XYca:
7705 if MouseX > X0LXY
and MouseX < X0LXY+GRWXY
and MouseY > Y0TXY
and MouseY < Y0TXY+GRHXY:
7706 Dline = [MouseX, Y0TXY, MouseX, Y0TXY+GRHXY]
7707 XYca.create_line(Dline, dash=(4,3), fill=COLORXmarker, width=GridWidth.get())
7708 c1 = GRWXY / 2.0 + X0LXY
7709 xvolts = Xoffset1 - ((c1-XCursor)/Xconv1)
7710 XString =
' {0:.3f} '.format(xvolts)
7711 V_label = XString + X_label
7712 XYca.create_text(MouseX+1, MouseY-5, text=V_label, fill=COLORXmarker, anchor=
"w", font=(
"arial", FontSize ))
7713 Dline = [X0LXY, MouseY, X0LXY+GRWXY, MouseY]
7714 XYca.create_line(Dline, dash=(4,3), fill=COLORYmarker, width=GridWidth.get())
7715 c1 = GRHXY / 2 + Y0TXY
7716 yvolts = ((MouseY-c1)/Yconv1) - Yoffset1
7717 V1String =
' {0:.3f} '.format(-yvolts)
7718 V_label = V1String + Y_label
7719 XYca.create_text(MouseX+1, MouseY+5, text=V_label, fill=COLORYmarker, anchor=
"w", font=(
"arial", FontSize ))
7724 if TRACEmodeTime.get() == 1:
7725 sttxt = sttxt +
" Averaging"
7726 if ManualTrigger.get() == 1:
7727 sttxt =
"Manual Trigger"
7728 if (RUNstatus.get() == 0)
or (RUNstatus.get() == 3):
7730 if ScreenXYrefresh.get() == 1:
7731 sttxt = sttxt +
" Persistance ON"
7733 de = XYca.find_enclosed( X0LXY-1, Y0TXY+GRHXY+19, CANVASwidthXY, Y0TXY+GRHXY+100)
7737 de = XYca.find_enclosed( X0LXY-1, -1, CANVASwidthXY, 20)
7740 if LabelPlotText.get() > 0:
7741 txt = PlotLabelText +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7743 txt =
"Device ID " + DevID[17:31] +
" Sample rate: " + str(SAMPLErate) +
" " + sttxt
7746 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7749 BoxColor =
"#808080"
7750 if DacScreenStatus.get() == 0
and DigScreenStatus.get() == 1 :
7751 if D0.get() == 0
and D4.get() == 0:
7752 Dval = devx.ctrl_transfer( 0xc0, 0x91, 4, 0, 0, 1, 100)
7754 BoxColor =
"#00ff00"
7756 BoxColor =
"#ff0000"
7757 XYca.create_rectangle(x2-12, 6, x2, 18, fill=BoxColor)
7759 XYca.create_rectangle(x2-12, 6, x2, 18, fill=
"yellow")
7760 if D1.get() == 0
and D5.get() == 0:
7761 Dval = devx.ctrl_transfer( 0xc0, 0x91, 5, 0, 0, 1, 100)
7763 BoxColor =
"#00ff00"
7765 BoxColor =
"#ff0000"
7766 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=BoxColor)
7768 XYca.create_rectangle(x2-26, 6, x2-14, 18, fill=
"yellow")
7769 if D2.get() == 0
and D6.get() == 0:
7770 Dval = devx.ctrl_transfer( 0xc0, 0x91, 6, 0, 0, 1, 100)
7772 BoxColor =
"#00ff00"
7774 BoxColor =
"#ff0000"
7775 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=BoxColor)
7777 XYca.create_rectangle(x2-40, 6, x2-28, 18, fill=
"yellow")
7778 if D3.get() == 0
and D7.get() == 0:
7779 Dval = devx.ctrl_transfer( 0xc0, 0x91, 7, 0, 0, 1, 100)
7781 BoxColor =
"#00ff00"
7783 BoxColor =
"#ff0000"
7784 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=BoxColor)
7786 XYca.create_rectangle(x2-54, 6, x2-42, 18, fill=
"yellow")
7787 XYca.create_text(x2-56, 12, text=
"Digital Inputs", anchor=E, fill=COLORtext)
7790 if Xsignal.get() == 1
or Xsignal.get() == 3:
7792 if Xsignal.get() == 1:
7793 if MeasAHW.get() == 1:
7794 txt = txt +
" CA Hi Width = " +
' {0:.2f} '.format(CHAHW) +
" mS "
7795 if MeasALW.get() == 1:
7796 txt = txt +
" CA Lo Width = " +
' {0:.2f} '.format(CHALW) +
" mS "
7797 if MeasADCy.get() == 1:
7798 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
7799 if MeasAPER.get() == 1:
7800 txt = txt +
" CA Period = " +
' {0:.2f} '.format(CHAperiod) +
" mS "
7801 if MeasAFREQ.get() == 1:
7802 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
7803 if Xsignal.get() == 3:
7804 if MeasBHW.get() == 1:
7805 txt = txt +
" CB Hi Width = " +
' {0:.2f} '.format(CHBHW) +
" mS "
7806 if MeasBLW.get() == 1:
7807 txt = txt +
" CB Lo Width = " +
' {0:.2f} '.format(CHBLW) +
" mS "
7808 if MeasBDCy.get() == 1:
7809 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
7810 if MeasBPER.get() == 1:
7811 txt = txt +
" CB Period = " +
' {0:.2f} '.format(CHBperiod) +
" mS "
7812 if MeasBFREQ.get() == 1:
7813 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
7814 if MeasPhase.get() == 1:
7815 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
7818 y = Y0TXY+GRHXY+int(2.5*FontSize)
7819 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7821 if Xsignal.get() == 1
or Ysignal.get() == 1
or Xsignal.get() == 6:
7824 txt = txt + str(CH1pdvRange) +
" V/div"
7825 if MeasDCV1.get() == 1:
7826 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
7827 if MeasMaxV1.get() == 1:
7828 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
7829 if MeasTopV1.get() == 1:
7830 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
7831 if MeasMinV1.get() == 1:
7832 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
7833 if MeasBaseV1.get() == 1:
7834 txt = txt +
" Top = " +
' {0:.4f} '.format(VABase)
7835 if MeasMidV1.get() == 1:
7836 MidV1 = (MaxV1+MinV1)/2
7837 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
7838 if MeasPPV1.get() == 1:
7840 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
7841 if MeasRMSV1.get() == 1:
7842 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
7843 if MeasUserA.get() == 1:
7845 TempValue = eval(UserAString)
7846 V1String =
' {0:.4f} '.format(TempValue)
7849 txt = txt + UserALabel +
" = " + V1String
7850 if Xsignal.get() == 2:
7852 txt = txt + str(CH1IpdvRange) +
" mA/div"
7853 elif (Xsignal.get() == 2):
7855 txt = txt + str(CH1IpdvRange) +
" mA/div"
7856 if Xsignal.get() == 2
or Ysignal.get() == 2:
7857 if MeasDCI1.get() == 1:
7858 V1String =
' {0:.2f} '.format(DCI1)
7859 txt = txt +
" AvgI = " + V1String
7860 if AWGAShape.get() == 0:
7862 Resvalue = (DCV1/DCI1)*1000
7863 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7865 txt = txt +
" Res = OverRange"
7866 if MeasMaxI1.get() == 1:
7867 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
7868 if MeasMinI1.get() == 1:
7869 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
7870 if MeasMidI1.get() == 1:
7871 MidI1 = (MaxI1+MinI1)/2
7872 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
7873 if MeasPPI1.get() == 1:
7875 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
7876 if MeasRMSI1.get() == 1:
7877 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
7880 y = Y0TXY+GRHXY+int(4*FontSize)
7881 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7884 if Xsignal.get() == 3
or Ysignal.get() == 3
or Xsignal.get() == 7:
7886 txt = txt + str(CH2pdvRange) +
" V/div"
7887 if MeasDCV2.get() == 1:
7888 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
7889 if MeasMaxV2.get() == 1:
7890 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
7891 if MeasTopV2.get() == 1:
7892 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
7893 if MeasMinV2.get() == 1:
7894 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
7895 if MeasBaseV2.get() == 1:
7896 txt = txt +
" Top = " +
' {0:.4f} '.format(VBBase)
7897 if MeasMidV2.get() == 1:
7898 MidV2 = (MaxV2+MinV2)/2
7899 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
7900 if MeasPPV2.get() == 1:
7902 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
7903 if MeasRMSV2.get() == 1:
7904 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
7905 if MeasUserB.get() == 1:
7907 TempValue = eval(UserBString)
7908 V1String =
' {0:.4f} '.format(TempValue)
7911 txt = txt + UserBLabel +
" = " + V1String
7912 if Xsignal.get() == 4:
7914 txt = txt + str(CH2IpdvRange) +
" mA/div"
7915 elif Xsignal.get() == 4:
7917 txt = txt + str(CH2IpdvRange) +
" mA/div"
7918 if Xsignal.get() == 4
or Ysignal.get() == 4:
7919 if MeasDCI2.get() == 1:
7920 V1String =
' {0:.2f} '.format(DCI2)
7921 txt = txt +
" AvgI = " + V1String
7922 if AWGBShape.get() == 0:
7924 Resvalue = (DCV2/DCI2)*1000
7925 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
7927 txt = txt +
" Res = OverRange"
7928 if MeasMaxI2.get() == 1:
7929 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
7930 if MeasMinI2.get() == 1:
7931 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
7932 if MeasMidI2.get() == 1:
7933 MidI2 = (MaxI2+MinI2)/2
7934 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
7935 if MeasPPI2.get() == 1:
7937 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
7938 if MeasRMSI2.get() == 1:
7939 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
7942 y = Y0TXY+GRHXY+int(5.5 * FontSize)
7943 XYca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
7946 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7948 if MarkerScale.get() != 1:
7950 CHAlab.config(style=
"Rtrace1.TButton")
7951 CHBlab.config(style=
"Strace2.TButton")
7952 CHAIlab.config(style=
"Strace3.TButton")
7953 CHBIlab.config(style=
"Strace4.TButton")
7958 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7960 if MarkerScale.get() != 3:
7962 CHAlab.config(style=
"Strace1.TButton")
7963 CHBlab.config(style=
"Strace2.TButton")
7964 CHAIlab.config(style=
"Rtrace3.TButton")
7965 CHBIlab.config(style=
"Strace4.TButton")
7970 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7972 if MarkerScale.get() != 2:
7974 CHAlab.config(style=
"Strace1.TButton")
7975 CHBlab.config(style=
"Rtrace2.TButton")
7976 CHAIlab.config(style=
"Strace3.TButton")
7977 CHBIlab.config(style=
"Strace4.TButton")
7982 global MarkerScale, CHAlab, CHBlab, CHAIlab, CHBIlab
7984 if MarkerScale.get() != 3:
7986 CHAlab.config(style=
"Strace1.TButton")
7987 CHBlab.config(style=
"Strace2.TButton")
7988 CHAIlab.config(style=
"Strace3.TButton")
7989 CHBIlab.config(style=
"Rtrace4.TButton")
7994 global MarkerXYScale, CHAxylab, CHBxylab
7996 MarkerXYScale.set(1)
7997 CHAxylab.config(style=
"Rtrace1.TButton")
7998 CHBxylab.config(style=
"Strace2.TButton")
8001 global MarkerXYScale, CHAxylab, CHBxylab
8003 MarkerXYScale.set(2)
8004 CHBxylab.config(style=
"Rtrace2.TButton")
8005 CHAxylab.config(style=
"Strace1.TButton")
8008 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca
8012 if RUNstatus.get() == 0:
8014 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
8017 global ShowTCur, ShowVCur, TCursor, VCursor, RUNstatus, ca, MWcount
8018 global MeasGateStatus, MeasGateLeft, MeasGateRight, TIMEdiv, GRW
8020 ShiftKeyDwn = event.state & 1
8021 if event.widget == ca:
8022 if ShowTCur.get() > 0
or ShowVCur.get() > 0:
8023 if ShowTCur.get() > 0
and ShiftKeyDwn == 0:
8025 if event.num == 5
or event.delta == -120:
8027 if event.num == 4
or event.delta == 120:
8029 elif ShowVCur.get() > 0
or ShiftKeyDwn == 1:
8031 if event.num == 5
or event.delta == -120:
8033 if event.num == 4
or event.delta == 120:
8040 if MeasGateStatus.get() == 1:
8041 Tstep = (TIMEdiv / GRW) / 10
8042 if ShiftKeyDwn == 0:
8043 if event.num == 5
or event.delta == -120:
8044 MeasGateLeft = MeasGateLeft + (-100 * Tstep)
8045 if event.num == 4
or event.delta == 120:
8046 MeasGateLeft = MeasGateLeft + (100 * Tstep)
8048 if ShiftKeyDwn == 1:
8049 if event.num == 5
or event.delta == -120:
8050 MeasGateRight = MeasGateRight + (-100 * Tstep)
8051 if event.num == 4
or event.delta == 120:
8052 MeasGateRight = MeasGateRight + (100 * Tstep)
8058 if RUNstatus.get() == 0:
8062 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca, Bodeca
8064 shift_key = event.state & 1
8065 if event.widget == ca:
8066 if ShowVCur.get() > 0
and shift_key == 0:
8067 VCursor = VCursor - 1
8068 elif ShowVCur.get() > 0
and shift_key == 1:
8069 VCursor = VCursor - 5
8070 if RUNstatus.get() == 0:
8073 if event.widget == XYca:
8074 if ShowYCur.get() > 0
and shift_key == 0:
8075 YCursor = YCursor - 1
8076 elif ShowYCur.get() > 0
and shift_key == 1:
8077 YCursor = YCursor - 5
8078 if RUNstatus.get() == 0:
8083 if event.widget == Freqca:
8084 if ShowdBCur.get() > 0
and shift_key == 0:
8085 dBCursor = dBCursor - 1
8086 elif ShowdBCur.get() > 0
and shift_key == 1:
8087 dBCursor = dBCursor - 5
8088 if RUNstatus.get() == 0:
8093 if event.widget == Bodeca:
8094 if ShowBdBCur.get() > 0
and shift_key == 0:
8095 BdBCursor = BdBCursor - 1
8096 elif ShowBdBCur.get() > 0
and shift_key == 1:
8097 BdBCursor = BdBCursor - 5
8098 if RUNstatus.get() == 0:
8104 global ShowVCur, VCursor, YCursor, dBCursor, BdBCursor, RUNstatus, ca, XYca, Freqca
8106 shift_key = event.state & 1
8107 if event.widget == ca:
8108 if ShowVCur.get() > 0
and shift_key == 0:
8109 VCursor = VCursor + 1
8110 elif ShowVCur.get() > 0
and shift_key == 1:
8111 VCursor = VCursor + 5
8112 if RUNstatus.get() == 0:
8115 if event.widget == XYca:
8116 if ShowYCur.get() > 0
and shift_key == 0:
8117 YCursor = YCursor + 1
8118 elif ShowYCur.get() > 0
and shift_key == 1:
8119 YCursor = YCursor + 5
8120 if RUNstatus.get() == 0:
8125 if event.widget == Freqca:
8126 if ShowdBCur.get() > 0
and shift_key == 0:
8127 dBCursor = dBCursor + 1
8128 elif ShowdBCur.get() > 0
and shift_key == 1:
8129 dBCursor = dBCursor + 5
8130 if RUNstatus.get() == 0:
8135 if event.widget == Bodeca:
8136 if ShowBdBCur.get() > 0
and shift_key == 0:
8137 BdBCursor = BdBCursor + 1
8138 elif ShowBdBCur.get() > 0
and shift_key == 1:
8139 BdBCursor = BdBCursor + 5
8140 if RUNstatus.get() == 0:
8146 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
8148 shift_key = event.state & 1
8149 if event.widget == ca:
8150 if ShowTCur.get() > 0
and shift_key == 0:
8151 TCursor = TCursor - 1
8152 elif ShowTCur.get() > 0
and shift_key == 1:
8153 TCursor = TCursor - 5
8154 if RUNstatus.get() == 0:
8157 if event.widget == XYca:
8158 if ShowXCur.get() > 0
and shift_key == 0:
8159 XCursor = XCursor - 1
8160 elif ShowXCur.get() > 0
and shift_key == 1:
8161 XCursor = XCursor - 5
8162 if RUNstatus.get() == 0:
8167 if event.widget == Freqca:
8168 if ShowFCur.get() > 0
and shift_key == 0:
8169 FCursor = FCursor - 1
8170 elif ShowFCur.get() > 0
and shift_key == 1:
8171 FCursor = FCursor - 5
8172 if RUNstatus.get() == 0:
8177 if event.widget == Bodeca:
8178 if ShowBPCur.get() > 0
and shift_key == 0:
8179 BPCursor = BPCursor - 1
8180 elif ShowBPCur.get() > 0
and shift_key == 1:
8181 BPCursor = BPCursor - 5
8182 if RUNstatus.get() == 0:
8188 global ShowTCur, TCursor, XCursor, FCursor, BPCursor, RUNstatus, ca, XYca, Freqca
8190 shift_key = event.state & 1
8191 if event.widget == ca:
8192 if ShowTCur.get() > 0
and shift_key == 0:
8193 TCursor = TCursor + 1
8194 elif ShowTCur.get() > 0
and shift_key == 1:
8195 TCursor = TCursor + 5
8196 if RUNstatus.get() == 0:
8199 if event.widget == XYca:
8200 if ShowXCur.get() > 0
and shift_key == 0:
8201 XCursor = XCursor + 1
8202 elif ShowXCur.get() > 0
and shift_key == 1:
8203 XCursor = XCursor + 5
8204 if RUNstatus.get() == 0:
8209 if event.widget == Freqca:
8210 if ShowFCur.get() > 0
and shift_key == 0:
8211 FCursor = FCursor + 1
8212 elif ShowFCur.get() > 0
and shift_key == 1:
8213 FCursor = FCursor + 5
8214 if RUNstatus.get() == 0:
8219 if event.widget == Bodeca:
8220 if ShowBPCur.get() > 0
and shift_key == 0:
8221 BPCursor = BPCursor + 1
8222 elif ShowBPCur.get() > 0
and shift_key == 1:
8223 BPCursor = BPCursor + 5
8224 if RUNstatus.get() == 0:
8230 global RUNstatus, ca, XYca, Freqca, Bodeca, IAca
8232 if event.widget == ca:
8233 if RUNstatus.get() == 0:
8235 elif RUNstatus.get() > 0:
8238 if event.widget == XYca:
8239 if RUNstatus.get() == 0:
8241 elif RUNstatus.get() > 0:
8246 if event.widget == IAca:
8247 if RUNstatus.get() == 0:
8249 elif RUNstatus.get() > 0:
8254 if event.widget == Freqca:
8255 if RUNstatus.get() == 0:
8257 elif RUNstatus.get() > 0:
8262 if event.widget == Bodeca:
8263 if RUNstatus.get() == 0:
8265 elif RUNstatus.get() > 0:
8276 global ca, MarkerLoc, Mulx
8277 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
8278 global TMsb, CHAsb, CHBsb, CHAIsb, CHBIsb, MarkerScale
8279 global CHAVPosEntry, CHAIPosEntry, CHBVPosEntry, CHBIPosEntry
8280 global SAMPLErate, RUNstatus, MarkerNum, PrevV, PrevT
8281 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
8282 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
8283 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
8284 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
8285 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry
8286 global MeasGateLeft, MeasGateRight, MeasGateStatus, MeasGateNum, TMsb, SAMPLErate
8289 HoldOff = float(eval(HoldOffentry.get()))
8293 HoldOffentry.delete(0,END)
8294 HoldOffentry.insert(0, HoldOff)
8297 TIMEdiv = float(eval(TMsb.get()))
8300 TMsb.delete(0,
"end")
8301 TMsb.insert(0,TIMEdiv)
8303 if TIMEdiv < 0.0002:
8306 if (RUNstatus.get() == 0):
8307 MarkerNum = MarkerNum + 1
8310 CH1pdvRange = float(eval(CHAsb.get()))
8313 CHAsb.insert(0, CH1vpdvRange)
8315 CH2pdvRange = float(eval(CHBsb.get()))
8318 CHBsb.insert(0, CH2vpdvRange)
8320 CH1IpdvRange = float(eval(CHAIsb.get()))
8322 CHAIsb.delete(0,END)
8323 CHAIsb.insert(0, CH1IpdvRange)
8325 CH2IpdvRange = float(eval(CHBIsb.get()))
8327 CHBIsb.delete(0,END)
8328 CHBIsb.insert(0, CH2IpdvRange)
8331 CHAOffset = float(eval(CHAVPosEntry.get()))
8333 CHAVPosEntry.delete(0,END)
8334 CHAVPosEntry.insert(0, CHAOffset)
8336 CHAIOffset = float(eval(CHAIPosEntry.get()))
8338 CHAIPosEntry.delete(0,END)
8339 CHAIPosEntry.insert(0, CHAIOffset)
8341 CHBOffset = float(eval(CHBVPosEntry.get()))
8343 CHBVPosEntry.delete(0,END)
8344 CHBVPosEntry.insert(0, CHBOffset)
8346 CHBIOffset = float(eval(CHBIPosEntry.get()))
8348 CHBIPosEntry.delete(0,END)
8349 CHBIPosEntry.insert(0, CHBIOffset)
8351 if CH1pdvRange < 0.001:
8353 if CH2pdvRange < 0.001:
8355 if CH1IpdvRange < 1.0:
8357 if CH2IpdvRange < 1.0:
8360 if MuxScreenStatus.get() == 1:
8362 CHMApdvRange = float(eval(CHB_Asb.get()))
8364 CHB_Asb.delete(0,END)
8365 CHB_Asb.insert(0, CHMApdvRange)
8367 CHMBpdvRange = float(eval(CHB_Bsb.get()))
8369 CHB_Bsb.delete(0,END)
8370 CHB_Bsb.insert(0, CHMBpdvRange)
8372 CHMCpdvRange = float(eval(CHB_Csb.get()))
8374 CHB_Csb.delete(0,END)
8375 CHB_Csb.insert(0, CHMCpdvRange)
8377 CHMDpdvRange = float(eval(CHB_Dsb.get()))
8379 CHB_Dsb.delete(0,END)
8380 CHB_Dsb.insert(0, CHMDpdvRange)
8381 YconvMA = float(GRH/10.0) / CHMApdvRange
8382 YconvMB = float(GRH/10.0) / CHMBpdvRange
8383 YconvMC = float(GRH/10.0) / CHMCpdvRange
8384 YconvMD = float(GRH/10.0) / CHMDpdvRange
8386 CHBAOffset = float(eval(CHB_APosEntry.get()))
8388 CHB_APosEntry.delete(0,END)
8389 CHB_APosEntry.insert(0, CHBAOffset)
8391 CHBBOffset = float(eval(CHB_BPosEntry.get()))
8393 CHB_BPosEntry.delete(0,END)
8394 CHB_BPosEntry.insert(0, CHBBOffset)
8396 CHBCOffset = float(eval(CHB_CPosEntry.get()))
8398 CHB_CPosEntry.delete(0,END)
8399 CHB_CPosEntry.insert(0, CHBCOffset)
8401 CHBDOffset = float(eval(CHB_DPosEntry.get()))
8403 CHB_DPosEntry.delete(0,END)
8404 CHB_DPosEntry.insert(0, CHBDOffset)
8405 Yoffset1 = CHAOffset
8406 if MarkerScale.get() == 1:
8407 Yconv1 = float(GRH/10.0) / CH1pdvRange
8408 Yoffset1 = CHAOffset
8409 COLORmarker = COLORtrace1
8411 elif MarkerScale.get() == 2:
8412 Yconv1 = float(GRH/10.0) / CH2pdvRange
8413 Yoffset1 = CHBOffset
8414 COLORmarker = COLORtrace2
8416 elif MarkerScale.get() == 3:
8417 Yconv1 = float(GRH/10.0) / CH1IpdvRange
8418 Yoffset1 = CHAIOffset
8419 COLORmarker = COLORtrace3
8421 elif MarkerScale.get() == 4:
8422 Yconv1 = float(GRH/10.0) / CH2IpdvRange
8423 Yoffset1 = CHBIOffset
8424 COLORmarker = COLORtrace4
8427 elif MarkerScale.get() == 5:
8428 Yconv1 = float(GRH/10.0) / CHMApdvRange
8429 Yoffset1 = CHBAOffset
8430 COLORmarker = COLORtrace2
8432 elif MarkerScale.get() == 6:
8433 Yconv1 = float(GRH/10.0) / CHMBpdvRange
8434 Yoffset1 = CHBBOffset
8435 COLORmarker = COLORtrace6
8437 elif MarkerScale.get() == 7:
8438 Yconv1 = float(GRH/10.0) / CHMCpdvRange
8439 Yoffset1 = CHBCOffset
8440 COLORmarker = COLORtrace7
8442 elif MarkerScale.get() == 8:
8443 Yconv1 = float(GRH/10.0) / CHMDpdvRange
8444 Yoffset1 = CHBDOffset
8445 COLORmarker = COLORtrace4
8448 Yconv1 = float(GRH/10.0) / CH1pdvRange
8449 Yoffset1 = CHAOffset
8450 COLORmarker = COLORtrace1
8453 c1 = GRH / 2.0 + Y0T
8454 xc1 = GRW / 2.0 + X0L
8455 c2 = GRH / 2.0 + Y0T
8457 ca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
8458 ca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
8460 Tstep = (10.0 * TIMEdiv) / GRW
8461 Tpoint = ((event.x-X0L) * Tstep) + HoldOff
8463 Tpoint = Tpoint/Mulx
8465 axis_value = Tpoint / 1000.0
8466 TString =
' {0:.2f} '.format(axis_value) +
" S "
8467 if Tpoint < 1000
and Tpoint >= 1:
8469 TString =
' {0:.2f} '.format(axis_value) +
" mS "
8471 axis_value = Tpoint * 1000.0
8472 TString =
' {0:.2f} '.format(axis_value) +
" uS "
8474 yvolts = ((event.y-c1)/Yconv1) - Yoffset1
8475 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
8476 V1String =
' {0:.3f} '.format(-yvolts)
8478 V1String =
' {0:.1f} '.format(-yvolts)
8479 V_label = str(MarkerNum) +
" " + TString + V1String
8480 V_label = V_label + Units
8482 if MarkerScale.get() == 1
or MarkerScale.get() == 2:
8483 DeltaV =
' {0:.3f} '.format(PrevV-yvolts)
8485 DeltaV =
' {0:.1f} '.format(PrevV-yvolts)
8488 axis_value = DT / 1000.0
8489 DeltaT =
' {0:.2f} '.format(axis_value) +
" S "
8490 if Tpoint < 1000
and Tpoint >= 1:
8492 DeltaT =
' {0:.2f} '.format(axis_value) +
" mS "
8494 axis_value = DT * 1000.0
8495 DeltaT =
' {0:.2f} '.format(axis_value) +
" uS "
8497 DFreq =
' {0:.3f} '.format(1.0/(Tpoint-PrevT))
8498 V_label = V_label +
" Delta " + DeltaT + DeltaV
8499 V_label = V_label + Units
8500 V_label = V_label +
", Freq " + DFreq +
" KHz"
8503 y = Y0T + 3 + (MarkerNum*10)
8505 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
8507 y = Y0T + 3 + (MarkerNum*10)
8509 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
8511 y = Y0T + GRH + 3 - (MarkerNum*10)
8513 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
8515 y = Y0T + GRH + 3 - (MarkerNum*10)
8517 ca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=Justify, font=(
"arial", FontSize ))
8518 ca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
8522 if MeasGateStatus.get() == 1:
8524 Tstep = (10.0 * TIMEdiv) / GRW
8525 if MeasGateNum == 0:
8526 MeasGateLeft = ((event.x-X0L) * Tstep)
8529 MeasGateRight = ((event.x-X0L) * Tstep)
8531 LeftGate = X0L + MeasGateLeft / Tstep
8532 RightGate = X0L + MeasGateRight / Tstep
8533 ca.create_line(LeftGate, Y0T, LeftGate, Y0T+GRH, fill=COLORtext)
8534 ca.create_line(RightGate, Y0T, RightGate, Y0T+GRH, fill=COLORtext)
8540 if ShowC1_V.get() == 0:
8548 if ShowC2_V.get() == 0:
8556 if ShowC1_I.get() == 0:
8564 if ShowC2_I.get() == 0:
8614 global TRACEmodeTime
8616 if TRACEmodeTime.get() == 0:
8617 TRACEmodeTime.set(1)
8619 TRACEmodeTime.set(0)
8624 if ShowTCur.get() == 0:
8632 if ShowVCur.get() == 0:
8638 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus, XYca
8642 if RUNstatus.get() == 0:
8644 XYca.bind_all(
'<MouseWheel>', onCanvasXYScrollClick)
8647 global ShowXCur, ShowYCur, XCursor, YCursor, RUNstatus
8648 if event.widget == XYca:
8649 if ShowXCur.get() > 0
or ShowYCur.get() > 0:
8650 ShiftKeyDwn = event.state & 1
8651 if ShowXCur.get() > 0
and ShiftKeyDwn == 0:
8653 if event.num == 5
or event.delta == -120:
8655 if event.num == 4
or event.delta == 120:
8658 elif ShowYCur.get() > 0
or ShiftKeyDwn == 1:
8660 if event.num == 5
or event.delta == -120:
8662 if event.num == 4
or event.delta == 120:
8665 if RUNstatus.get() == 0:
8675 global HoldOffentry, Xsignal, Ysignal, COLORgrid, COLORtext
8676 global TMsb, CHAsbxy, CHBsbxy, CHAIsbxy, CHBIsbxy, MarkerScale
8677 global CHAVPosEntryxy, CHAIPosEntryxy, CHBVPosEntryxy, CHBIPosEntryxy
8678 global SAMPLErate, RUNstatus, MarkerNum, PrevX, PrevY
8679 global COLORtrace1, COLORtrace2, MathUnits, MathXUnits, MathYUnits
8680 global CH1pdvRange, CH2pdvRange, CH1IpdvRange, CH2IpdvRange
8681 global CHAOffset, CHAIOffset, CHBOffset, CHBIOffset
8684 if (RUNstatus.get() == 0):
8685 MarkerNum = MarkerNum + 1
8687 CH1pdvRange = float(eval(CHAsbxy.get()))
8689 CHAsbxy.delete(0,END)
8690 CHAsbxy.insert(0, CH1vpdvRange)
8692 CH2pdvRange = float(eval(CHBsbxy.get()))
8695 CHBsb.insert(0, CH2vpdvRange)
8697 CH1IpdvRange = float(eval(CHAIsbxy.get()))
8699 CHAIsbxy.delete(0,END)
8700 CHAIsbxy.insert(0, CH1IpdvRange)
8702 CH2IpdvRange = float(eval(CHBIsbxy.get()))
8704 CHBIsbxy.delete(0,END)
8705 CHBIsbxy.insert(0, CH2IpdvRange)
8708 CHAOffset = float(eval(CHAVPosEntryxy.get()))
8710 CHAVPosEntryxy.delete(0,END)
8711 CHAVPosEntryxy.insert(0, CHAOffset)
8713 CHAIOffset = float(eval(CHAIPosEntryxy.get()))
8715 CHAIPosEntryxy.delete(0,END)
8716 CHAIPosEntryxy.insert(0, CHAIOffset)
8718 CHBOffset = float(eval(CHBVPosEntryxy.get()))
8720 CHBVPosEntryxy.delete(0,END)
8721 CHBVPosEntryxy.insert(0, CHBOffset)
8723 CHBIOffset = float(eval(CHBIPosEntryxy.get()))
8725 CHBIPosEntryxy.delete(0,END)
8726 CHBIPosEntryxy.insert(0, CHBIOffset)
8728 if CH1pdvRange < 0.001:
8730 if CH2pdvRange < 0.001:
8732 if CH1IpdvRange < 1.0:
8734 if CH2IpdvRange < 1.0:
8737 HoldOff = float(eval(HoldOffentry.get()))
8741 HoldOffentry.delete(0,END)
8742 HoldOffentry.insert(0, HoldOff)
8744 Yconv1 = float(GRHXY/10) / CH1pdvRange
8745 Xconv1 = float(GRWXY/10) / CH1pdvRange
8746 Yconv2 = float(GRHXY/10) / CH2pdvRange
8747 Xconv2 = float(GRWXY/10) / CH2pdvRange
8750 COLORmarker = COLORtext
8751 Yoffset1 = CHAOffset
8752 c1 = GRHXY / 2 + Y0TXY
8753 xc1 = GRWXY / 2 + X0LXY
8754 c2 = GRHXY / 2 + Y0TXY
8756 XYca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORtext)
8757 XYca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORtext)
8758 XYca.create_text(event.x+4, event.y, text=str(MarkerNum), fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8759 if (Xsignal.get()==1
or Xsignal.get()==5)
and (Ysignal.get()==3
or Ysignal.get()==5):
8760 yvolts = ((event.y-c2)/Yconv2) - CHBOffset
8761 xvolts = ((xc1-event.x)/Xconv1) - CHAOffset
8762 VyString =
' {0:.3f} '.format(-yvolts)
8763 VxString =
' {0:.3f} '.format(-xvolts)
8764 V_label = str(MarkerNum) +
" " + VxString +
" V, " + VyString +
" V"
8766 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8767 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8768 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8770 y = Y0TXY + 3 + (MarkerNum*10)
8771 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8774 elif (Xsignal.get()==3
or Xsignal.get()==5)
and (Ysignal.get()==1
or Ysignal.get()==5):
8775 yvolts = ((event.y-c1)/Yconv1) - CHAOffset
8776 xvolts = ((xc1-event.x)/Xconv2) - CHBOffset
8777 VyString =
' {0:.3f} '.format(-yvolts)
8778 VxString =
' {0:.3f} '.format(-xvolts)
8779 V_label = str(MarkerNum) +
" " + VxString +
" V, " + VyString +
" V"
8781 DeltaY =
' {0:.3f} '.format(PrevY-yvolts)
8782 DeltaX =
' {0:.3f} '.format(PrevX-xvolts)
8783 V_label = V_label +
" Delta " + DeltaX +
" V, " + DeltaY +
" V"
8785 y = Y0TXY + 3 + (MarkerNum*10)
8786 XYca.create_text(x, y, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
8795 OutArray = numpy.array(OutArray)
8796 InArray = numpy.array(InArray)
8797 EndIndex = len(InArray)
8799 while StartIndex < WrFactor:
8800 OutArray = numpy.concatenate((OutArray, InArray[StartIndex:EndIndex:WrFactor]), axis=0)
8801 StartIndex = StartIndex + 1
8809 InArray = numpy.array(InArray)
8810 EndIndex = int(len(InArray)/WrFactor)
8812 while StartIndex < EndIndex:
8814 while LoopIndex < WrFactor:
8815 OutArray.append(InArray[StartIndex+LoopIndex])
8816 LoopIndex = LoopIndex + 1
8817 StartIndex = StartIndex + 1
8818 OutArray = numpy.array(OutArray)
8826 wavfile = wave.open(filename,
"w")
8829 framerate = SAMPLErate
8833 compname =
"not compressed"
8834 wavfile.setparams((nchannels,
8841 ArrN = numpy.array(data)
8842 ArrN /= numpy.max(numpy.abs(data))
8845 mul = int(s * amplitude)
8847 frames.append(struct.pack(
'h', mul))
8849 frames =
''.join(frames)
8851 for x
in xrange(0, repeat):
8853 wavfile.writeframes(frames)
8858 global AWGAAmplEntry, AWGAAmplvalue, AWGAMode, AWG_Amp_Mode
8859 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
8862 AWGAAmplvalue = float(eval(AWGAAmplEntry.get()))
8864 AWGAAmplEntry.delete(0,
"end")
8865 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8867 if AWG_Amp_Mode.get() == 0:
8868 if AWGAMode.get() == 0:
8869 if AWGAAmplvalue > 5.00:
8870 AWGAAmplvalue = 5.00
8871 AWGAAmplEntry.delete(0,
"end")
8872 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8873 if AWGAAmplvalue < 0.00:
8874 AWGAAmplvalue = 0.00
8875 AWGAAmplEntry.delete(0,
"end")
8876 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8877 elif AWG_Amp_Mode.get() == 1:
8878 if AWGAMode.get() == 0:
8879 if AWGAAmplvalue > (2.5 / AWGA_Ext_Gain.get()):
8880 AWGAAmplvalue = 2.5 / AWGA_Ext_Gain.get()
8881 AWGAAmplEntry.delete(0,
"end")
8882 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8883 if AWGAAmplvalue < (-2.50 / AWGA_Ext_Gain.get()):
8884 AWGAAmplvalue = -2.50 / AWGA_Ext_Gain.get()
8885 AWGAAmplEntry.delete(0,
"end")
8886 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8887 if AWGAMode.get() == 1:
8888 if AWGAAmplvalue > 200.00:
8889 AWGAAmplvalue = 200.00
8890 AWGAAmplEntry.delete(0,
"end")
8891 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8892 if AWGAAmplvalue < -200.00:
8893 AWGAAmplvalue = -200.00
8894 AWGAAmplEntry.delete(0,
"end")
8895 AWGAAmplEntry.insert(0, AWGAAmplvalue)
8898 global AWGAOffsetEntry, AWGAOffsetvalue, AWGAMode, AWG_Amp_Mode
8899 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
8902 AWGAOffsetvalue = float(eval(AWGAOffsetEntry.get()))
8904 AWGAOffsetEntry.delete(0,
"end")
8905 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8906 if AWG_Amp_Mode.get() == 0:
8907 if AWGAMode.get() == 0:
8908 if AWGAOffsetvalue > 5.00:
8909 AWGAOffsetvalue = 5.00
8910 AWGAOffsetEntry.delete(0,
"end")
8911 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8912 if AWGAOffsetvalue < 0.00:
8913 AWGAOffsetvalue = 0.00
8914 AWGAOffsetEntry.delete(0,
"end")
8915 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8916 elif AWG_Amp_Mode.get() == 1:
8917 if AWGAOffsetvalue > (2.50-AWGA_Ext_Offset.get()):
8918 AWGAOffsetvalue = 2.50-AWGA_Ext_Offset.get()
8919 AWGAOffsetEntry.delete(0,
"end")
8920 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8921 if AWGAOffsetvalue < (-2.50-AWGA_Ext_Offset.get()):
8922 AWGAOffsetvalue = -2.50-AWGA_Ext_Offset.get()
8923 AWGAOffsetEntry.delete(0,
"end")
8924 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8925 if AWGAMode.get() == 1:
8926 if AWGAOffsetvalue > 200.00:
8927 AWGAOffsetvalue = 200.00
8928 AWGAOffsetEntry.delete(0,
"end")
8929 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8930 if AWGAOffsetvalue < -200.00:
8931 AWGAOffsetvalue = -200.00
8932 AWGAOffsetEntry.delete(0,
"end")
8933 AWGAOffsetEntry.insert(0, AWGAOffsetvalue)
8936 global AWGAFreqEntry, AWGAFreqvalue, AWG_2X
8937 global BodeScreenStatus, BodeDisp
8940 AWGAFreqvalue = float(eval(AWGAFreqEntry.get()))
8942 AWGAFreqEntry.delete(0,
"end")
8943 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8944 if AWG_2X.get() == 1:
8945 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
8946 if AWGAFreqvalue > 90000:
8947 AWGAFreqvalue = 90000
8948 AWGAFreqEntry.delete(0,
"end")
8949 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8951 if AWGAFreqvalue > 50000:
8952 AWGAFreqvalue = 50000
8953 AWGAFreqEntry.delete(0,
"end")
8954 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8956 if AWGAFreqvalue > 25000:
8957 AWGAFreqvalue = 25000
8958 AWGAFreqEntry.delete(0,
"end")
8959 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8960 if AWGAFreqvalue < 0:
8962 AWGAFreqEntry.delete(0,
"end")
8963 AWGAFreqEntry.insert(0, AWGAFreqvalue)
8967 global AWGAPhaseDelay, phasealab, awgaph, awgadel
8969 if AWGAPhaseDelay.get() == 0:
8970 phasealab.configure(text=
"Deg")
8971 awgaph.configure(style=
"WPhase.TRadiobutton")
8972 awgadel.configure(style=
"GPhase.TRadiobutton")
8973 elif AWGAPhaseDelay.get() == 1:
8974 phasealab.configure(text=
"mSec")
8975 awgaph.configure(style=
"GPhase.TRadiobutton")
8976 awgadel.configure(style=
"WPhase.TRadiobutton")
8979 global AWGAPhaseEntry, AWGAPhasevalue
8982 AWGAPhasevalue = float(eval(AWGAPhaseEntry.get()))
8984 AWGAPhaseEntry.delete(0,
"end")
8985 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8987 if AWGAPhasevalue > 360:
8988 AWGAPhasevalue = 360
8989 AWGAPhaseEntry.delete(0,
"end")
8990 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8991 if AWGAPhasevalue < 0:
8993 AWGAPhaseEntry.delete(0,
"end")
8994 AWGAPhaseEntry.insert(0, AWGAPhasevalue)
8997 global AWGADutyCycleEntry, AWGADutyCyclevalue
9000 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))/100
9002 AWGADutyCycleEntry.delete(0,
"end")
9003 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9005 if AWGADutyCyclevalue > 1:
9006 AWGADutyCyclevalue = 1
9007 AWGADutyCycleEntry.delete(0,
"end")
9008 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue*100)
9009 if AWGADutyCyclevalue < 0:
9010 AWGADutyCyclevalue = 0
9011 AWGADutyCycleEntry.delete(0,
"end")
9012 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9016 global AWGAShape, AWGAWave, phasealab, duty1lab
9018 if AWGAShape.get() == 0:
9020 duty1lab.config(text=
"%")
9022 if AWGAShape.get() == 1:
9024 duty1lab.config(text=
"%")
9026 if AWGAShape.get() == 2:
9027 AWGAWave =
'triangle'
9028 duty1lab.config(text=
"%")
9030 if AWGAShape.get() == 3:
9031 AWGAWave =
'sawtooth'
9032 duty1lab.config(text=
"%")
9034 if AWGAShape.get() == 4:
9036 duty1lab.config(text=
"%")
9038 if AWGAShape.get() == 5:
9039 AWGAWave =
'stairstep'
9040 duty1lab.config(text=
"%")
9042 if AWGAShape.get() > 5:
9043 AWGAWave =
'arbitrary'
9047 global AWGAwaveform, AWGALength, awgwindow, AWG_2X, AWGA2X
9050 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9052 CSVFile = open(filename)
9056 csv_f = csv.reader(CSVFile, csv.excel)
9058 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9066 if len(row) > 1
and ColumnSel == 0:
9067 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
9068 ColumnNum = int(RequestColumn) - 1
9069 ColumnLen = str(len(row))
9074 if colnum == ColumnNum:
9075 AWGAwaveform.append(float(col))
9078 print(
'skipping non-numeric row', RowNum)
9080 AWGAwaveform = numpy.array(AWGAwaveform)
9082 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9088 global AWG_2X, AWGA2X, AWGAwaveform
9090 if AWG_2X.get() == 1:
9093 AWGA2X = AWGAwaveform[1::2]
9094 Tempwaveform = AWGAwaveform[::2]
9095 AWGAwaveform = Tempwaveform
9098 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9100 if AWGABurstFlag.get() == 1:
9101 AWGACyclesString = askstring(
"AWG A Burst Mode",
"Current number of cycles " + str(AWGACycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGACycles), parent=awgwindow)
9102 if (AWGACyclesString ==
None):
9104 AWGACycles = int(AWGACyclesString)
9105 AWGADelayString = askstring(
"AWG A Burst Mode",
"Current Burst delay " + str(AWGABurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGABurstDelay), parent=awgwindow)
9106 if (AWGADelayString ==
None):
9108 AWGABurstDelay = float(AWGADelayString)
9112 global AWGAwaveform, AWGALength, AWGAShape, awgwindow, AWGBwaveform, AWGBLength, AWGBShape
9113 global AWG_2X, AWGA2X
9116 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
9118 spf = wave.open(filename,
'r')
9120 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
9123 Length = spf.getnframes()
9127 if spf.getnchannels() == 2:
9128 showwarning(
"Split Stereo",
"Left to AWGA Right to AWGB", parent=awgwindow)
9129 signal = spf.readframes(Length)
9130 Stereo = numpy.fromstring(signal,
'Int16')
9133 AWGAwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
9135 AWGBwaveform.append((Stereo[n] * 2.5 / 32768) + 2.5)
9137 AWGAwaveform = numpy.array(AWGAwaveform)
9138 AWGBwaveform = numpy.array(AWGBwaveform)
9139 AWGALength.config(text =
"L = " + str(len(AWGAwaveform)))
9140 AWGBLength.config(text =
"L = " + str(len(AWGBwaveform)))
9141 AWGBShape.set(AWGAShape.get())
9144 signal = spf.readframes(Length)
9145 WAVsignal = numpy.fromstring(signal,
'Int16')
9147 AWGAwaveform = (WAVsignal * 2.5 / 32768) + 2.5
9148 AWGAwaveform = numpy.array(AWGAwaveform)
9150 AWGALength.config(text =
"L = " + str(len(AWGAwaveform)))
9155 global AWGAwaveform, AWGALength, awgwindow
9157 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
9158 numpy.savetxt(filename, AWGAwaveform, delimiter=
",", fmt=
'%2.4f')
9161 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
9162 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGAMathString
9163 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGALength, awgwindow
9164 global DFiltACoef, DFiltBCoef, AWGAShapeLabel
9165 global AWG_2X, AWGA2X
9167 TempString = AWGAMathString
9168 AWGAShapeLabel.config(text =
"Math" )
9169 AWGAMathString = askstring(
"AWG A Math Formula",
"Current Formula: " + AWGAMathString +
"\n\nNew Formula:\n", initialvalue=AWGAMathString, parent=awgwindow)
9170 if (AWGAMathString ==
None):
9171 AWGAMathString = TempString
9173 AWGAwaveform = eval(AWGAMathString)
9174 AWGAwaveform = numpy.array(AWGAwaveform)
9176 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9180 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9181 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9182 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9183 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9191 if AWGAFreqvalue < 10.0:
9197 if AWGAFreqvalue > 0.0:
9198 if AWG_2X.get() == 1:
9199 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9201 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9203 AWGAperiodvalue = 10.0
9205 if AWGAPhaseDelay.get() == 0:
9206 if AWGAPhasevalue > 0:
9207 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9209 AWGAdelayvalue = 0.0
9210 elif AWGAPhaseDelay.get() == 1:
9211 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9212 Cycles = int(32768/AWGAperiodvalue)
9215 RecLength = int(Cycles * AWGAperiodvalue)
9216 if RecLength % 2 != 0:
9217 RecLength = RecLength + 1
9219 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
9221 if AWG_Amp_Mode.get() == 0:
9222 if AWGAMode.get() == 1:
9223 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9224 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9226 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9227 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9229 if AWGAMode.get() == 1:
9230 amplitude = AWGAAmplvalue/1000.0
9231 offset = AWGAOffsetvalue/1000.0
9233 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9234 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9235 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9236 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9239 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9241 duty1lab.config(text=
"%")
9245 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9246 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9247 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9248 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9254 duty1lab.config(text =
"M Index")
9255 phasealab.config(text =
"M Freq")
9257 if AWGAFreqvalue > 0.0:
9258 if AWG_2X.get() == 1:
9259 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9261 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9263 AWGAperiodvalue = 10.0
9266 ModFreq = float(eval(AWGAPhaseEntry.get()))
9269 AWGAPhaseEntry.delete(0,
"end")
9270 AWGAPhaseEntry.insert(0, ModFreq)
9274 AWGAPhaseEntry.delete(0,
"end")
9275 AWGAPhaseEntry.insert(0, ModFreq)
9277 if AWG_2X.get() == 1:
9278 MODperiodvalue = (BaseSampleRate*2)/ModFreq
9280 MODperiodvalue = BaseSampleRate/ModFreq
9283 ModIndex = float(eval(AWGADutyCycleEntry.get()))
9286 AWGADutyCycleEntry.delete(0,
"end")
9287 AWGADutyCycleEntry.insert(0, ModIndex)
9289 ModCycles = int(32768/MODperiodvalue)
9292 RecLength = int(ModCycles * MODperiodvalue)
9293 if RecLength % 2 != 0:
9294 RecLength = RecLength + 1
9295 CarCycles = int(RecLength/AWGAperiodvalue)
9297 AWGAwaveform = numpy.sin( (numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) - ModIndex*numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)) )
9298 if AWG_Amp_Mode.get() == 0:
9299 if AWGAMode.get() == 1:
9300 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9301 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9303 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9304 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9306 if AWGAMode.get() == 1:
9307 amplitude = AWGAAmplvalue/1000.0
9308 offset = AWGAOffsetvalue/1000.0
9310 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9311 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9312 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9313 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9316 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9320 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9321 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay, AWGAMode
9322 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, phasealab, AWG_Amp_Mode
9323 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9329 duty1lab.config(text =
"M Index")
9330 phasealab.config(text =
"M Freq")
9332 if AWGAFreqvalue > 0.0:
9333 if AWG_2X.get() == 1:
9334 AWGAperiodvalue = (BaseSampleRate*2)/AWGAFreqvalue
9336 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9338 AWGAperiodvalue = 10.0
9341 ModFreq = float(eval(AWGAPhaseEntry.get()))
9344 AWGAPhaseEntry.delete(0,
"end")
9345 AWGAPhaseEntry.insert(0, ModFreq)
9349 AWGAPhaseEntry.delete(0,
"end")
9350 AWGAPhaseEntry.insert(0, ModFreq)
9352 if AWG_2X.get() == 1:
9353 MODperiodvalue = (BaseSampleRate*2)/ModFreq
9355 MODperiodvalue = BaseSampleRate/ModFreq
9358 ModIndex = float(eval(AWGADutyCycleEntry.get()))/200.0
9361 AWGADutyCycleEntry.delete(0,
"end")
9362 AWGADutyCycleEntry.insert(0, ModIndex)
9364 ModCycles = int(32768/MODperiodvalue)
9367 RecLength = int(ModCycles * MODperiodvalue)
9368 if RecLength % 2 != 0:
9369 RecLength = RecLength + 1
9370 CarCycles = int(RecLength/AWGAperiodvalue)
9372 AWGAwaveform = numpy.sin(numpy.linspace(0, CarCycles*2*numpy.pi, RecLength)) * (0.5+(ModIndex*(numpy.cos(numpy.linspace(0, ModCycles*2*numpy.pi, RecLength)))))
9373 if AWG_Amp_Mode.get() == 0:
9374 if AWGAMode.get() == 1:
9375 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2000.0
9376 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2000.0
9378 amplitude = (AWGAOffsetvalue-AWGAAmplvalue) / -2.0
9379 offset = (AWGAOffsetvalue+AWGAAmplvalue) / 2.0
9381 if AWGAMode.get() == 1:
9382 amplitude = AWGAAmplvalue/1000.0
9383 offset = AWGAOffsetvalue/1000.0
9385 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9386 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9387 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9388 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9391 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9395 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
9396 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
9397 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9398 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9406 if AWGAFreqvalue > 0.0:
9407 if AWG_2X.get() == 1:
9408 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9410 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9412 AWGAperiodvalue = 0.0
9413 if AWG_Amp_Mode.get() == 1:
9414 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9415 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9417 MaxV = AWGAOffsetvalue
9418 MinV = AWGAAmplvalue
9420 PulseWidth = int(AWGADutyCyclevalue*100)
9421 PulseSamples = int(AWGAperiodvalue/PulseWidth)
9423 for i
in range(PulseSamples):
9424 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
9426 for j
in range(PulseWidth):
9428 AWGAwaveform.append(MaxV)
9430 AWGAwaveform.append(MinV)
9432 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9433 duty1lab.config(text=
"PWidth")
9437 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength
9438 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWG_Amp_Mode
9439 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9440 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9447 Max_term = int(AWGADutyCyclevalue*100)
9448 if AWG_2X.get() == 1:
9449 TempRate = (BaseSampleRate*2)
9451 TempRate = BaseSampleRate
9453 AWGAwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGAFreqvalue))
9455 while k <= Max_term:
9457 Harmonic = (math.sin(k*numpy.pi/2.0)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGAFreqvalue)))
9458 AWGAwaveform = AWGAwaveform + Harmonic
9460 if AWG_Amp_Mode.get() == 0:
9461 amplitude = (AWGAOffsetvalue-AWGAAmplvalue)/2.0
9462 offset = (AWGAOffsetvalue+AWGAAmplvalue)/2.0
9464 amplitude = AWGAAmplvalue*AWGA_Ext_Gain.get()
9465 offset = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get()
9466 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9468 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9469 duty1lab.config(text=
"Harmonics")
9473 global AWGAwaveform, AWGSampleRate, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAperiodvalue
9474 global AWGADutyCyclevalue, AWGAFreqvalue, duty1lab, AWGAgain, AWGAoffset, AWGAPhaseDelay
9475 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
9476 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9484 if AWGAFreqvalue > 0.0:
9485 if AWG_2X.get() == 1:
9486 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9487 SamplesPermS = int((BaseSampleRate*2)/1000)
9488 if AWGAperiodvalue % 2 != 0:
9489 AWGAperiodvalue = AWGAperiodvalue + 1
9491 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9492 SamplesPermS = int(BaseSampleRate/1000)
9494 AWGAperiodvalue = 0.0
9495 if AWG_Amp_Mode.get() == 1:
9496 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9497 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9499 MaxV = AWGAOffsetvalue
9500 MinV = AWGAAmplvalue
9502 if AWGAPhaseDelay.get() == 0:
9503 if AWGAPhasevalue > 0:
9504 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9506 AWGAdelayvalue = 0.0
9507 elif AWGAPhaseDelay.get() == 1:
9508 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9510 Cycles = int(AWGADutyCyclevalue*100)
9511 NCycles = -1 * Cycles
9513 AWGAwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGAFreqvalue))
9514 amplitude = (MaxV-MinV) / 2.0
9515 offset = (MaxV+MinV) / 2.0
9516 AWGAwaveform = (AWGAwaveform * amplitude) + offset
9517 Cycles = int(37500/AWGAperiodvalue)
9521 Extend = int((Cycles-1.0)*AWGAperiodvalue/2.0)
9522 AWGAwaveform = numpy.pad(AWGAwaveform, (Extend,Extend),
'wrap')
9523 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9525 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9527 duty1lab.config(text=
"Cycles")
9531 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9532 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9533 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9534 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9535 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9543 if AWGAFreqvalue > 0.0:
9544 if AWG_2X.get() == 1:
9545 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9546 SamplesPermS = int((BaseSampleRate*2)/1000)
9547 if AWGAperiodvalue % 2 != 0:
9548 AWGAperiodvalue = AWGAperiodvalue + 1
9550 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9551 SamplesPermS = int(BaseSampleRate/1000)
9553 AWGAperiodvalue = 0.0
9554 if AWG_Amp_Mode.get() == 1:
9555 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9556 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9558 MaxV = AWGAOffsetvalue
9559 MinV = AWGAAmplvalue
9561 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9564 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9567 Remainder = int((AWGAperiodvalue - PulseWidth - SlopeValue)/2)
9570 PulseWidth = PulseWidth - SlopeValue
9573 StepAmp = (MaxV - MinV)/2
9574 StepOff = (MaxV + MinV)/2
9575 AWGAwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
9576 MidArray = numpy.ones(PulseWidth) * MinV
9577 AWGAwaveform = numpy.insert(AWGAwaveform, SlopeValue, MidArray)
9578 AWGAwaveform = numpy.pad(AWGAwaveform, (Remainder, Remainder),
'edge')
9579 if AWGABurstFlag.get() == 1:
9580 TempOneCycle = AWGAwaveform
9581 for i
in range(AWGACycles-1):
9582 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9583 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9584 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9586 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9587 duty1lab.config(text=
"%")
9588 phasealab.config(text =
"Rise Time")
9592 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9593 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9594 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9595 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9596 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9604 if AWGAFreqvalue > 0.0:
9605 if AWG_2X.get() == 1:
9606 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9607 SamplesPermS = int((BaseSampleRate*2)/1000)
9608 if AWGAperiodvalue % 2 != 0:
9609 AWGAperiodvalue = AWGAperiodvalue + 1
9611 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9612 SamplesPermS = int(BaseSampleRate/1000)
9614 AWGAperiodvalue = 0.0
9615 if AWG_Amp_Mode.get() == 1:
9616 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9617 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9619 MaxV = AWGAOffsetvalue
9620 MinV = AWGAAmplvalue
9622 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9625 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9628 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9631 PulseWidth = PulseWidth - SlopeValue
9634 StepValue = (MaxV - MinV) / SlopeValue
9636 for i
in range(SlopeValue):
9637 AWGAwaveform.append(SampleValue)
9638 SampleValue = SampleValue + StepValue
9639 for i
in range(PulseWidth):
9640 AWGAwaveform.append(MaxV)
9641 for i
in range(SlopeValue):
9642 AWGAwaveform.append(SampleValue)
9643 SampleValue = SampleValue - StepValue
9644 for i
in range(Remainder):
9645 AWGAwaveform.append(MinV)
9646 if AWGABurstFlag.get() == 1:
9647 TempOneCycle = AWGAwaveform
9648 for i
in range(AWGACycles-1):
9649 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9650 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9651 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9653 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9654 duty1lab.config(text=
"%")
9655 phasealab.config(text =
"Rise Time")
9659 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9660 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9661 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9662 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9663 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9671 AWGADutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
9673 AWGADutyCycleEntry.delete(0,
"end")
9674 AWGADutyCycleEntry.insert(0, AWGADutyCyclevalue)
9676 if AWGAFreqvalue > 0.0:
9677 if AWG_2X.get() == 1:
9678 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9679 SamplesPermS = int((BaseSampleRate*2)/1000)
9680 if AWGAperiodvalue % 2 != 0:
9681 AWGAperiodvalue = AWGAperiodvalue + 1
9683 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9684 SamplesPermS = int(BaseSampleRate/1000)
9686 AWGAperiodvalue = 0.0
9687 if AWG_Amp_Mode.get() == 1:
9688 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9689 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9691 MaxV = AWGAOffsetvalue
9692 MinV = AWGAAmplvalue
9694 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9697 PulseWidth = int(AWGADutyCyclevalue*SamplesPermS)
9700 Remainder = int(AWGAperiodvalue - PulseWidth) - SlopeValue
9703 PulseWidth = PulseWidth - SlopeValue
9706 StepValue = (MaxV - MinV) / SlopeValue
9708 for i
in range(SlopeValue):
9709 AWGAwaveform.append(SampleValue)
9710 SampleValue = SampleValue + StepValue
9711 for i
in range(PulseWidth):
9712 AWGAwaveform.append(MaxV)
9713 for i
in range(SlopeValue):
9714 AWGAwaveform.append(SampleValue)
9715 SampleValue = SampleValue - StepValue
9716 for i
in range(Remainder):
9717 AWGAwaveform.append(MinV)
9718 if AWGABurstFlag.get() == 1:
9719 TempOneCycle = AWGAwaveform
9720 for i
in range(AWGACycles-1):
9721 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9722 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9723 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9725 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9726 duty1lab.config(text=
"Width mS")
9727 phasealab.config(text =
"Rise Time")
9731 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, phasealab, duty1lab
9732 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9733 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9734 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9735 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9743 if AWGAFreqvalue > 0.0:
9744 if AWG_2X.get() == 1:
9745 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9746 SamplesPermS = int((BaseSampleRate*2)/1000)
9747 if AWGAperiodvalue % 2 != 0:
9748 AWGAperiodvalue = AWGAperiodvalue + 1
9750 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9751 SamplesPermS = int(BaseSampleRate/1000)
9753 AWGAperiodvalue = 0.0
9754 if AWG_Amp_Mode.get() == 1:
9755 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9756 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9758 MaxV = AWGAOffsetvalue
9759 MinV = AWGAAmplvalue
9761 SlopeValue = int(AWGAPhasevalue*SamplesPermS)
9764 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9767 Remainder = int(AWGAperiodvalue - PulseWidth)
9770 PulseWidth = PulseWidth - SlopeValue
9773 StepValue = (MaxV - MinV) / SlopeValue
9775 for i
in range(SlopeValue):
9776 AWGAwaveform.append(SampleValue)
9777 SampleValue = SampleValue + StepValue
9778 for i
in range(PulseWidth):
9779 AWGAwaveform.append(MaxV)
9780 for i
in range(Remainder):
9781 AWGAwaveform.append(MinV)
9782 if AWGABurstFlag.get() == 1:
9783 TempOneCycle = AWGAwaveform
9784 for i
in range(AWGACycles-1):
9785 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9786 TempDelay = int(AWGABurstDelay*SamplesPermS/2)
9787 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, TempDelay),
'edge')
9789 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9790 duty1lab.config(text=
"%")
9791 phasealab.config(text =
"Slope Time")
9795 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, duty1lab
9796 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue, AWG_Amp_Mode
9797 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9798 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9799 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9807 if AWGAFreqvalue > 0.0:
9808 if AWG_2X.get() == 1:
9809 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9810 SamplesPermS = int((BaseSampleRate*2)/1000)
9811 if AWGAperiodvalue % 2 != 0:
9812 AWGAperiodvalue = AWGAperiodvalue + 1
9814 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
9815 SamplesPermS = int(BaseSampleRate/1000)
9817 AWGAperiodvalue = 0.0
9818 if AWG_Amp_Mode.get() == 1:
9819 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9820 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9822 MaxV = AWGAOffsetvalue
9823 MinV = AWGAAmplvalue
9825 if AWGAPhaseDelay.get() == 0:
9826 if AWGAPhasevalue > 0:
9827 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
9829 AWGAdelayvalue = 0.0
9830 elif AWGAPhaseDelay.get() == 1:
9831 AWGAdelayvalue = AWGAPhasevalue * SAMPLErate / 1000
9834 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue)
9837 Remainder = int(AWGAperiodvalue - PulseWidth)
9840 UpStepValue = (MaxV - MinV) / PulseWidth
9841 DownStepValue = (MaxV - MinV) / Remainder
9843 for i
in range(PulseWidth):
9844 AWGAwaveform.append(SampleValue)
9845 SampleValue = SampleValue + UpStepValue
9846 for i
in range(Remainder):
9847 AWGAwaveform.append(SampleValue)
9848 SampleValue = SampleValue - DownStepValue
9849 AWGAwaveform = numpy.roll(AWGAwaveform, int(AWGAdelayvalue))
9850 if AWGABurstFlag.get() == 1:
9851 TempOneCycle = AWGAwaveform
9852 for i
in range(AWGACycles-1):
9853 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9854 TempDelay = int(AWGABurstDelay*SamplesPermS)
9855 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
9857 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9859 duty1lab.config(text =
"Symmetry")
9863 global AWGAwaveform, AWGAAmplvalue, AWGAOffsetvalue, AWGALength, AWGAPhaseDelay, AWG_Amp_Mode
9864 global AWGAFreqvalue, AWGAperiodvalue, AWGSAMPLErate, AWGADutyCyclevalue, AWGAPhasevalue
9865 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9866 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9867 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9875 if AWGAFreqvalue > 0.0:
9876 if AWG_2X.get() == 1:
9877 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9878 SamplesPermS = int((BaseSampleRate*2)/1000)
9879 if AWGAperiodvalue % 2 != 0:
9880 AWGAperiodvalue = AWGAperiodvalue + 1
9882 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9883 SamplesPermS = int(BaseSampleRate/1000)
9885 AWGAperiodvalue = 0.0
9886 if AWG_Amp_Mode.get() == 1:
9887 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9888 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9890 MaxV = AWGAOffsetvalue
9891 MinV = AWGAAmplvalue
9893 PulseWidth = int(AWGAperiodvalue * AWGADutyCyclevalue / 2.0)
9894 if AWGAPhaseDelay.get() == 0:
9895 DelayValue = int(AWGAperiodvalue*(AWGAPhasevalue/360))
9896 elif AWGAPhaseDelay.get() == 1:
9897 DelayValue = int(AWGAPhasevalue*SamplesPermS)
9898 for i
in range(DelayValue-PulseWidth):
9899 AWGAwaveform.append((MinV+MaxV)/2.0)
9900 for i
in range(PulseWidth):
9901 AWGAwaveform.append(MaxV)
9902 for i
in range(PulseWidth):
9903 AWGAwaveform.append(MinV)
9904 DelayValue = int(AWGAperiodvalue-DelayValue)
9905 for i
in range(DelayValue-PulseWidth):
9906 AWGAwaveform.append((MinV+MaxV)/2.0)
9907 if AWGABurstFlag.get() == 1:
9908 TempOneCycle = AWGAwaveform
9909 for i
in range(AWGACycles-1):
9910 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9911 TempDelay = int(AWGABurstDelay*SamplesPermS)
9912 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'edge')
9914 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9918 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
9919 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
9920 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9921 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9922 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9928 if AWGAFreqvalue > 0.0:
9929 if AWG_2X.get() == 1:
9930 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9931 SamplesPermS = int((BaseSampleRate*2)/1000)
9932 if AWGAperiodvalue % 2 != 0:
9933 AWGAperiodvalue = AWGAperiodvalue + 1
9935 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9936 SamplesPermS = int(BaseSampleRate/1000)
9938 AWGAperiodvalue = 0.0
9939 if AWG_Amp_Mode.get() == 1:
9940 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9941 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9943 if AWGAAmplvalue > AWGAOffsetvalue:
9944 MinV = AWGAOffsetvalue
9945 MaxV = AWGAAmplvalue
9947 MaxV = AWGAOffsetvalue
9948 MinV = AWGAAmplvalue
9950 AWGAwaveform = numpy.random.uniform(MinV, MaxV, int(AWGAperiodvalue))
9951 Mid = (MaxV+MinV)/2.0
9952 if AWGABurstFlag.get() == 1:
9953 TempOneCycle = AWGAwaveform
9954 for i
in range(AWGACycles-1):
9955 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
9956 TempDelay = int(AWGABurstDelay*SamplesPermS)
9957 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
9959 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
9963 global AWGAwaveform, AWGSAMPLErate, AWGAAmplvalue, AWGAOffsetvalue, AWGAFreqvalue
9964 global AWGALength, AWGAperiodvalue, AWG_Amp_Mode
9965 global AWGABurstFlag, AWGACycles, AWGABurstDelay
9966 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
9967 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
9973 if AWGAFreqvalue > 0.0:
9974 if AWG_2X.get() == 1:
9975 AWGAperiodvalue = int((BaseSampleRate*2)/AWGAFreqvalue)
9976 SamplesPermS = int((BaseSampleRate*2)/1000)
9977 if AWGAperiodvalue % 2 != 0:
9978 AWGAperiodvalue = AWGAperiodvalue + 1
9980 AWGAperiodvalue = BaseSampleRate/AWGAFreqvalue
9981 SamplesPermS = int(BaseSampleRate/1000)
9983 AWGAperiodvalue = 0.0
9984 if AWG_Amp_Mode.get() == 1:
9985 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
9986 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
9988 if AWGAAmplvalue > AWGAOffsetvalue:
9989 MinV = AWGAOffsetvalue
9990 MaxV = AWGAAmplvalue
9992 MaxV = AWGAOffsetvalue
9993 MinV = AWGAAmplvalue
9995 AWGAwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGAperiodvalue))
9996 Mid = (MaxV+MinV)/2.0
9997 if AWGABurstFlag.get() == 1:
9998 TempOneCycle = AWGAwaveform
9999 for i
in range(AWGACycles-1):
10000 AWGAwaveform = numpy.concatenate((AWGAwaveform, TempOneCycle))
10001 TempDelay = int(AWGABurstDelay*SamplesPermS)
10002 AWGAwaveform = numpy.pad(AWGAwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
10004 AWGALength.config(text =
"L = " + str(int(len(AWGAwaveform))))
10008 global AWGAMode, AWGAIOMode, AWGAModeLabel, DevID, session, devx, DevOne, CHA, HWRevOne
10009 global AWG_Amp_Mode
10011 if AWGAMode.get() == 0:
10013 elif AWGAMode.get() == 1:
10015 elif AWGAMode.get() == 2:
10017 if AWGAIOMode.get() > 0:
10018 if HWRevOne ==
"D":
10019 if AWGAMode.get() == 0:
10023 label_txt = label_txt +
" Split I/O"
10024 label_txt = label_txt +
" Mode"
10025 AWGAModeLabel.config(text = label_txt )
10030 global AWGAAmplvalue, AWGAOffsetvalue
10031 global AWGAFreqvalue, AWGAPhasevalue, AWGAPhaseDelay
10032 global AWGADutyCyclevalue, FSweepMode, AWGARepeatFlag, AWGSync
10033 global AWGAWave, AWGAMode, AWGATerm, AWGAwaveform, AWGAIOMode
10034 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne, AWG_Amp_Mode
10035 global amp1lab, off1lab, AWGA2X, AWGA2X, AWGBWave, AWGBRepeatFlag
10036 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10045 if AWG_Amp_Mode.get() == 0:
10046 amp1lab.config(text =
"Min Ch A" )
10047 off1lab.config(text =
"Max Ch A" )
10049 amp1lab.config(text =
"Amp Ch A" )
10050 off1lab.config(text =
"Off Ch A" )
10052 if AWGAFreqvalue > 0.0:
10053 AWGAperiodvalue = AWGSAMPLErate/AWGAFreqvalue
10055 AWGAperiodvalue = 0.0
10057 if AWGAPhaseDelay.get() == 0:
10058 if AWGAWave ==
'square':
10059 AWGAPhasevalue = AWGAPhasevalue + 270.0
10060 if AWGAPhasevalue > 359:
10061 AWGAPhasevalue = AWGAPhasevalue - 360
10062 if AWGAPhasevalue > 0:
10063 AWGAdelayvalue = AWGAperiodvalue * AWGAPhasevalue / 360.0
10065 AWGAdelayvalue = 0.0
10066 elif AWGAPhaseDelay.get() == 1:
10067 AWGAdelayvalue = AWGAPhasevalue * 100
10069 if AWGATerm.get() == 0:
10070 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
10071 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
10072 elif AWGATerm.get() == 1:
10073 devx.ctrl_transfer( 0x40, 0x51, 32, 0, 0, 0, 100)
10074 devx.ctrl_transfer( 0x40, 0x50, 33, 0, 0, 0, 100)
10075 elif AWGATerm.get() == 2:
10076 devx.ctrl_transfer( 0x40, 0x50, 32, 0, 0, 0, 100)
10077 devx.ctrl_transfer( 0x40, 0x51, 33, 0, 0, 0, 100)
10079 if AWGAWave ==
'dc':
10080 if AWG_2X.get() == 2:
10081 AWGAWave ==
'arbitrary'
10082 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
10084 if AWGAMode.get() == 0:
10085 if AWGAIOMode.get() == 0:
10086 CHA.mode = Mode.SVMI
10088 CHA.mode = Mode.SVMI_SPLIT
10089 CHA.constant(AWGAOffsetvalue)
10091 if AWGAMode.get() == 1:
10092 if AWGAIOMode.get() == 0:
10093 CHA.mode = Mode.SIMV
10095 CHA.mode = Mode.SIMV_SPLIT
10096 CHA.constant(AWGAOffsetvalue/1000)
10098 if AWGAMode.get() == 2:
10099 if AWGAIOMode.get() == 0:
10100 CHA.mode = Mode.HI_Z
10102 CHA.mode = Mode.HI_Z_SPLIT
10104 if AWGAIOMode.get() > 0:
10105 if HWRevOne ==
"D":
10107 CHA.mode = Mode.SIMV_SPLIT
10110 if AWGAMode.get() == 0:
10111 if AWGAIOMode.get() == 0:
10112 CHA.mode = Mode.SVMI
10114 CHA.mode = Mode.SVMI_SPLIT
10115 if AWGAMode.get() == 1:
10116 if AWGAIOMode.get() == 0:
10117 CHA.mode = Mode.SIMV
10119 CHA.mode = Mode.SIMV_SPLIT
10120 AWGAOffsetvalue = AWGAOffsetvalue/1000
10121 AWGAAmplvalue = AWGAAmplvalue/1000
10122 if AWGAMode.get() == 2:
10123 if AWGAIOMode.get() == 0:
10124 CHA.mode = Mode.HI_Z
10126 CHA.mode = Mode.HI_Z_SPLIT
10128 if AWG_Amp_Mode.get() == 1:
10129 MaxV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() + (AWGAAmplvalue * AWGA_Ext_Gain.get())
10130 MinV = (AWGAOffsetvalue * AWGA_Ext_Gain.get()) + AWGA_Ext_Offset.get() - (AWGAAmplvalue * AWGA_Ext_Gain.get())
10132 MaxV = AWGAOffsetvalue
10133 MinV = AWGAAmplvalue
10135 if AWGAWave ==
'sine':
10136 CHA.sine(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10137 elif AWGAWave ==
'triangle':
10138 CHA.triangle(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10139 elif AWGAWave ==
'sawtooth':
10140 CHA.sawtooth(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10141 elif AWGAWave ==
'square':
10142 CHA.square(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue, AWGADutyCyclevalue)
10143 elif AWGAWave ==
'stairstep':
10144 CHA.stairstep(MaxV, MinV, AWGAperiodvalue, AWGAdelayvalue)
10145 elif AWGAWave ==
'arbitrary':
10146 if AWGSync.get() == 0:
10147 AWGARepeatFlag.set(1)
10148 if AWG_2X.get() == 2:
10149 AWGAWave ==
'arbitrary'
10150 CHA.arbitrary(AWGB2X, AWGBRepeatFlag.get())
10152 CHA.arbitrary(AWGAwaveform, AWGARepeatFlag.get())
10155 if AWGAIOMode.get() > 0:
10156 if HWRevOne ==
"D":
10158 CHA.mode = Mode.SIMV_SPLIT
10161 global AWGAAmplEntry, AWGBAmplEntry, AWGAOffsetEntry, AWGBOffsetEntry, AWGAFreqEntry, AWGBFreqEntry
10162 global AWGAPhaseEntry, AWGBPhaseEntry, AWGADutyCycleEntry, AWGBDutyCycleEntry, AWGAShape, AWGBShape
10167 AWGBAmplvalue = float(eval(AWGAAmplEntry.get()))
10168 AWGBOffsetvalue = float(eval(AWGAOffsetEntry.get()))
10169 AWGBAmplEntry.delete(0,
"end")
10170 AWGBAmplEntry.insert(0, AWGBOffsetvalue)
10171 AWGBOffsetEntry.delete(0,
"end")
10172 AWGBOffsetEntry.insert(0, AWGBAmplvalue)
10174 AWGBFreqvalue = float(eval(AWGAFreqEntry.get()))
10175 AWGBFreqEntry.delete(0,
"end")
10176 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10177 AWGBPhasevalue = float(eval(AWGAPhaseEntry.get()))
10178 AWGBPhaseEntry.delete(0,
"end")
10179 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10180 AWGBDutyCyclevalue = float(eval(AWGADutyCycleEntry.get()))
10181 AWGBDutyCycleEntry.delete(0,
"end")
10182 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10183 AWGBShape.set(AWGAShape.get())
10189 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10191 if AWGBBurstFlag.get() == 1:
10192 AWGBCyclesString = askstring(
"AWG B Burst Mode",
"Current number of cycles " + str(AWGBCycles) +
"\n\nNew number of cycles:\n", initialvalue=str(AWGBCycles), parent=awgwindow)
10193 if (AWGBCyclesString ==
None):
10195 AWGBCycles = int(AWGBCyclesString)
10196 AWGBDelayString = askstring(
"AWG B Burst Mode",
"Current Burst delay " + str(AWGBBurstDelay) +
"\n\nNew burst delay in mS:\n", initialvalue=str(AWGBBurstDelay), parent=awgwindow)
10197 if (AWGBDelayString ==
None):
10199 AWGBBurstDelay = float(AWGBDelayString)
10203 global AWGBAmplEntry, AWGBAmplvalue, AWGBMode, AWG_Amp_Mode
10204 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10207 AWGBAmplvalue = float(eval(AWGBAmplEntry.get()))
10209 AWGBAmplEntry.delete(0,
"end")
10210 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10212 if AWGBMode.get() == 0:
10213 if AWG_Amp_Mode.get() == 0:
10214 if AWGBAmplvalue > 5.00:
10215 AWGBAmplvalue = 5.00
10216 AWGBAmplEntry.delete(0,
"end")
10217 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10218 if AWGBAmplvalue < 0.00:
10219 AWGBAmplvalue = 0.00
10220 AWGBAmplEntry.delete(0,
"end")
10221 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10222 elif AWG_Amp_Mode.get() == 1:
10223 if AWGBAmplvalue > (2.5 / AWGB_Ext_Gain.get()):
10224 AWGBAmplvalue = 2.5 / AWGB_Ext_Gain.get()
10225 AWGBAmplEntry.delete(0,
"end")
10226 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10227 if AWGBAmplvalue < (-2.50 / AWGB_Ext_Gain.get()):
10228 AWGBAmplvalue = -2.50 / AWGB_Ext_Gain.get()
10229 AWGBAmplEntry.delete(0,
"end")
10230 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10231 elif AWGBMode.get() == 1:
10232 if AWGBAmplvalue > 200.00:
10233 AWGBAmplvalue = 200.00
10234 AWGBAmplEntry.delete(0,
"end")
10235 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10236 if AWGBAmplvalue < -200.00:
10237 AWGBAmplvalue = -200.00
10238 AWGBAmplEntry.delete(0,
"end")
10239 AWGBAmplEntry.insert(0, AWGBAmplvalue)
10242 global AWGBOffsetEntry, AWGBOffsetvalue, AWGBMode, AWG_Amp_Mode
10243 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10246 AWGBOffsetvalue = float(eval(AWGBOffsetEntry.get()))
10248 AWGBOffsetEntry.delete(0,
"end")
10249 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10250 if AWG_Amp_Mode.get() == 0:
10251 if AWGBMode.get() == 0:
10252 if AWGBOffsetvalue > 5.00:
10253 AWGBOffsetvalue = 5.00
10254 AWGBOffsetEntry.delete(0,
"end")
10255 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10256 if AWGBOffsetvalue < 0.00:
10257 AWGBOffsetvalue = 0.00
10258 AWGBOffsetEntry.delete(0,
"end")
10259 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10260 elif AWG_Amp_Mode.get() == 1:
10261 if AWGBOffsetvalue > (2.50-AWGB_Ext_Offset.get()):
10262 AWGBOffsetvalue = 2.50-AWGB_Ext_Offset.get()
10263 AWGBOffsetEntry.delete(0,
"end")
10264 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10265 if AWGBOffsetvalue < (-2.50-AWGB_Ext_Offset.get()):
10266 AWGBOffsetvalue = -2.50-AWGB_Ext_Offset.get()
10267 AWGBOffsetEntry.delete(0,
"end")
10268 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10269 if AWGBMode.get() == 1:
10270 if AWGBOffsetvalue > 200.00:
10271 AWGBOffsetvalue = 200.00
10272 AWGBOffsetEntry.delete(0,
"end")
10273 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10274 if AWGBOffsetvalue < -200.00:
10275 AWGBOffsetvalue = -200.00
10276 AWGBOffsetEntry.delete(0,
"end")
10277 AWGBOffsetEntry.insert(0, AWGBOffsetvalue)
10280 global AWGBFreqEntry, AWGBFreqvalue, AWG_2X
10281 global BodeScreenStatus, BodeDisp
10284 AWGBFreqvalue = float(eval(AWGBFreqEntry.get()))
10286 AWGBFreqEntry.delete(0,
"end")
10287 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10288 if AWG_2X.get() == 2:
10289 if BodeScreenStatus.get() > 0
and BodeDisp.get() > 0:
10290 if AWGBFreqvalue > 90000:
10291 AWGBFreqvalue = 90000
10292 AWGBFreqEntry.delete(0,
"end")
10293 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10295 if AWGBFreqvalue > 50000:
10296 AWGBFreqvalue = 50000
10297 AWGBFreqEntry.delete(0,
"end")
10298 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10300 if AWGBFreqvalue > 25000:
10301 AWGBFreqvalue = 25000
10302 AWGBFreqEntry.delete(0,
"end")
10303 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10304 if AWGBFreqvalue < 0:
10306 AWGBFreqEntry.delete(0,
"end")
10307 AWGBFreqEntry.insert(0, AWGBFreqvalue)
10311 global AWGbPhaseDelay, phaseblab, awgbph, awgbdel
10313 if AWGBPhaseDelay.get() == 0:
10314 phaseblab.configure(text=
"Deg")
10315 awgbph.configure(style=
"WPhase.TRadiobutton")
10316 awgbdel.configure(style=
"GPhase.TRadiobutton")
10317 elif AWGBPhaseDelay.get() == 1:
10318 phaseblab.configure(text=
"mSec")
10319 awgbph.configure(style=
"GPhase.TRadiobutton")
10320 awgbdel.configure(style=
"WPhase.TRadiobutton")
10323 global AWGBPhaseEntry, AWGBPhasevalue
10326 AWGBPhasevalue = float(eval(AWGBPhaseEntry.get()))
10328 AWGBPhaseEntry.delete(0,
"end")
10329 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10331 if AWGBPhasevalue > 360:
10332 AWGBPhasevalue = 360
10333 AWGBPhaseEntry.delete(0,
"end")
10334 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10335 if AWGBPhasevalue < 0:
10337 AWGBPhaseEntry.delete(0,
"end")
10338 AWGBPhaseEntry.insert(0, AWGBPhasevalue)
10341 global AWGBDutyCycleEntry, AWGBDutyCyclevalue
10344 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))/100
10346 AWGBDutyCycleEntry.delete(0,
"end")
10347 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10349 if AWGBDutyCyclevalue > 1:
10350 AWGBDutyCyclevalue = 1
10351 AWGBDutyCycleEntry.delete(0,
"end")
10352 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue*100)
10353 if AWGBDutyCyclevalue < 0:
10354 AWGBDutyCyclevalue = 0
10355 AWGBDutyCycleEntry.delete(0,
"end")
10356 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10360 global AWGBShape, AWGBWave, duty2lab, AWG_2X, CHA, CHB
10362 if AWGBShape.get() == 0:
10364 duty2lab.config(text=
"%")
10366 if AWGBShape.get() == 1:
10368 duty2lab.config(text=
"%")
10370 if AWGBShape.get() == 2:
10371 AWGBWave =
'triangle'
10372 duty2lab.config(text=
"%")
10374 if AWGBShape.get() == 3:
10375 AWGBWave =
'sawtooth'
10376 duty2lab.config(text=
"%")
10378 if AWGBShape.get() == 4:
10379 AWGBWave =
'square'
10380 duty2lab.config(text=
"%")
10382 if AWGBShape.get() == 5:
10383 AWGBWave =
'stairstep'
10384 duty2lab.config(text=
"%")
10386 if AWGBShape.get() > 5:
10387 AWGBWave =
'arbitrary'
10388 if AWG_2X.get() == 1:
10389 CHB.mode = CHA.mode
10390 AWGBWave =
'arbitrary'
10394 global AWGBwaveform, AWGBLength, awgwindow, AWG_2X, AWGB2X
10397 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10399 CSVFile = open(filename)
10403 csv_f = csv.reader(CSVFile, csv.excel)
10405 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10411 if len(row) > 1
and ColumnSel == 0:
10412 RequestColumn = askstring(
"Which Column?",
"File contains 1 to " + str(len(row)) +
" columns\n\nEnter column number to import:\n", initialvalue=1, parent=awgwindow)
10413 ColumnNum = int(RequestColumn) - 1
10414 ColumnLen = str(len(row))
10419 if colnum == ColumnNum:
10420 AWGBwaveform.append(float(col))
10423 print(
'skipping non-numeric row', RowNum)
10425 AWGBwaveform = numpy.array(AWGBwaveform)
10427 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10433 global AWG_2X, AWGB2X, AWGBwaveform
10435 if AWG_2X.get() == 2:
10438 AWGB2X = AWGBwaveform[::2]
10439 Tempwaveform = AWGBwaveform[1::2]
10440 AWGBwaveform = Tempwaveform
10443 global AWGBwaveform, AWGBLength, awgwindow
10444 global AWG_2X, AWGA2X
10447 filename = askopenfilename(defaultextension =
".wav", filetypes=[(
"WAV files",
"*.wav")], parent=awgwindow)
10449 spf = wave.open(filename,
'r')
10451 showwarning(
"WARNING",
"No such file found or wrong format!", parent=awgwindow)
10454 if spf.getnchannels() == 2:
10455 showwarning(
"WARNING",
"Only mono files supported!", parent=awgwindow)
10458 Length = spf.getnframes()
10461 signal = spf.readframes(Length)
10462 WAVsignal = numpy.fromstring(signal,
'Int16')
10464 AWGBwaveform = (WAVsignal * 2.5 / 32768) + 2.5
10465 AWGBwaveform = numpy.array(AWGBwaveform)
10467 AWGBLength.config(text =
"L = " + str(len(AWGBwaveform)))
10472 global AWGBwaveform, AWGBLength, awgwindow
10474 filename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=awgwindow)
10475 numpy.savetxt(filename, AWGBwaveform, delimiter=
",", fmt=
'%2.4f')
10478 global AWGAwaveform, AWGSAMPLErate, VBuffA, VBuffB, IBuffA, IBuffB
10479 global AWGBwaveform, VmemoryA, VmemoryB, ImemoryA, ImemoryB, AWGBMathString
10480 global FFTBuffA, FFTBuffB, FFTwindowshape, AWGBLength, awgwindow
10481 global DFiltACoef, DFiltBCoef, AWGBShapeLabel
10482 global AWG_2X, AWGA2X
10484 TempString = AWGBMathString
10485 AWGBShapeLabel.config(text =
"Math" )
10486 AWGBMathString = askstring(
"AWG B Math Formula",
"Current Formula: " + AWGBMathString +
"\n\nNew Formula:\n", initialvalue=AWGBMathString, parent=awgwindow)
10487 if (AWGBMathString ==
None):
10488 AWGBMathString = TempString
10490 AWGBwaveform = eval(AWGBMathString)
10491 AWGBwaveform = numpy.array(AWGBwaveform)
10493 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10497 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBFreqvalue, awgwindow
10498 global AWG_Amp_Mode
10499 global AWGA2X, AWG_2X, SAMPLErate, BaseSampleRate
10500 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10502 Max_term = int(AWGBDutyCyclevalue*100)
10507 if AWG_2X.get() == 1:
10508 TempRate = (BaseSampleRate*2)
10510 TempRate = BaseSampleRate
10512 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*numpy.pi, TempRate/AWGBFreqvalue))
10514 while k <= Max_term:
10516 Harmonic = (math.sin(k*numpy.pi/2)/k)*(numpy.cos(numpy.linspace(0, k*2*numpy.pi, TempRate/AWGBFreqvalue)))
10517 AWGBwaveform = AWGBwaveform + Harmonic
10519 if AWG_Amp_Mode.get() == 0:
10520 amplitude = (AWGBOffsetvalue-AWGBAmplvalue)/2
10521 offset = (AWGBOffsetvalue+AWGBAmplvalue)/2
10523 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
10524 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
10525 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10527 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10528 duty2lab.config(text=
"Harmonics")
10532 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
10533 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay, AWGBMode
10534 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10535 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10543 if AWGBFreqvalue < 10.0:
10549 if AWGBFreqvalue > 0.0:
10550 if AWG_2X.get() == 2:
10551 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10553 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10555 AWGBperiodvalue = 10.0
10557 if AWGBPhaseDelay.get() == 0:
10558 if AWGBPhasevalue > 0:
10559 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10561 AWGBdelayvalue = 0.0
10562 elif AWGBPhaseDelay.get() == 1:
10563 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
10564 Cycles = int(32768/AWGBperiodvalue)
10567 RecLength = int(Cycles * AWGBperiodvalue)
10568 if RecLength % 2 != 0:
10569 RecLength = RecLength + 1
10571 AWGBwaveform = numpy.cos(numpy.linspace(0, 2*Cycles*numpy.pi, RecLength))
10573 if AWG_Amp_Mode.get() == 0:
10574 if AWGBMode.get() == 1:
10575 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2000.0
10576 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2000.0
10578 amplitude = (AWGBOffsetvalue-AWGBAmplvalue) / -2.0
10579 offset = (AWGBOffsetvalue+AWGBAmplvalue) / 2.0
10581 if AWGBMode.get() == 1:
10582 amplitude = AWGBAmplvalue/1000.0
10583 offset = AWGBOffsetvalue/1000.0
10585 amplitude = AWGBAmplvalue*AWGB_Ext_Gain.get()
10586 offset = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get()
10587 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10588 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10590 if AWG_2X.get() == 2:
10593 AWGB2X = AWGBwaveform[::2]
10594 Tempwaveform = AWGBwaveform[1::2]
10595 AWGBwaveform = Tempwaveform
10596 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10598 duty2lab.config(text=
"%")
10602 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength
10603 global AWGBDutyCyclevalue, AWGBFreqvalue, AWG_Amp_Mode
10604 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10605 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10613 if AWGBFreqvalue > 0.0:
10614 if AWG_2X.get() == 2:
10615 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10617 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10619 AWGBperiodvalue = 0.0
10620 if AWG_Amp_Mode.get() == 1:
10621 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10622 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10624 MaxV = AWGBOffsetvalue
10625 MinV = AWGBAmplvalue
10627 PulseWidth = int(AWGBDutyCyclevalue*100)
10628 PulseSamples = int(AWGBperiodvalue/PulseWidth)
10630 for i
in range(PulseSamples):
10631 v = round(PulseWidth/2*(1+numpy.sin(i*2*numpy.pi/PulseSamples)))
10633 for j
in range(PulseWidth):
10635 AWGBwaveform.append(MaxV)
10637 AWGBwaveform.append(MinV)
10639 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10640 duty2lab.config(text=
"PWidth")
10644 global AWGBwaveform, AWGSampleRate, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBperiodvalue
10645 global AWGBDutyCyclevalue, AWGBFreqvalue, duty2lab, AWGBgain, AWGBoffset, AWGBPhaseDelay
10646 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate, AWG_Amp_Mode
10647 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10655 if AWGBFreqvalue > 0.0:
10656 if AWG_2X.get() == 1:
10657 AWGBperiodvalue = int((BaseSampleRate*2)/AWGBFreqvalue)
10658 if AWGBperiodvalue % 2 != 0:
10659 AWGBperiodvalue = AWGBperiodvalue + 1
10661 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10663 AWGBperiodvalue = 0.0
10664 if AWG_Amp_Mode.get() == 1:
10665 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10666 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10668 MaxV = AWGBOffsetvalue
10669 MinV = AWGBAmplvalue
10671 if AWGBPhaseDelay.get() == 0:
10672 if AWGBPhasevalue > 0:
10673 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10675 AWGBdelayvalue = 0.0
10676 elif AWGBPhaseDelay.get() == 1:
10677 AWGBdelayvalue = AWGBPhasevalue * SampleRate / 1000
10679 Cycles = int(AWGBDutyCyclevalue*100)
10680 NCycles = -1 * Cycles
10682 AWGBwaveform = numpy.sinc(numpy.linspace(NCycles, Cycles, SAMPLErate/AWGBFreqvalue))
10683 amplitude = (MaxV-MinV) / 2.0
10684 offset = (MaxV+MinV) / 2.0
10685 AWGBwaveform = (AWGBwaveform * amplitude) + offset
10686 Cycles = int(37500/AWGBperiodvalue)
10690 Extend = int((Cycles-1.0)*AWGBperiodvalue/2.0)
10691 AWGBwaveform = numpy.pad(AWGBwaveform, (Extend,Extend),
'wrap')
10692 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
10694 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10696 duty2lab.config(text=
"Cycles")
10700 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10701 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10702 global AWG_Amp_Mode
10703 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10704 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10705 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10713 if AWGBFreqvalue > 0.0:
10714 if AWG_2X.get() == 2:
10715 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10716 SamplesPermS = int((BaseSampleRate*2)/1000)
10718 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10719 SamplesPermS = int(BaseSampleRate/1000)
10721 AWGBperiodvalue = 0.0
10722 if AWG_Amp_Mode.get() == 1:
10723 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10724 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10726 MaxV = AWGBOffsetvalue
10727 MinV = AWGBAmplvalue
10729 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10730 if SlopeValue <= 0:
10732 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10735 Remainder = int((AWGBperiodvalue - PulseWidth - SlopeValue)/2)
10738 PulseWidth = PulseWidth - SlopeValue
10741 StepAmp = (MaxV - MinV)/2
10742 StepOff = (MaxV + MinV)/2
10743 AWGBwaveform = StepAmp * (numpy.cos(numpy.linspace(0, 2*numpy.pi, SlopeValue*2))) + StepOff
10744 MidArray = numpy.ones(PulseWidth) * MinV
10745 AWGBwaveform = numpy.insert(AWGBwaveform, SlopeValue, MidArray)
10746 AWGBwaveform = numpy.pad(AWGBwaveform, (Remainder, Remainder),
'edge')
10747 if AWGBBurstFlag.get() == 1:
10748 TempOneCycle = AWGBwaveform
10749 for i
in range(AWGBCycles-1):
10750 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10751 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10752 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10754 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10755 duty2lab.config(text=
"%")
10756 phaseblab.config(text =
"Rise Time")
10760 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10761 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10762 global AWG_Amp_Mode
10763 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10764 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10765 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10773 if AWGBFreqvalue > 0.0:
10774 if AWG_2X.get() == 2:
10775 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10776 SamplesPermS = int((BaseSampleRate*2)/1000)
10778 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10779 SamplesPermS = int(BaseSampleRate/1000)
10781 AWGBperiodvalue = 0.0
10782 if AWG_Amp_Mode.get() == 1:
10783 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10784 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10786 MaxV = AWGBOffsetvalue
10787 MinV = AWGBAmplvalue
10789 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10790 if SlopeValue <= 0:
10792 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10795 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
10798 PulseWidth = PulseWidth - SlopeValue
10801 StepValue = (MaxV - MinV) / SlopeValue
10803 for i
in range(SlopeValue):
10804 AWGBwaveform.append(SampleValue)
10805 SampleValue = SampleValue + StepValue
10806 for i
in range(PulseWidth):
10807 AWGBwaveform.append(MaxV)
10808 for i
in range(SlopeValue):
10809 AWGBwaveform.append(SampleValue)
10810 SampleValue = SampleValue - StepValue
10811 for i
in range(Remainder):
10812 AWGBwaveform.append(MinV)
10813 if AWGBBurstFlag.get() == 1:
10814 TempOneCycle = AWGBwaveform
10815 for i
in range(AWGBCycles-1):
10816 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10817 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10818 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10820 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10821 duty2lab.config(text=
"%")
10822 phaseblab.config(text =
"Rise Time")
10826 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10827 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10828 global AWG_Amp_Mode
10829 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10830 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10831 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10839 AWGBDutyCyclevalue = float(eval(AWGBDutyCycleEntry.get()))
10841 AWGBDutyCycleEntry.delete(0,
"end")
10842 AWGBDutyCycleEntry.insert(0, AWGBDutyCyclevalue)
10844 if AWGBFreqvalue > 0.0:
10845 if AWG_2X.get() == 2:
10846 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10847 SamplesPermS = int((BaseSampleRate*2)/1000)
10849 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10850 SamplesPermS = int(BaseSampleRate/1000)
10852 AWGBperiodvalue = 0.0
10853 if AWG_Amp_Mode.get() == 1:
10854 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10855 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10857 MaxV = AWGBOffsetvalue
10858 MinV = AWGBAmplvalue
10860 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10861 if SlopeValue <= 0:
10863 PulseWidth = int(AWGBDutyCyclevalue*SamplesPermS)
10866 Remainder = int(AWGBperiodvalue - PulseWidth) - SlopeValue
10869 PulseWidth = PulseWidth - SlopeValue
10872 StepValue = (MaxV - MinV) / SlopeValue
10874 for i
in range(SlopeValue):
10875 AWGBwaveform.append(SampleValue)
10876 SampleValue = SampleValue + StepValue
10877 for i
in range(PulseWidth):
10878 AWGBwaveform.append(MaxV)
10879 for i
in range(SlopeValue):
10880 AWGBwaveform.append(SampleValue)
10881 SampleValue = SampleValue - StepValue
10882 for i
in range(Remainder):
10883 AWGBwaveform.append(MinV)
10884 if AWGBBurstFlag.get() == 1:
10885 TempOneCycle = AWGBwaveform
10886 for i
in range(AWGBCycles-1):
10887 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10888 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10889 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10891 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10892 duty2lab.config(text=
"Width mS")
10893 phaseblab.config(text =
"Rise Time")
10897 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10898 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10899 global AWG_Amp_Mode
10900 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10901 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10902 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10910 if AWGBFreqvalue > 0.0:
10911 if AWG_2X.get() == 2:
10912 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10913 SamplesPermS = int((BaseSampleRate*2)/1000)
10915 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10916 SamplesPermS = int(BaseSampleRate/1000)
10918 AWGBperiodvalue = 0.0
10919 if AWG_Amp_Mode.get() == 1:
10920 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10921 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10923 MaxV = AWGBOffsetvalue
10924 MinV = AWGBAmplvalue
10926 SlopeValue = int(AWGBPhasevalue*SamplesPermS)
10927 if SlopeValue <= 0:
10929 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
10932 Remainder = int(AWGBperiodvalue - PulseWidth)
10935 PulseWidth = PulseWidth - SlopeValue
10938 StepValue = (MaxV - MinV) / SlopeValue
10940 for i
in range(SlopeValue):
10941 AWGBwaveform.append(SampleValue)
10942 SampleValue = SampleValue + StepValue
10943 for i
in range(PulseWidth):
10944 AWGBwaveform.append(MaxV)
10945 for i
in range(Remainder):
10946 AWGBwaveform.append(MinV)
10947 if AWGBBurstFlag.get() == 1:
10948 TempOneCycle = AWGBwaveform
10949 for i
in range(AWGBCycles-1):
10950 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
10951 TempDelay = int(AWGBBurstDelay*SamplesPermS)
10952 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
10954 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
10955 duty2lab.config(text=
"%")
10956 phaseblab.config(text =
"Slope Time")
10960 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
10961 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
10962 global AWG_Amp_Mode
10963 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
10964 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
10965 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
10973 if AWGBFreqvalue > 0.0:
10974 if AWG_2X.get() == 2:
10975 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
10976 SamplesPermS = int((BaseSampleRate*2)/1000)
10978 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
10979 SamplesPermS = int(BaseSampleRate/1000)
10981 AWGBperiodvalue = 0.0
10982 if AWG_Amp_Mode.get() == 1:
10983 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
10984 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
10986 MaxV = AWGBOffsetvalue
10987 MinV = AWGBAmplvalue
10989 if AWGBPhaseDelay.get() == 0:
10990 if AWGBPhasevalue > 0:
10991 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
10993 AWGBdelayvalue = 0.0
10994 elif AWGBPhaseDelay.get() == 1:
10995 AWGBdelayvalue = AWGBPhasevalue * AWGSAMPLErate / 1000
10998 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue)
11001 Remainder = int(AWGBperiodvalue - PulseWidth)
11004 UpStepValue = (MaxV - MinV) / PulseWidth
11005 DownStepValue = (MaxV - MinV) / Remainder
11007 for i
in range(PulseWidth):
11008 AWGBwaveform.append(SampleValue)
11009 SampleValue = SampleValue + UpStepValue
11010 for i
in range(Remainder):
11011 AWGBwaveform.append(SampleValue)
11012 SampleValue = SampleValue - DownStepValue
11013 AWGBwaveform = numpy.roll(AWGBwaveform, int(AWGBdelayvalue))
11014 if AWGBBurstFlag.get() == 1:
11015 TempOneCycle = AWGBwaveform
11016 for i
in range(AWGBCycles-1):
11017 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11018 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11019 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11021 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11023 duty2lab.config(text =
"Symmetry")
11027 global AWGBwaveform, AWGBAmplvalue, AWGBOffsetvalue, AWGBLength, AWGBPhaseDelay
11028 global AWGBFreqvalue, AWGBperiodvalue, AWGSAMPLErate, AWGBDutyCyclevalue, AWGBPhasevalue
11029 global AWG_Amp_Mode
11030 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11031 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11032 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11040 if AWGBFreqvalue > 0.0:
11041 if AWG_2X.get() == 2:
11042 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11043 SamplesPermS = int((BaseSampleRate*2)/1000)
11045 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11046 SamplesPermS = int(BaseSampleRate/1000)
11048 AWGBperiodvalue = 0.0
11049 if AWG_Amp_Mode.get() == 1:
11050 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11051 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11053 MaxV = AWGBOffsetvalue
11054 MinV = AWGBAmplvalue
11056 PulseWidth = int(AWGBperiodvalue * AWGBDutyCyclevalue / 2)
11057 if AWGBPhaseDelay.get() == 0:
11058 DelayValue = int(AWGBperiodvalue*(AWGBPhasevalue/360))
11059 elif AWGBPhaseDelay.get() == 1:
11060 DelayValue = int(AWGBPhasevalue*SamplesPermS)
11061 for i
in range(DelayValue-PulseWidth):
11062 AWGBwaveform.append((MinV+MaxV)/2)
11063 for i
in range(PulseWidth):
11064 AWGBwaveform.append(MaxV)
11065 for i
in range(PulseWidth):
11066 AWGBwaveform.append(MinV)
11067 DelayValue = int(AWGBperiodvalue-DelayValue)
11068 for i
in range(DelayValue-PulseWidth):
11069 AWGBwaveform.append((MinV+MaxV)/2)
11070 if AWGBBurstFlag.get() == 1:
11071 TempOneCycle = AWGBwaveform
11072 for i
in range(AWGBCycles-1):
11073 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11074 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11075 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'edge')
11077 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11081 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
11082 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
11083 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11084 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11085 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11091 if AWGBFreqvalue > 0.0:
11092 if AWG_2X.get() == 2:
11093 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11094 SamplesPermS = int((BaseSampleRate*2)/1000)
11096 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11097 SamplesPermS = int(BaseSampleRate/1000)
11099 AWGBperiodvalue = 0.0
11101 if AWGBAmplvalue > AWGBOffsetvalue:
11102 MinV = AWGBOffsetvalue
11103 MaxV = AWGBAmplvalue
11105 MaxV = AWGBOffsetvalue
11106 MinV = AWGBAmplvalue
11107 if AWG_Amp_Mode.get() == 1:
11108 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11109 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11111 AWGBwaveform = numpy.random.uniform(MinV, MaxV, int(AWGBperiodvalue))
11112 Mid = (MaxV+MinV)/2
11113 if AWGBBurstFlag.get() == 1:
11114 TempOneCycle = AWGBwaveform
11115 for i
in range(AWGBCycles-1):
11116 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11117 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11118 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11120 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11124 global AWGBwaveform, AWGSAMPLErate, AWGBAmplvalue, AWGBOffsetvalue, AWGBFreqvalue
11125 global AWGBLength, AWGBperiodvalue, AWG_Amp_Mode
11126 global AWGBBurstFlag, AWGBCycles, AWGBBurstDelay
11127 global AWGB2X, AWG_2X, SAMPLErate, BaseSampleRate
11128 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11134 if AWGBFreqvalue > 0.0:
11135 if AWG_2X.get() == 2:
11136 AWGBperiodvalue = (BaseSampleRate*2)/AWGBFreqvalue
11137 SamplesPermS = int((BaseSampleRate*2)/1000)
11139 AWGBperiodvalue = BaseSampleRate/AWGBFreqvalue
11140 SamplesPermS = int(BaseSampleRate/1000)
11142 AWGBperiodvalue = 0.0
11143 if AWGBAmplvalue > AWGBOffsetvalue:
11144 MinV = AWGBOffsetvalue
11145 MaxV = AWGBAmplvalue
11147 MaxV = AWGBOffsetvalue
11148 MinV = AWGBAmplvalue
11149 if AWG_Amp_Mode.get() == 1:
11150 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11151 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11153 AWGBwaveform = numpy.random.normal((MinV+MaxV)/2, (MaxV-MinV)/3, int(AWGBperiodvalue))
11154 Mid = (MaxV+MinV)/2
11155 if AWGBBurstFlag.get() == 1:
11156 TempOneCycle = AWGBwaveform
11157 for i
in range(AWGBCycles-1):
11158 AWGBwaveform = numpy.concatenate((AWGBwaveform, TempOneCycle))
11159 TempDelay = int(AWGBBurstDelay*SamplesPermS)
11160 AWGBwaveform = numpy.pad(AWGBwaveform, (TempDelay, 0),
'constant', constant_values=(Mid))
11162 AWGBLength.config(text =
"L = " + str(int(len(AWGBwaveform))))
11166 global AWGBMode, AWGBIOMode, AWGBModeLabel, DevID, devx, DevOne, CHB, HWRevOne
11168 if AWGBMode.get() == 0:
11170 elif AWGBMode.get() == 1:
11172 elif AWGBMode.get() == 2:
11174 if AWGBIOMode.get() > 0:
11175 if HWRevOne ==
"D":
11176 if AWGBMode.get() == 0:
11180 label_txt = label_txt +
" Split I/O"
11181 label_txt = label_txt +
" Mode"
11182 AWGBModeLabel.config(text = label_txt )
11187 global AWGBAmplvalue, AWGBOffsetvalue, AWGA2X, AWG_2X
11188 global AWGBFreqvalue, AWGBPhasevalue, AWGBPhaseDelay
11189 global AWGBDutyCyclevalue, FSweepMode, AWGBRepeatFlag, AWGSync
11190 global AWGBWave, AWGBMode, AWGBTerm, AWGBwaveform, AWGBIOMode
11191 global CHA, CHB, AWGSAMPLErate, DevID, devx, HWRevOne
11192 global amp2lab, off2lab, AWG_Amp_Mode
11193 global AWGA2X, AWGB2X, AWGAWave, AWGARepeatFlag
11194 global AWGA_Ext_Gain, AWGA_Ext_Offset, AWGB_Ext_Gain, AWGB_Ext_Offset
11196 if AWG_Amp_Mode.get() == 0:
11197 amp2lab.config(text =
"Min Ch B" )
11198 off2lab.config(text =
"Max Ch B" )
11200 amp2lab.config(text =
"Amp Ch B" )
11201 off2lab.config(text =
"Off Ch B" )
11203 if AWG_2X.get() == 1:
11204 AWGBWave =
'arbitrary'
11205 if AWGBFreqvalue > 0.0:
11206 AWGBperiodvalue = AWGSAMPLErate/AWGBFreqvalue
11208 AWGBperiodvalue = 0.0
11210 if AWGBPhaseDelay.get() == 0:
11211 if AWGBWave ==
'square':
11212 AWGBPhasevalue = AWGBPhasevalue + 270.0
11213 if AWGBPhasevalue > 359:
11214 AWGBPhasevalue = AWGBPhasevalue - 360
11215 if AWGBPhasevalue > 0:
11216 AWGBdelayvalue = AWGBperiodvalue * AWGBPhasevalue / 360.0
11218 AWGBdelayvalue = 0.0
11219 elif AWGBPhaseDelay.get() == 1:
11220 AWGBdelayvalue = AWGBPhasevalue * 100
11222 if AWGBTerm.get() == 0:
11223 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
11224 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
11225 elif AWGBTerm.get() == 1:
11226 devx.ctrl_transfer( 0x40, 0x51, 37, 0, 0, 0, 100)
11227 devx.ctrl_transfer( 0x40, 0x50, 38, 0, 0, 0, 100)
11228 elif AWGBTerm.get() == 2:
11229 devx.ctrl_transfer( 0x40, 0x50, 37, 0, 0, 0, 100)
11230 devx.ctrl_transfer( 0x40, 0x51, 38, 0, 0, 0, 100)
11232 if AWGBWave ==
'dc':
11233 if AWG_2X.get() == 1:
11234 AWGBWave ==
'arbitrary'
11235 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
11237 if AWGBMode.get() == 0:
11238 if AWGBIOMode.get() == 0:
11239 CHB.mode = Mode.SVMI
11241 CHB.mode = Mode.SVMI_SPLIT
11242 CHB.constant(AWGBOffsetvalue)
11243 if AWGBMode.get() == 1:
11244 if AWGBIOMode.get() == 0:
11245 CHB.mode = Mode.SIMV
11247 CHB.mode = Mode.SIMV_SPLIT
11248 CHB.constant(AWGBOffsetvalue/1000)
11249 if AWGBMode.get() == 2:
11250 if AWGBIOMode.get() == 0:
11251 CHB.mode = Mode.HI_Z
11253 CHB.mode = Mode.HI_Z_SPLIT
11255 if AWGBIOMode.get() > 0:
11256 if HWRevOne ==
"D":
11258 CHB.mode = Mode.SIMV_SPLIT
11261 if AWGBMode.get() == 0:
11262 if AWGBIOMode.get() == 0:
11263 CHB.mode = Mode.SVMI
11265 CHB.mode = Mode.SVMI_SPLIT
11266 if AWGBMode.get() == 1:
11267 if AWGBIOMode.get() == 0:
11268 CHB.mode = Mode.SIMV
11270 CHB.mode = Mode.SIMV_SPLIT
11271 AWGBOffsetvalue = AWGBOffsetvalue/1000
11272 AWGBAmplvalue = AWGBAmplvalue/1000
11273 if AWGBMode.get() == 2:
11274 if AWGBIOMode.get() == 0:
11275 CHB.mode = Mode.HI_Z
11277 CHB.mode = Mode.HI_Z_SPLIT
11279 if AWG_Amp_Mode.get() == 1:
11280 MaxV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() + (AWGBAmplvalue * AWGB_Ext_Gain.get())
11281 MinV = (AWGBOffsetvalue * AWGB_Ext_Gain.get()) + AWGB_Ext_Offset.get() - (AWGBAmplvalue * AWGB_Ext_Gain.get())
11283 MaxV = AWGBOffsetvalue
11284 MinV = AWGBAmplvalue
11286 if AWGBWave ==
'sine':
11287 CHB.sine(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11288 elif AWGBWave ==
'triangle':
11289 CHB.triangle(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11290 elif AWGBWave ==
'sawtooth':
11291 CHB.sawtooth(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11292 elif AWGBWave ==
'square':
11293 CHB.square(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue, AWGBDutyCyclevalue)
11294 elif AWGBWave ==
'stairstep':
11295 CHB.stairstep(MaxV, MinV, AWGBperiodvalue, AWGBdelayvalue)
11296 elif AWGBWave ==
'arbitrary':
11297 if AWGSync.get() == 0:
11298 AWGBRepeatFlag.set(1)
11299 if AWG_2X.get() == 1:
11300 AWGBWave ==
'arbitrary'
11301 CHB.arbitrary(AWGA2X, AWGARepeatFlag.get())
11303 CHB.arbitrary(AWGBwaveform, AWGBRepeatFlag.get())
11306 if AWGBIOMode.get() > 0:
11307 if HWRevOne ==
"D":
11309 CHB.mode = Mode.SIMV_SPLIT
11312 global session, CHA, CHB, AWGSync
11314 if (RUNstatus.get() == 1)
and AWGSync.get() == 0:
11315 if session.continuous:
11325 global AWGAMode, AWGBMode, AWGSync
11326 global CHA, CHB, discontloop, contloop, session
11346 global RUNstatus, AWGSync, session, CHA, CHB, IAScreenStatus, IADisp
11348 if (RUNstatus.get() == 1):
11349 if IAScreenStatus.get() > 0
and IADisp.get() > 0:
11352 if AWGSync.get() == 0:
11355 CHA.mode = Mode.HI_Z_SPLIT
11356 CHB.mode = Mode.HI_Z_SPLIT
11360 elif session.continuous:
11363 CHA.mode = Mode.HI_Z_SPLIT
11364 CHB.mode = Mode.HI_Z_SPLIT
11369 global CANVASwidthF, CANVASheightF, freqwindow
11372 filename = asksaveasfilename(defaultextension =
".eps", filetypes=[(
"Encapsulated Postscript",
"*.eps")], parent=freqwindow)
11373 Orient = askyesno(
"Rotation",
"Save in Landscape (Yes) or Portrait (No):\n", parent=freqwindow)
11374 if MarkerNum > 0
or ColorMode.get() > 0:
11375 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
11377 COLORtext =
"#000000"
11380 Freqca.postscript(file=filename, height=CANVASheightF, width=CANVASwidthF, colormode=
'color', rotate=Orient)
11382 COLORtext =
"#ffffff"
11386 print(
"Routine not made yet")
11389 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
11396 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
11404 global FreqTraceMode
11406 FreqTraceMode.set(1)
11407 if RUNstatus.get() == 0:
11409 if RUNstatus.get() == 2:
11414 global FreqTraceMode
11416 FreqTraceMode.set(2)
11417 if RUNstatus.get() == 0:
11419 if RUNstatus.get() == 2:
11423 global RUNstatus, TRACEaverage, FreqTraceMode, freqwindow
11425 FreqTraceMode.set(3)
11427 if RUNstatus.get() == 0:
11429 if RUNstatus.get() == 2:
11433 global FreqTraceMode, TRACEresetFreq
11435 if FreqTraceMode.get()==3:
11436 TRACEresetFreq =
True
11439 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
11440 global T1Fline, T2Fline, T1FRline, T2FRline, TFRMline, TFMline
11441 global T1Pline, T2Pline, T1PRline, T2PRline
11442 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11443 global PeakxM, PeakyM, PeakMdb, PeakfreqM
11444 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
11445 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
11446 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
11448 if ShowC1_VdB.get() == 1:
11453 PeakfreqRA = PeakfreqA
11454 if ShowC2_VdB.get() == 1:
11459 PeakfreqRB = PeakfreqB
11460 if ShowC1_P.get() == 1:
11462 if ShowC2_P.get() == 1:
11464 if ShowMathSA.get() > 0:
11469 PeakfreqRM = PeakfreqM
11474 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
11475 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle
11476 global TAFline, TBFline, TAFRline, TBFRline, TBPRMline, TBPMline
11477 global TAPline, TBPline, TAPRline, TBPRline
11478 global TIARline, TIAXline, TIAMagline, TIAAngline
11479 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
11480 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
11481 global PeakxM, PeakyM, PeakMdb, PeakfreqM
11482 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
11483 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
11484 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
11486 if ShowCA_VdB.get() == 1:
11491 PeakfreqRA = PeakfreqA
11492 if ShowCB_VdB.get() == 1:
11497 PeakfreqRB = PeakfreqB
11498 if ShowCA_P.get() == 1:
11500 if ShowCB_P.get() == 1:
11502 if ShowMathBP.get() > 0:
11503 TBPRMline = TBPMline
11507 PeakfreqRM = PeakfreqM
11508 if Show_Rseries.get() > 0:
11509 RefIARline = TIARline
11510 if Show_Xseries.get() > 0:
11511 RefIAXline = TIAXline
11512 if Show_Magnitude.get() > 0:
11513 RefIAMagline = TIAMagline
11514 if Show_Angle.get() > 0:
11515 RefIAAngline = TIAAngline
11519 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins, bodewindow
11520 global SAMPLErate, ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11523 if ShowCA_VdB.get() == 1:
11524 TRACEsize = len(FSweepAdB)
11525 elif ShowCA_VdB.get() == 1:
11526 TRACEsize = len(FSweepBdB)
11530 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=bodewindow)
11533 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
11534 filename =
"Bode-" + tme
11535 filename = filename +
".csv"
11537 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
11538 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=bodewindow)
11539 DataFile = open(filename,
'a')
11540 HeaderString =
'Frequency-#, '
11541 if ShowCA_VdB.get() == 1:
11543 HeaderString = HeaderString +
'CA-dB, '
11545 HeaderString = HeaderString +
'CA-Mag, '
11546 if ShowCB_VdB.get() == 1:
11548 HeaderString = HeaderString +
'CB-dB, '
11550 HeaderString = HeaderString +
'CB-Mag, '
11551 if ShowCA_P.get() == 1:
11552 HeaderString = HeaderString +
'Phase A-B, '
11553 if ShowCB_P.get() == 1:
11554 HeaderString = HeaderString +
'Phase B-A, '
11555 HeaderString = HeaderString +
'\n'
11556 DataFile.write( HeaderString )
11559 while n < len(FSweepAdB):
11560 F = FBins[FStep[n]]
11562 if ShowCA_VdB.get() == 1:
11563 V = 10 * math.log10(float(FSweepAdB[n])) + 17
11566 txt = txt +
"," + str(V)
11567 if ShowCB_VdB.get() == 1:
11568 V = 10 * math.log10(float(FSweepBdB[n])) + 17
11571 txt = txt +
"," + str(V)
11572 if ShowCA_P.get() == 1:
11573 RelPhase = FSweepAPh[n]
11575 RelPhase = RelPhase - 360
11576 elif RelPhase < -180:
11577 RelPhase = RelPhase + 360
11578 txt = txt +
"," + str(RelPhase)
11579 if ShowCB_P.get() == 1:
11580 RelPhase = FSweepBPh[n]
11582 RelPhase = RelPhase - 360
11583 elif RelPhase < -180:
11584 RelPhase = RelPhase + 360
11585 txt = txt +
"," + str(RelPhase)
11587 DataFile.write(txt)
11593 global iawindow, FStep, FBins
11594 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
11596 if NetworkScreenStatus.get() > 0:
11597 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
11598 filename =
"Impedance-" + tme
11599 filename = filename +
".csv"
11601 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
11602 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=iawindow)
11603 DataFile = open(filename,
'a')
11604 HeaderString =
'Frequency, Series R, Seriec X, Series Z, Series Angle'
11605 HeaderString = HeaderString +
'\n'
11606 DataFile.write( HeaderString )
11609 while n < len(NSweepSeriesR):
11610 F = FBins[FStep[n]]
11611 txt = str(F) +
"," + str(NSweepSeriesR[n]) +
"," + str(NSweepSeriesX[n]) +
"," + str(NSweepSeriesMag[n]) +
"," + str(NSweepSeriesAng[n])
11613 DataFile.write(txt)
11620 global RUNstatus, PowerStatus, devx, PwrBt, freqwindow, session, AWGSync, contloop, discontloop
11621 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA, DevID, FWRevOne, StopFreqEntry
11622 global Two_X_Sample, ADC_Mux_Mode
11625 if DevID ==
"No Device":
11626 showwarning(
"WARNING",
"No Device Plugged In!")
11627 elif FWRevOne == 0.0:
11628 showwarning(
"WARNING",
"Out of data Firmware!")
11630 if PowerStatus == 0:
11632 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
11633 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
11635 if ShowC1_VdB.get() == 0
and ShowC2_VdB.get() == 0
and ShowMathSA.get() == 0
and ShowC1_P.get() == 0
and ShowC2_P.get() == 0:
11636 showwarning(
"WARNING",
"Select at least one trace first", parent=freqwindow)
11639 StopFrequency = float(StopFreqEntry.get())
11641 StopFreqEntry.delete(0,
"end")
11642 StopFreqEntry.insert(0,50000)
11643 StopFrequency = 50000
11644 if FWRevOne > 2.16:
11645 if StopFrequency >= 50000:
11646 Two_X_Sample.set(1)
11648 Two_X_Sample.set(0)
11649 ADC_Mux_Mode.set(0)
11657 global RUNstatus, session, AWGSync
11659 if (RUNstatus.get() == 1):
11661 CHA.mode = Mode.HI_Z_SPLIT
11662 CHB.mode = Mode.HI_Z_SPLIT
11663 if AWGSync.get() == 0:
11667 if session.continuous:
11675 elif (RUNstatus.get() == 2):
11677 elif (RUNstatus.get() == 3):
11679 elif (RUNstatus.get() == 4):
11687 DBlevel.set(DBlevel.get() - 1)
11689 if RUNstatus.get() == 0:
11696 DBlevel.set(DBlevel.get() + 1)
11698 if RUNstatus.get() == 0:
11705 DBlevel.set(DBlevel.get() - 10)
11707 if RUNstatus.get() == 0:
11714 DBlevel.set(DBlevel.get() + 10)
11716 if RUNstatus.get() == 0:
11720 global RUNstatus, SpectrumScreenStatus, IAScreenStatus
11721 global SMPfftpwrTwo, SMPfft, FFTwindow
11722 global TRACEresetFreq, PhAScreenStatus
11724 if FFTwindow.get() != 8:
11725 if (SMPfftpwrTwo.get() > 6):
11726 SMPfftpwrTwo.set(SMPfftpwrTwo.get() - 1)
11727 TRACEresetFreq =
True
11728 SMPfft = 2 ** int(SMPfftpwrTwo.get())
11730 if RUNstatus.get() == 0:
11731 if SpectrumScreenStatus.get() > 0:
11733 if IAScreenStatus.get() > 0:
11735 if PhAScreenStatus.get() > 0:
11737 if RUNstatus.get() == 2:
11741 global RUNstatus, PhAScreenStatus
11742 global SMPfftpwrTwo, SMPfft, FFTwindow
11743 global TRACEresetFreq, SpectrumScreenStatus, IAScreenStatus
11745 if FFTwindow.get() != 8:
11746 if (SMPfftpwrTwo.get() < 16):
11747 SMPfftpwrTwo.set(SMPfftpwrTwo.get() + 1)
11748 TRACEresetFREQ =
True
11749 SMPfft = 2 ** int(SMPfftpwrTwo.get())
11751 if RUNstatus.get() == 0:
11752 if SpectrumScreenStatus.get() > 0:
11754 if IAScreenStatus.get() > 0:
11756 if PhAScreenStatus.get() > 0:
11758 if RUNstatus.get() == 2:
11765 if (DBdivindex.get() >= 1):
11766 DBdivindex.set(DBdivindex.get() - 1)
11768 if RUNstatus.get() == 0:
11776 if (DBdivindex.get() < len(DBdivlist) - 1):
11777 DBdivindex.set(DBdivindex.get() + 1)
11779 if RUNstatus.get() == 0:
11783 global RUNstatus, LoopNum, PowerStatus, devx, PwrBt, bodewindow, session, AWGSync
11784 global ShowCA_VdB, ShowCB_P, ShowCB_VdB, ShowCB_P, ShowMathBP, contloop, discontloop
11785 global FBins, FStep, NSteps, FSweepMode, HScaleBP, CutDC
11786 global AWGAMode, AWGAShape, AWGBMode, AWGBShape
11787 global StartBodeEntry, StopBodeEntry, SweepStepBodeEntry, DevID, FWRevOne
11788 global AWGAFreqEntry, AWGBFreqEntry, Reset_Freq, AWGAIOMode, AWGBIOMode
11789 global Two_X_Sample, ADC_Mux_Mode, AWG_2X, ZEROstuffing, SAMPLErate
11790 global BeginIndex, EndIndex
11792 if DevID ==
"No Device":
11793 showwarning(
"WARNING",
"No Device Plugged In!")
11794 elif FWRevOne == 0.0:
11795 showwarning(
"WARNING",
"Out of data Firmware!")
11797 if PowerStatus == 0:
11799 PwrBt.config(style=
"Pwr.TButton",text=
"PWR-On")
11800 devx.ctrl_transfer( 0x40, 0x51, 49, 0, 0, 0, 100)
11802 if ShowCA_VdB.get() == 0
and ShowCB_VdB.get() == 0
and ShowMathBP.get() == 0:
11803 showwarning(
"WARNING",
"Select at least one trace first", parent=bodewindow)
11806 if ZEROstuffing.get() < 3:
11807 ZEROstuffing.set(3)
11810 EndFreq = float(StopBodeEntry.get())
11812 StopBodeEntry.delete(0,
"end")
11813 StopBodeEntry.insert(0,10000)
11815 if FWRevOne > 2.16:
11816 if EndFreq >= 20000:
11817 Two_X_Sample.set(1)
11818 FBins = numpy.linspace(0, 100000, num=16384)
11820 Two_X_Sample.set(0)
11821 FBins = numpy.linspace(0, 50000, num=16384)
11822 ADC_Mux_Mode.set(0)
11825 BeginFreq = float(StartBodeEntry.get())
11827 StartBodeEntry.delete(0,
"end")
11828 StartBodeEntry.insert(0,100)
11831 if FSweepMode.get() == 1:
11832 if AWGAMode.get() == 2:
11835 if Two_X_Sample.get() == 1:
11842 Reset_Freq = AWGAFreqEntry.get()
11843 if FSweepMode.get() == 2:
11844 if AWGBMode.get() == 2:
11847 if Two_X_Sample.get() == 1:
11854 Reset_Freq = AWGBFreqEntry.get()
11855 if FSweepMode.get() == 3:
11859 NSteps.set(float(SweepStepBodeEntry.get()))
11861 SweepStepBodeEntry.delete(0,
"end")
11862 SweepStepBodeEntry.insert(0, NSteps.get())
11864 if FSweepMode.get() > 0:
11868 NyquistFreq = SAMPLErate/2
11869 BeginIndex = int((BeginFreq/NyquistFreq)*16384)
11870 EndIndex = int((EndFreq/NyquistFreq)*16384)
11871 if NSteps.get() < 5:
11873 if HScaleBP.get() == 1:
11874 LogFStop = math.log10(EndIndex)
11876 LogFStart = math.log10(BeginIndex)
11879 FStep = numpy.logspace(LogFStart, LogFStop, num=NSteps.get(), base=10.0)
11881 FStep = numpy.linspace(BeginIndex, EndIndex, num=NSteps.get())
11886 global RUNstatus, session, AWGSync, FSweepMode, AWGAFreqEntry, AWGBFreqEntry, Reset_Freq
11888 if FSweepMode.get() == 1:
11889 AWGAFreqEntry.delete(0,
"end")
11890 AWGAFreqEntry.insert(0, Reset_Freq)
11891 if FSweepMode.get() == 2:
11892 AWGBFreqEntry.delete(0,
"end")
11893 AWGBFreqEntry.insert(0, Reset_Freq)
11895 if (RUNstatus.get() == 1):
11897 if AWGSync.get() == 0:
11899 elif (RUNstatus.get() == 2):
11901 elif (RUNstatus.get() == 3):
11903 elif (RUNstatus.get() == 4):
11911 DBlevelBP.set(DBlevelBP.get() - 1)
11913 if RUNstatus.get() == 0:
11920 DBlevelBP.set(DBlevelBP.get() + 1)
11922 if RUNstatus.get() == 0:
11929 DBlevelBP.set(DBlevelBP.get() - 10)
11931 if RUNstatus.get() == 0:
11938 DBlevelBP.set(DBlevelBP.get() + 10)
11940 if RUNstatus.get() == 0:
11944 global DBdivindexBP
11947 if (DBdivindexBP.get() >= 1):
11948 DBdivindexBP.set(DBdivindexBP.get() - 1)
11950 if RUNstatus.get() == 0:
11954 global DBdivindexBP
11958 if (DBdivindexBP.get() < len(DBdivlist) - 1):
11959 DBdivindexBP.set(DBdivindexBP.get() + 1)
11961 if RUNstatus.get() == 0:
11965 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11972 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P
11979 global FFTBuffA, FFTBuffB
11996 global FFTBuffA, FFTBuffB
11999 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
12014 global FFTBuffA, FFTBuffB
12015 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P
12016 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
12017 global FFTmemoryB, FFTresultB
12018 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh
12019 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
12020 global FFTwindowshape, FFTbandwidth
12021 global AWGSAMPLErate, StartFreqEntry, StopFreqEntry, StartBodeEntry
12022 global SMPfft, LoopNum, IA_Ext_Conf
12023 global STARTsample, STOPsample
12024 global TRACEaverage, FreqTraceMode, FSweepMode
12025 global TRACEresetFreq, ZEROstuffing
12026 global SpectrumScreenStatus, IAScreenStatus, BodeScreenStatus
12027 global NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
12035 REX = numpy.array(FFTBuffA[0:SMPfft])
12041 REX = REX * FFTwindowshape[0:len(REX)]
12044 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12045 fftsamples = ZEROstuffingvalue * SMPfft
12048 FFTmemoryA = FFTresultA
12049 if FreqTraceMode.get() == 3:
12050 PhaseMemoryA = PhaseA
12053 ALL = numpy.fft.fft(REX, n=fftsamples)
12054 PhaseA = numpy.angle(ALL, deg=
True)
12055 ALL = numpy.absolute(ALL)
12058 le = int(len(ALL) / 2)
12060 PhaseA = PhaseA[0:le]
12061 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12062 Totalcorr = Totalcorr * Totalcorr
12063 FFTresultA = Totalcorr * ALL
12068 REX = numpy.array(FFTBuffB[0:SMPfft])
12075 REX = REX * FFTwindowshape
12079 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12080 fftsamples = ZEROstuffingvalue * SMPfft
12083 FFTmemoryB = FFTresultB
12084 if FreqTraceMode.get() == 3:
12085 PhaseMemoryB = PhaseB
12087 ALL = numpy.fft.fft(REX, n=fftsamples)
12088 PhaseB = numpy.angle(ALL, deg=
True)
12089 ALL = numpy.absolute(ALL)
12092 le = int(len(ALL) / 2 )
12094 PhaseB = PhaseB[0:le]
12095 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12096 Totalcorr = Totalcorr * Totalcorr
12097 FFTresultB = Totalcorr * ALL
12099 if IA_Ext_Conf.get() == 1:
12104 REX = numpy.array(FFTBuffA[0:SMPfft]-FFTBuffB[0:SMPfft])
12110 REX = REX * FFTwindowshape
12113 ZEROstuffingvalue = int(2 ** ZEROstuffing.get())
12114 fftsamples = ZEROstuffingvalue * SMPfft
12121 ALL = numpy.fft.fft(REX, n=fftsamples)
12122 PhaseAB = numpy.angle(ALL, deg=
True)
12123 ALL = numpy.absolute(ALL)
12128 PhaseAB = PhaseAB[:le]
12129 Totalcorr = float(ZEROstuffingvalue)/ fftsamples
12130 Totalcorr = Totalcorr * Totalcorr
12131 FFTresultAB = Totalcorr * ALL
12133 TRACEsize = int(len(FFTresultB))
12134 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
12135 if SpectrumScreenStatus.get() > 0:
12137 StartFrequency = float(StartFreqEntry.get())
12139 StartFreqEntry.delete(0,
"end")
12140 StartFreqEntry.insert(0,100)
12141 StartFrequency = 100
12142 STARTsample = int(StartFrequency / Fsample)
12145 if LoopNum.get() == 1:
12146 PhaseMemoryB = PhaseB
12151 if NetworkScreenStatus.get() > 0:
12154 NSweepSeriesMag = []
12155 NSweepSeriesAng = []
12156 if FreqTraceMode.get() == 1:
12157 if FSweepMode.get() == 1:
12158 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12159 if ptmax > STARTsample:
12160 STARTsample = ptmax
12163 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12165 if FSweepMode.get() == 2:
12166 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12167 if ptmax > STARTsample:
12168 STARTsample = ptmax
12171 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12174 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
12175 if FSweepMode.get() == 1:
12176 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12177 if ptmax > STARTsample:
12178 STARTsample = ptmax
12181 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12183 if FSweepMode.get() == 2:
12184 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12185 if ptmax > STARTsample:
12186 STARTsample = ptmax
12189 PhaseMemoryB[ptmax+i] = PhaseB[ptmax]
12191 if len(FFTresultB) == len(FFTmemoryB):
12192 FFTresultB = numpy.maximum(FFTresultB, FFTmemoryB)
12193 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
12195 FFTresultB = FFTmemoryB + (FFTresultB - FFTmemoryB) / TRACEaverage.get()
12196 PhaseB = PhaseMemoryB +(PhaseB - PhaseMemoryB) / TRACEaverage.get()
12198 FFTmemoryB = FFTresultB
12199 PhaseMemoryB = PhaseB
12201 TRACEsize = int(len(FFTresultA))
12202 Fsample = float(AWGSAMPLErate / 2) / (TRACEsize - 1)
12203 if SpectrumScreenStatus.get() > 0:
12204 STARTsample = int(StartFrequency / Fsample)
12207 if LoopNum.get() == 1:
12208 PhaseMemoryA = PhaseA
12209 if FreqTraceMode.get() == 1:
12210 if FSweepMode.get() == 1:
12211 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12212 if ptmax > STARTsample:
12213 STARTsample = ptmax
12216 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12218 if FSweepMode.get() == 2:
12219 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12220 if ptmax > STARTsample:
12221 STARTsample = ptmax
12224 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12227 if FreqTraceMode.get() == 2
and TRACEresetFreq ==
False:
12228 if FSweepMode.get() == 1:
12229 ptmax = numpy.argmax(FFTresultA[STARTsample:TRACEsize])
12230 if ptmax > STARTsample:
12231 STARTsample = ptmax
12234 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12236 if FSweepMode.get() == 2:
12237 ptmax = numpy.argmax(FFTresultB[STARTsample:TRACEsize])
12238 if ptmax > STARTsample:
12239 STARTsample = ptmax
12242 PhaseMemoryA[ptmax+i] = PhaseA[ptmax]
12245 if len(FFTresultA) == len(FFTmemoryA):
12246 FFTresultA = numpy.maximum(FFTresultA, FFTmemoryA)
12247 if FreqTraceMode.get() == 3
and TRACEresetFreq ==
False:
12249 FFTresultA = FFTmemoryA + (FFTresultA - FFTmemoryA) / TRACEaverage.get()
12250 PhaseA = PhaseMemoryA +(PhaseA - PhaseMemoryA) / TRACEaverage.get()
12252 FFTmemoryA = FFTresultA
12253 PhaseMemoryA = PhaseA
12255 if FSweepMode.get() > 0
and BodeScreenStatus.get() > 0:
12256 FSweepAdB.append(numpy.amax(FFTresultA))
12257 FSweepBdB.append(numpy.amax(FFTresultB))
12258 FSweepAPh.append(PhaseA[numpy.argmax(FFTresultA)])
12259 FSweepBPh.append(PhaseB[numpy.argmax(FFTresultB)])
12261 TRACEresetFreq =
False
12264 global FFTmemoryA, FFTresultA
12265 global FFTmemoryB, FFTresultB
12266 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
12267 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep
12268 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMathSA
12269 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12270 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakIndexA, PeakIndexB
12271 global PeakfreqA, PeakfreqB, Two_X_Sample
12276 global AWGSAMPLErate, HScale, Fsample, SAMPLErate, BaseSampleRate
12277 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
12278 global STARTsample, STOPsample, LoopNum, FSweepMode
12279 global FreqTraceMode
12280 global T1Fline, T2Fline, TFMline, T1Pline, T2Pline
12287 StartFrequency = float(StartFreqEntry.get())
12289 StartFreqEntry.delete(0,
"end")
12290 StartFreqEntry.insert(0,100)
12291 StartFrequency = 100
12293 StopFrequency = float(StopFreqEntry.get())
12295 StopFreqEntry.delete(0,
"end")
12296 StopFreqEntry.insert(0,50000)
12297 StopFrequency = 50000
12298 if StartFrequency > StopFrequency :
12299 StopFreqEntry.delete(0,
"end")
12300 StopFreqEntry.insert(0,50000)
12301 StopFrequency = 50000
12302 if StopFrequency < StartFrequency :
12303 StopFreqEntry.delete(0,
"end")
12304 StopFreqEntry.insert(0,50000)
12305 StopFrequency = 50000
12307 Phasecenter = int(PhCenFreqEntry.get())
12308 RelPhaseCenter.set(Phasecenter)
12310 PhCenFreqEntry.delete(0,
"end")
12311 PhCenFreqEntry.insert(0,0)
12312 RelPhaseCenter.set(0)
12314 if ShowC1_VdB.get() == 1
or ShowMathSA.get() > 0:
12315 TRACEsize = len(FFTresultA)
12316 elif ShowC2_VdB.get() == 1
or ShowMathSA.get() > 0:
12317 TRACEsize = len(FFTresultB)
12320 if FSweepMode.get() > 0
and LoopNum.get() == NSteps.get():
12321 PhaseA = PhaseMemoryA
12322 PhaseB = PhaseMemoryB
12324 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
12325 Yc = float(Y0TF) + Yconv * (DBlevel.get())
12328 Yphconv = float(GRHF) / 360
12329 Yp = float(Y0TF) + Yphconv + 180
12331 Fpixel = (StopFrequency - StartFrequency) / GRWF
12332 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
12333 LogFStop = math.log10(StopFrequency)
12335 LogFStart = math.log10(StartFrequency)
12338 LogFpixel = (LogFStop - LogFStart) / GRWF
12339 STARTsample = StartFrequency / Fsample
12340 STARTsample = int(math.ceil(STARTsample))
12342 STOPsample = StopFrequency / Fsample
12343 STOPsample = int(math.floor(STOPsample))
12345 MAXsample = TRACEsize
12346 if STARTsample > (MAXsample - 1):
12347 STARTsample = MAXsample - 1
12349 if STOPsample > MAXsample:
12350 STOPsample = MAXsample
12358 PeakIndexA = PeakIndexB = n
12359 PeakdbA = PeakdbB = PeakMdb = -200
12360 while n <= STOPsample:
12362 if HScale.get() == 1:
12364 LogF = math.log10(F)
12365 x = X0LF + (LogF - LogFStart)/LogFpixel
12369 x = X0LF + (F - StartFrequency) / Fpixel
12370 if ShowC1_VdB.get() == 1:
12371 T1Fline.append(int(x + 0.5))
12373 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12374 ya = Yc - Yconv * dbA
12383 PeakyA = int(ya + 0.5)
12384 PeakxA = int(x + 0.5)
12387 T1Fline.append(int(ya + 0.5))
12388 if ShowC2_VdB.get() == 1:
12389 T2Fline.append(int(x + 0.5))
12391 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12392 yb = Yc - Yconv * dbB
12401 PeakyB = int(yb + 0.5)
12402 PeakxB = int(x + 0.5)
12405 T2Fline.append(int(yb + 0.5))
12406 if ShowC1_P.get() == 1:
12407 T1Pline.append(int(x + 0.5))
12408 if FSweepMode.get() > 0:
12409 RelPhase = PhaseMemoryA[n]-PhaseMemoryB[n]
12411 RelPhase = PhaseA[n]-PhaseB[n]
12412 RelPhase = RelPhase - Phasecenter
12414 RelPhase = RelPhase - 360
12415 elif RelPhase < -180:
12416 RelPhase = RelPhase + 360
12417 if Two_X_Sample.get() == 0:
12418 PhErr = 0.0018 * n * Fsample
12419 RelPhase = RelPhase + PhErr - 12.0
12421 RelPhase = RelPhase - 9.0
12422 ya = Yp - Yphconv * RelPhase
12423 T1Pline.append(int(ya + 0.5))
12424 if ShowC2_P.get() == 1:
12425 T2Pline.append(int(x + 0.5))
12426 if FSweepMode.get() > 0:
12427 RelPhase = PhaseMemoryB[n]-PhaseMemoryA[n]
12429 RelPhase = PhaseB[n]-PhaseA[n]
12430 RelPhase = RelPhase - Phasecenter
12432 RelPhase = RelPhase - 360
12433 elif RelPhase < -180:
12434 RelPhase = RelPhase + 360
12435 if Two_X_Sample.get() == 0:
12436 PhErr = 0.0018 * n * Fsample
12437 RelPhase = RelPhase - PhErr - 12.0
12439 RelPhase = RelPhase - 9.0
12440 ya = Yp - Yphconv * RelPhase
12441 T2Pline.append(int(ya + 0.5))
12442 if ShowMathSA.get() > 0:
12443 TFMline.append(int(x + 0.5))
12444 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
12445 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
12446 if ShowMathSA.get() == 1:
12448 elif ShowMathSA.get() == 2:
12450 yb = Yc - Yconv * MdB
12457 PeakyM = int(yb + 0.5)
12458 PeakxM = int(x + 0.5)
12460 TFMline.append(int(yb + 0.5))
12464 global FSweepAdB, FSweepBdB, FSweepAPh, FSweepBPh, FStep, FBins
12465 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMathBP
12466 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12467 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12468 global PeakfreqA, PeakfreqB, Two_X_Sample, PhaseOffset1x, PhaseOffset2x
12469 global DBdivindexBP
12474 global AWGSAMPLErate, HScaleBP, RUNstatus, SAMPLErate, BaseSampleRate
12475 global StartBodeEntry, StopBodeEntry
12476 global STARTsample, STOPsample, LoopNum, FSweepMode
12477 global FreqTraceMode, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
12478 global TAFline, TBFline, TBPMline, TAPline, TBPline
12482 global ResScale, NetworkScreenStatus, Show_Rseries, NSweepSeriesR, Show_Xseries, NSweepSeriesX
12483 global Show_Magnitude, NSweepSeriesMag, Show_Angle, NSweepSeriesAng
12484 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
12488 if ShowCA_VdB.get() == 1
or ShowMathBP.get() > 0:
12489 TRACEsize = len(FStep)
12490 elif ShowCB_VdB.get() == 1
or ShowMathBP.get() > 0:
12491 TRACEsize = len(FStep)
12496 EndFreq = float(StopBodeEntry.get())
12498 StopBodeEntry.delete(0,
"end")
12499 StopBodeEntry.insert(0,10000)
12502 BeginFreq = float(StartBodeEntry.get())
12504 StartBodeEntry.delete(0,
"end")
12505 StartBodeEntry.insert(0,100)
12508 Phasecenter = int(PhCenBodeEntry.get())
12509 RelPhaseCenter.set(Phasecenter)
12511 PhCenBodeEntry.delete(0,
"end")
12512 PhCenBodeEntry.insert(0,0)
12513 RelPhaseCenter.set(0)
12516 Impedcenter = int(ImCenBodeEntry.get())
12517 ImpedanceCenter.set(Impedcenter)
12519 ImCenBodeEntry.delete(0,
"end")
12520 ImCenBodeEntry.insert(0,0)
12521 ImpedanceCenter.set(0)
12524 HalfSAMPLErate = SAMPLErate/2
12525 BeginIndex = int((BeginFreq/HalfSAMPLErate)*16384)
12526 EndIndex = int((EndFreq/HalfSAMPLErate)*16384)
12527 CurrentFreqX = X0LBP + 14
12528 if FSweepMode.get() > 0
and len(FSweepAdB) > 4:
12530 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
12531 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
12533 Ymax = Y0TBP + GRHBP
12534 Yphconv = float(GRHBP) / 360
12535 Yp = float(Y0TBP) + Yphconv + 180
12538 Fpixel = (EndFreq - BeginFreq) / GRWBP
12539 LogFStop = math.log10(EndFreq)
12541 LogFStart = math.log10(BeginFreq)
12544 LogFpixel = (LogFStop - LogFStart) / GRWBP
12558 for n
in range(len(FSweepAdB)):
12560 F = FBins[int(FStep[n])]
12562 F = FBins[int(FStep[0])]
12563 if F >= BeginFreq
and F <= EndFreq:
12564 if HScaleBP.get() == 1:
12566 LogF = math.log10(F)
12567 x = x1 + (LogF - LogFStart)/LogFpixel
12571 x = x1 + (F - BeginFreq) / Fpixel
12573 if ShowCA_VdB.get() == 1:
12574 TAFline.append(int(x + 0.5))
12576 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
12577 ya = Yc - Yconv * dbA
12586 PeakyA = int(ya + 0.5)
12587 PeakxA = int(x + 0.5)
12589 TAFline.append(int(ya + 0.5))
12590 if ShowCB_VdB.get() == 1:
12591 TBFline.append(int(x + 0.5))
12593 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
12594 yb = Yc - Yconv * dbB
12603 PeakyB = int(yb + 0.5)
12604 PeakxB = int(x + 0.5)
12606 TBFline.append(int(yb + 0.5))
12607 if ShowCA_P.get() == 1:
12608 TAPline.append(int(x + 0.5))
12609 RelPhase = FSweepAPh[n] - FSweepBPh[n]
12610 RelPhase = RelPhase - Phasecenter
12612 RelPhase = RelPhase - 360
12613 elif RelPhase < -180:
12614 RelPhase = RelPhase + 360
12615 if Two_X_Sample.get() == 0:
12617 RelPhase = RelPhase + PhErr - PhaseOffset1x
12619 RelPhase = RelPhase - PhaseOffset2x
12620 ya = Yp - Yphconv * RelPhase
12621 TAPline.append(int(ya + 0.5))
12622 if ShowCB_P.get() == 1:
12623 TBPline.append(int(x + 0.5))
12624 RelPhase = FSweepBPh[n] - FSweepAPh[n]
12625 RelPhase = RelPhase - Phasecenter
12627 RelPhase = RelPhase - 360
12628 elif RelPhase < -180:
12629 RelPhase = RelPhase + 360
12630 if Two_X_Sample.get() == 0:
12632 RelPhase = RelPhase - PhErr - PhaseOffset1x
12634 RelPhase = RelPhase - PhaseOffset2x
12635 ya = Yp - Yphconv * RelPhase
12636 TBPline.append(int(ya + 0.5))
12637 if ShowMathBP.get() > 0:
12638 TBPMline.append(int(x + 0.5))
12639 dbA = (10 * math.log10(float(FSweepAdB[n])) + 17)
12640 dbB = (10 * math.log10(float(FSweepBdB[n])) + 17)
12641 if ShowMathBP.get() == 1:
12643 elif ShowMathBP.get() == 2:
12645 yb = Yc - Yconv * MdB
12652 PeakyM = int(yb + 0.5)
12653 PeakxM = int(x + 0.5)
12655 TBPMline.append(int(yb + 0.5))
12657 if NetworkScreenStatus.get() > 0:
12658 ycenter = Y0TBP + (GRHBP/2)
12659 OhmsperPixel = float(ResScale.get())*Vdiv.get()/GRHBP
12661 for n
in range(len(NSweepSeriesR)):
12663 F = FBins[int(FStep[n])]
12665 F = FBins[int(FStep[0])]
12666 if F >= BeginFreq
and F <= EndFreq:
12667 if HScaleBP.get() == 1:
12669 LogF = math.log10(F)
12670 x = x1 + (LogF - LogFStart)/LogFpixel
12674 x = x1 + (F - BeginFreq) / Fpixel
12675 if Show_Rseries.get() == 1:
12676 TIARline.append(int(x + 0.5))
12677 y1 = ycenter - ((NSweepSeriesR[n]-Impedcenter) / OhmsperPixel)
12682 TIARline.append(y1)
12683 if Show_Xseries.get() == 1:
12684 TIAXline.append(int(x + 0.5))
12685 y1 = ycenter - ((NSweepSeriesX[n]-Impedcenter) / OhmsperPixel)
12690 TIAXline.append(y1)
12691 if Show_Magnitude.get() == 1:
12692 TIAMagline.append(int(x + 0.5))
12693 y1 = ycenter - ((NSweepSeriesMag[n]-Impedcenter) / OhmsperPixel)
12698 TIAMagline.append(y1)
12699 if Show_Angle.get() == 1:
12700 TIAAngline.append(int(x + 0.5))
12701 y1 = ycenter - Yphconv * (NSweepSeriesAng[n]-Phasecenter)
12706 TIAAngline.append(y1)
12709 global CANVASheightBP, CANVASwidthBP, SmoothCurvesBP
12710 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
12711 global PeakxM, PeakyM, PeakMdb, PeakfreqM
12712 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
12713 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
12714 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
12716 global COLORsignalband, COLORtext
12717 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
12718 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
12719 global DBdivindexBP
12722 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
12729 global AWGSAMPLErate, HScaleBP, SAMPLErate, BaseSampleRate
12731 global StartBodeEntry, StopBodeEntry
12732 global ShowCA_P, ShowCB_P, ShowRA_VdB, ShowRB_VdB, ShowMarkerBP
12733 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP
12734 global ShowMathBP, BodeDisp, RelPhaseCenter, PhCenBodeEntry, ImCenBodeEntry, ImpedanceCenter, Impedcenter
12735 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
12736 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, NetworkScreenStatus
12737 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
12738 global TAFline, TBFline, TAPline, TAFRline, TBFRline, TBPMline, TBPRMline
12739 global TAPRline, TBPRline
12740 global TRACEaverage
12741 global FreqTraceMode
12742 global Vdiv, ResScale
12743 global TIARline, TIAXline, TIAMagline, TIAAngline, CurrentFreqX
12744 global RefIARline, RefIAXline, RefIAMagline, RefIAAngline
12751 EndFreq = float(StopBodeEntry.get())
12753 StopBodeEntry.delete(0,
"end")
12754 StopBodeEntry.insert(0,10000)
12757 BeginFreq = float(StartBodeEntry.get())
12759 StartBodeEntry.delete(0,
"end")
12760 StartBodeEntry.insert(0,100)
12763 Phasecenter = int(PhCenBodeEntry.get())
12764 RelPhaseCenter.set(Phasecenter)
12766 PhCenBodeEntry.delete(0,
"end")
12767 PhCenBodeEntry.insert(0,0)
12768 RelPhaseCenter.set(0)
12771 Impedcenter = int(ImCenBodeEntry.get())
12772 ImpedanceCenter.set(Impedcenter)
12774 ImCenBodeEntry.delete(0,
"end")
12775 ImCenBodeEntry.insert(0,0)
12776 ImpedanceCenter.set(0)
12783 while (i <= Vdiv.get()):
12784 y = Y0TBP + i * GRHBP/Vdiv.get()
12785 Dline = [x1,y,x2,y]
12786 if i == 0
or i == Vdiv.get():
12787 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12789 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12790 Vaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
12791 Vaxis_label = str(Vaxis_value)
12792 Bodeca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
12793 if ShowCA_P.get() == 1
or ShowCB_P.get() == 1
or Show_Angle.get() == 1:
12794 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get()))) + Phasecenter
12795 Vaxis_label = str(Vaxis_value)
12796 Bodeca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
12797 if NetworkScreenStatus.get() > 0:
12798 if Show_Rseries.get() == 1
or Show_Xseries.get() == 1
or Show_Magnitude.get() == 1:
12799 RperDiv = float(ResScale.get())
12800 Vaxis_value = ( (RperDiv * Vdiv.get()/2) - (i * RperDiv) ) + Impedcenter
12801 if Vaxis_value > 500
or Vaxis_value < -500:
12802 Vaxis_value = Vaxis_value/1000.0
12803 if Vaxis_value > 5
or Vaxis_value < -5:
12804 Vaxis_label =
' {0:.0f}'.format(Vaxis_value) +
'K'
12806 Vaxis_label =
' {0:.1f}'.format(Vaxis_value) +
'K'
12808 Vaxis_label =
' {0:.0f} '.format(Vaxis_value)
12809 Bodeca.create_text(x1-23, y, text=Vaxis_label, fill=COLORtrace5, anchor=
"e", font=(
"arial", FontSize ))
12815 if HScaleBP.get() == 1:
12817 LogFStop = math.log10(EndFreq)
12819 LogFStart = math.log10(BeginFreq)
12822 LogFpixel = (LogFStop - LogFStart) / GRWBP
12824 while F <= EndFreq:
12827 LogF = math.log10(F)
12828 x = x1 + (LogF - LogFStart)/LogFpixel
12831 Dline = [x,y1,x,y2]
12832 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
12833 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12834 axis_label = str(F)
12835 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
12837 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12854 Freqdiv = (EndFreq - BeginFreq) / 10
12856 x = x1 + i * GRWBP/10
12857 Dline = [x,y1,x,y2]
12858 if i == 0
or i == 10:
12859 Bodeca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
12861 Bodeca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
12862 axis_value = BeginFreq + (i * Freqdiv)
12863 axis_label = str(axis_value)
12864 Bodeca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
12867 Fpixel = (EndFreq - BeginFreq) / GRWBP
12868 LogFStop = math.log10(EndFreq)
12870 LogFStart = math.log10(BeginFreq)
12873 LogFpixel = (LogFStop - LogFStart) / GRWBP
12874 if ShowBPCur.get() > 0:
12875 Dline = [BPCursor, Y0TBP, BPCursor, Y0TBP+GRHBP]
12876 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
12878 if HScaleBP.get() == 1:
12879 xfreq = 10**(((BPCursor-x1)*LogFpixel) + LogFStart)
12881 xfreq = ((BPCursor-x1)*Fpixel)+BeginFreq
12882 XFString =
' {0:.2f} '.format(xfreq)
12883 V_label = XFString +
" Hz"
12884 Bodeca.create_text(BPCursor+1, BdBCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
12886 if ShowBdBCur.get() > 0:
12887 Dline = [x1, BdBCursor, x1+GRWBP, BdBCursor]
12888 Bodeca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
12889 if ShowBdBCur.get() == 1:
12891 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
12892 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
12893 yvdB = ((Yc-BdBCursor)/Yconv)
12894 VdBString =
' {0:.1f} '.format(yvdB)
12895 V_label = VdBString +
" dBV"
12898 Yconv = float(GRHBP) / 360.0
12900 yvdB = 180 + ((Yc-BdBCursor)/Yconv) + Phasecenter
12901 VdBString =
' {0:.1f} '.format(yvdB)
12902 V_label = VdBString +
" Deg"
12903 Bodeca.create_text(BPCursor+1, BdBCursor+5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
12905 SmoothBool = SmoothCurvesBP.get()
12907 if len(TAFline) > 4:
12909 if OverRangeFlagA == 1:
12910 Bodeca.create_line(TAFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12912 Bodeca.create_line(TAFline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12913 if ShowMarkerBP.get() == 1:
12914 Peak_label =
' {0:.2f} '.format(PeakdbA) +
',' +
' {0:.1f} '.format(PeakfreqA)
12915 Bodeca.create_text(PeakxA, PeakyA, text=Peak_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
12916 if len(TBFline) > 4:
12918 if OverRangeFlagB == 1:
12919 Bodeca.create_line(TBFline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12921 Bodeca.create_line(TBFline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12922 if ShowMarkerBP.get() == 1:
12923 Peak_label =
' {0:.2f} '.format(PeakdbB) +
',' +
' {0:.1f} '.format(PeakfreqB)
12924 Bodeca.create_text(PeakxB, PeakyB, text=Peak_label, fill=COLORtrace2, anchor=
"w", font=(
"arial", FontSize ))
12925 if len(TAPline) > 4:
12927 Bodeca.create_line(TAPline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12928 if len(TBPline) > 4:
12930 Bodeca.create_line(TBPline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12931 if ShowCA_RdB.get() == 1
and len(TAFRline) > 4:
12932 Bodeca.create_line(TAFRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12933 if ShowMarkerBP.get() == 1:
12934 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
12935 Bodeca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"e", font=(
"arial", FontSize ))
12936 if ShowCB_RdB.get() == 1
and len(TBFRline) > 4:
12937 Bodeca.create_line(TBFRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12938 if ShowMarkerBP.get() == 1:
12939 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
12940 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"w", font=(
"arial", FontSize ))
12941 if ShowCA_RP.get() == 1
and len(TAPRline) > 4:
12942 Bodeca.create_line(TAPRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12943 if ShowCB_RP.get() == 1
and len(TBPRline) > 4:
12944 Bodeca.create_line(TBPRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12945 if ShowMathBP.get() > 0
and len(TBPMline) > 4:
12946 Bodeca.create_line(TBPMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12947 if ShowMarkerBP.get() == 1:
12948 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
12949 Bodeca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"w", font=(
"arial", FontSize ))
12950 if ShowRMathBP.get() == 1
and len(TBPRMline) > 4:
12951 Bodeca.create_line(TBPRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12952 if ShowMarkerBP.get() == 1:
12953 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
12954 Bodeca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"w", font=(
"arial", FontSize ))
12955 if Show_Rseries.get() == 1
and len(TIARline) > 4:
12956 Bodeca.create_line(TIARline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12957 if Show_Xseries.get() == 1
and len(TIAXline) > 4:
12958 Bodeca.create_line(TIAXline, fill=COLORtrace6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12959 if Show_Magnitude.get() == 1
and len(TIAMagline) > 4:
12960 Bodeca.create_line(TIAMagline, fill=COLORtrace7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12961 if Show_Angle.get() == 1
and len(TIAAngline) > 4:
12962 Bodeca.create_line(TIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12963 if Show_RseriesRef.get() == 1
and len(RefIARline) > 4:
12964 Bodeca.create_line(RefIARline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12965 if Show_XseriesRef.get() == 1
and len(RefIAXline) > 4:
12966 Bodeca.create_line(RefIAXline, fill=COLORtraceR6, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12967 if Show_MagnitudeRef.get() == 1
and len(RefIAMagline) > 4:
12968 Bodeca.create_line(RefIAMagline, fill=COLORtraceR7, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12969 if Show_AngleRef.get() == 1
and len(RefIAAngline) > 4:
12970 Bodeca.create_line(RefIAAngline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
12972 Dline = [CurrentFreqX, Y0TBP, CurrentFreqX, Y0TBP+GRHBP]
12973 Bodeca.create_line(Dline, dash=(2,2), fill=COLORgrid, width=GridWidth.get())
12974 if HScaleBP.get() == 1:
12975 xfreq = 10**(((CurrentFreqX-x1)*LogFpixel) + LogFStart)
12977 xfreq = ((CurrentFreqX-x1)*Fpixel)+BeginFreq
12978 XFString =
' {0:.0f} '.format(xfreq)
12979 V_label = XFString +
" Hz"
12980 Bodeca.create_text(CurrentFreqX, Y0TBP+GRHBP+1, text=V_label, fill=COLORtext, anchor=
"n", font=(
"arial", FontSize ))
12983 txt =
" Sample rate: " + str(SAMPLErate)
12984 txt = txt +
" FFT samples: " + str(SMPfft)
12986 txt = txt +
" " + FFTwindowname
12990 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
12993 txt = str(BeginFreq) +
" to " + str(EndFreq) +
" Hz"
12994 txt = txt +
" " + str(DBdivlist[DBdivindexBP.get()]) +
" dB/div"
12995 txt = txt +
" Level: " + str(DBlevelBP.get()) +
" dB "
12996 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
13000 idTXT = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13002 if FreqTraceMode.get() == 1:
13003 txt =
"Normal mode "
13005 if FreqTraceMode.get() == 2:
13006 txt =
"Peak hold mode "
13008 if FreqTraceMode.get() == 3:
13009 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
13011 if ZEROstuffing.get() > 0:
13012 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
13014 if (RUNstatus.get() == 0):
13015 txt = txt +
" Stopped "
13017 if BodeDisp.get() == 1:
13018 txt = txt +
" Running "
13020 txt = txt +
" Display off "
13021 if FSweepMode.get() > 0:
13022 txt = txt +
" Freq Step = " + str(LoopNum.get())
13025 IDtxt = Bodeca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13029 global FFTBuffA, FFTBuffB
13032 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
13049 global PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
13052 global RsystemEntry
13055 global ImpedanceMagnitude
13056 global ImpedanceAngle
13057 global ImpedanceRseries, ImpedanceXseries
13060 DEG2RAD = (math.pi / 180.0)
13063 ResValue = float(RsystemEntry.get())
13067 VA = math.pow(10,(PeakdbA/20))
13068 VB = math.pow(10,(PeakdbB/20))
13069 VVangleCosine = math.cos(math.radians(PeakRelPhase))
13070 if IA_Ext_Conf.get() == 1:
13071 VAB = math.pow(10,(PeakdbAB/20))
13076 VI = math.sqrt(VA**2 + VZ**2 - 2*VA*VZ*VVangleCosine)
13077 costheta = (VA**2 + VI**2 - VZ**2)/(2 * VA * VI)
13078 Za = ResValue * VA / VI
13079 ImpedanceRseries = Za * costheta - ResValue
13080 ImpedanceMagnitude = ResValue * VZ / VI
13082 ImpedanceXseries = math.sqrt(abs(ImpedanceMagnitude**2 - ImpedanceRseries**2))
13084 if(PeakRelPhase < 0.0):
13085 ImpedanceXseries = -ImpedanceXseries
13086 if IA_Ext_Conf.get() == 1:
13087 ImpedanceRseries = -ImpedanceRseries
13088 ImpedanceAngle = math.atan2(ImpedanceXseries, ImpedanceRseries) / DEG2RAD
13091 global FFTmemoryA, FFTresultA, FFTresultAB, PhaseAB
13092 global FFTmemoryB, FFTresultB
13093 global PhaseA, PhaseB, PhaseMemoryA, PhaseMemoryB
13094 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB, PeakRelPhase, PeakdbAB
13095 global PeakxM, PeakyM, PeakMdb, PeakfreqM, PeakphaseA, PeakphaseB
13096 global PeakfreqA, PeakfreqB, GainCorEntry, PhaseCorEntry, PhaseCorrection
13102 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
13103 global STARTsample, STOPsample, LoopNum, FSweepMode
13104 global TRACEmode, Two_X_Sample, IA_Ext_Conf
13105 global T1Vline, T2Vline, TMline, T1Pline, T2Pline
13109 global ImpedanceMagnitude
13110 global ImpedanceAngle
13111 global ImpedanceRseries, ImpedanceXseries
13114 TRACEsize = len(FFTresultA)
13115 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
13118 STARTsample = int(math.ceil(STARTsample))
13119 if Two_X_Sample.get() == 0:
13120 STOPsample = 45000 / Fsample
13122 STOPsample = 90000 / Fsample
13123 STOPsample = int(math.floor(STOPsample))
13126 GainCorrection = float(eval(GainCorEntry.get()))
13128 GainCorEntry.delete(0,END)
13129 GainCorEntry.insert(0, GainCorrection)
13132 PhaseCorrection = float(eval(PhaseCorEntry.get()))
13134 PhaseCorEntry.delete(0,END)
13135 PhaseCorEntry.insert(0, PhaseCorrection)
13137 MAXsample = TRACEsize
13138 if STARTsample > (MAXsample - 1):
13139 STARTsample = MAXsample - 1
13141 if STOPsample > MAXsample:
13142 STOPsample = MAXsample
13145 PeakfreqA = PeakfreqB = PeakfreqM = F = n * Fsample
13146 PeakphaseA = PhaseA[n]
13147 PeakphaseB = PhaseB[n]
13151 PeakdbA = (10 * math.log10(float(FFTresultA[n])) + 17)
13152 PeakdbB = (10 * math.log10(float(FFTresultB[n])) + 17)
13153 PeakMdb = PeakdbA - PeakdbB
13154 if IA_Ext_Conf.get() == 1:
13155 PeakdbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
13156 while n <= STOPsample:
13159 dbA = (10 * math.log10(float(FFTresultA[n])) + 17)
13165 PeakphaseA = PhaseA[n]
13169 dbB = (10 * math.log10(float(FFTresultB[n])) + 17)
13175 PeakphaseB = PhaseB[n]
13177 if IA_Ext_Conf.get() == 1:
13179 dbAB = (10 * math.log10(float(FFTresultAB[n])) + 17)
13182 if dbAB > PeakdbAB:
13184 PeakphaseAB = PhaseAB[n]
13185 RelPhase = PhaseA[n]-PhaseB[n]
13187 RelPhase = RelPhase - 360
13188 elif RelPhase < -180:
13189 RelPhase = RelPhase + 360
13190 if Two_X_Sample.get() == 0:
13191 PhErr = 0.0018 * n * Fsample
13192 RelPhase = RelPhase + PhErr - 12.0
13194 RelPhase = RelPhase - 9.0
13196 if IA_Ext_Conf.get() == 1:
13197 PeakRelPhase = PeakphaseAB-PeakphaseA
13199 PeakRelPhase = PeakphaseB-PeakphaseA
13201 if PeakRelPhase > 180:
13202 PeakRelPhase = PeakRelPhase - 360
13203 elif PeakRelPhase < -180:
13204 PeakRelPhase = PeakRelPhase + 360
13205 if Two_X_Sample.get() == 0:
13206 PhErr = 0.0018 * PeakSample * Fsample
13207 PeakRelPhase = PeakRelPhase + PhaseCorrection - PhErr
13209 PeakRelPhase = PeakRelPhase + PhaseCorrection
13210 PeakdbB = PeakdbB + GainCorrection
13215 global CANVASheightIA, CANVASwidthIA, IAca, TIAMline, TIAMRline
13216 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
13217 global PeakxM, PeakyM, PeakMdb, PeakfreqM, Two_X_Sample
13218 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
13219 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
13220 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM
13221 global PeakphaseA, PeakphaseB, PeakRelPhase, PhaseCalEntry
13222 global SmoothCurvesBP, TRACEwidth, GridWidth
13223 global COLORsignalband, COLORtext, COLORgrid, IASweepSaved
13224 global COLORtrace1, COLORtrace2, COLORtrace5, COLORtrace6
13225 global ResScale, DisplaySeries
13226 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
13233 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
13235 global TRACEaverage
13236 global FreqTraceMode
13238 global ImpedanceMagnitude
13239 global ImpedanceAngle
13240 global ImpedanceRseries, ImpedanceXseries
13241 global LoopNum, NetworkScreenStatus, NSweepSeriesR, NSweepSeriesX, NSweepSeriesMag, NSweepSeriesAng
13243 if LoopNum.get() > 1:
13244 if NetworkScreenStatus.get() > 0:
13245 NSweepSeriesR.append(ImpedanceRseries)
13246 NSweepSeriesX.append(ImpedanceXseries)
13247 NSweepSeriesMag.append(ImpedanceMagnitude)
13248 NSweepSeriesAng.append(ImpedanceAngle)
13251 SmoothBool = SmoothCurvesBP.get()
13256 Radius = (GRWIA-X0LIA)/(1 + Vdiv.get()*2)
13257 OhmsperPixel = float(ResScale.get())/Radius
13258 TRadius = Radius * Vdiv.get()
13261 xright = 10 + xcenter + ( Vdiv.get() * Radius )
13262 while (i <= Vdiv.get()):
13263 x0 = xcenter - ( i * Radius )
13264 x1 = xcenter + ( i * Radius )
13265 y0 = ycenter - ( i * Radius )
13266 y1 = ycenter + ( i * Radius )
13267 ResTxt =
'{0:.1f}'.format(float(ResScale.get()) * i)
13268 IAca.create_oval ( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
13269 IAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
13270 IAca.create_text(xright, y0, text=str(ResTxt), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13273 IAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=2)
13274 IAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=2)
13275 RAngle = math.radians(45)
13276 y = TRadius*math.sin(RAngle)
13277 x = TRadius*math.cos(RAngle)
13278 IAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13279 IAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13280 IAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
13281 IAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13282 IAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
13283 IAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
13286 if IASweepSaved.get() > 0:
13287 if len(TIAMRline) > 4:
13288 IAca.create_line(TIAMRline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13290 x1 = xcenter + ( ImpedanceRseries / OhmsperPixel )
13294 x1 = xcenter - xright
13295 IAca.create_line(xcenter, ycenter, x1, ycenter, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
13296 y1 = ycenter - ( ImpedanceXseries / OhmsperPixel )
13300 y1 = ycenter - xright
13303 IAca.create_line(xcenter, ycenter, xcenter, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
13304 MagRadius = ImpedanceMagnitude / OhmsperPixel
13305 y1 = ycenter - MagRadius*math.sin(math.radians(ImpedanceAngle))
13309 y1 = ycenter - xright
13310 x1 = xcenter + MagRadius*math.cos(math.radians(ImpedanceAngle))
13314 x1 = xcenter - xright
13315 IAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
13318 if len(NSweepSeriesMag) > 2:
13320 while index < len(NSweepSeriesMag):
13321 MagRadius = NSweepSeriesMag[index] / OhmsperPixel
13322 y1 = ycenter - MagRadius*math.sin(math.radians(NSweepSeriesAng[index]))
13326 y1 = ycenter - xright
13327 x1 = xcenter + MagRadius*math.cos(math.radians(NSweepSeriesAng[index]))
13331 x1 = xcenter - xright
13332 TIAMline.append(x1)
13333 TIAMline.append(y1)
13335 IAca.create_line(TIAMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13337 if OverRangeFlagA == 1:
13340 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
13341 IAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
13342 if OverRangeFlagB == 1:
13345 IAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
13346 IAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
13349 txt =
" Sample rate: " + str(SAMPLErate)
13350 txt = txt +
" FFT samples: " + str(SMPfft)
13352 txt = txt +
" " + FFTwindowname
13356 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13358 x = X0LIA + GRWIA + 4
13360 txt =
"Gain " +
' {0:.2f} '.format(PeakdbB-PeakdbA) +
" dB"
13361 TXT9 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13363 txt =
"Phase " +
' {0:.2f} '.format(PeakRelPhase) +
" Degrees"
13364 TXT10 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13366 txt =
"Freq " +
' {0:.1f} '.format(PeakfreqA) +
" Hertz"
13367 TXT11 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13369 txt =
"Impedance Magnitude"
13370 TXT1 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13372 txt =
' {0:.1f} '.format(ImpedanceMagnitude)
13373 TXT2 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13375 txt =
"Impedance Angle"
13376 TXT3 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13378 txt =
' {0:.1f} '.format(ImpedanceAngle)
13379 TXT4 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13381 txt =
"Impedance R series"
13382 TXT5 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13384 txt =
' {0:.1f} '.format(ImpedanceRseries)
13385 TXT6 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13387 txt =
"Impedance X series"
13388 TXT7 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13390 txt =
' {0:.1f} '.format(ImpedanceXseries)
13391 TXT8 = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+6 ))
13393 if ImpedanceXseries < 0:
13396 Cseries = -1 / ( 2 * math.pi * PeakfreqA * ImpedanceXseries )
13399 Qseries = 1/(2*math.pi*PeakfreqA*Cseries*ImpedanceRseries)
13400 Cparallel = Cseries * (Qseries**2 / (1+Qseries**2))
13401 Cparallel = Cparallel * 1E6
13402 Rparallel = ImpedanceRseries * (1+Qseries**2)
13403 Cseries = Cseries * 1E6
13404 if DisplaySeries.get() == 0:
13405 txt =
"Series Capacitance"
13406 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13409 Cseries = Cseries * 1E3
13411 Cseries = Cseries * 1E3
13412 txt =
' {0:.1f} '.format(Cseries) +
"pF"
13414 txt =
' {0:.3f} '.format(Cseries) +
"nF"
13416 txt =
' {0:.3f} '.format(Cseries) +
"uF"
13417 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13420 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13423 Cparallel = Cparallel * 1E3
13425 Cparallel = Cparallel * 1E3
13426 txt =
"Capacitance " +
' {0:.1f} '.format(Cparallel) +
"pF"
13428 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"nF"
13430 txt =
"Capacitance " +
' {0:.3f} '.format(Cparallel) +
"uF"
13431 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13433 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
13434 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13436 dissp = abs(ImpedanceRseries/ImpedanceXseries) * 100
13437 txt =
'D = {0:.2f} '.format(dissp) +
" %"
13438 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13440 elif ImpedanceXseries > 0:
13443 Lseries = ImpedanceXseries / ( 2 * 3.14159 * PeakfreqA )
13446 Qseries = (2*math.pi*PeakfreqA*Lseries)/ImpedanceRseries
13449 Lparallel = Lseries * ((1+Qseries**2) / Qseries**2)
13450 Lparallel = Lparallel * 1E3
13451 Rparallel = ImpedanceRseries * (1+Qseries**2)
13452 Lseries = Lseries * 1E3
13453 if DisplaySeries.get() == 0:
13454 txt =
"Series Inductance"
13455 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13458 Lseries = Lseries * 1E3
13459 txt =
' {0:.2f} '.format(Lseries) +
"uH"
13461 txt =
' {0:.2f} '.format(Lseries) +
"mH"
13462 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13465 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13468 Lparallel = Lparallel * 1E3
13469 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"uH"
13471 txt =
"Inductance " +
' {0:.2f} '.format(Lparallel) +
"mH"
13472 IAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13474 txt =
"Resistance" +
' {0:.1f} '.format(Rparallel) +
"ohms"
13475 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13477 qf = abs(ImpedanceXseries/ImpedanceRseries) * 100
13478 txt =
'Q = {0:.2f} '.format(qf)
13479 IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
13481 if Two_X_Sample.get() == 0:
13482 txt =
"0.0 to 45000 Hz"
13484 txt =
"0.0 to 90000 Hz"
13485 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
13489 idTXT = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13491 if FreqTraceMode.get() == 1:
13492 txt =
"Normal mode "
13494 if FreqTraceMode.get() == 2:
13495 txt =
"Peak hold mode "
13497 if FreqTraceMode.get() == 3:
13498 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
13500 if ZEROstuffing.get() > 0:
13501 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
13503 if (RUNstatus.get() == 0):
13504 txt = txt +
" Stopped "
13506 txt = txt +
" Running "
13508 IDtxt = IAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
13511 global IAca, GRWIA, XOLIA, GRHIA, Y0TIA, CANVASwidthIA, CANVASheightIA, FontSize
13513 CANVASwidthIA = event.width - 4
13514 CANVASheightIA = event.height - 4
13515 GRWIA = CANVASwidthIA - (2 * X0LIA) - int(21.25 * FontSize)
13516 GRHIA = CANVASheightIA - Y0TIA - int(2.25 * FontSize)
13521 global iawindow, IAca, logo, IAScreenStatus, RsystemEntry, IADisp, AWGSync, IASource
13522 global COLORcanvas, CANVASwidthIA, CANVASheightIA, RevDate, AWGAMode, AWGAShape, AWGBMode
13523 global FFTwindow, CutDC, ColorMode, ResScale, GainCorEntry, PhaseCorEntry, DisplaySeries
13524 global GRWIA, X0LIA, GRHIA, Y0TIA, IA_Ext_Conf, DeBugMode, SWRev
13525 global NetworkScreenStatus, IASweepSaved
13527 if IAScreenStatus.get() == 0:
13528 IAScreenStatus.set(1)
13532 CANVASwidthIA = 170 + GRWIA + 2 * X0LIA
13533 CANVASheightIA = GRHIA + Y0TIA + 10
13538 iawindow = Toplevel()
13539 iawindow.title(
"Impedance Analyzer " + SWRev + RevDate)
13540 iawindow.protocol(
"WM_DELETE_WINDOW", DestroyIAScreen)
13541 frame2iar = Frame(iawindow, borderwidth=5, relief=RIDGE)
13542 frame2iar.pack(side=RIGHT, expand=NO, fill=BOTH)
13544 frame2ia = Frame(iawindow, borderwidth=5, relief=RIDGE)
13545 frame2ia.pack(side=TOP, expand=YES, fill=BOTH)
13547 IAca = Canvas(frame2ia, width=CANVASwidthIA, height=CANVASheightIA, background=COLORcanvas, cursor=
'cross')
13548 IAca.bind(
"<Configure>", IACaresize)
13549 IAca.bind(
"<Return>", DoNothing)
13550 IAca.bind(
"<space>", onCanvasSpaceBar)
13551 IAca.pack(side=TOP, expand=YES, fill=BOTH)
13555 dropmenu = Frame( frame2iar )
13556 dropmenu.pack(side=TOP)
13558 IAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
13559 IAFilemenu.menu = Menu(IAFilemenu, tearoff = 0 )
13560 IAFilemenu[
"menu"] = IAFilemenu.menu
13561 IAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
13562 IAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
13563 IAFilemenu.menu.add_command(label=
"Save V Cal", command=BSaveCal)
13564 IAFilemenu.menu.add_command(label=
"Load V Cal", command=BLoadCal)
13565 IAFilemenu.menu.add_command(label=
"Save Data", command=BSaveDataIA)
13566 IAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenIA)
13567 IAFilemenu.menu.add_command(label=
"Help", command=BHelp)
13568 IAFilemenu.pack(side=LEFT, anchor=W)
13570 IAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
13571 IAOptionmenu.menu = Menu(IAOptionmenu, tearoff = 0 )
13572 IAOptionmenu[
"menu"] = IAOptionmenu.menu
13573 IAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
13574 IAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
13575 IAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
13576 IAOptionmenu.menu.add_checkbutton(label=
'Sweep-on', variable=NetworkScreenStatus)
13577 IAOptionmenu.menu.add_checkbutton(label=
'Save Sweep', variable=IASweepSaved, command=BSaveIASweep)
13579 IAOptionmenu.menu.add_command(label=
"-Ext Config-", command=donothing)
13580 IAOptionmenu.menu.add_radiobutton(label=
'1', variable=IA_Ext_Conf, value=0)
13581 IAOptionmenu.menu.add_radiobutton(label=
'2', variable=IA_Ext_Conf, value=1)
13582 IAOptionmenu.menu.add_command(label=
"-Meas As-", command=donothing)
13583 IAOptionmenu.menu.add_radiobutton(label=
'Series', variable=DisplaySeries, value=0)
13584 IAOptionmenu.menu.add_radiobutton(label=
'Parallel', variable=DisplaySeries, value=1)
13585 IAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
13586 IAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
13587 IAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
13588 IAOptionmenu.pack(side=LEFT, anchor=W)
13590 rsemenu = Frame( frame2iar )
13591 rsemenu.pack(side=TOP)
13592 rseb2 = Button(rsemenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
13593 rseb2.pack(side=RIGHT)
13594 rseb3 = Button(rsemenu, text=
"Run", style=
"Run.TButton", command=BStartIA)
13595 rseb3.pack(side=RIGHT)
13597 IAFFTwindmenu = Menubutton(frame2iar, text=
"FFTwindow", style=
"W11.TButton")
13598 IAFFTwindmenu.menu = Menu(IAFFTwindmenu, tearoff = 0 )
13599 IAFFTwindmenu[
"menu"] = IAFFTwindmenu.menu
13600 IAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
13601 IAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
13602 IAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
13603 IAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
13604 IAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
13605 IAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
13606 IAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
13607 IAFFTwindmenu.pack(side=TOP)
13609 smpmenu = Frame( frame2iar )
13610 smpmenu.pack(side=TOP)
13611 smpb1 = Button(smpmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
13612 smpb1.pack(side=LEFT)
13613 smpb2 = Button(smpmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
13614 smpb2.pack(side=LEFT)
13616 rsystem = Frame( frame2iar )
13617 rsystem.pack(side=TOP)
13618 rsystemlab = Label(rsystem, text=
"Ext Res")
13619 rsystemlab.pack(side=LEFT, anchor=W)
13620 RsystemEntry = Entry(rsystem, width=7)
13621 RsystemEntry.bind(
'<Return>', onTextKey)
13622 RsystemEntry.bind(
'<MouseWheel>', onTextScroll)
13623 RsystemEntry.bind(
"<Button-4>", onTextScroll)
13624 RsystemEntry.bind(
"<Button-5>", onTextScroll)
13625 RsystemEntry.bind(
'<Key>', onTextKey)
13626 RsystemEntry.pack(side=LEFT, anchor=W)
13627 RsystemEntry.delete(0,
"end")
13628 RsystemEntry.insert(4,1000)
13630 ressb = Frame( frame2iar )
13631 ressb.pack(side=TOP)
13632 reslab = Label(ressb, text=
"Ohms/div ")
13633 reslab.pack(side=LEFT)
13634 ResScale = Spinbox(ressb, width=7, values=ResScalediv)
13635 ResScale.bind(
'<MouseWheel>', onSpinBoxScroll)
13636 ResScale.pack(side=LEFT)
13637 ResScale.delete(0,
"end")
13638 ResScale.insert(0,500)
13640 GainCor = Frame( frame2iar )
13641 GainCor.pack(side=TOP)
13642 GainCorlab = Label(GainCor, text=
"Gain Cor dB")
13643 GainCorlab.pack(side=LEFT, anchor=W)
13644 GainCorEntry = Entry(GainCor, width=7)
13645 GainCorEntry.bind(
'<Return>', onTextKey)
13646 GainCorEntry.bind(
'<MouseWheel>', onTextScroll)
13647 GainCorEntry.bind(
"<Button-4>", onTextScroll)
13648 GainCorEntry.bind(
"<Button-5>", onTextScroll)
13649 GainCorEntry.bind(
'<Key>', onTextKey)
13650 GainCorEntry.pack(side=LEFT, anchor=W)
13651 GainCorEntry.delete(0,
"end")
13652 GainCorEntry.insert(4,0.0)
13654 PhaseCor = Frame( frame2iar )
13655 PhaseCor.pack(side=TOP)
13656 PhaseCorlab = Label(PhaseCor, text=
"Phase Cor")
13657 PhaseCorlab.pack(side=LEFT, anchor=W)
13658 PhaseCorEntry = Entry(PhaseCor, width=7)
13659 PhaseCorEntry.bind(
'<Return>', onTextKey)
13660 PhaseCorEntry.bind(
'<MouseWheel>', onTextScroll)
13661 PhaseCorEntry.bind(
"<Button-4>", onTextScroll)
13662 PhaseCorEntry.bind(
"<Button-5>", onTextScroll)
13663 PhaseCorEntry.bind(
'<Key>', onTextKey)
13664 PhaseCorEntry.pack(side=LEFT, anchor=W)
13665 PhaseCorEntry.delete(0,
"end")
13666 PhaseCorEntry.insert(4,0.0)
13668 srclab = Label(frame2iar, text=
"Source")
13669 srclab.pack(side=TOP)
13670 extsrc1 = Radiobutton(frame2iar, text=
"Internal", variable=IASource, value=0, command=IASourceSet)
13671 extsrc1.pack(side=TOP)
13672 extsrc2 = Radiobutton(frame2iar, text=
"External", variable=IASource, value=1, command=IASourceSet)
13673 extsrc2.pack(side=TOP)
13675 dismiss1button = Button(frame2iar, text=
"Dismiss", style=
"W8.TButton", command=DestroyIAScreen)
13676 dismiss1button.pack(side=TOP)
13678 ADI1 = Label(frame2iar, image=logo, anchor=
"sw", compound=
"top")
13679 ADI1.pack(side=TOP)
13682 global iawindow, IAScreenStatus, IAca, IADisp
13684 IAScreenStatus.set(0)
13690 global TIAMline, TIAMRline, IASweepSaved
13692 if IASweepSaved.get() > 0:
13693 TIAMRline = TIAMline
13696 global nqpwindow, NqPca, logo, NqPScreenStatus, NqPDisp
13697 global COLORcanvas, CANVASwidthNqP, CANVASheightNqP, RevDate
13698 global GRWNqP, X0LNqP, GRHNqP, Y0TNqP, DeBugMode, SWRev
13699 global NetworkScreenStatus, NqPSweepSaved
13701 if NqPScreenStatus.get() == 0:
13702 NqPScreenStatus.set(1)
13704 CANVASwidthNqP = GRWNqP + (2 * X0LNqP)
13705 CANVASheightNqP = GRHNqP + Y0TNqP + 10
13706 nqpwindow = Toplevel()
13707 nqpwindow.title(
"Nyquist Plot " + SWRev + RevDate)
13708 nqpwindow.protocol(
"WM_DELETE_WINDOW", DestroyNqPScreen)
13712 frame2nqp = Frame(nqpwindow, borderwidth=5, relief=RIDGE)
13713 frame2nqp.pack(side=TOP, expand=YES, fill=BOTH)
13715 NqPca = Canvas(frame2nqp, width=CANVASwidthNqP, height=CANVASheightNqP, background=COLORcanvas, cursor=
'cross')
13716 NqPca.bind(
"<Configure>", NqPCaresize)
13717 NqPca.bind(
"<Return>", DoNothing)
13718 NqPca.bind(
"<space>", onCanvasSpaceBar)
13719 NqPca.pack(side=TOP, expand=YES, fill=BOTH)
13722 global nqpwindow, NqPScreenStatus, NqPca, NqPDisp
13724 NqPScreenStatus.set(0)
13726 nqpwindow.destroy()
13729 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, FontSize
13731 CANVASwidthNqP = event.width - 4
13732 CANVASheightNqP = event.height - 4
13733 GRWNqP = CANVASwidthNqP - (2 * X0LNqP)
13734 GRHNqP = CANVASheightNqP - Y0TNqP - int(1.25 * FontSize)
13739 global NqPca, GRWNqP, XOLNqP, GRHNqP, Y0TNqP, CANVASwidthNqP, CANVASheightNqP, COLORtrace1
13740 global COLORgrid, GridWidth, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
13741 global FSweepAdB, FSweepBdB, FSweepBPh, FSweepAPh, ShowMathBP, NqPline, Two_X_Sample, TRACEwidth
13742 global Vdiv, FBins, FStep
13747 SmoothBool = SmoothCurvesBP.get()
13752 Radius = (GRWNqP-X0LNqP)/(1 + Vdiv.get() * 2)
13753 dBperPixel = float(DBdivlist[DBdivindexBP.get()])/Radius
13754 TRadius = Radius * Vdiv.get()
13756 x2 = X0LNqP + GRWNqP
13757 xright = 10 + xcenter + ( Vdiv.get() * Radius )
13758 while (i <= Vdiv.get()):
13759 x0 = xcenter - ( i * Radius )
13760 x1 = xcenter + ( i * Radius )
13761 y0 = ycenter - ( i * Radius )
13762 y1 = ycenter + ( i * Radius )
13763 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
13764 NqPca.create_oval ( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
13765 NqPca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
13766 NqPca.create_text(xright, y0, text=str(dBaxis_value), fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13769 NqPca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=2)
13770 NqPca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=2)
13771 RAngle = math.radians(45)
13772 y = TRadius*math.sin(RAngle)
13773 x = TRadius*math.cos(RAngle)
13774 NqPca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13775 NqPca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
13776 NqPca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
13777 NqPca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
13778 NqPca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
13779 NqPca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
13783 if len(FSweepAdB) > 4:
13784 for index
in range(len(FSweepAdB)):
13785 if index < len(FStep):
13786 F = FBins[int(FStep[index])]
13788 F = FBins[int(FStep[0])]
13790 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
13791 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
13792 if ShowMathBP.get() == 1:
13794 elif ShowMathBP.get() == 2:
13796 MagRadius = (-MdB / dBperPixel) + (DBlevelBP.get()/dBperPixel)
13798 RelPhase = FSweepBPh[index] - FSweepAPh[index]
13800 RelPhase = RelPhase - 360
13801 elif RelPhase < -180:
13802 RelPhase = RelPhase + 360
13803 if Two_X_Sample.get() == 0:
13805 RelPhase = RelPhase - PhErr
13807 RelPhase = RelPhase
13808 y1 = ycenter - MagRadius*math.sin(math.radians(RelPhase))
13812 y1 = ycenter - xright
13813 x1 = xcenter + MagRadius*math.cos(math.radians(RelPhase ))
13817 x1 = xcenter - xright
13820 NqPca.create_line(NqPline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13823 global NiCScreenStatus, NiCDisp
13824 global nicwindow, NiCca, logo, SWRev
13825 global COLORcanvas, CANVASwidthNic, CANVASheightNic, RevDate
13826 global GRWNiC, X0LNiC, GRHNiC, Y0TNiC, DeBugMode
13827 global NetworkScreenStatus, NiCSweepSaved
13829 if NiCScreenStatus.get() == 0:
13830 NiCScreenStatus.set(1)
13832 CANVASwidthNic = GRWNiC + 18 + X0LNiC
13833 CANVASheightNic = GRHNiC + 60
13834 nicwindow = Toplevel()
13835 nicwindow.title(
"Nichols Plot " + SWRev + RevDate)
13836 nicwindow.protocol(
"WM_DELETE_WINDOW", DestroyNiCScreen)
13840 frame2nic = Frame(nicwindow, borderwidth=5, relief=RIDGE)
13841 frame2nic.pack(side=TOP, expand=YES, fill=BOTH)
13843 NiCca = Canvas(frame2nic, width=CANVASwidthNic, height=CANVASheightNic, background=COLORcanvas, cursor=
'cross')
13844 NiCca.bind(
"<Configure>", NiCCaresize)
13845 NiCca.bind(
"<Return>", DoNothing)
13846 NiCca.bind(
"<space>", onCanvasSpaceBar)
13847 NiCca.pack(side=TOP, expand=YES, fill=BOTH)
13850 global nicwindow, NiCScreenStatus, NiCca, NiCDisp
13852 NiCScreenStatus.set(0)
13854 nicwindow.destroy()
13857 global NiCca, GRWNiC, XOLNiC, GRHNiC, Y0TNiC, CANVASwidthNic, CANVASheightNic, FontSize
13859 CANVASwidthNic = event.width - 4
13860 CANVASheightNic = event.height - 4
13861 GRWNiC = CANVASwidthNic - int(2.25 * FontSize) - X0LNiC
13862 GRHNiC = CANVASheightNic - int(7.5 * FontSize)
13867 global NiCline, NiCca, CANVASwidthNic, CANVASheightNic, X0LNiC, GRWNiC, Y0TNiC, GRHNiC, X0TNiC
13868 global COLORzeroline, GridWidth, COLORgrid, FSweepAdB, FSweepBdB, Two_X_Sample, ShowMathBP
13869 global FSweepBPh, FSweepAPh, SmoothCurvesBP, SmoothBool, DBlevelBP, DBdivlist, DBdivindexBP
13870 global Vdiv, FBins, FStep, PhCenBodeEntry, RelPhaseCenter
13874 Ymax = Y0TNiC + GRHNiC
13876 Xmax = X0LNiC + GRWNiC
13878 Phasecenter = int(PhCenBodeEntry.get())
13879 RelPhaseCenter.set(Phasecenter)
13881 PhCenBodeEntry.delete(0,
"end")
13882 PhCenBodeEntry.insert(0,0)
13883 RelPhaseCenter.set(0)
13887 SmoothBool = SmoothCurvesBP.get()
13892 x2 = X0TNiC = X0LNiC + GRWNiC
13893 mg_siz = GRWNiC/10.0
13894 mg_inc = mg_siz/5.0
13895 DegPerDiv = 360 / 10
13896 while (i < Vdiv.get()+1):
13897 dBaxis_value = (DBlevelBP.get() - (i * DBdivlist[DBdivindexBP.get()]))
13898 y = Y0TNiC + i * GRHNiC/Vdiv.get()
13899 Dline = [x1,y,x2,y]
13900 if dBaxis_value == 0:
13901 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
13906 Dline = [x1+k*mg_siz+l*mg_inc,y-5,x1+k*mg_siz+l*mg_inc,y+5]
13907 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13911 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13912 dBaxis_label = str(dBaxis_value)
13913 NiCca.create_text(x1-3, y, text=dBaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
13919 y2 = Y0TNiC + GRHNiC
13920 mg_siz = GRHNiC/10.0
13921 mg_inc = mg_siz/5.0
13924 x = X0LNiC + i * GRWNiC/10.0
13925 Dline = [x,y1,x,y2]
13926 axis_value = Phasecenter - 180 + (i * DegPerDiv)
13927 axis_label = str(axis_value)
13928 if ( axis_value == 0):
13929 NiCca.create_line(Dline, fill=COLORzeroline, width=GridWidth.get())
13934 Dline = [x-5,y1+k*mg_siz+l*mg_inc,x+5,y1+k*mg_siz+l*mg_inc]
13935 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13939 NiCca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
13940 NiCca.create_text(x, y2+3, text=axis_label, fill=COLORtrace3, anchor=
"n", font=(
"arial", FontSize ))
13944 Yconv = float(GRHNiC) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
13945 Yc = float(Y0TNiC) + Yconv * (DBlevelBP.get())
13946 Xphconv = float(GRWNiC / 360.0)
13947 Xp = float(X0LNiC) + Xphconv * 180.0
13951 if len(FSweepAdB) > 4:
13953 for index
in range(len(FSweepAdB)):
13954 if index < len(FStep):
13955 F = FBins[int(FStep[index])]
13957 F = FBins[int(FStep[0])]
13959 dbA = (10 * math.log10(float(FSweepAdB[index])) + 17)
13960 dbB = (10 * math.log10(float(FSweepBdB[index])) + 17)
13961 if ShowMathBP.get() == 1:
13963 elif ShowMathBP.get() == 2:
13965 yb = Yc - Yconv * MdB
13971 RelPhase = FSweepBPh[index] - FSweepAPh[index]
13972 RelPhase = RelPhase - Phasecenter
13974 RelPhase = RelPhase - 360
13975 elif RelPhase < -180:
13976 RelPhase = RelPhase + 360
13977 if Two_X_Sample.get() == 0:
13979 RelPhase = RelPhase - PhErr
13981 RelPhase = RelPhase
13982 xa = Xp + Xphconv * RelPhase
13987 NiCline.append(int(xa + 0.5))
13988 NiCline.append(int(yb + 0.5))
13989 NiCca.create_line(NiCline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
13992 global FFTBuffA, FFTBuffB
13995 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14011 global FFTBuffA, FFTBuffB
14014 if len(FFTBuffA) < SMPfft
and len(FFTBuffB) < SMPfft:
14033 if vat_btn.config(
'text')[-1] ==
'ON':
14034 vat_btn.config(text=
'OFF', style=
"Stop.TButton")
14036 vat_btn.config(text=
'ON', style=
"Run.TButton")
14041 if vabt_btn.config(
'text')[-1] ==
'ON':
14042 vabt_btn.config(text=
'OFF', style=
"Stop.TButton")
14044 vabt_btn.config(text=
'ON', style=
"Run.TButton")
14049 if vbt_btn.config(
'text')[-1] ==
'ON':
14050 vbt_btn.config(text=
'OFF', style=
"Stop.TButton")
14052 vbt_btn.config(text=
'ON', style=
"Run.TButton")
14057 if iat_btn.config(
'text')[-1] ==
'ON':
14058 iat_btn.config(text=
'OFF', style=
"Stop.TButton")
14060 iat_btn.config(text=
'ON', style=
"Run.TButton")
14065 if ibt_btn.config(
'text')[-1] ==
'ON':
14066 ibt_btn.config(text=
'OFF', style=
"Stop.TButton")
14068 ibt_btn.config(text=
'ON', style=
"Run.TButton")
14072 global phawindow, PhAca, logo, PhAScreenStatus, PhADisp, AWGSync
14073 global COLORcanvas, CANVASwidthPhA, CANVASheightPhA, RevDate, AWGAMode, AWGAShape, AWGBMode
14074 global FFTwindow, CutDC, ColorMode, RefPhase, CHvpdiv, CHipdiv
14075 global GRWPhA, X0LPhA, GRHPhA, Y0TPhA, DeBugMode, SWRev, PhAPlotMode
14076 global VScale, IScale, RefphEntry, MuxScreenStatus, AppendPhAData
14077 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
14078 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
14080 if PhAScreenStatus.get() == 0:
14081 PhAScreenStatus.set(1)
14085 CANVASwidthPhA = 170 + GRWPhA + 2 * X0LPhA
14086 CANVASheightPhA = GRHPhA + Y0TPhA + 10
14087 phawindow = Toplevel()
14088 phawindow.title(
"Phase Analyzer " + SWRev + RevDate)
14089 phawindow.protocol(
"WM_DELETE_WINDOW", DestroyPhAScreen)
14090 frame2phar = Frame(phawindow, borderwidth=5, relief=RIDGE)
14091 frame2phar.pack(side=RIGHT, expand=NO, fill=BOTH)
14093 frame2pha = Frame(phawindow, borderwidth=5, relief=RIDGE)
14094 frame2pha.pack(side=TOP, expand=YES, fill=BOTH)
14096 PhAca = Canvas(frame2pha, width=CANVASwidthPhA, height=CANVASheightPhA, background=COLORcanvas, cursor=
'cross')
14097 PhAca.bind(
"<Configure>", PhACaresize)
14098 PhAca.bind(
"<Return>", DoNothing)
14099 PhAca.bind(
"<space>", onCanvasSpaceBar)
14100 PhAca.pack(side=TOP, expand=YES, fill=BOTH)
14104 dropmenu = Frame( frame2phar )
14105 dropmenu.pack(side=TOP)
14107 PhAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
14108 PhAFilemenu.menu = Menu(PhAFilemenu, tearoff = 0 )
14109 PhAFilemenu[
"menu"] = PhAFilemenu.menu
14110 PhAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigIA)
14111 PhAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigIA)
14112 PhAFilemenu.menu.add_command(label=
"Save Data", command=BSavePhAData)
14113 PhAFilemenu.menu.add_checkbutton(label=
' - Append', variable=AppendPhAData)
14114 PhAFilemenu.menu.add_command(label=
"Plot From File", command=PlotPhAFromFile)
14115 PhAFilemenu.menu.add_radiobutton(label=
' - Vectors', variable=PhAPlotMode, value=0)
14116 PhAFilemenu.menu.add_radiobutton(label=
' - Outline', variable=PhAPlotMode, value=1)
14117 PhAFilemenu.menu.add_command(label=
"Help", command=BHelp)
14118 PhAFilemenu.pack(side=LEFT, anchor=W)
14120 PhAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
14121 PhAOptionmenu.menu = Menu(PhAOptionmenu, tearoff = 0 )
14122 PhAOptionmenu[
"menu"] = PhAOptionmenu.menu
14123 PhAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
14124 PhAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
14125 PhAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
14127 PhAOptionmenu.menu.add_command(label=
"-Background-", command=donothing)
14128 PhAOptionmenu.menu.add_radiobutton(label=
'Black', variable=ColorMode, value=0, command=BgColor)
14129 PhAOptionmenu.menu.add_radiobutton(label=
'White', variable=ColorMode, value=1, command=BgColor)
14130 PhAOptionmenu.pack(side=LEFT, anchor=W)
14132 rsphmenu = Frame( frame2phar )
14133 rsphmenu.pack(side=TOP)
14134 rsphb2 = Button(rsphmenu, text=
"Stop", style=
"Stop.TButton", command=BStop)
14135 rsphb2.pack(side=RIGHT)
14136 rsphb3 = Button(rsphmenu, text=
"Run", style=
"Run.TButton", command=BStart)
14137 rsphb3.pack(side=RIGHT)
14139 PhAFFTwindmenu = Menubutton(frame2phar, text=
"FFTwindow", style=
"W11.TButton")
14140 PhAFFTwindmenu.menu = Menu(PhAFFTwindmenu, tearoff = 0 )
14141 PhAFFTwindmenu[
"menu"] = PhAFFTwindmenu.menu
14142 PhAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
14143 PhAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
14144 PhAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
14145 PhAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
14146 PhAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
14147 PhAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
14148 PhAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
14149 PhAFFTwindmenu.pack(side=TOP)
14153 smphmenu = Frame( frame2phar )
14154 smphmenu.pack(side=TOP)
14155 smphb1 = Button(smphmenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
14156 smphb1.pack(side=LEFT)
14157 smphb2 = Button(smphmenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
14158 smphb2.pack(side=LEFT)
14160 refph = Frame( frame2phar )
14161 refph.pack(side=TOP)
14162 refphlab = Label(refph, text=
"Ref Phase")
14163 refphlab.pack(side=LEFT, anchor=W)
14164 RefphEntry = Spinbox(refph, width=5, values=RefPhase)
14165 RefphEntry.bind(
'<MouseWheel>', onSpinBoxScroll)
14166 RefphEntry.pack(side=LEFT, anchor=W)
14167 RefphEntry.delete(0,
"end")
14168 RefphEntry.insert(0,
"CA-V")
14169 vatb = Frame( frame2phar )
14170 vatb.pack(side=TOP)
14171 vatblab = Label(vatb, text=
"CA-V ")
14172 vatblab.pack(side=LEFT)
14173 vat_btn = Button(vatb, text=
"OFF", style=
"Stop.TButton", width=4, command=VAtoggle)
14174 vat_btn.pack(side=LEFT)
14175 vbtb = Frame( frame2phar )
14176 vbtb.pack(side=TOP)
14177 if MuxScreenStatus.get() == 0:
14178 vbtblab = Label(vbtb, text=
"CB-V ")
14179 vbtblab.pack(side=LEFT)
14180 vbt_btn = Button(vbtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VBtoggle)
14181 vbt_btn.pack(side=LEFT)
14182 vabtb = Frame( frame2phar )
14183 vabtb.pack(side=TOP)
14184 vabtblab = Label(vabtb, text=
"CA-B V ")
14185 vabtblab.pack(side=LEFT)
14186 vabt_btn = Button(vabtb, text=
"OFF", style=
"Stop.TButton", width=4, command=VABtoggle)
14187 vabt_btn.pack(side=LEFT)
14189 RefphEntry.configure(state=DISABLED)
14190 amuxlab = Label(frame2phar, text=
"Analog Mux In")
14191 amuxlab.pack(side=TOP)
14192 phbt1 = Checkbutton(frame2phar, text=
'CB-A ', style=
"Strace2.TCheckbutton", variable=ShowPB_A)
14193 phbt1.pack(side=TOP)
14194 phbt2 = Checkbutton(frame2phar, text=
'CB-B ', style=
"Strace6.TCheckbutton", variable=ShowPB_B)
14195 phbt2.pack(side=TOP)
14196 phbt3 = Checkbutton(frame2phar, text=
'CB-C ', style=
"Strace7.TCheckbutton", variable=ShowPB_C)
14197 phbt3.pack(side=TOP)
14198 phbt4 = Checkbutton(frame2phar, text=
'CB-D ', style=
"Strace4.TCheckbutton", variable=ShowPB_D)
14199 phbt4.pack(side=TOP)
14202 vssb = Frame( frame2phar )
14203 vssb.pack(side=TOP)
14204 vslab = Label(vssb, text=
"Volts/div ")
14205 vslab.pack(side=LEFT)
14206 VScale = Spinbox(vssb, width=7, values=CHvpdiv)
14207 VScale.bind(
'<MouseWheel>', onSpinBoxScroll)
14208 VScale.pack(side=LEFT)
14209 VScale.delete(0,
"end")
14210 VScale.insert(0,0.5)
14212 iatb = Frame( frame2phar )
14213 iatb.pack(side=TOP)
14214 iatblab = Label(iatb, text=
"CA-I ")
14215 iatblab.pack(side=LEFT)
14216 iat_btn = Button(iatb, text=
"OFF", style=
"Stop.TButton", width=4, command=IAtoggle)
14217 iat_btn.pack(side=LEFT)
14218 ibtb = Frame( frame2phar )
14219 ibtb.pack(side=TOP)
14220 ibtblab = Label(ibtb, text=
"CB-I ")
14221 ibtblab.pack(side=LEFT)
14222 ibt_btn = Button(ibtb, text=
"OFF", style=
"Stop.TButton", width=4, command=IBtoggle)
14223 ibt_btn.pack(side=LEFT)
14225 issb = Frame( frame2phar )
14226 issb.pack(side=TOP)
14227 islab = Label(issb, text=
"mA/div ")
14228 islab.pack(side=LEFT)
14229 IScale = Spinbox(issb, width=7, values=CHipdiv)
14230 IScale.bind(
'<MouseWheel>', onSpinBoxScroll)
14231 IScale.pack(side=LEFT)
14232 IScale.delete(0,
"end")
14233 IScale.insert(0,10.0)
14235 dismiss1button = Button(frame2phar, text=
"Dismiss", style=
"W8.TButton", command=DestroyPhAScreen)
14236 dismiss1button.pack(side=TOP)
14238 ADI1 = Label(frame2phar, image=logo, anchor=
"sw", compound=
"top")
14239 ADI1.pack(side=TOP)
14243 global phawindow, PhAScreenStatus, PhAca, PhADisp
14245 PhAScreenStatus.set(0)
14248 phawindow.destroy()
14252 global PhAca, GRWPhA, XOLPhA, GRHPhA, Y0TPhA, CANVASwidthPhA, CANVASheightPhA, FontSize
14254 CANVASwidthPhA = event.width - 4
14255 CANVASheightPhA = event.height - 4
14256 GRWPhA = CANVASwidthPhA - (2 * X0LPhA) - int(21.25 * FontSize)
14257 GRHPhA = CANVASheightPhA - Y0TPhA - int(2.25 * FontSize)
14275 global VAresult, VBresult, IAresult, IBresult, VABresult, PhaseIA, PhaseIB, PhaseVA, PhaseVB, PhaseVAB
14276 global VMAresult, VMBresult, VMCresult, VMDresult, PhaseVMD, PhaseVMA, PhaseVMB, PhaseVMC
14277 global PeakVA, PeakVB, PeakIA, PeakIB, PeakVAB
14278 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
14279 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
14280 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB, PeakphaseVAB
14281 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
14284 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
14285 global STARTsample, STOPsample, LoopNum, FSweepMode
14286 global TRACEmode, Two_X_Sample, MuxScreenStatus, MuxChan
14292 if len(VAresult) < 32:
14294 TRACEsize = len(VAresult)
14295 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
14298 STARTsample = int(math.ceil(STARTsample))
14299 if Two_X_Sample.get() == 0:
14300 STOPsample = 45000 / Fsample
14302 STOPsample = 90000 / Fsample
14303 STOPsample = int(math.floor(STOPsample))
14306 MAXsample = TRACEsize
14307 if STARTsample > (MAXsample - 1):
14308 STARTsample = MAXsample - 1
14310 if STOPsample > MAXsample:
14311 STOPsample = MAXsample
14314 PeakVA = PeakVB = PeakIA = PeakIB = PeakVAB = 0.0
14315 PeakfreqVA = PeakfreqVB = PeakfreqIA = PeakfreqIB = F = n * Fsample
14316 PeakphaseVA = PhaseVA[n]
14317 if MuxScreenStatus.get() == 0:
14318 PeakphaseVB = PhaseVB[n]
14319 PeakphaseIA = PhaseIA[n]
14320 PeakphaseIB = PhaseIB[n]
14321 PeakSampleVB = PeakSampleVA = PeakSampleIA = PeakSampleIB = n
14324 PeakphaseVMA = PhaseVMA[n]
14326 PeakfreqVMA = PeakfreqVA
14329 PeakphaseVMB = PhaseVMB[n]
14331 PeakfreqVMB = PeakfreqVA
14334 PeakphaseVMC = PhaseVMC[n]
14336 PeakfreqVMC = PeakfreqVA
14339 PeakphaseVMD = PhaseVMD[n]
14341 PeakfreqVMD = PeakfreqVA
14343 while n <= STOPsample:
14346 VA = float(VAresult[n])
14352 PeakphaseVA = PhaseVA[n]
14355 if MuxScreenStatus.get() == 0:
14357 VAB = float(VABresult[n])
14363 PeakphaseVAB = PhaseVAB[n]
14367 VB = float(VBresult[n])
14373 PeakphaseVB = PhaseVB[n]
14378 VMA = float(VMAresult[n])
14384 PeakphaseVMA = PhaseVMA[n]
14388 VMB = float(VMBresult[n])
14394 PeakphaseVMB = PhaseVMB[n]
14398 VMC = float(VMCresult[n])
14404 PeakphaseVMC = PhaseVMC[n]
14408 VMD = float(VMDresult[n])
14414 PeakphaseVMD = PhaseVMD[n]
14417 IA = float(IAresult[n])
14423 PeakphaseIA = PhaseIA[n]
14427 IB = float(IBresult[n])
14433 PeakphaseIB = PhaseIB[n]
14438 if PeakSampleVA != PeakSampleIA:
14439 PeakphaseIA = PhaseIA[PeakSampleVA]
14440 PeakIA = IAresult[PeakSampleVA]
14441 if PeakSampleVB != PeakSampleIB:
14442 PeakphaseIB = PhaseIB[PeakSampleVB]
14443 PeakIB = IBresult[PeakSampleVB]
14447 global PeakVA, PeakVB, PeakIA, PeakIB
14448 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
14449 global PeakphaseVA, PeakphaseVB, PeakphaseIA, PeakphaseIB
14450 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
14451 global PeakphaseVMA, PeakphaseVMB, PeakphaseVMC, PeakphaseVMD
14452 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
14453 global CMAphase, CMBphase, CMCphase, CMDphase
14454 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth
14455 global COLORsignalband, COLORtext, COLORgrid
14456 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
14457 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
14462 global FontSize, MuxScreenStatus, MuxChan, Mulx
14464 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, OverRangeFlagA, OverRangeFlagB
14466 global TRACEaverage
14467 global FreqTraceMode
14468 global Vdiv, VScale, IScale
14469 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
14470 global AWGBMode, AWGBIOMode, ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
14471 global ShowC1_V, ShowC2_V, ShowC1_I, ShowC2_I, CHA_RC_HP, CHB_RC_HP
14472 global DCV1, DCV2, MinV1, MaxV1, MinV2, MaxV2, CHAHW, CHALW, CHADCy, CHAperiod, CHAfreq
14473 global DCI1, DCI2, MinI1, MaxI1, MinI2, MaxI2, CHBHW, CHBLW, CHBDCy, CHBperiod, CHBfreq
14474 global InOffA, InGainA, InOffB, InGainB
14475 global CurOffA, CurOffB, CurGainA, CurGainB
14477 global DCVMuxA, MinVMuxA, MaxVMuxA, MidVMuxA, PPVMuxA, SVMuxA
14478 global DCVMuxB, MinVMuxB, MaxVMuxB, MidVMuxB, PPVMuxB, SVMuxB
14479 global DCVMuxC, MinVMuxC, MaxVMuxC, MidVMuxC, PPVMuxC, SVMuxC
14480 global DCVMuxD, MinVMuxD, MaxVMuxD, MidVMuxD, PPVMuxD, SVMuxD
14481 global SV1, SI1, SV2, SI2, CHABphase, SVA_B
14482 global MeasDCV1, MeasMinV1, MeasMaxV1, MeasMidV1, MeasPPV1
14483 global MeasDCI1, MeasMinI1, MeasMaxI1, MeasMidI1, MeasPPI1
14484 global MeasDCV2, MeasMinV2, MeasMaxV2, MeasMidV2, MeasPPV2
14485 global MeasDCI2, MeasMinI2, MeasMaxI2, MeasMidI2, MeasPPI2
14486 global MeasRMSV1, MeasRMSI1, MeasRMSV2, MeasRMSI2, MeasPhase, MeasRMSVA_B
14487 global MeasAHW, MeasALW, MeasADCy, MeasAPER, MeasAFREQ
14488 global MeasBHW, MeasBLW, MeasBDCy, MeasBPER, MeasBFREQ
14496 ycenter = (GRHPhA/2) + 14
14497 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
14498 VoltsperPixel = float(VScale.get())/Radius
14499 mAperPixel = float(IScale.get())/Radius
14500 TRadius = Radius * Vdiv.get()
14502 x2 = X0LPhA + GRWPhA
14503 xright = 10 + xcenter + ( Vdiv.get() * Radius )
14504 while (i <= Vdiv.get()):
14505 x0 = xcenter - ( i * Radius )
14506 x1 = xcenter + ( i * Radius )
14507 y0 = ycenter - ( i * Radius )
14508 y1 = ycenter + ( i * Radius )
14509 VTxt =
'{0:.2f}'.format(float(VScale.get()) * i)
14510 ITxt =
'{0:.2f}'.format(float(IScale.get()) * i)
14511 TOffset = xright+(4*FontSize)
14512 PhAca.create_oval ( x0, y0, x1, y1, outline=COLORgrid, width=GridWidth.get())
14513 PhAca.create_line(xcenter, y0, xright, y0, fill=COLORgrid, width=GridWidth.get(), dash=(4,3))
14514 PhAca.create_text(xright, y0, text=str(VTxt), fill=COLORtrace1, anchor=
"w", font=(
"arial", FontSize+2 ))
14515 if iat_btn.config(
'text')[-1] ==
'ON' or ibt_btn.config(
'text')[-1] ==
'ON':
14516 PhAca.create_text(TOffset, y0, text=str(ITxt), fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize+2 ))
14519 PhAca.create_line(xcenter, y0, xcenter, y1, fill=COLORgrid, width=2)
14520 PhAca.create_line(x0, ycenter, x1, ycenter, fill=COLORgrid, width=2)
14521 RAngle = math.radians(45)
14522 y = TRadius*math.sin(RAngle)
14523 x = TRadius*math.cos(RAngle)
14524 PhAca.create_line(xcenter-x, ycenter-y, xcenter+x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14525 PhAca.create_line(xcenter+x, ycenter-y, xcenter-x, ycenter+y, fill=COLORgrid, width=GridWidth.get())
14526 PhAca.create_text(x0, ycenter, text=
"180", fill=COLORgrid, anchor=
"e", font=(
"arial", FontSize+2 ))
14527 PhAca.create_text(x1, ycenter, text=
"0.0", fill=COLORgrid, anchor=
"w", font=(
"arial", FontSize+2 ))
14528 PhAca.create_text(xcenter, y0, text=
"90", fill=COLORgrid, anchor=
"s", font=(
"arial", FontSize+2 ))
14529 PhAca.create_text(xcenter, y1, text=
"-90", fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize+2 ))
14532 if Two_X_Sample.get() == 0:
14533 if AWGBMode.get() == 2
or AWGBIOMode.get() > 0:
14534 PhErr = 0.001675 * PeakfreqVA
14541 if RefphEntry.get() ==
"CA-V":
14543 CBVphase = PeakphaseVA - PeakphaseVB + PhErr
14544 CAIphase = PeakphaseVA - PeakphaseIA
14545 CBIphase = PeakphaseVA - PeakphaseIB + PhErr
14546 CABVphase = PeakphaseVA - PeakphaseVAB
14547 elif RefphEntry.get() ==
"CB-V":
14549 CAVphase = PeakphaseVB - PeakphaseVA - PhErr
14550 CAIphase = PeakphaseVB - PeakphaseIA - PhErr
14551 CBIphase = PeakphaseVB - PeakphaseIB
14552 CABVphase = PeakphaseVB - PeakphaseVAB
14553 elif RefphEntry.get() ==
"CA-I":
14555 CAVphase = PeakphaseIA - PeakphaseVA
14556 CBVphase = PeakphaseIA - PeakphaseVB + PhErr
14557 CBIphase = PeakphaseIA - PeakphaseIB + PhErr
14558 CABVphase = PeakphaseIA - PeakphaseVAB
14559 elif RefphEntry.get() ==
"CB-I":
14561 CAVphase = PeakphaseIB - PeakphaseVA - PhErr
14562 CBVphase = PeakphaseIB - PeakphaseVB
14563 CAIphase = PeakphaseIB - PeakphaseIA - PhErr
14564 CABVphase = PeakphaseIB - PeakphaseVAB
14567 CAVphase = CAVphase - 360
14568 elif CAVphase < -180:
14569 CAVphase = CAVphase + 360
14571 CBVphase = CBVphase - 360
14572 elif CBVphase < -180:
14573 CBVphase = CBVphase + 360
14575 CAIphase = CAIphase - 360
14576 elif CAIphase < -180:
14577 CAIphase = CAIphase + 360
14579 CBIphase = CBIphase - 360
14580 elif CBIphase < -180:
14581 CBIphase = CBIphase + 360
14583 if vat_btn.config(
'text')[-1] ==
'ON':
14584 MagRadius = PeakVA / VoltsperPixel
14586 y1 = ycenter - MagRadius*math.sin(math.radians(CAVphase))
14590 y1 = ycenter - xright
14591 x1 = xcenter + MagRadius*math.cos(math.radians(CAVphase))
14595 x1 = xcenter - xright
14596 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace1, arrow=
"last", width=TRACEwidth.get())
14597 if MuxScreenStatus.get() == 0:
14598 if vbt_btn.config(
'text')[-1] ==
'ON':
14599 MagRadius = PeakVB / VoltsperPixel
14600 y1 = ycenter - MagRadius*math.sin(math.radians(CBVphase))
14604 y1 = ycenter - xright
14605 x1 = xcenter + MagRadius*math.cos(math.radians(CBVphase))
14609 x1 = xcenter - xright
14610 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
14612 if ShowPB_A.get() > 0:
14613 CMAphase = PeakphaseVA - PeakphaseVMA + PhErr
14615 CMAphase = CMAphase - 360
14616 elif CMAphase < -180:
14617 CMAphase = CMAphase + 360
14618 MagRadius = PeakVMA / VoltsperPixel
14619 y1 = ycenter - MagRadius*math.sin(math.radians(CMAphase))
14623 y1 = ycenter - xright
14624 x1 = xcenter + MagRadius*math.cos(math.radians(CMAphase))
14628 x1 = xcenter - xright
14629 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace2, arrow=
"last", width=TRACEwidth.get())
14630 if ShowPB_B.get() > 0:
14631 CMBphase = PeakphaseVA - PeakphaseVMB + PhErr
14633 CMBphase = CMBphase - 360
14634 elif CMBphase < -180:
14635 CMBphase = CMBphase + 360
14636 MagRadius = PeakVMB / VoltsperPixel
14637 y1 = ycenter - MagRadius*math.sin(math.radians(CMBphase))
14641 y1 = ycenter - xright
14642 x1 = xcenter + MagRadius*math.cos(math.radians(CMBphase))
14646 x1 = xcenter - xright
14647 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace6, arrow=
"last", width=TRACEwidth.get())
14648 if ShowPB_C.get() > 0:
14649 CMCphase = PeakphaseVA - PeakphaseVMC + PhErr
14651 CMCphase = CMCphase - 360
14652 elif CMCphase < -180:
14653 CMCphase = CMCphase + 360
14654 MagRadius = PeakVMC / VoltsperPixel
14655 y1 = ycenter - MagRadius*math.sin(math.radians(CMCphase))
14659 y1 = ycenter - xright
14660 x1 = xcenter + MagRadius*math.cos(math.radians(CMCphase))
14664 x1 = xcenter - xright
14665 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace7, arrow=
"last", width=TRACEwidth.get())
14666 if ShowPB_D.get() > 0:
14667 CMDphase = PeakphaseVA - PeakphaseVMD + PhErr
14669 CMDphase = CMDphase - 360
14670 elif CMDphase < -180:
14671 CMDphase = CMDphase + 360
14672 MagRadius = PeakVMD / VoltsperPixel
14673 y1 = ycenter - MagRadius*math.sin(math.radians(CMDphase))
14677 y1 = ycenter - xright
14678 x1 = xcenter + MagRadius*math.cos(math.radians(CMDphase))
14682 x1 = xcenter - xright
14683 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
14684 if iat_btn.config(
'text')[-1] ==
'ON':
14685 MagRadius = PeakIA / mAperPixel
14686 y1 = ycenter - MagRadius*math.sin(math.radians(CAIphase))
14690 y1 = ycenter - xright
14691 x1 = xcenter + MagRadius*math.cos(math.radians(CAIphase))
14695 x1 = xcenter - xright
14696 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace3, arrow=
"last", width=TRACEwidth.get())
14697 if ibt_btn.config(
'text')[-1] ==
'ON':
14698 MagRadius = PeakIB / mAperPixel
14699 y1 = ycenter - MagRadius*math.sin(math.radians(CBIphase))
14703 y1 = ycenter - xright
14704 x1 = xcenter + MagRadius*math.cos(math.radians(CBIphase))
14708 x1 = xcenter - xright
14709 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace4, arrow=
"last", width=TRACEwidth.get())
14710 if MuxScreenStatus.get() == 0:
14711 if vabt_btn.config(
'text')[-1] ==
'ON':
14712 MagRadius = PeakVAB / VoltsperPixel
14714 y1 = ycenter - MagRadius*math.sin(math.radians(CABVphase))
14718 y1 = ycenter - xright
14719 x1 = xcenter + MagRadius*math.cos(math.radians(CABVphase))
14723 x1 = xcenter - xright
14724 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
14726 if OverRangeFlagA == 1:
14727 x = X0LPhA+GRWPhA+10
14728 y = Y0TPhA+GRHPhA-40
14729 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
14730 PhAca.create_text (x+12, y, text=
"CHA Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
14731 if OverRangeFlagB == 1:
14732 x = X0LPhA+GRWPhA+10
14733 y = Y0TPhA+GRHPhA-10
14734 PhAca.create_rectangle(x-6, y-6, x+6, y+6, fill=
"#ff0000")
14735 PhAca.create_text (x+12, y, text=
"CHB Over Range", anchor=W, fill=
"#ff0000", font=(
"arial", FontSize+4 ))
14737 txt =
" Sample rate: " + str(SAMPLErate)
14738 txt = txt +
" FFT samples: " + str(SMPfft)
14739 txt = txt +
" " + FFTwindowname
14743 idTXT = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
14745 x = X0LPhA + GRWPhA + 4
14747 txt =
"CA " +
' {0:.3f} '.format(PeakVA) +
" RMS V"
14748 TXT9 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
14750 if MuxScreenStatus.get() == 0:
14751 txt =
"CB " +
' {0:.3f} '.format(PeakVB) +
" RMS V"
14752 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
14755 if ShowPB_A.get() > 0:
14756 txt =
"Mux A " +
' {0:.3f} '.format(PeakVMA) +
" RMS V"
14757 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
14759 if ShowPB_B.get() > 0:
14760 txt =
"Mux B " +
' {0:.3f} '.format(PeakVMB) +
" RMS V"
14761 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
14763 if ShowPB_C.get() > 0:
14764 txt =
"Mux C " +
' {0:.3f} '.format(PeakVMC) +
" RMS V"
14765 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
14767 if ShowPB_D.get() > 0:
14768 txt =
"Mux D " +
' {0:.3f} '.format(PeakVMD) +
" RMS V"
14769 TXT10 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
14771 if iat_btn.config(
'text')[-1] ==
'ON':
14772 txt =
"CA " +
' {0:.2f} '.format(PeakIA) +
" RMS mA"
14773 TXT11 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
14775 if ibt_btn.config(
'text')[-1] ==
'ON':
14776 txt =
"CB " +
' {0:.2f} '.format(PeakIB) +
" RMS mA"
14777 TXT12 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
14779 txt =
"CA V Phase " +
' {0:.1f} '.format(CAVphase) +
" Degrees"
14780 TXT13 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace1, font=(
"arial", FontSize+4 ))
14782 if MuxScreenStatus.get() == 0:
14783 txt =
"CB V Phase " +
' {0:.1f} '.format(CBVphase) +
" Degrees"
14784 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
14787 if ShowPB_A.get() > 0:
14788 txt =
"Mux A Phase " +
' {0:.1f} '.format(CMAphase) +
" Degrees"
14789 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace2, font=(
"arial", FontSize+4 ))
14791 if ShowPB_B.get() > 0:
14792 txt =
"Mux B Phase " +
' {0:.1f} '.format(CMBphase) +
" Degrees"
14793 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace6, font=(
"arial", FontSize+4 ))
14795 if ShowPB_C.get() > 0:
14796 txt =
"Mux C Phase " +
' {0:.1f} '.format(CMCphase) +
" Degrees"
14797 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace7, font=(
"arial", FontSize+4 ))
14799 if ShowPB_D.get() > 0:
14800 txt =
"Mux D Phase " +
' {0:.1f} '.format(CMDphase) +
" Degrees"
14801 TXT14 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
14803 if iat_btn.config(
'text')[-1] ==
'ON':
14804 txt =
"CA I Phase " +
' {0:.1f} '.format(CAIphase) +
" Degrees"
14805 TXT15 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace3, font=(
"arial", FontSize+4 ))
14807 if ibt_btn.config(
'text')[-1] ==
'ON':
14808 txt =
"CB I Phase " +
' {0:.1f} '.format(CBIphase) +
" Degrees"
14809 TXT16 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtrace4, font=(
"arial", FontSize+4 ))
14812 txt =
"CA-V Freq " +
' {0:.1f} '.format(PeakfreqVA) +
" Hertz"
14813 TXT17 = PhAca.create_text (x, y, text=txt, anchor=W, fill=COLORtext, font=(
"arial", FontSize+4 ))
14818 if ShowC1_V.get() == 1
or ShowC2_V.get() == 1:
14819 if ETSDisp.get() > 0:
14820 FindRisingEdge(VBuffA[:int(DISsamples)],VBuffB[:int(DISsamples)])
14823 if ShowC1_V.get() == 1:
14824 if MeasAHW.get() == 1:
14825 txt = txt +
" CA Hi Width = " +
' {0:.3f} '.format(CHAHW/Mulx) +
" mS "
14826 if MeasALW.get() == 1:
14827 txt = txt +
" CA Lo Width = " +
' {0:.3f} '.format(CHALW/Mulx) +
" mS "
14828 if MeasADCy.get() == 1:
14829 txt = txt +
" CA DutyCycle = " +
' {0:.1f} '.format(CHADCy) +
" % "
14830 if MeasAPER.get() == 1:
14831 txt = txt +
" CA Period = " +
' {0:.3f} '.format(CHAperiod/Mulx) +
" mS "
14832 if MeasAFREQ.get() == 1:
14833 txt = txt +
" CA Freq = "
14834 ChaF = CHAfreq*Mulx
14836 V1String =
' {0:.1f} '.format(ChaF)
14837 txt = txt + str(V1String) +
" Hz "
14838 if ChaF > 1000
and ChaF < 1000000:
14839 V1String =
' {0:.1f} '.format(ChaF/1000)
14840 txt = txt + str(V1String) +
" KHz "
14842 V1String =
' {0:.1f} '.format(ChaF/1000000)
14843 txt = txt + str(V1String) +
" MHz "
14844 txt = txt +
" CA Freq = " +
' {0:.1f} '.format(CHAfreq) +
" Hz "
14845 if ShowC2_V.get() == 1:
14846 if MeasBHW.get() == 1:
14847 txt = txt +
" CB Hi Width = " +
' {0:.3f} '.format(CHBHW/Mulx) +
" mS "
14848 if MeasBLW.get() == 1:
14849 txt = txt +
" CB Lo Width = " +
' {0:.3f} '.format(CHBLW/Mulx) +
" mS "
14850 if MeasBDCy.get() == 1:
14851 txt = txt +
" CB DutyCycle = " +
' {0:.1f} '.format(CHBDCy) +
" % "
14852 if MeasBPER.get() == 1:
14853 txt = txt +
" CB Period = " +
' {0:.3f} '.format(CHBperiod/Mulx) +
" mS "
14854 if MeasBFREQ.get() == 1:
14855 txt = txt +
" CB Freq = "
14856 ChaF = CHBfreq*Mulx
14858 V1String =
' {0:.1f} '.format(ChaF)
14859 txt = txt + str(V1String) +
" Hz "
14860 if ChaF > 1000
and ChaF < 1000000:
14861 V1String =
' {0:.1f} '.format(ChaF/1000)
14862 txt = txt + str(V1String) +
" KHz "
14864 V1String =
' {0:.1f} '.format(ChaF/1000000)
14865 txt = txt + str(V1String) +
" MHz "
14866 txt = txt +
" CB Freq = " +
' {0:.1f} '.format(CHBfreq) +
" Hz "
14867 if MuxScreenStatus.get() == 0:
14868 if MeasPhase.get() == 1:
14869 txt = txt +
" CA-B Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
14870 if MeasDelay.get() == 1:
14871 txt = txt +
" CB-A Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
14874 y = YBot + int(2.5 *FontSize)
14875 TXT18 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
14877 if ShowC1_V.get() == 1:
14879 if CHA_RC_HP.get() == 1:
14883 if MeasDCV1.get() == 1:
14884 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV1)
14885 if MeasMaxV1.get() == 1:
14886 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV1)
14887 if MeasTopV1.get() == 1:
14888 txt = txt +
" Top = " +
' {0:.4f} '.format(VATop)
14889 if MeasMinV1.get() == 1:
14890 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV1)
14891 if MeasBaseV1.get() == 1:
14892 txt = txt +
" Base = " +
' {0:.4f} '.format(VABase)
14893 if MeasMidV1.get() == 1:
14894 MidV1 = (MaxV1+MinV1)/2.0
14895 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV1)
14896 if MeasPPV1.get() == 1:
14898 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV1)
14899 if MeasRMSV1.get() == 1:
14900 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV1)
14901 if MeasRMSVA_B.get() == 1:
14902 txt = txt +
" A-B RMS = " +
' {0:.4f} '.format(SVA_B)
14903 if MeasDiffAB.get() == 1:
14904 txt = txt +
" CA-CB = " +
' {0:.4f} '.format(DCV1-DCV2)
14905 if MeasUserA.get() == 1:
14907 TempValue = eval(UserAString)
14908 V1String =
' {0:.4f} '.format(TempValue)
14911 txt = txt + UserALabel +
" = " + V1String
14912 if (ShowC1_I.get() == 1
and ShowC1_V.get() == 0):
14914 elif (ShowC1_I.get() == 1
and ShowC1_V.get() == 1):
14915 txt = txt +
"CHA: "
14917 if ShowC1_I.get() == 1:
14918 if MeasDCI1.get() == 1:
14919 V1String =
' {0:.2f} '.format(DCI1)
14920 txt = txt +
" AvgI = " + V1String
14921 if AWGAShape.get() == 0:
14923 Resvalue = (DCV1/DCI1)*1000
14924 txt = txt +
" Res = " +
' {0:.1f} '.format(Resvalue)
14926 txt = txt +
" Res = OverRange"
14927 if MeasMaxI1.get() == 1:
14928 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI1)
14929 if MeasMinI1.get() == 1:
14930 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI1)
14931 if MeasMidI1.get() == 1:
14932 MidI1 = (MaxI1+MinI1)/2.0
14933 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI1)
14934 if MeasPPI1.get() == 1:
14936 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI1)
14937 if MeasRMSI1.get() == 1:
14938 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI1)
14941 y = YBot + int(4*FontSize)
14942 TXT19 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
14945 if MuxScreenStatus.get() == 1:
14947 if Show_CBA.get() > 0:
14949 elif Show_CBB.get() > 0:
14951 elif Show_CBC.get() > 0:
14953 elif Show_CBD.get() > 0:
14955 if MeasPhase.get() == 1:
14956 txt = txt +
" CA-Mux Phase = " +
' {0:.1f} '.format(CHABphase) +
" deg "
14957 if MeasDelay.get() == 1:
14958 txt = txt +
" Mux-CA Delay = " +
' {0:.3f} '.format(CHBADelayR1) +
" mS "
14959 if MeasUserB.get() == 1:
14961 TempValue = eval(UserBString)
14962 V1String =
' {0:.4f} '.format(TempValue)
14965 txt = txt + UserBLabel +
" = " + V1String
14966 if ShowC2_V.get() == 1:
14967 if CHB_RC_HP.get() == 1:
14971 if MeasDCV2.get() == 1:
14972 txt = txt +
" AvgV = " +
' {0:.4f} '.format(DCV2)
14973 if MeasMaxV2.get() == 1:
14974 txt = txt +
" MaxV = " +
' {0:.4f} '.format(MaxV2)
14975 if MeasTopV2.get() == 1:
14976 txt = txt +
" Top = " +
' {0:.4f} '.format(VBTop)
14977 if MeasMinV2.get() == 1:
14978 txt = txt +
" MinV = " +
' {0:.4f} '.format(MinV2)
14979 if MeasBaseV2.get() == 1:
14980 txt = txt +
" Base = " +
' {0:.4f} '.format(VBBase)
14981 if MeasMidV2.get() == 1:
14982 MidV2 = (MaxV2+MinV2)/2.0
14983 txt = txt +
" MidV = " +
' {0:.4f} '.format(MidV2)
14984 if MeasPPV2.get() == 1:
14986 txt = txt +
" P-PV = " +
' {0:.4f} '.format(PPV2)
14987 if MeasRMSV2.get() == 1:
14988 txt = txt +
" RMS = " +
' {0:.4f} '.format(SV2)
14989 if MeasDiffBA.get() == 1:
14990 txt = txt +
" CB-CA = " +
' {0:.4f} '.format(DCV2-DCV1)
14991 if MeasUserB.get() == 1:
14993 TempValue = eval(UserBString)
14994 V1String =
' {0:.4f} '.format(TempValue)
14997 txt = txt + UserBLabel +
" = " + V1String
14998 if (ShowC2_I.get() == 1
and ShowC2_V.get() == 0):
15000 elif (ShowC2_I.get() == 1
and ShowC2_V.get() == 1):
15001 txt = txt +
"CHB: "
15002 if ShowC2_I.get() == 1:
15003 if MeasDCI2.get() == 1:
15004 V1String =
' {0:.2f} '.format(DCI2)
15005 txt = txt +
" AvgI = " + V1String
15006 if AWGBShape.get() == 0:
15008 Resvalue = (DCV2/DCI2)*1000
15009 R1String =
' {0:.1f} '.format(Resvalue)
15010 txt = txt +
" Res = " + R1String
15012 txt = txt +
" Res = OverRange"
15013 if MeasMaxI2.get() == 1:
15014 txt = txt +
" MaxI = " +
' {0:.2f} '.format(MaxI2)
15015 if MeasMinI2.get() == 1:
15016 txt = txt +
" MinI = " +
' {0:.2f} '.format(MinI2)
15017 if MeasMidI2.get() == 1:
15018 MidI2 = (MaxI2+MinI2)/2.0
15019 txt = txt +
" MidV = " +
' {0:.2f} '.format(MidI2)
15020 if MeasPPI2.get() == 1:
15022 txt = txt +
" P-PI = " +
' {0:.2f} '.format(PPI2)
15023 if MeasRMSI2.get() == 1:
15024 txt = txt +
" RMS = " +
' {0:.4f} '.format(SI2)
15027 y = YBot + int(5.5 *FontSize)
15028 TXT20 = PhAca.create_text(x, y, text=txt, anchor=W, fill=COLORtext)
15031 global PeakVA, PeakVB, PeakIA, PeakIB
15032 global PeakfreqVA, PeakfreqVB, PeakfreqIA, PeakfreqIB
15033 global PeakVMA, PeakVMB, PeakVMC, PeakVMD
15034 global CAVphase, CBVphase, CAIphase, CBIphase, CABVphase
15035 global CMAphase, CMBphase, CMCphase, CMDphase
15036 global MuxScreenStatus, AppendPhAData, PhADatafilename
15037 global vat_btn, vbt_btn, iat_btn, ibt_btn, vabt_btn
15038 global ShowPB_A, ShowPB_B, ShowPB_C, ShowPB_D
15041 if AppendPhAData.get() == 0:
15042 PhADatafilename = asksaveasfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
15043 DataFile = open(PhADatafilename,
'a')
15044 DataFile.write(
'Amplitude, Phase, @ ' + str(PeakfreqVA) +
' Hertz\n')
15046 if vat_btn.config(
'text')[-1] ==
'ON':
15047 DataFile.write( str(PeakVA) +
', ' + str(CAVphase) +
', CA-V\n')
15048 if MuxScreenStatus.get() == 0:
15049 if vbt_btn.config(
'text')[-1] ==
'ON':
15050 DataFile.write( str(PeakVB) +
', ' + str(CBVphase) +
', CB-V\n')
15052 if ShowPB_A.get() > 0:
15053 DataFile.write( str(PeakVMA) +
', ' + str(CMAphase) +
', Mux A\n')
15054 if ShowPB_B.get() > 0:
15055 DataFile.write( str(PeakVMB) +
', ' + str(CMBphase) +
', Mux B\n')
15056 if ShowPB_C.get() > 0:
15057 DataFile.write( str(PeakVMC) +
', ' + str(CMCphase) +
', Mux C\n')
15058 if ShowPB_D.get() > 0:
15059 DataFile.write( str(PeakVMD) +
', ' + str(CMDphase) +
', Mux D\n')
15060 if iat_btn.config(
'text')[-1] ==
'ON':
15061 DataFile.write( str(PeakIA) +
', ' + str(CAIphase) +
', CA-I\n')
15062 if ibt_btn.config(
'text')[-1] ==
'ON':
15063 DataFile.write( str(PeakIB) +
', ' + str(CBIphase) +
', CB-I\n')
15067 global CANVASheightPhA, CANVASwidthPhA, PhAca, TRACEwidth, GridWidth, PhAPlotMode
15068 global COLORsignalband, COLORtext, COLORgrid, SmoothCurves
15069 global COLORtrace1, COLORtrace2, COLORtrace3, COLORtrace4, COLORtrace5, COLORtrace6, COLORtrace7
15070 global GRWPhA, GRHPhA, X0LPhA, Vdiv, VScale, IScale
15072 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"Comma Separated Values",
"*.csv")])
15075 ycenter = (GRHPhA/2) + 14
15076 Radius = (GRWPhA-X0LPhA)/(1 + Vdiv.get()*2)
15077 VoltsperPixel = float(VScale.get())/Radius
15078 mAperPixel = float(IScale.get())/Radius
15079 TRadius = Radius * Vdiv.get()
15081 x2 = X0LPhA + GRWPhA
15085 CSVFile = open(filename)
15086 dialect = csv.Sniffer().sniff(CSVFile.read(2048))
15088 csv_f = csv.reader(CSVFile, dialect)
15091 PeakMag = float(row[0])
15092 PeakPhase = float(row[1])
15093 if row[2] ==
"CA-I" or row[2] ==
"CB-I":
15094 MagRadius = PeakMag / mAperPixel
15096 MagRadius = PeakMag / VoltsperPixel
15098 y1 = ycenter - MagRadius*math.sin(math.radians(PeakPhase))
15102 y1 = ycenter - xright
15103 x1 = xcenter + MagRadius*math.cos(math.radians(PeakPhase))
15107 x1 = xcenter - xright
15108 if PhAPlotMode.get() == 0:
15109 PhAca.create_line(xcenter, ycenter, x1, y1, fill=COLORtrace5, arrow=
"last", width=TRACEwidth.get())
15111 PhATrace.append(x1)
15112 PhATrace.append(y1)
15114 print(
'skipping non-numeric row')
15115 if PhAPlotMode.get() == 1:
15116 PhAca.create_line(PhATrace, fill=COLORtrace5, smooth=SmoothCurves.get(), splinestep=5, width=TRACEwidth.get())
15119 showwarning(
"WARNING",
"No such file found or wrong format!")
15123 global FFTmemoryA, FFTresultA
15124 global FFTmemoryB, FFTresultB
15125 global PhaseA, PhaseB, freqwindow
15126 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, ShowC1_VdB, ShowC2_VdB
15129 if ShowC1_VdB.get() == 1:
15130 TRACEsize = len(FFTresultA)
15131 elif ShowC2_VdB.get() == 1:
15132 TRACEsize = len(FFTresultB)
15136 dB = askyesno(
"Mag or dB: ",
"Save amplidude data as dB (Yes) or Mag (No):\n", parent=freqwindow)
15138 tme = strftime(
"%Y%b%d-%H%M%S", gmtime())
15139 filename =
"Spectrum-" + tme
15140 filename = filename +
".csv"
15142 filename = asksaveasfilename(initialfile = filename, defaultextension =
".csv",
15143 filetypes=[(
"Comma Separated Values",
"*.csv")], parent=freqwindow)
15144 DataFile = open(filename,
'a')
15145 HeaderString =
'Frequency-#, '
15146 if ShowC1_VdB.get() == 1:
15148 HeaderString = HeaderString +
'CA-dB, '
15150 HeaderString = HeaderString +
'CA-Mag, '
15151 if ShowC2_VdB.get() == 1:
15153 HeaderString = HeaderString +
'CB-dB, '
15155 HeaderString = HeaderString +
'CB-Mag, '
15156 if ShowC1_P.get() == 1:
15157 HeaderString = HeaderString +
'Phase A-B, '
15158 if ShowC2_P.get() == 1:
15159 HeaderString = HeaderString +
'Phase B-A, '
15160 HeaderString = HeaderString +
'\n'
15161 DataFile.write( HeaderString )
15163 Fsample = float(SAMPLErate / 2) / (TRACEsize - 1)
15166 while n < TRACEsize:
15169 if ShowC1_VdB.get() == 1:
15170 V = 10 * math.log10(float(FFTresultA[n])) + 17
15173 txt = txt +
"," + str(V)
15174 if ShowC2_VdB.get() == 1:
15175 V = 10 * math.log10(float(FFTresultB[n])) + 17
15178 txt = txt +
"," + str(V)
15179 if ShowC1_P.get() == 1:
15180 RelPhase = PhaseA[n]-PhaseB[n]
15182 RelPhase = RelPhase - 360
15183 elif RelPhase < -180:
15184 RelPhase = RelPhase + 360
15185 txt = txt +
"," + str(RelPhase)
15186 if ShowC2_P.get() == 1:
15187 RelPhase = PhaseB[n]-PhaseA[n]
15189 RelPhase = RelPhase - 360
15190 elif RelPhase < -180:
15191 RelPhase = RelPhase + 360
15192 txt = txt +
"," + str(RelPhase)
15194 DataFile.write(txt)
15201 global CANVASheightF, CANVASwidthF, SmoothCurvesSA
15202 global PeakxA, PeakyA, PeakxB, PeakyB, PeakdbA, PeakdbB
15203 global PeakxM, PeakyM, PeakMdb, PeakfreqM
15204 global PeakfreqA, PeakfreqB, PeakfreqRA, PeakfreqRB
15205 global PeakxRA, PeakyRA, PeakxRB, PeakyRB, PeakdbRA, PeakdbRB
15206 global PeakxRM, PeakyRM, PeakRMdb, PeakfreqRM, PeakIndexA, PeakIndexB, Fsample
15208 global COLORsignalband, COLORtext
15209 global COLORtrace1, COLORtrace2
15210 global FSweepMode, LoopNum, MarkerFreqNum, TRACEwidth, GridWidth
15214 global FFTwindow, FFTbandwidth, ZEROstuffing, FFTwindowname
15221 global AWGSAMPLErate, SAMPLErate, BaseSampleRate, SingleShotSA, HScale, HarmonicMarkers
15223 global StartFreqEntry, StopFreqEntry, PhCenFreqEntry, RelPhaseCenter
15224 global ShowC1_P, ShowC2_P, ShowRA_VdB, ShowRB_VdB, ShowMarker
15225 global ShowRA_P, ShowRB_P, ShowMathSA, FreqDisp
15226 global ShowFCur, ShowdBCur, FCursor, dBCursor
15227 global T1Fline, T2Fline, T1Pline, T1FRline, T2FRline, TFMline, TFRMline
15228 global T1PRline, T2PRline
15229 global TRACEaverage
15230 global FreqTraceMode
15237 StartFrequency = float(StartFreqEntry.get())
15239 StartFreqEntry.delete(0,
"end")
15240 StartFreqEntry.insert(0,100)
15241 StartFrequency = 100
15243 StopFrequency = float(StopFreqEntry.get())
15245 StopFreqEntry.delete(0,
"end")
15246 StopFreqEntry.insert(0,10000)
15247 StopFrequency = 10000
15249 Phasecenter = int(PhCenFreqEntry.get())
15250 RelPhaseCenter.set(Phasecenter)
15252 PhCenFreqEntry.delete(0,
"end")
15253 PhCenFreqEntry.insert(0,0)
15254 RelPhaseCenter.set(0)
15260 while (i <= Vdiv.get()):
15261 y = Y0TF + i * GRHF/Vdiv.get()
15262 Dline = [x1,y,x2,y]
15263 if i == 0
or i == Vdiv.get():
15264 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15266 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15267 Vaxis_value = (DBlevel.get() - (i * DBdivlist[DBdivindex.get()]))
15268 Vaxis_label = str(Vaxis_value)
15269 Freqca.create_text(x1-3, y, text=Vaxis_label, fill=COLORtrace1, anchor=
"e", font=(
"arial", FontSize ))
15270 if ShowC1_P.get() == 1
or ShowC2_P.get() == 1:
15271 Vaxis_value = ( 180 - ( i * (360 / Vdiv.get())))
15272 Vaxis_value = Vaxis_value + Phasecenter
15273 Vaxis_label = str(Vaxis_value)
15274 Freqca.create_text(x2+3, y, text=Vaxis_label, fill=COLORtrace3, anchor=
"w", font=(
"arial", FontSize ))
15280 if HScale.get() == 1:
15282 LogFStop = math.log10(StopFrequency)
15284 LogFStart = math.log10(StartFrequency)
15287 LogFpixel = (LogFStop - LogFStart) / GRWF
15289 while F <= StopFrequency:
15290 if F >= StartFrequency:
15292 LogF = math.log10(F)
15293 x = X0LF + (LogF - LogFStart)/LogFpixel
15296 Dline = [x,y1,x,y2]
15297 if F == 1
or F == 10
or F == 100
or F == 1000
or F == 10000
or F == 100000:
15298 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15299 axis_label = str(F)
15300 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
15302 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15319 Freqdiv = (StopFrequency - StartFrequency) / 10
15321 x = X0LF + i * GRWF/10.0
15322 Dline = [x,y1,x,y2]
15323 if i == 0
or i == 10:
15324 Freqca.create_line(Dline, fill=COLORgrid, width=GridWidth.get())
15326 Freqca.create_line(Dline, dash=(4,3), fill=COLORgrid, width=GridWidth.get())
15327 axis_value = (StartFrequency + (i * Freqdiv))
15328 axis_label = str(axis_value)
15329 Freqca.create_text(x, y2+3, text=axis_label, fill=COLORgrid, anchor=
"n", font=(
"arial", FontSize ))
15332 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
15333 Yc = float(Y0TF) + Yconv * (DBlevel.get())
15334 Fpixel = (StopFrequency - StartFrequency) / GRWF
15335 if ShowFCur.get() > 0:
15336 Dline = [FCursor, Y0TF, FCursor, Y0TF+GRHF]
15337 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
15339 if HScale.get() == 1:
15340 LogFStop = math.log10(StopFrequency)
15342 LogFStart = math.log10(StartFrequency)
15345 LogFpixel = (LogFStop - LogFStart) / GRWF
15346 xfreq = 10**(((FCursor-X0LF)*LogFpixel) + LogFStart)
15348 Fpixel = (StopFrequency - StartFrequency) / GRWF
15349 xfreq = ((FCursor-X0LF)*Fpixel)+StartFrequency
15350 XFString =
' {0:.2f} '.format(xfreq)
15351 V_label = XFString +
" Hz"
15352 Freqca.create_text(FCursor+1, dBCursor-5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
15354 if ShowdBCur.get() > 0:
15355 Dline = [X0LF, dBCursor, X0LF+GRWF, dBCursor]
15356 Freqca.create_line(Dline, dash=(3,4), fill=COLORtrigger, width=GridWidth.get())
15358 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
15359 Yc = float(Y0TF) + Yconv * (DBlevel.get())
15360 yvdB = ((Yc-dBCursor)/Yconv)
15361 VdBString =
' {0:.1f} '.format(yvdB)
15362 V_label = VdBString +
" dBV"
15363 Freqca.create_text(FCursor+1, dBCursor+5, text=V_label, fill=COLORtext, anchor=
"w", font=(
"arial", FontSize ))
15365 SmoothBool = SmoothCurvesSA.get()
15367 if len(T1Fline) > 4:
15369 if OverRangeFlagA == 1:
15370 Freqca.create_line(T1Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15372 Freqca.create_line(T1Fline, fill=COLORtrace1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15373 if ShowMarker.get() > 0:
15375 while k <= HarmonicMarkers.get():
15377 dbA = (10 * math.log10(float(FFTresultA[PeakIndexA*k])) + 17)
15378 FreqA = k*PeakIndexA*Fsample
15379 if ShowMarker.get() == 2
and k > 1:
15380 Peak_label =
' {0:.2f} '.format(dbA - PeakdbA) +
',' +
' {0:.1f} '.format(FreqA - PeakfreqA)
15382 Peak_label =
' {0:.2f} '.format(dbA) +
',' +
' {0:.1f} '.format(FreqA)
15383 if HScale.get() == 1:
15385 LogF = math.log10(FreqA)
15386 xA = X0LF + int((LogF - LogFStart)/LogFpixel)
15390 xA = X0LF+int((FreqA - StartFrequency)/Fpixel)
15391 yA = Yc - Yconv * dbA
15392 Freqca.create_text(xA, yA, text=Peak_label, fill=COLORtrace1, anchor=
"s", font=(
"arial", FontSize ))
15396 if len(T2Fline) > 4:
15398 if OverRangeFlagB == 1:
15399 Freqca.create_line(T2Fline, fill=COLORsignalband, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15401 Freqca.create_line(T2Fline, fill=COLORtrace2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15402 if ShowMarker.get() > 0:
15404 while k <= HarmonicMarkers.get():
15406 dbB = (10 * math.log10(float(FFTresultB[PeakIndexB*k])) + 17)
15407 FreqB = k*PeakIndexB*Fsample
15408 if ShowMarker.get() == 2
and k > 1:
15409 Peak_label =
' {0:.2f} '.format(dbB - PeakdbB) +
',' +
' {0:.1f} '.format(FreqB - PeakfreqB)
15411 Peak_label =
' {0:.2f} '.format(dbB) +
',' +
' {0:.1f} '.format(FreqB)
15412 if HScale.get() == 1:
15414 LogF = math.log10(FreqB)
15415 xB = X0LF + int((LogF - LogFStart)/LogFpixel)
15419 xB = X0LF+int((FreqB - StartFrequency)/Fpixel)
15420 yB = Yc - Yconv * dbB
15421 Freqca.create_text(xB, yB, text=Peak_label, fill=COLORtrace2, anchor=
"s", font=(
"arial", FontSize ))
15425 if len(T1Pline) > 4:
15427 Freqca.create_line(T1Pline, fill=COLORtrace3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15428 if len(T2Pline) > 4:
15430 Freqca.create_line(T2Pline, fill=COLORtrace4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15431 if ShowRA_VdB.get() == 1
and len(T1FRline) > 4:
15432 Freqca.create_line(T1FRline, fill=COLORtraceR1, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15433 if ShowMarker.get() == 1:
15434 Peak_label =
' {0:.2f} '.format(PeakdbRA) +
',' +
' {0:.1f} '.format(PeakfreqRA)
15435 Freqca.create_text(PeakxRA, PeakyRA, text=Peak_label, fill=COLORtraceR1, anchor=
"s", font=(
"arial", FontSize ))
15436 if ShowRB_VdB.get() == 1
and len(T2FRline) > 4:
15437 Freqca.create_line(T2FRline, fill=COLORtraceR2, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15438 if ShowMarker.get() == 1:
15439 Peak_label =
' {0:.2f} '.format(PeakdbRB) +
',' +
' {0:.1f} '.format(PeakfreqRB)
15440 Freqca.create_text(PeakxRB, PeakyRB, text=Peak_label, fill=COLORtraceR2, anchor=
"s", font=(
"arial", FontSize ))
15441 if ShowRA_P.get() == 1
and len(T1PRline) > 4:
15442 Freqca.create_line(T1PRline, fill=COLORtraceR3, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15443 if ShowRB_P.get() == 1
and len(T2PRline) > 4:
15444 Freqca.create_line(T2PRline, fill=COLORtraceR4, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15445 if ShowMathSA.get() > 0
and len(TFMline) > 4:
15446 Freqca.create_line(TFMline, fill=COLORtrace5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15447 if ShowMarker.get() ==1:
15448 Peak_label =
' {0:.2f} '.format(PeakMdb) +
',' +
' {0:.1f} '.format(PeakfreqM)
15449 Freqca.create_text(PeakxM, PeakyM, text=Peak_label, fill=COLORtrace5, anchor=
"s", font=(
"arial", FontSize ))
15450 if ShowRMath.get() == 1
and len(TFRMline) > 4:
15451 Freqca.create_line(TFRMline, fill=COLORtraceR5, smooth=SmoothBool, splinestep=5, width=TRACEwidth.get())
15452 if ShowMarker.get() ==1:
15453 Peak_label =
' {0:.2f} '.format(PeakRMdb) +
',' +
' {0:.1f} '.format(PeakfreqRM)
15454 Freqca.create_text(PeakxRM, PeakyRM, text=Peak_label, fill=COLORtraceR5, anchor=
"s", font=(
"arial", FontSize ))
15457 txt =
" Sample rate: " + str(SAMPLErate)
15458 txt = txt +
" FFT samples: " + str(SMPfft)
15460 txt = txt +
" " + FFTwindowname
15464 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15467 txt = str(StartFrequency) +
" to " + str(StopFrequency) +
" Hz"
15468 txt = txt +
" " + str(DBdivlist[DBdivindex.get()]) +
" dB/div"
15469 txt = txt +
" Level: " + str(DBlevel.get()) +
" dB "
15470 if FFTwindow.get() < 7:
15471 txt = txt +
" FFT Bandwidth =" +
' {0:.2f} '.format(FFTbandwidth)
15473 txt = txt +
" FFT Bandwidth = ???"
15477 idTXT = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15479 if FreqTraceMode.get() == 1:
15480 txt =
"Normal mode "
15482 if FreqTraceMode.get() == 2:
15483 txt =
"Peak hold mode "
15485 if FreqTraceMode.get() == 3:
15486 txt =
"Power average mode (" + str(TRACEaverage.get()) +
") "
15488 if ZEROstuffing.get() > 0:
15489 txt = txt +
"Zero Stuffing = " + str(ZEROstuffing.get())
15491 if (RUNstatus.get() == 0)
and (SingleShotSA.get() == 0):
15492 txt = txt +
" Stopped "
15493 elif SingleShotSA.get() == 1:
15494 txt = txt +
" Single Shot Trace "
15496 if FreqDisp.get() == 1:
15497 txt = txt +
" Running "
15499 txt = txt +
" Display off "
15502 IDtxt = Freqca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)
15505 global SMPfft, FFTwindow
15506 global SMPfftpwrTwo, BodeDisp
15507 global TRACEresetFreq, FreqTraceMode, LoopNum, FSweepMode, FSweepCont
15510 if BodeDisp.get() == 0:
15511 if FFTwindow.get() != 8:
15512 SMPfft = 2 ** int(SMPfftpwrTwo.get())
15515 if FreqTraceMode.get() == 1
and TRACEresetFreq ==
False:
15516 TRACEresetFreq =
True
15517 if FreqTraceMode.get() == 2
and LoopNum.get() == 1
and FSweepMode.get() > 0
and FSweepCont.get() == 0
and BodeDisp.get() >0:
15518 TRACEresetFreq =
True
15521 global FFTbandwidth
15523 global FFTwindowname
15524 global FFTwindowshape
15525 global AWGSAMPLErate, SAMPLErate, BaseSampleRate
15527 global LastWindow, LastSMPfft
15529 if LastWindow == FFTwindow.get()
and LastSMPfft == SMPfft:
15533 FFTwindowname =
"No such window"
15536 if FFTwindow.get() == 0:
15537 FFTwindowname =
" Rectangular (no) window (B=1) "
15540 if FFTwindow.get() == 1:
15541 FFTwindowname =
" Cosine window (B=1.24) "
15544 if FFTwindow.get() == 2:
15545 FFTwindowname =
" Triangular window (B=1.33) "
15548 if FFTwindow.get() == 3:
15549 FFTwindowname =
" Hann window (B=1.5) "
15552 if FFTwindow.get() == 4:
15553 FFTwindowname =
" Blackman window (B=1.73) "
15556 if FFTwindow.get() == 5:
15557 FFTwindowname =
" Nuttall window (B=2.02) "
15560 if FFTwindow.get() == 6:
15561 FFTwindowname =
" Flat top window (B=3.77) "
15564 if FFTwindow.get() == 7:
15565 FFTwindowname = FFTUserWindowString
15568 FFTwindowshape = eval(FFTUserWindowString)
15570 FFTwindowshape = numpy.ones(SMPfft)
15571 print(
"Filling FFT window with Ones")
15572 elif FFTwindow.get() == 8:
15573 FFTwindowname =
"Window Shape From file"
15576 FFTbandwidth = int(FFTbw * SAMPLErate / float(SMPfft))
15578 FFTwindowshape = numpy.ones(SMPfft)
15582 if FFTwindow.get() == 1:
15583 w = math.sin(math.pi * n / (SMPfft - 1))
15584 FFTwindowshape[n] = w * 1.571
15586 if FFTwindow.get() == 2:
15587 w = (2.0 / SMPfft) * ((SMPfft/ 2.0) - abs(n - (SMPfft - 1) / 2.0))
15588 FFTwindowshape[n] = w * 2.0
15590 if FFTwindow.get() == 3:
15591 w = 0.5 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1))
15592 FFTwindowshape[n] = w * 2.000
15594 if FFTwindow.get() == 4:
15595 w = 0.42 - 0.5 * math.cos(2 * math.pi * n / (SMPfft - 1)) + 0.08 * math.cos(4 * math.pi * n / (SMPfft - 1))
15596 FFTwindowshape[n] = w * 2.381
15598 if FFTwindow.get() == 5:
15599 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))
15600 FFTwindowshape[n] = w * 2.811
15602 if FFTwindow.get() == 6:
15603 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))
15604 FFTwindowshape[n] = w * 1.000
15606 LastWindow = FFTwindow.get()
15607 LastSMPfft = SMPfft
15610 global FFTUserWindowString, freqwindow
15612 TempString = FFTUserWindowString
15613 FFTUserWindowString = askstring(
"User FFT Window",
"Current User Window: " + FFTUserWindowString +
"\n\nNew Window:\n", initialvalue=FFTUserWindowString, parent=freqwindow)
15614 if (FFTUserWindowString ==
None):
15615 FFTUserWindowString = TempString
15618 global FFTwindowshape, SMPfft, LastSMPfft, FFTwindow, LastWindow
15621 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=freqwindow)
15623 CSVFile = open(filename)
15624 csv_f = csv.reader(CSVFile)
15625 FFTwindowshape = []
15628 FFTwindowshape.append(float(row[0]))
15630 print(
'skipping non-numeric row')
15631 FFTwindowshape = numpy.array(FFTwindowshape)
15633 SMPfft = len(FFTwindowshape)
15634 LastSMPfft = SMPfft
15635 LastWindow = FFTwindow.get()
15638 showwarning(
"WARNING",
"No such file found or wrong format!")
15641 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
15645 if RUNstatus.get() == 0:
15647 Freqca.bind(
'<MouseWheel>', onCanvasFreqClickScroll)
15648 Freqca.bind(
"<Button-4>", onCanvasFreqClickScroll)
15649 Freqca.bind(
"<Button-5>", onCanvasFreqClickScroll)
15652 global ShowFCur, ShowdBCur, FCursor, dBCursor, RUNstatus, Freqca
15653 if event.widget == Freqca:
15654 ShiftKeyDwn = event.state & 1
15655 if ShowFCur.get() > 0
and ShiftKeyDwn == 0:
15657 if event.num == 5
or event.delta == -120:
15659 if event.num == 4
or event.delta == 120:
15661 elif ShowdBCur.get() > 0
or ShiftKeyDwn == 1:
15663 if event.num == 5
or event.delta == -120:
15665 if event.num == 4
or event.delta == 120:
15667 if RUNstatus.get() == 0:
15676 global Freqca, MarkerLoc, SAMPLErate, BaseSampleRate
15677 global COLORgrid, COLORtext, HScale, ShowC1_VdB, ShowC2_VdB
15678 global COLORtrace1, COLORtrace2, StartFreqEntry, StopFreqEntry
15679 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF
15681 if (RUNstatus.get() == 0):
15682 MarkerFreqNum = MarkerFreqNum + 1
15683 COLORmarker = COLORgrid
15684 if ShowC1_VdB.get() == 1:
15685 COLORmarker = COLORtrace1
15686 elif ShowC2_VdB.get() == 1:
15687 COLORmarker = COLORtrace2
15689 StartFrequency = float(StartFreqEntry.get())
15691 StartFreqEntry.delete(0,
"end")
15692 StartFreqEntry.insert(0,100)
15693 StartFrequency = 100
15695 StopFrequency = float(StopFreqEntry.get())
15697 StopFreqEntry.delete(0,
"end")
15698 StopFreqEntry.insert(0,100)
15699 StopFrequency = 100
15701 Freqca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
15702 Freqca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
15703 Freqca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
15705 Yconv = float(GRHF) / (Vdiv.get() * DBdivlist[DBdivindex.get()])
15706 Yc = float(Y0TF) + Yconv * (DBlevel.get())
15707 Yphconv = float(GRHF) / 360
15708 Yp = float(Y0TF) + Yphconv + 180
15710 if HScale.get() == 1:
15711 LogFStop = math.log10(StopFrequency)
15713 LogFStart = math.log10(StartFrequency)
15716 LogFpixel = (LogFStop - LogFStart) / GRWF
15717 xfreq = 10**(((event.x-X0LF)*LogFpixel) + LogFStart)
15719 Fpixel = (StopFrequency - StartFrequency) / GRWF
15720 xfreq = ((event.x-X0LF)*Fpixel)+StartFrequency
15722 yvdB = ((Yc-event.y)/Yconv)
15723 VdBString =
' {0:.1f} '.format(yvdB)
15724 XFString =
' {0:.2f} '.format(xfreq)
15725 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
15726 if MarkerFreqNum > 1:
15727 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
15728 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
15729 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
15731 y = Y0TF + 3 + (MarkerFreqNum*10)
15733 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
15734 x = X0LF + GRWF - 5
15735 y = Y0TF + 3 + (MarkerFreqNum*10)
15737 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
15739 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
15741 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
15742 x = X0LF + GRWF - 5
15743 y = Y0TF + GRHF + 3 - (MarkerFreqNum*10)
15745 Freqca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
15751 if ShowC1_VdB.get() == 0:
15758 if ShowC2_VdB.get() == 0:
15765 if ShowC1_P.get() == 0:
15772 if ShowC2_P.get() == 0:
15779 if ShowMarker.get() == 0:
15786 if ShowRA_VdB.get() == 0:
15793 if ShowRB_VdB.get() == 0:
15827 if ShowFCur.get() == 0:
15834 if ShowdBCur.get() == 1:
15841 if ShowdBCur.get() == 2:
15847 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus, Bodeca
15850 BdBCursor = event.y
15851 if RUNstatus.get() == 0:
15854 Bodeca.bind(
'<MouseWheel>', onCanvasBodeClickScroll)
15855 Bodeca.bind(
"<Button-4>", onCanvasBodeClickScroll)
15856 Bodeca.bind(
"<Button-5>", onCanvasBodeClickScroll)
15859 global ShowBPCur, ShowBdBCur, BPCursor, BdBCursor, RUNstatus
15862 shift_key = event.state & 1
15863 if ShowBPCur.get() > 0
and shift_key == 0:
15865 if event.num == 5
or event.delta == -120:
15867 if event.num == 4
or event.delta == 120:
15869 elif ShowBdBCur.get() > 0
or shift_key == 1:
15871 if event.num == 5
or event.delta == -120:
15873 if event.num == 4
or event.delta == 120:
15875 if RUNstatus.get() == 0:
15884 global Bodeca, MarkerLoc, SAMPLErate
15885 global COLORgrid, COLORtext, HScaleBP, ShowCA_VdB, ShowCB_VdB, DBdivindexBP
15886 global COLORtrace1, COLORtrace2, COLORtrace6, StartBodeEntry, StopBodeEntry, DBlevelBP
15887 global AWGSAMPLErate, RUNstatus, COLORtext, MarkerFreqNum, PrevdBV, PrevF, Vdiv
15889 if (RUNstatus.get() == 0):
15890 MarkerFreqNum = MarkerFreqNum + 1
15891 COLORmarker = COLORtrace6
15892 if ShowCA_VdB.get() == 1:
15893 COLORmarker = COLORtrace1
15894 elif ShowCB_VdB.get() == 1:
15895 COLORmarker = COLORtrace2
15897 EndFreq = float(StopBodeEntry.get())
15899 StopBodeEntry.delete(0,
"end")
15900 StopBodeEntry.insert(0,10000)
15903 BeginFreq = float(StartBodeEntry.get())
15905 StartBodeEntry.delete(0,
"end")
15906 StartBodeEntry.insert(0,100)
15909 Bodeca.create_line(event.x-4, event.y-4,event.x+4, event.y+5, fill=COLORmarker)
15910 Bodeca.create_line(event.x+4, event.y-4,event.x-4, event.y+5, fill=COLORmarker)
15911 Bodeca.create_text(event.x+4, event.y, text=str(MarkerFreqNum), fill=COLORmarker, anchor=
"w", font=(
"arial", FontSize ))
15913 Yconv = float(GRHBP) / (Vdiv.get() * DBdivlist[DBdivindexBP.get()])
15914 Yc = float(Y0TBP) + Yconv * (DBlevelBP.get())
15915 Yphconv = float(GRHBP) / 360
15916 Yp = float(Y0TBP) + Yphconv + 180
15920 if HScaleBP.get() == 1:
15921 LogFStop = math.log10(EndFreq)
15923 LogFStart = math.log10(BeginFreq)
15926 LogFpixel = (LogFStop - LogFStart) / GRWBP
15927 xfreq = 10**(((event.x-x1)*LogFpixel) + LogFStart)
15929 Fpixel = (EndFreq - BeginFreq) / GRWBP
15930 xfreq = ((event.x-x1)*Fpixel)+BeginFreq
15932 yvdB = ((Yc-event.y)/Yconv)
15933 VdBString =
' {0:.1f} '.format(yvdB)
15934 XFString =
' {0:.2f} '.format(xfreq)
15935 V_label = str(MarkerFreqNum) +
" " + XFString +
" Hz, " + VdBString +
" dBV"
15936 if MarkerFreqNum > 1:
15937 DeltaV =
' {0:.3f} '.format(yvdB-PrevdBV)
15938 DeltaF =
' {0:.2f} '.format(xfreq-PrevF)
15939 V_label = V_label +
" Delta " + DeltaF +
" Hz, " + DeltaV +
" dBV"
15941 y = Y0TBP + 3 + (MarkerFreqNum*10)
15943 if MarkerLoc ==
'UR' or MarkerLoc ==
'ur':
15945 y = Y0TBP + 3 + (MarkerFreqNum*10)
15947 if MarkerLoc ==
'LL' or MarkerLoc ==
'll':
15949 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
15951 if MarkerLoc ==
'LR' or MarkerLoc ==
'lr':
15953 y = Y0TBP + GRHBP + 3 - (MarkerFreqNum*10)
15955 Bodeca.create_text(x, y, text=V_label, fill=COLORmarker, anchor=Justify, font=(
"arial", FontSize ))
15961 if ShowCA_VdB.get() == 0:
15968 if ShowCB_VdB.get() == 0:
15975 if ShowCA_P.get() == 0:
15982 if ShowCB_P.get() == 0:
15988 global ShowMarkerBP
15989 if ShowMarkerBP.get() == 0:
15990 ShowMarkerBP.set(1)
15992 ShowMarkerBP.set(0)
15996 if ShowRA_VdB.get() == 0:
16003 if ShowRB_VdB.get() == 0:
16025 if ShowBPCur.get() == 0:
16032 if ShowBdBCur.get() == 1:
16039 if ShowBdBCur.get() == 2:
16061 button = event.widget
16062 cursor_position = button.index(INSERT)
16063 Pos = cursor_position
16064 OldVal = button.get()
16065 OldValfl = float(OldVal)
16067 Dot = OldVal.find (
".")
16068 Decimals = Len - Dot - 1
16071 Step = 10**(Len - Pos)
16073 Step = 10**(Dot - Pos)
16075 Step = 10**(Dot - Pos + 1)
16077 if event.num == 5
or event.delta == -120:
16078 NewVal = OldValfl - Step
16079 if event.num == 4
or event.delta == 120:
16080 NewVal = OldValfl + Step
16081 FormatStr =
"{0:." + str(Decimals) +
"f}"
16082 NewStr = FormatStr.format(NewVal)
16083 NewDot = NewStr.find (
".")
16084 NewPos = Pos + NewDot - Dot
16086 NewLen = len(NewStr)
16087 NewPos = Pos + NewLen - Len
16088 button.delete(0, END)
16089 button.insert(0, NewStr)
16090 button.icursor(NewPos)
16110 button = event.widget
16111 cursor_position = button.index(INSERT)
16112 Pos = cursor_position
16113 OldVal = button.get()
16114 OldValfl = float(OldVal)
16116 Dot = OldVal.find (
".")
16117 Decimals = Len - Dot - 1
16120 Step = 10**(Len - Pos)
16122 Step = 10**(Dot - Pos)
16124 Step = 10**(Dot - Pos + 1)
16125 if platform.system() ==
"Windows":
16126 if event.keycode == 38:
16127 NewVal = OldValfl + Step
16128 elif event.keycode == 40:
16129 NewVal = OldValfl - Step
16132 elif platform.system() ==
"Linux":
16133 if event.keycode == 111:
16134 NewVal = OldValfl + Step
16135 elif event.keycode == 116:
16136 NewVal = OldValfl - Step
16140 FormatStr =
"{0:." + str(Decimals) +
"f}"
16141 NewStr = FormatStr.format(NewVal)
16142 NewDot = NewStr.find (
".")
16143 NewPos = Pos + NewDot - Dot
16145 NewLen = len(NewStr)
16146 NewPos = Pos + NewLen - Len
16147 button.delete(0, END)
16148 button.insert(0, NewStr)
16149 button.icursor(NewPos)
16153 spbox = event.widget
16154 if sys.version_info[0] == 3:
16156 if event.delta > 0:
16157 spbox.invoke(
'buttonup')
16159 spbox.invoke(
'buttondown')
16163 global AWGAMode, AWGATerm, AWGAShape, AWGSync, awgwindow, AWGAPhaseDelay, AWGBPhaseDelay
16164 global AWGBMode, AWGBTerm, AWGBShape, AWGScreenStatus, AWGARepeatFlag, AWGBRepeatFlag
16165 global AWGABurstFlag, AWGBBurstFlag, AWGAShapeLabel, AWGBShapeLabel, AWGShowAdvanced
16166 global AWGAAmplEntry, AWGAOffsetEntry, AWGAFreqEntry, AWGAPhaseEntry, AWGADutyCycleEntry
16167 global AWGBAmplEntry, AWGBOffsetEntry, AWGBFreqEntry, AWGBPhaseEntry, AWGBDutyCycleEntry
16168 global AWGALength, AWGBLength, RevDate, phasealab, phaseblab, AWGAModeLabel, AWGBModeLabel
16169 global AWGAIOMode, AWGBIOMode, duty1lab, duty2lab, awgaph, awgadel, awgbph, awgbdel
16170 global AwgLayout, AWG_Amp_Mode, awgsync, SWRev
16171 global amp1lab, amp2lab, off1lab, off2lab, Reset_Freq, AWG_2X, BisCompA, FWRevOne
16173 if AWGScreenStatus.get() == 0:
16174 AWGScreenStatus.set(1)
16176 awgwindow = Toplevel()
16177 awgwindow.title(
"AWG Controls " + SWRev + RevDate)
16178 awgwindow.resizable(FALSE,FALSE)
16179 awgwindow.geometry(
'+0+100')
16180 awgwindow.protocol(
"WM_DELETE_WINDOW", DestroyAWGScreen)
16182 frame2 = LabelFrame(awgwindow, text=
"AWG CH A", style=
"A10R1.TLabelframe")
16183 frame3 = LabelFrame(awgwindow, text=
"AWG CH B", style=
"A10R2.TLabelframe")
16185 if AwgLayout ==
"Horz":
16186 frame2.pack(side=LEFT, expand=1, fill=X)
16187 frame3.pack(side=LEFT, expand=1, fill=X)
16189 frame2.pack(side=TOP, expand=1, fill=Y)
16190 frame3.pack(side=TOP, expand=1, fill=Y)
16193 AWGAMode = IntVar(0)
16194 AWGAIOMode = IntVar(0)
16195 AWGATerm = IntVar(0)
16196 AWGAShape = IntVar(0)
16197 AWGARepeatFlag = IntVar(0)
16198 AWGABurstFlag = IntVar(0)
16199 AWGBBurstFlag = IntVar(0)
16201 AWGSync = IntVar(0)
16203 awg1eb = Frame( frame2 )
16204 awg1eb.pack(side=TOP)
16205 ModeAMenu = Menubutton(awg1eb, text=
"Mode", style=
"W5.TButton")
16206 ModeAMenu.menu = Menu(ModeAMenu, tearoff = 0 )
16207 ModeAMenu[
"menu"] = ModeAMenu.menu
16208 ModeAMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
16209 ModeAMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGAMode, value=0, command=BAWGAModeLabel)
16210 ModeAMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGAMode, value=1, command=BAWGAModeLabel)
16211 ModeAMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGAMode, value=2, command=BAWGAModeLabel)
16212 ModeAMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGAIOMode, command=BAWGAModeLabel)
16213 ModeAMenu.menu.add_separator()
16214 ModeAMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
16215 ModeAMenu.menu.add_radiobutton(label=
"Open", variable=AWGATerm, value=0, command=UpdateAwgCont)
16216 ModeAMenu.menu.add_radiobutton(label=
"To GND", variable=AWGATerm, value=1, command=UpdateAwgCont)
16217 ModeAMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGATerm, value=2, command=UpdateAwgCont)
16218 ModeAMenu.pack(side=LEFT, anchor=W)
16219 ShapeAMenu = Menubutton(awg1eb, text=
"Shape", style=
"W6.TButton")
16220 ShapeAMenu.menu = Menu(ShapeAMenu, tearoff = 0 )
16221 ShapeAMenu[
"menu"] = ShapeAMenu.menu
16222 ShapeAMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
16223 ShapeAMenu.menu.add_radiobutton(label=
"DC", variable=AWGAShape, value=0, command=ReMakeAWGwaves)
16224 ShapeAMenu.menu.add_radiobutton(label=
"Sine", variable=AWGAShape, value=18, command=ReMakeAWGwaves)
16225 ShapeAMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGAShape, value=2, command=ReMakeAWGwaves)
16226 ShapeAMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGAShape, value=3, command=ReMakeAWGwaves)
16227 ShapeAMenu.menu.add_radiobutton(label=
"Square", variable=AWGAShape, value=4, command=ReMakeAWGwaves)
16228 ShapeAMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGAShape, value=5, command=ReMakeAWGwaves)
16229 if AWGShowAdvanced.get() > 0:
16230 ShapeAMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
16231 ShapeAMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGAShape, value=9, command=ReMakeAWGwaves)
16232 ShapeAMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGAShape, value=11, command=ReMakeAWGwaves)
16233 ShapeAMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGAShape, value=20, command=ReMakeAWGwaves)
16234 ShapeAMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGAShape, value=16, command=ReMakeAWGwaves)
16235 ShapeAMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGAShape, value=15, command=ReMakeAWGwaves)
16236 ShapeAMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGAShape, value=12, command=ReMakeAWGwaves)
16237 ShapeAMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGAShape, value=14, command=AWGAMakeFourier)
16238 ShapeAMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGAShape, value=19, command=ReMakeAWGwaves)
16239 ShapeAMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGAShape, value=17, command=ReMakeAWGwaves)
16240 ShapeAMenu.menu.add_radiobutton(label=
"FM Sine", variable=AWGAShape, value=21, command=AWGAMakeFMSine)
16241 ShapeAMenu.menu.add_radiobutton(label=
"AM Sine", variable=AWGAShape, value=22, command=AWGAMakeAMSine)
16242 ShapeAMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGAShape, value=7, command=ReMakeAWGwaves)
16243 ShapeAMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGAShape, value=8, command=ReMakeAWGwaves)
16245 ShapeAMenu.menu.add_separator()
16246 ShapeAMenu.menu.add_radiobutton(label=
"Math", variable=AWGAShape, value=10, command=AWGAMakeMath)
16247 ShapeAMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGAShape, value=6, command=AWGAReadFile)
16248 ShapeAMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGAShape, value=13, command=AWGAReadWAV)
16249 ShapeAMenu.menu.add_command(label=
"Save CSV File", command=AWGAWriteFile)
16250 ShapeAMenu.menu.add_checkbutton(label=
'Burst', variable=AWGABurstFlag, command=AWGANumCycles)
16251 ShapeAMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGARepeatFlag)
16252 ShapeAMenu.pack(side=LEFT, anchor=W)
16254 AWGAModeLabel = Label(frame2, text=
"AWG A Mode")
16255 AWGAModeLabel.pack(side=TOP)
16256 AWGAShapeLabel = Label(frame2, text=
"AWG A Shape")
16257 AWGAShapeLabel.pack(side=TOP)
16259 awg1ampl = Frame( frame2 )
16260 awg1ampl.pack(side=TOP)
16261 AWGAAmplEntry = Entry(awg1ampl, width=5)
16262 AWGAAmplEntry.bind(
"<Return>", UpdateAwgContRet)
16263 AWGAAmplEntry.bind(
'<MouseWheel>', onAWGAscroll)
16264 AWGAAmplEntry.bind(
"<Button-4>", onAWGAscroll)
16265 AWGAAmplEntry.bind(
"<Button-5>", onAWGAscroll)
16266 AWGAAmplEntry.bind(
'<Key>', onTextKeyAWG)
16267 AWGAAmplEntry.pack(side=LEFT, anchor=W)
16268 AWGAAmplEntry.delete(0,
"end")
16269 AWGAAmplEntry.insert(0,0.0)
16270 amp1lab = Label(awg1ampl)
16271 amp1lab.pack(side=LEFT, anchor=W)
16273 awg1off = Frame( frame2 )
16274 awg1off.pack(side=TOP)
16275 AWGAOffsetEntry = Entry(awg1off, width=5)
16276 AWGAOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
16277 AWGAOffsetEntry.bind(
'<MouseWheel>', onAWGAscroll)
16278 AWGAOffsetEntry.bind(
"<Button-4>", onAWGAscroll)
16279 AWGAOffsetEntry.bind(
"<Button-5>", onAWGAscroll)
16280 AWGAOffsetEntry.bind(
'<Key>', onTextKeyAWG)
16281 AWGAOffsetEntry.pack(side=LEFT, anchor=W)
16282 AWGAOffsetEntry.delete(0,
"end")
16283 AWGAOffsetEntry.insert(0,0.0)
16284 off1lab = Label(awg1off)
16285 off1lab.pack(side=LEFT, anchor=W)
16286 if AWG_Amp_Mode.get() == 0:
16287 amp1lab.config(text =
"Min Ch A" )
16288 off1lab.config(text =
"Max Ch A" )
16290 amp1lab.config(text =
"Amp Ch A" )
16291 off1lab.config(text =
"Off Ch A" )
16293 awg1freq = Frame( frame2 )
16294 awg1freq.pack(side=TOP)
16295 AWGAFreqEntry = Entry(awg1freq, width=7)
16296 AWGAFreqEntry.bind(
"<Return>", UpdateAwgContRet)
16297 AWGAFreqEntry.bind(
'<MouseWheel>', onAWGAscroll)
16298 AWGAFreqEntry.bind(
"<Button-4>", onAWGAscroll)
16299 AWGAFreqEntry.bind(
"<Button-5>", onAWGAscroll)
16300 AWGAFreqEntry.bind(
'<Key>', onTextKeyAWG)
16301 AWGAFreqEntry.pack(side=LEFT, anchor=W)
16302 AWGAFreqEntry.delete(0,
"end")
16303 AWGAFreqEntry.insert(0,100.0)
16304 freq1lab = Label(awg1freq, text=
"Freq Ch A")
16305 freq1lab.pack(side=LEFT, anchor=W)
16307 AWGAPhaseDelay = IntVar(0)
16308 awgadelay = Frame( frame2 )
16309 awgadelay.pack(side=TOP)
16310 awgaph = Radiobutton(awgadelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGAPhaseDelay, value=0, command=BAWGAPhaseDelay)
16311 awgaph.pack(side=LEFT, anchor=W)
16312 awgadel = Radiobutton(awgadelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGAPhaseDelay, value=1, command=BAWGAPhaseDelay)
16313 awgadel.pack(side=LEFT, anchor=W)
16315 awg1phase = Frame( frame2 )
16316 awg1phase.pack(side=TOP)
16317 AWGAPhaseEntry = Entry(awg1phase, width=5)
16318 AWGAPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
16319 AWGAPhaseEntry.bind(
'<MouseWheel>', onAWGAscroll)
16320 AWGAPhaseEntry.bind(
"<Button-4>", onAWGAscroll)
16321 AWGAPhaseEntry.bind(
"<Button-5>", onAWGAscroll)
16322 AWGAPhaseEntry.bind(
'<Key>', onTextKeyAWG)
16323 AWGAPhaseEntry.pack(side=LEFT, anchor=W)
16324 AWGAPhaseEntry.delete(0,
"end")
16325 AWGAPhaseEntry.insert(0,0)
16326 phasealab = Label(awg1phase, text=
"Deg")
16327 phasealab.pack(side=LEFT, anchor=W)
16329 awg1dc = Frame( frame2 )
16330 awg1dc.pack(side=TOP)
16331 AWGADutyCycleEntry = Entry(awg1dc, width=5)
16332 AWGADutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
16333 AWGADutyCycleEntry.bind(
'<MouseWheel>', onAWGAscroll)
16334 AWGADutyCycleEntry.bind(
"<Button-4>", onAWGAscroll)
16335 AWGADutyCycleEntry.bind(
"<Button-5>", onAWGAscroll)
16336 AWGADutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
16337 AWGADutyCycleEntry.pack(side=LEFT, anchor=W)
16338 AWGADutyCycleEntry.delete(0,
"end")
16339 AWGADutyCycleEntry.insert(0,50)
16340 duty1lab = Label(awg1dc, text=
"%")
16341 duty1lab.pack(side=LEFT, anchor=W)
16343 AWGALength = Label(frame2, text=
"Length")
16344 AWGALength.pack(side=TOP)
16346 if FWRevOne > 2.16:
16347 awg2x1 = Radiobutton(frame2, text=
"Both CH 1X", variable=AWG_2X, value=0, command=BAWG2X)
16348 awg2x1.pack(side=TOP)
16349 awg2x2 = Radiobutton(frame2, text=
"CH A 2X", variable=AWG_2X, value=1, command=BAWG2X)
16350 awg2x2.pack(side=TOP)
16351 awg2x3 = Radiobutton(frame2, text=
"CH B 2X", variable=AWG_2X, value=2, command=BAWG2X)
16352 awg2x3.pack(side=TOP)
16354 awgsync = Checkbutton(frame2, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
16355 awgsync.pack(side=TOP)
16358 AWGBMode = IntVar(0)
16359 AWGBIOMode = IntVar(0)
16360 AWGBTerm = IntVar(0)
16361 AWGBShape = IntVar(0)
16362 AWGBRepeatFlag = IntVar(0)
16364 awg2eb = Frame( frame3 )
16365 awg2eb.pack(side=TOP)
16366 ModeBMenu = Menubutton(awg2eb, text=
"Mode", style=
"W5.TButton")
16367 ModeBMenu.menu = Menu(ModeBMenu, tearoff = 0 )
16368 ModeBMenu[
"menu"] = ModeBMenu.menu
16369 ModeBMenu.menu.add_command(label=
"-Mode-", foreground=
"blue", command=donothing)
16370 ModeBMenu.menu.add_radiobutton(label=
"SVMI", variable=AWGBMode, value=0, command=BAWGBModeLabel)
16371 ModeBMenu.menu.add_radiobutton(label=
"SIMV", variable=AWGBMode, value=1, command=BAWGBModeLabel)
16372 ModeBMenu.menu.add_radiobutton(label=
"Hi-Z", variable=AWGBMode, value=2, command=BAWGBModeLabel)
16373 ModeBMenu.menu.add_checkbutton(label=
"Split I/O", variable=AWGBIOMode, command=BAWGBModeLabel)
16374 ModeBMenu.menu.add_separator()
16375 ModeBMenu.menu.add_command(label=
"-Term-", foreground=
"blue", command=donothing)
16376 ModeBMenu.menu.add_radiobutton(label=
"Open", variable=AWGBTerm, value=0, command=UpdateAwgCont)
16377 ModeBMenu.menu.add_radiobutton(label=
"To GND", variable=AWGBTerm, value=1, command=UpdateAwgCont)
16378 ModeBMenu.menu.add_radiobutton(label=
"To 2.5V", variable=AWGBTerm, value=2, command=UpdateAwgCont)
16379 ModeBMenu.pack(side=LEFT, anchor=W)
16380 ShapeBMenu = Menubutton(awg2eb, text=
"Shape", style=
"W6.TButton")
16381 ShapeBMenu.menu = Menu(ShapeBMenu, tearoff = 0 )
16382 ShapeBMenu[
"menu"] = ShapeBMenu.menu
16383 ShapeBMenu.menu.add_command(label=
"-Basic-", foreground=
"blue", command=donothing)
16384 ShapeBMenu.menu.add_radiobutton(label=
"DC", variable=AWGBShape, value=0, command=ReMakeAWGwaves)
16385 ShapeBMenu.menu.add_radiobutton(label=
"Sine", variable=AWGBShape, value=18, command=ReMakeAWGwaves)
16386 ShapeBMenu.menu.add_radiobutton(label=
"Triangle", variable=AWGBShape, value=2, command=ReMakeAWGwaves)
16387 ShapeBMenu.menu.add_radiobutton(label=
"Sawtooth", variable=AWGBShape, value=3, command=ReMakeAWGwaves)
16388 ShapeBMenu.menu.add_radiobutton(label=
"Square", variable=AWGBShape, value=4, command=ReMakeAWGwaves)
16389 ShapeBMenu.menu.add_radiobutton(label=
"StairStep", variable=AWGBShape, value=5, command=ReMakeAWGwaves)
16390 if AWGShowAdvanced.get() > 0:
16391 ShapeBMenu.menu.add_command(label=
"-Advanced-", foreground=
"blue", command=donothing)
16392 ShapeBMenu.menu.add_radiobutton(label=
"Impulse", variable=AWGBShape, value=9, command=ReMakeAWGwaves)
16393 ShapeBMenu.menu.add_radiobutton(label=
"Trapezoid", variable=AWGBShape, value=11, command=ReMakeAWGwaves)
16394 ShapeBMenu.menu.add_radiobutton(label=
"Pulse", variable=AWGBShape, value=20, command=ReMakeAWGwaves)
16395 ShapeBMenu.menu.add_radiobutton(label=
"Ramp", variable=AWGBShape, value=16, command=ReMakeAWGwaves)
16396 ShapeBMenu.menu.add_radiobutton(label=
"SSQ Pulse", variable=AWGBShape, value=15, command=ReMakeAWGwaves)
16397 ShapeBMenu.menu.add_radiobutton(label=
"U-D Ramp", variable=AWGBShape, value=12, command=ReMakeAWGwaves)
16398 ShapeBMenu.menu.add_radiobutton(label=
"Fourier Series", variable=AWGBShape, value=14, command=AWGBMakeFourier)
16399 ShapeBMenu.menu.add_radiobutton(label=
"Sin X/X", variable=AWGBShape, value=19, command=ReMakeAWGwaves)
16400 ShapeBMenu.menu.add_radiobutton(label=
"PWM Sine", variable=AWGBShape, value=17, command=ReMakeAWGwaves)
16401 ShapeBMenu.menu.add_radiobutton(label=
"UU Noise", variable=AWGBShape, value=7, command=ReMakeAWGwaves)
16402 ShapeBMenu.menu.add_radiobutton(label=
"UG Noise", variable=AWGBShape, value=8, command=ReMakeAWGwaves)
16404 ShapeBMenu.menu.add_separator()
16405 ShapeBMenu.menu.add_radiobutton(label=
"Math", variable=AWGBShape, value=10, command=AWGBMakeMath)
16406 ShapeBMenu.menu.add_radiobutton(label=
"Read CSV File", variable=AWGBShape, value=6, command=AWGBReadFile)
16407 ShapeBMenu.menu.add_radiobutton(label=
"Read WAV File", variable=AWGBShape, value=13, command=AWGBReadWAV)
16408 ShapeBMenu.menu.add_command(label=
"Save CSV File", command=AWGBWriteFile)
16409 ShapeBMenu.menu.add_checkbutton(label=
'Burst', variable=AWGBBurstFlag, command=AWGBNumCycles)
16410 ShapeBMenu.menu.add_checkbutton(label=
'Repeat', variable=AWGBRepeatFlag)
16411 ShapeBMenu.pack(side=LEFT, anchor=W)
16413 AWGBModeLabel = Label(frame3, text=
"AWG B Mode")
16414 AWGBModeLabel.pack(side=TOP)
16415 AWGBShapeLabel = Label(frame3, text=
"AWG B Shape")
16416 AWGBShapeLabel.pack(side=TOP)
16418 awg2ampl = Frame( frame3 )
16419 awg2ampl.pack(side=TOP)
16420 AWGBAmplEntry = Entry(awg2ampl, width=5)
16421 AWGBAmplEntry.bind(
"<Return>", UpdateAwgContRet)
16422 AWGBAmplEntry.bind(
'<MouseWheel>', onAWGBscroll)
16423 AWGBAmplEntry.bind(
"<Button-4>", onAWGBscroll)
16424 AWGBAmplEntry.bind(
"<Button-5>", onAWGBscroll)
16425 AWGBAmplEntry.bind(
'<Key>', onTextKeyAWG)
16426 AWGBAmplEntry.pack(side=LEFT, anchor=W)
16427 AWGBAmplEntry.delete(0,
"end")
16428 AWGBAmplEntry.insert(0,0.0)
16429 amp2lab = Label(awg2ampl)
16430 amp2lab.pack(side=LEFT, anchor=W)
16432 awg2off = Frame( frame3 )
16433 awg2off.pack(side=TOP)
16434 AWGBOffsetEntry = Entry(awg2off, width=5)
16435 AWGBOffsetEntry.bind(
"<Return>", UpdateAwgContRet)
16436 AWGBOffsetEntry.bind(
'<MouseWheel>', onAWGBscroll)
16437 AWGBOffsetEntry.bind(
"<Button-4>", onAWGBscroll)
16438 AWGBOffsetEntry.bind(
"<Button-5>", onAWGBscroll)
16439 AWGBOffsetEntry.bind(
'<Key>', onTextKeyAWG)
16440 AWGBOffsetEntry.pack(side=LEFT, anchor=W)
16441 AWGBOffsetEntry.delete(0,
"end")
16442 AWGBOffsetEntry.insert(0,0.0)
16443 off2lab = Label(awg2off)
16444 off2lab.pack(side=LEFT, anchor=W)
16445 if AWG_Amp_Mode.get() == 0:
16446 amp2lab.config(text =
"Min Ch B" )
16447 off2lab.config(text =
"Max Ch B" )
16449 amp2lab.config(text =
"Amp Ch B" )
16450 off2lab.config(text =
"Off Ch B" )
16452 awg2freq = Frame( frame3 )
16453 awg2freq.pack(side=TOP)
16454 AWGBFreqEntry = Entry(awg2freq, width=7)
16455 AWGBFreqEntry.bind(
"<Return>", UpdateAwgContRet)
16456 AWGBFreqEntry.bind(
'<MouseWheel>', onAWGBscroll)
16457 AWGBFreqEntry.bind(
"<Button-4>", onAWGBscroll)
16458 AWGBFreqEntry.bind(
"<Button-5>", onAWGBscroll)
16459 AWGBFreqEntry.bind(
'<Key>', onTextKeyAWG)
16460 AWGBFreqEntry.pack(side=LEFT, anchor=W)
16461 AWGBFreqEntry.delete(0,
"end")
16462 AWGBFreqEntry.insert(0,100.0)
16463 freq2lab = Label(awg2freq, text=
"Freq Ch B")
16464 freq2lab.pack(side=LEFT, anchor=W)
16466 AWGBPhaseDelay = IntVar(0)
16467 awgbdelay = Frame( frame3 )
16468 awgbdelay.pack(side=TOP)
16469 awgbph = Radiobutton(awgbdelay, text=
"Phase", style=
"WPhase.TRadiobutton", variable=AWGBPhaseDelay, value=0, command=BAWGBPhaseDelay)
16470 awgbph.pack(side=LEFT, anchor=W)
16471 awgbdel = Radiobutton(awgbdelay, text=
"Delay", style=
"GPhase.TRadiobutton", variable=AWGBPhaseDelay, value=1, command=BAWGBPhaseDelay)
16472 awgbdel.pack(side=LEFT, anchor=W)
16474 awg2phase = Frame( frame3 )
16475 awg2phase.pack(side=TOP)
16476 AWGBPhaseEntry = Entry(awg2phase, width=5)
16477 AWGBPhaseEntry.bind(
"<Return>", UpdateAwgContRet)
16478 AWGBPhaseEntry.bind(
'<MouseWheel>', onAWGBscroll)
16479 AWGBPhaseEntry.bind(
"<Button-4>", onAWGBscroll)
16480 AWGBPhaseEntry.bind(
"<Button-5>", onAWGBscroll)
16481 AWGBPhaseEntry.bind(
'<Key>', onTextKeyAWG)
16482 AWGBPhaseEntry.pack(side=LEFT, anchor=W)
16483 AWGBPhaseEntry.delete(0,
"end")
16484 AWGBPhaseEntry.insert(0,0)
16485 phaseblab = Label(awg2phase, text=
"Deg")
16486 phaseblab.pack(side=LEFT, anchor=W)
16488 awg2dc = Frame( frame3 )
16489 awg2dc.pack(side=TOP)
16490 AWGBDutyCycleEntry = Entry(awg2dc, width=5)
16491 AWGBDutyCycleEntry.bind(
"<Return>", UpdateAwgContRet)
16492 AWGBDutyCycleEntry.bind(
'<MouseWheel>', onAWGBscroll)
16493 AWGBDutyCycleEntry.bind(
"<Button-4>", onAWGBscroll)
16494 AWGBDutyCycleEntry.bind(
"<Button-5>", onAWGBscroll)
16495 AWGBDutyCycleEntry.bind(
'<Key>', onTextKeyAWG)
16496 AWGBDutyCycleEntry.pack(side=LEFT, anchor=W)
16497 AWGBDutyCycleEntry.delete(0,
"end")
16498 AWGBDutyCycleEntry.insert(0,50)
16499 duty2lab = Label(awg2dc, text=
"%")
16500 duty2lab.pack(side=LEFT, anchor=W)
16502 AWGBLength = Label(frame3, text=
"Length")
16503 AWGBLength.pack(side=TOP)
16505 BisCompA = IntVar(0)
16507 bcompa = Checkbutton(frame3, text=
"B = Comp A", variable=BisCompA, command=ReMakeAWGwaves)
16508 bcompa.pack(side=TOP)
16509 if FWRevOne > 2.16:
16510 awgsync = Checkbutton(frame3, text=
"Sync AWG", variable=AWGSync, command=BAWGSync)
16511 awgsync.pack(side=TOP)
16513 dismissbutton = Button(frame3, text=
"Minimize", style=
"W8.TButton", command=DestroyAWGScreen)
16514 dismissbutton.pack(side=TOP)
16516 awgwindow.deiconify()
16519 global AWG_2X, devx, AWGAIOMode, AWGBIOMode, BisCompA
16522 if AWG_2X.get() == 0:
16523 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
16524 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
16525 elif AWG_2X.get() == 1:
16526 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
16527 devx.ctrl_transfer(0x40, 0x25, 0x0, 0, 0, 0, 100)
16528 if AWGBIOMode.get() == 0:
16529 devx.ctrl_transfer(0x40, 0x51, 40, 0, 0, 0, 100)
16530 devx.ctrl_transfer(0x40, 0x51, 52, 0, 0, 0, 100)
16532 elif AWG_2X.get() == 2:
16533 devx.ctrl_transfer(0x40, 0x24, 0x1, 0, 0, 0, 100)
16534 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
16535 if AWGAIOMode.get() == 0:
16536 devx.ctrl_transfer(0x40, 0x51, 35, 0, 0, 0, 100)
16537 devx.ctrl_transfer(0x40, 0x51, 51, 0, 0, 0, 100)
16541 global awgwindow, AWGScreenStatus
16544 awgwindow.iconify()
16548 global MuxScreenStatus, muxwindow, RevDate, DacScreenStatus, DigScreenStatus
16549 global CHB_Asb, CHB_APosEntry, CHB_Bsb, CHB_BPosEntry
16550 global CHB_Csb, CHB_CPosEntry, CHB_Dsb, CHB_DPosEntry, SyncButton
16551 global CHB_Alab, CHB_Blab, CHB_Clab, CHB_Dlab, CHBlab, CHBofflab
16552 global CHB_Cofflab, CHB_Dofflab, awgsync, SWRev
16553 global Show_CBA, Show_CBB, Show_CBC, Show_CBD, MuxEnb, MuxSync, hipulseimg, lowpulseimg, DualMuxMode
16555 if MuxScreenStatus.get() == 0
and DacScreenStatus.get() == 0
and DigScreenStatus.get() == 0:
16556 MuxScreenStatus.set(1)
16560 muxwindow = Toplevel()
16561 muxwindow.title(
"CH-B Mux " + SWRev + RevDate)
16562 muxwindow.resizable(FALSE,FALSE)
16563 muxwindow.protocol(
"WM_DELETE_WINDOW", DestroyMuxScreen)
16565 frameM = LabelFrame(muxwindow, text=
"CH B Mux", style=
"A10B.TLabel")
16566 frameM.pack(side=LEFT, expand=1, fill=Y)
16569 frameA = Frame(frameM)
16570 frameA.pack(side=TOP)
16571 cba = Checkbutton(frameA, text=
'CB-A', variable=Show_CBA, command=UpdateTimeTrace)
16572 cba.pack(side=LEFT, anchor=W)
16573 CHB_Asb = Spinbox(frameA, width=4, values=CHvpdiv, command=UpdateTimeTrace)
16574 CHB_Asb.bind(
'<MouseWheel>', onSpinBoxScroll)
16575 CHB_Asb.pack(side=LEFT)
16576 CHB_Asb.delete(0,
"end")
16577 CHB_Asb.insert(0,0.5)
16579 CHB_Alab = Button(frameA, text=
"CB-A V/Div", style=
"Rtrace2.TButton", command=SetScaleMuxA)
16580 CHB_Alab.pack(side=LEFT)
16581 CHB_APosEntry = Entry(frameA, width=5)
16582 CHB_APosEntry.bind(
'<Return>', onTextKey)
16583 CHB_APosEntry.bind(
'<MouseWheel>', onTextScroll)
16584 CHB_APosEntry.bind(
"<Button-4>", onTextScroll)
16585 CHB_APosEntry.bind(
"<Button-5>", onTextScroll)
16586 CHB_APosEntry.bind(
'<Key>', onTextKey)
16587 CHB_APosEntry.pack(side=LEFT)
16588 CHB_APosEntry.delete(0,
"end")
16589 CHB_APosEntry.insert(0,2.5)
16590 CHB_Aofflab = Button(frameA, text=
"CB-A Pos", style=
"Rtrace2.TButton", command=SetMuxAPoss)
16591 CHB_Aofflab.pack(side=LEFT)
16593 frameB = Frame(frameM)
16594 frameB.pack(side=TOP)
16595 cbb = Checkbutton(frameB, text=
'CB-B', variable=Show_CBB, command=UpdateTimeTrace)
16596 cbb.pack(side=LEFT, anchor=W)
16597 CHB_Bsb = Spinbox(frameB, width=4, values=CHvpdiv, command=UpdateTimeTrace)
16598 CHB_Bsb.bind(
'<MouseWheel>', onSpinBoxScroll)
16599 CHB_Bsb.pack(side=LEFT)
16600 CHB_Bsb.delete(0,
"end")
16601 CHB_Bsb.insert(0,0.5)
16602 CHB_Blab = Button(frameB, text=
"CB-B V/Div", style=
"Rtrace6.TButton", command=SetScaleMuxB)
16603 CHB_Blab.pack(side=LEFT)
16604 CHB_BPosEntry = Entry(frameB, width=5)
16605 CHB_BPosEntry.bind(
'<Return>', onTextKey)
16606 CHB_BPosEntry.bind(
'<MouseWheel>', onTextScroll)
16607 CHB_BPosEntry.bind(
"<Button-4>", onTextScroll)
16608 CHB_BPosEntry.bind(
"<Button-5>", onTextScroll)
16609 CHB_BPosEntry.bind(
'<Key>', onTextKey)
16610 CHB_BPosEntry.pack(side=LEFT)
16611 CHB_BPosEntry.delete(0,
"end")
16612 CHB_BPosEntry.insert(0,2.5)
16613 CHB_Bofflab = Button(frameB, text=
"CB-B Pos", style=
"Rtrace6.TButton", command=SetMuxBPoss)
16614 CHB_Bofflab.pack(side=LEFT)
16616 frameC = Frame(frameM)
16617 frameC.pack(side=TOP)
16618 cbc = Checkbutton(frameC, text=
'CB-C', variable=Show_CBC, command=UpdateTimeTrace)
16619 cbc.pack(side=LEFT, anchor=W)
16620 CHB_Csb = Spinbox(frameC, width=4, values=CHvpdiv, command=UpdateTimeTrace)
16621 CHB_Csb.bind(
'<MouseWheel>', onSpinBoxScroll)
16622 CHB_Csb.pack(side=LEFT)
16623 CHB_Csb.delete(0,
"end")
16624 CHB_Csb.insert(0,0.5)
16626 CHB_Clab = Button(frameC, text=
"CB-C V/Div", style=
"Rtrace7.TButton", command=SetScaleMuxC)
16627 CHB_Clab.pack(side=LEFT)
16628 CHB_CPosEntry = Entry(frameC, width=5)
16629 CHB_CPosEntry.bind(
'<Return>', onTextKey)
16630 CHB_CPosEntry.bind(
'<MouseWheel>', onTextScroll)
16631 CHB_CPosEntry.bind(
"<Button-4>", onTextScroll)
16632 CHB_CPosEntry.bind(
"<Button-5>", onTextScroll)
16633 CHB_CPosEntry.bind(
'<Key>', onTextKey)
16634 CHB_CPosEntry.pack(side=LEFT)
16635 CHB_CPosEntry.delete(0,
"end")
16636 CHB_CPosEntry.insert(0,2.5)
16637 CHB_Cofflab = Button(frameC, text=
"CB-C Pos", style=
"Rtrace7.TButton", command=SetMuxCPoss)
16638 CHB_Cofflab.pack(side=LEFT)
16640 frameD = Frame(frameM)
16641 frameD.pack(side=TOP)
16642 cbd = Checkbutton(frameD, text=
'CB-D', variable=Show_CBD, command=UpdateTimeTrace)
16643 cbd.pack(side=LEFT, anchor=W)
16644 CHB_Dsb = Spinbox(frameD, width=4, values=CHvpdiv, command=UpdateTimeTrace)
16645 CHB_Dsb.bind(
'<MouseWheel>', onSpinBoxScroll)
16646 CHB_Dsb.pack(side=LEFT)
16647 CHB_Dsb.delete(0,
"end")
16648 CHB_Dsb.insert(0,0.5)
16649 CHB_Dlab = Button(frameD, text=
"CB-D V/Div", style=
"Rtrace4.TButton", command=SetScaleMuxD)
16650 CHB_Dlab.pack(side=LEFT)
16651 CHB_DPosEntry = Entry(frameD, width=5)
16652 CHB_DPosEntry.bind(
'<Return>', onTextKey)
16653 CHB_DPosEntry.bind(
'<MouseWheel>', onTextScroll)
16654 CHB_DPosEntry.bind(
"<Button-4>", onTextScroll)
16655 CHB_DPosEntry.bind(
"<Button-5>", onTextScroll)
16656 CHB_DPosEntry.bind(
'<Key>', onTextKey)
16657 CHB_DPosEntry.pack(side=LEFT)
16658 CHB_DPosEntry.delete(0,
"end")
16659 CHB_DPosEntry.insert(0,2.5)
16660 CHB_Dofflab = Button(frameD, text=
"CB-D Pos", style=
"Rtrace4.TButton", command=SetMuxDPoss)
16661 CHB_Dofflab.pack(side=LEFT)
16662 frameE = Frame(frameM)
16663 frameE.pack(side=TOP)
16665 MuxSync = IntVar(0)
16666 muxenab = Checkbutton(frameE, text=
"Mux-Enb", variable=MuxEnb)
16667 muxenab.pack(side=LEFT)
16668 SyncButton = Checkbutton(frameE, compound=TOP, image=hipulseimg, variable=MuxSync, command=SyncImage)
16669 SyncButton.pack(side=LEFT)
16670 dismissbutton = Button(frameE, text=
"Dismiss", style=
"W8.TButton", command=DestroyMuxScreen)
16671 dismissbutton.pack(side=LEFT)
16672 frameF = Frame(frameM)
16673 frameF.pack(side=TOP)
16674 dmx = Checkbutton(frameF, text=
'Dual Mux Split I/O mode', variable=DualMuxMode, command=SetDualMuxMode)
16675 dmx.pack(side=LEFT)
16677 CHBlab.config(style=
"SGray.TButton")
16678 CHBofflab.config(style=
"SGray.TButton")
16681 global AWGAIOMode, AWGBIOMode, ShowC1_V, DualMuxMode, CHAlab, CHAofflab
16682 global CHB_Clab, CHB_Dlab, CHB_Cofflab, CHB_Dofflab
16684 if DualMuxMode.get() == 1:
16688 CHB_Clab.config(text=
"CA-C V/Div")
16689 CHB_Dlab.config(text=
"CA-D V/Div")
16690 CHB_Cofflab.config(text=
"CA-C Pos")
16691 CHB_Dofflab.config(text=
"CA-D Pos")
16694 CHAlab.config(style=
"SGray.TButton")
16695 CHAofflab.config(style=
"SGray.TButton")
16698 CHB_Clab.config(text=
"CB-C V/Div")
16699 CHB_Dlab.config(text=
"CB-D V/Div")
16700 CHB_Cofflab.config(text=
"CB-C Pos")
16701 CHB_Dofflab.config(text=
"CB-D Pos")
16703 CHAlab.config(style=
"Rtrace1.TButton")
16704 CHAofflab.config(style=
"Rtrace1.TButton")
16707 global MuxSync, hipulseimg, lowpulseimg, SyncButton
16709 if MuxSync.get() == 0:
16710 SyncButton.config(image=hipulseimg)
16712 SyncButton.config(image=lowpulseimg)
16715 global muxwindow, awgsync, MuxScreenStatus, CHAlab, CHAofflab, CHBlab, CHBofflab
16717 MuxScreenStatus.set(0)
16718 awgsync.config(state=NORMAL)
16720 CHBlab.config(style=
"Rtrace2.TButton")
16721 CHBofflab.config(style=
"Rtrace2.TButton")
16722 CHAlab.config(style=
"Rtrace1.TButton")
16723 CHAofflab.config(style=
"Rtrace1.TButton")
16724 muxwindow.destroy()
16727 global Bodeca, GRWBP, XOLBP, GRHBP, Y0TBP, CANVASwidthBP, CANVASheightBP, FontSize
16729 CANVASwidthBP = event.width - 4
16730 CANVASheightBP = event.height - 4
16731 GRWBP = CANVASwidthBP - (2 * X0LBP)
16732 GRHBP = CANVASheightBP - int(10 * FontSize)
16736 global FStepSync, DevOne
16738 if FStepSync.get() == 0:
16739 Tval = devx.ctrl_transfer( 0xc0, 0x91, 0, 0, 0, 1, 100)
16740 elif FStepSync.get() == 1:
16741 devx.ctrl_transfer( 0x40, 0x50, 0, 0, 0, 0, 100)
16742 elif FStepSync.get() == 2:
16743 devx.ctrl_transfer( 0x40, 0x51, 0, 0, 0, 0, 100)
16746 global FSweepSync, DevOne
16748 if FSweepSync.get() == 0:
16749 Tval = devx.ctrl_transfer( 0xc0, 0x91, 1, 0, 0, 1, 100)
16750 elif FSweepSync.get() == 1:
16751 devx.ctrl_transfer( 0x40, 0x50, 1, 0, 0, 0, 100)
16752 elif FSweepSync.get() == 2:
16753 devx.ctrl_transfer( 0x40, 0x51, 1, 0, 0, 0, 100)
16756 global BDSweepFile, FileSweepFreq, FileSweepAmpl
16758 if BDSweepFile.get() > 0:
16760 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent = bodewindow)
16762 CSVFile = open(filename)
16763 csv_f = csv.reader(CSVFile)
16768 FileSweepFreq.append(float(row[0]))
16769 FileSweepAmpl.append(float(row[1]))
16771 print(
'skipping non-numeric row')
16772 FileSweepFreq = numpy.array(FileSweepFreq)
16773 FileSweepAmpl = numpy.array(FileSweepAmpl)
16774 MaxAmpl = numpy.amax(FileSweepAmpl)
16776 s = askstring(
"Normalize Max Amplitude",
"Max Amplitude = " + str(MaxAmpl) +
"\n\n Enter New Max value:\n in dB", parent = bodewindow)
16785 NormAmpl = MaxAmpl - v
16788 FileSweepAmpl = FileSweepAmpl - NormAmpl
16790 StopBodeEntry.delete(0,
"end")
16791 StopBodeEntry.insert(0,FileSweepFreq[len(FileSweepFreq)-1])
16792 StartBodeEntry.delete(0,
"end")
16793 StartBodeEntry.insert(0,FileSweepFreq[0])
16794 SweepStepBodeEntry.delete(0,
"end")
16795 SweepStepBodeEntry.insert(0,len(FileSweepFreq))
16797 showwarning(
"WARNING",
"No such file found or wrong format!", parent = bodewindow)
16801 global logo, SmoothCurvesBP, CutDC, bodewindow, SWRev
16802 global CANVASwidthBP, CANVASheightBP, FFTwindow, CutDC, AWGAMode, AWGAShape, AWGBMode
16803 global ShowCA_VdB, ShowCA_P, ShowCB_VdB, ShowCB_P, ShowMarkerBP, BodeDisp, RelPhaseCenter
16804 global ShowCA_RdB, ShowCA_RP, ShowCB_RdB, ShowCB_RP, ShowMathBP, ShowRMathBP, PhCenBodeEntry
16805 global BPSweepMode, BPSweepCont, Bodeca, BodeScreenStatus, RevDate, SweepStepBodeEntry
16806 global HScaleBP, StopBodeEntry, StartBodeEntry, ShowBPCur, ShowBdBCur, BPCursor, BdBCursor
16807 global GRWBP, GRHBP, X0LBP, FStepSync, FSweepSync, BDSweepFile, MinigenScreenStatus
16808 global Show_Rseries, Show_Xseries, Show_Magnitude, Show_Angle, ImpedanceCenter, ImCenBodeEntry
16809 global Show_RseriesRef, Show_XseriesRef, Show_MagnitudeRef, Show_AngleRef
16811 if BodeScreenStatus.get() == 0:
16812 BodeScreenStatus.set(1)
16815 CANVASwidthBP = GRWBP + 2 * X0LBP
16816 CANVASheightBP = GRHBP + 80
16821 bodewindow = Toplevel()
16822 bodewindow.title(
"Bode Plotter " + SWRev + RevDate)
16823 bodewindow.protocol(
"WM_DELETE_WINDOW", DestroyBodeScreen)
16824 frame2bp = Frame(bodewindow, borderwidth=5, relief=RIDGE)
16825 frame2bp.pack(side=RIGHT, expand=NO, fill=BOTH)
16827 frame2b = Frame(bodewindow, borderwidth=5, relief=RIDGE)
16828 frame2b.pack(side=TOP, expand=YES, fill=BOTH)
16830 Bodeca = Canvas(frame2b, width=CANVASwidthBP, height=CANVASheightBP, background=COLORcanvas, cursor=
'cross')
16831 Bodeca.bind(
'<Configure>', BodeCaresize)
16832 Bodeca.bind(
'<1>', onCanvasBodeLeftClick)
16833 Bodeca.bind(
'<3>', onCanvasBodeRightClick)
16834 Bodeca.bind(
"<Up>", onCanvasUpArrow)
16835 Bodeca.bind(
"<Down>", onCanvasDownArrow)
16836 Bodeca.bind(
"<Left>", onCanvasLeftArrow)
16837 Bodeca.bind(
"<Right>", onCanvasRightArrow)
16838 Bodeca.bind(
"<space>", onCanvasSpaceBar)
16839 Bodeca.bind(
"1", onCanvasBdOne)
16840 Bodeca.bind(
"2", onCanvasBdTwo)
16841 Bodeca.bind(
"3", onCanvasBdThree)
16842 Bodeca.bind(
"4", onCanvasBdFour)
16843 Bodeca.bind(
"5", onCanvasBdFive)
16844 Bodeca.bind(
"6", onCanvasBdSix)
16845 Bodeca.bind(
"7", onCanvasBdSeven)
16846 Bodeca.bind(
"8", onCanvasBdEight)
16847 Bodeca.bind(
"9", onCanvasBdNine)
16848 Bodeca.bind(
"0", onCanvasBdZero)
16849 Bodeca.bind(
"f", onCanvasShowBPcur)
16850 Bodeca.bind(
"d", onCanvasShowBdBcur)
16851 Bodeca.bind(
"h", onCanvasShowPdBcur)
16852 Bodeca.bind(
"s", onCanvasBdSnap)
16853 Bodeca.pack(side=TOP, expand=YES, fill=BOTH)
16856 dropmenu = Frame( frame2bp )
16857 dropmenu.pack(side=TOP)
16859 BodeFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
16860 BodeFilemenu.menu = Menu(BodeFilemenu, tearoff = 0 )
16861 BodeFilemenu[
"menu"] = BodeFilemenu.menu
16862 BodeFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigBP)
16863 BodeFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigBP)
16864 BodeFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenBP)
16865 BodeFilemenu.menu.add_command(label=
"Save Data", command=BCSVfile)
16866 BodeFilemenu.pack(side=LEFT, anchor=W)
16868 BodeOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
16869 BodeOptionmenu.menu = Menu(BodeOptionmenu, tearoff = 0 )
16870 BodeOptionmenu[
"menu"] = BodeOptionmenu.menu
16871 BodeOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
16872 BodeOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesBP)
16873 BodeOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
16874 BodeOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceBP)
16875 BodeOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
16876 BodeOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
16877 BodeOptionmenu.menu.add_command(label=
"-Step Sync Pulse-", command=donothing)
16878 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FStepSync, value=0, command=BStepSync)
16879 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FStepSync, value=1, command=BStepSync)
16880 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FStepSync, value=2, command=BStepSync)
16881 BodeOptionmenu.menu.add_command(label=
"-Sweep Sync Pulse-", command=donothing)
16882 BodeOptionmenu.menu.add_radiobutton(label=
'None', variable=FSweepSync, value=0, command=BSweepSync)
16883 BodeOptionmenu.menu.add_radiobutton(label=
'Rising', variable=FSweepSync, value=1, command=BSweepSync)
16884 BodeOptionmenu.menu.add_radiobutton(label=
'Falling', variable=FSweepSync, value=2, command=BSweepSync)
16885 BodeOptionmenu.pack(side=LEFT, anchor=W)
16887 RUNframe = Frame( frame2bp )
16888 RUNframe.pack(side=TOP)
16889 rbode = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartBP)
16890 rbode.pack(side=LEFT)
16891 sbode = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopBP)
16892 sbode.pack(side=LEFT)
16894 BodeFFTwindmenu = Menubutton(frame2bp, text=
"FFTwindow", style=
"W11.TButton")
16895 BodeFFTwindmenu.menu = Menu(BodeFFTwindmenu, tearoff = 0 )
16896 BodeFFTwindmenu[
"menu"] = BodeFFTwindmenu.menu
16897 BodeFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
16898 BodeFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
16899 BodeFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
16900 BodeFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
16901 BodeFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
16902 BodeFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
16903 BodeFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
16904 BodeFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
16905 BodeFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
16906 BodeFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
16907 BodeFFTwindmenu.pack(side=TOP)
16909 tracemenu = Frame( frame2bp )
16910 tracemenu.pack(side=TOP)
16913 BodeShowmenu = Menubutton(tracemenu, text=
"Curves", style=
"W7.TButton")
16914 BodeShowmenu.menu = Menu(BodeShowmenu, tearoff = 0 )
16915 BodeShowmenu[
"menu"] = BodeShowmenu.menu
16916 BodeShowmenu.menu.add_command(label=
"-Show-", command=donothing)
16917 BodeShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllBP)
16918 BodeShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneBP)
16919 BodeShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowCA_VdB, command=UpdateBodeAll)
16920 BodeShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowCB_VdB, command=UpdateBodeAll)
16921 BodeShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowCA_P, command=UpdateBodeAll)
16922 BodeShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowCB_P, command=UpdateBodeAll)
16923 BodeShowmenu.menu.add_command(label=
"-Math-", command=donothing)
16924 BodeShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathBP, value=0, command=UpdateBodeAll)
16925 BodeShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathBP, value=1, command=UpdateBodeAll)
16926 BodeShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathBP, value=2, command=UpdateBodeAll)
16927 BodeShowmenu.menu.add_command(label=
"-Impedance-", command=donothing)
16928 BodeShowmenu.menu.add_checkbutton(label=
'Series R', variable=Show_Rseries, command=UpdateBodeAll)
16929 BodeShowmenu.menu.add_checkbutton(label=
'Series X', variable=Show_Xseries, command=UpdateBodeAll)
16930 BodeShowmenu.menu.add_checkbutton(label=
'Series Mag', variable= Show_Magnitude, command=UpdateBodeAll)
16931 BodeShowmenu.menu.add_checkbutton(label=
'Series Ang', variable=Show_Angle, command=UpdateBodeAll)
16932 BodeShowmenu.menu.add_separator()
16933 BodeShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowCA_RdB, command=UpdateBodeAll)
16934 BodeShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowCB_RdB, command=UpdateBodeAll)
16935 BodeShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowCA_RP, command=UpdateBodeAll)
16936 BodeShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowCB_RP, command=UpdateBodeAll)
16937 BodeShowmenu.menu.add_checkbutton(label=
'Math', variable=ShowRMathBP, command=UpdateBodeAll)
16938 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series R', variable=Show_RseriesRef, command=UpdateBodeAll)
16939 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series X', variable=Show_XseriesRef, command=UpdateBodeAll)
16940 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Mag', variable=Show_MagnitudeRef, command=UpdateBodeAll)
16941 BodeShowmenu.menu.add_checkbutton(label=
'Ref Series Ang', variable=Show_AngleRef, command=UpdateBodeAll)
16942 BodeShowmenu.pack(side=LEFT, anchor=W)
16944 BodeMarkmenu = Menubutton(tracemenu, text=
"Cursors", style=
"W7.TButton")
16945 BodeMarkmenu.menu = Menu(BodeMarkmenu, tearoff = 0 )
16946 BodeMarkmenu[
"menu"] = BodeMarkmenu.menu
16947 BodeMarkmenu.menu.add_command(label=
"-Cursors&Markers-", command=donothing)
16948 BodeMarkmenu.menu.add_checkbutton(label=
'Marker [5]', variable=ShowMarkerBP, command=UpdateBodeAll)
16949 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor', variable=ShowBPCur)
16950 BodeMarkmenu.menu.add_checkbutton(label=
'dB Cursor', variable=ShowBdBCur)
16951 BodeMarkmenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowBdBCur, value=0)
16952 BodeMarkmenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowBdBCur, value=1)
16953 BodeMarkmenu.menu.add_radiobutton(label=
'Phase Cursor [h]', variable=ShowBdBCur, value=2)
16954 BodeMarkmenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowBPCur)
16955 BodeMarkmenu.pack(side=LEFT, anchor=W)
16958 HScaleBP = IntVar(0)
16960 HzScale = Frame( frame2bp )
16961 HzScale.pack(side=TOP)
16962 rb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScaleBP, value=0, command=UpdateBodeTrace )
16963 rb1.pack(side=LEFT)
16964 rb2 = Radiobutton(HzScale, text=
"Log F", variable=HScaleBP, value=1, command=UpdateBodeTrace )
16965 rb2.pack(side=LEFT)
16967 DBrange = Frame( frame2bp )
16968 DBrange.pack(side=TOP)
16969 bd3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2BP)
16970 bd3.pack(side=LEFT)
16971 bd4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1BP)
16972 bd4.pack(side=LEFT)
16974 LVBrange = Frame( frame2bp )
16975 LVBrange.pack(side=TOP)
16976 bd5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4BP)
16977 bd5.pack(side=LEFT)
16978 bd6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3BP)
16979 bd6.pack(side=LEFT)
16981 LVSrange = Frame( frame2bp )
16982 LVSrange.pack(side=TOP)
16983 bd7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2BP)
16984 bd7.pack(side=LEFT)
16985 bd8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1BP)
16986 bd8.pack(side=LEFT)
16988 PhaseCenter = Frame( frame2bp )
16989 PhaseCenter.pack(side=TOP)
16990 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
16991 PhCenlab.pack(side=LEFT)
16992 PhCenBodeEntry = Entry(PhaseCenter, width=5)
16993 PhCenBodeEntry.bind(
'<Return>', onTextKey)
16994 PhCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
16995 PhCenBodeEntry.bind(
"<Button-4>", onTextScroll)
16996 PhCenBodeEntry.bind(
"<Button-5>", onTextScroll)
16997 PhCenBodeEntry.bind(
'<Key>', onTextKey)
16998 PhCenBodeEntry.pack(side=LEFT)
16999 PhCenBodeEntry.delete(0,
"end")
17000 PhCenBodeEntry.insert(0,RelPhaseCenter.get())
17002 ImpedCenter = Frame( frame2bp )
17003 ImpedCenter.pack(side=TOP)
17004 ImCenlab = Label(ImpedCenter, text=
"Center Imped on")
17005 ImCenlab.pack(side=LEFT)
17006 ImCenBodeEntry = Entry(ImpedCenter, width=5)
17007 ImCenBodeEntry.bind(
'<Return>', onTextKey)
17008 ImCenBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17009 ImCenBodeEntry.bind(
"<Button-4>", onTextScroll)
17010 ImCenBodeEntry.bind(
"<Button-5>", onTextScroll)
17011 ImCenBodeEntry.bind(
'<Key>', onTextKey)
17012 ImCenBodeEntry.pack(side=LEFT)
17013 ImCenBodeEntry.delete(0,
"end")
17014 ImCenBodeEntry.insert(0,ImpedanceCenter.get())
17016 FSweepmenu = Label(frame2bp, text=
"-Sweep Gen-", style=
"A10B.TLabel")
17017 FSweepmenu.pack(side=TOP)
17019 Frange1 = Frame( frame2bp )
17020 Frange1.pack(side=TOP)
17021 startfreqlab = Label(Frange1, text=
"Startfreq")
17022 startfreqlab.pack(side=LEFT)
17023 StartBodeEntry = Entry(Frange1, width=5)
17024 StartBodeEntry.bind(
'<Return>', onTextKey)
17025 StartBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17026 StartBodeEntry.bind(
"<Button-4>", onTextScroll)
17027 StartBodeEntry.bind(
"<Button-5>", onTextScroll)
17028 StartBodeEntry.bind(
'<Key>', onTextKey)
17029 StartBodeEntry.pack(side=LEFT)
17030 StartBodeEntry.delete(0,
"end")
17031 StartBodeEntry.insert(0,10)
17033 Frange2 = Frame( frame2bp )
17034 Frange2.pack(side=TOP)
17035 stopfreqlab = Label(Frange2, text=
"Stopfreq")
17036 stopfreqlab.pack(side=LEFT)
17037 StopBodeEntry = Entry(Frange2, width=5)
17038 StopBodeEntry.bind(
'<Return>', onTextKey)
17039 StopBodeEntry.bind(
'<MouseWheel>', onStopBodeScroll)
17040 StopBodeEntry.bind(
"<Button-4>", onTextScroll)
17041 StopBodeEntry.bind(
"<Button-5>", onTextScroll)
17042 StopBodeEntry.bind(
'<Key>', onTextKey)
17043 StopBodeEntry.pack(side=LEFT)
17044 StopBodeEntry.delete(0,
"end")
17045 StopBodeEntry.insert(0,10000)
17047 sgrb1 = Radiobutton(frame2bp, text=
'None', variable=FSweepMode, value=0)
17048 sgrb1.pack(side=TOP)
17049 Frange4 = Frame( frame2bp )
17050 Frange4.pack(side=TOP)
17051 sgrb2 = Radiobutton(Frange4, text=
'CH-A', variable=FSweepMode, value=1)
17052 sgrb2.pack(side=LEFT)
17053 sgrb3 = Radiobutton(Frange4, text=
'CH-B', variable=FSweepMode, value=2)
17054 sgrb3.pack(side=LEFT)
17055 if MinigenScreenStatus.get() > 0:
17056 sgrb1 = Radiobutton(frame2bp, text=
'MinGen', variable=FSweepMode, value=3)
17057 sgrb1.pack(side=TOP)
17058 ffcb = Checkbutton(frame2bp, text=
'Sweep From File', variable=BDSweepFile, command=BDSweepFromFile)
17059 ffcb.pack(side=TOP)
17060 Frange3 = Frame( frame2bp )
17061 Frange3.pack(side=TOP)
17062 sweepsteplab = Label(Frange3, text=
"Sweep Steps")
17063 sweepsteplab.pack(side=LEFT)
17064 SweepStepBodeEntry = Entry(Frange3, width=5)
17065 SweepStepBodeEntry.bind(
'<Return>', onTextKey)
17066 SweepStepBodeEntry.bind(
'<MouseWheel>', onTextScroll)
17067 SweepStepBodeEntry.bind(
"<Button-4>", onTextScroll)
17068 SweepStepBodeEntry.bind(
"<Button-5>", onTextScroll)
17069 SweepStepBodeEntry.bind(
'<Key>', onTextKey)
17070 SweepStepBodeEntry.pack(side=LEFT)
17071 SweepStepBodeEntry.delete(0,
"end")
17072 SweepStepBodeEntry.insert(0,100)
17074 sgrb5 = Radiobutton(frame2bp, text=
'Single', variable=FSweepCont, value=0)
17075 sgrb5.pack(side=TOP)
17076 sgrb6 = Radiobutton(frame2bp, text=
'Continuous', variable=FSweepCont, value=1)
17077 sgrb6.pack(side=TOP)
17078 Plotsframe = Frame( frame2bp )
17079 Plotsframe.pack(side=TOP)
17080 nyquistplotbutton = Button(Plotsframe, text=
"Polar Plot", style=
"W9.TButton", command=MakeNyquistPlot)
17081 nyquistplotbutton.pack(side=LEFT)
17082 nicholsplotbutton = Button(Plotsframe, text=
"Rect Plot", style=
"W8.TButton", command=MakeNicPlot)
17083 nicholsplotbutton.pack(side=LEFT)
17084 bodismiss1button = Button(frame2bp, text=
"Dismiss", style=
"W8.TButton", command=DestroyBodeScreen)
17085 bodismiss1button.pack(side=TOP)
17087 ADI2 = Label(frame2bp, image=logo, anchor=
"sw", compound=
"top")
17088 ADI2.pack(side=TOP)
17089 if ShowBallonHelp > 0:
17094 bd5_tip =
CreateToolTip(bd5,
'Increase Ref Level by 10 dB')
17095 bd6_tip =
CreateToolTip(bd6,
'Decrease Ref Level by 10 dB')
17098 bodismiss1button_tip =
CreateToolTip(bodismiss1button,
'Dismiss Bode Plot window')
17101 global bodewindow, BodeScreenStatus, ca, FSweepMode
17103 BodeScreenStatus.set(0)
17107 bodewindow.destroy()
17108 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
17111 global Freqca, GRWF, XOLF, GRHF, Y0TF, CANVASwidthF, CANVASheightF, FontSize
17113 CANVASwidthF = event.width - 4
17114 CANVASheightF = event.height - 4
17115 GRWF = CANVASwidthF - (2 * X0LF)
17116 GRHF = CANVASheightF - int(10 * FontSize)
17121 global logo, SmoothCurvesSA, CutDC, SingleShotSA, FFTwindow, freqwindow, SmoothCurvesSA
17122 global ShowC1_VdB, ShowC1_P, ShowC2_VdB, ShowC2_P, ShowMarker, FreqDisp
17123 global ShowRA_VdB, ShowRA_P, ShowRB_VdB, ShowRB_P, ShowMathSA, SWRev, SingleShotSA
17124 global ShowRMath, FSweepMode, FSweepCont, Freqca, SpectrumScreenStatus, RevDate
17125 global HScale, StopFreqEntry, StartFreqEntry, ShowFCur, ShowdBCur, FCursor, dBCursor
17126 global CANVASwidthF, GRWF, X0LF, CANVASheightF, GRHF, FontSize, PhCenFreqEntry, RelPhaseCenter
17128 if SpectrumScreenStatus.get() == 0:
17129 SpectrumScreenStatus.set(1)
17132 CANVASwidthF = GRWF + 2 * X0LF
17133 CANVASheightF = GRHF + int(10 * FontSize)
17134 freqwindow = Toplevel()
17135 freqwindow.title(
"Spectrum Analyzer " + SWRev + RevDate)
17136 freqwindow.protocol(
"WM_DELETE_WINDOW", DestroySpectrumScreen)
17137 frame2fr = Frame(freqwindow, borderwidth=5, relief=RIDGE)
17138 frame2fr.pack(side=RIGHT, expand=NO, fill=BOTH)
17140 frame2f = Frame(freqwindow, borderwidth=5, relief=RIDGE)
17141 frame2f.pack(side=TOP, expand=YES, fill=BOTH)
17143 Freqca = Canvas(frame2f, width=CANVASwidthF, height=CANVASheightF, background=COLORcanvas, cursor=
'cross')
17144 Freqca.bind(
'<Configure>', FreqCaresize)
17145 Freqca.bind(
'<1>', onCanvasFreqLeftClick)
17146 Freqca.bind(
'<3>', onCanvasFreqRightClick)
17147 Freqca.bind(
"<Up>", onCanvasUpArrow)
17148 Freqca.bind(
"<Down>", onCanvasDownArrow)
17149 Freqca.bind(
"<Left>", onCanvasLeftArrow)
17150 Freqca.bind(
"<Right>", onCanvasRightArrow)
17151 Freqca.bind(
"<space>", onCanvasSpaceBar)
17152 Freqca.bind(
"1", onCanvasSAOne)
17153 Freqca.bind(
"2", onCanvasSATwo)
17154 Freqca.bind(
"3", onCanvasSAThree)
17155 Freqca.bind(
"4", onCanvasSAFour)
17156 Freqca.bind(
"5", onCanvasSAFive)
17157 Freqca.bind(
"6", onCanvasSASix)
17158 Freqca.bind(
"7", onCanvasSASeven)
17159 Freqca.bind(
"8", onCanvasSAEight)
17160 Freqca.bind(
"9", onCanvasSANine)
17161 Freqca.bind(
"0", onCanvasSAZero)
17162 Freqca.bind(
"a", onCanvasSAAverage)
17163 Freqca.bind(
"n", onCanvasSANormal)
17164 Freqca.bind(
"p", onCanvasSAPeak)
17165 Freqca.bind(
"r", onCanvasSAReset)
17166 Freqca.bind(
"f", onCanvasShowFcur)
17167 Freqca.bind(
"d", onCanvasShowdBcur)
17168 Freqca.bind(
"h", onCanvasShowPcur)
17169 Freqca.bind(
"s", onCanvasSASnap)
17170 Freqca.pack(side=TOP, expand=YES, fill=BOTH)
17172 dropmenu = Frame( frame2fr )
17173 dropmenu.pack(side=TOP)
17175 SAFilemenu = Menubutton(dropmenu, text=
"File", style=
"W5.TButton")
17176 SAFilemenu.menu = Menu(SAFilemenu, tearoff = 0 )
17177 SAFilemenu[
"menu"] = SAFilemenu.menu
17178 SAFilemenu.menu.add_command(label=
"Save Config", command=BSaveConfigSA)
17179 SAFilemenu.menu.add_command(label=
"Load Config", command=BLoadConfigSA)
17180 SAFilemenu.menu.add_command(label=
"Save Screen", command=BSaveScreenSA)
17181 SAFilemenu.menu.add_command(label=
"Save Data", command=STOREcsvfile)
17182 SAFilemenu.pack(side=LEFT, anchor=W)
17184 SAOptionmenu = Menubutton(dropmenu, text=
"Options", style=
"W8.TButton")
17185 SAOptionmenu.menu = Menu(SAOptionmenu, tearoff = 0 )
17186 SAOptionmenu[
"menu"] = SAOptionmenu.menu
17187 SAOptionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
17188 SAOptionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
17189 SAOptionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurvesSA)
17190 SAOptionmenu.menu.add_checkbutton(label=
'Cut-DC', variable=CutDC)
17191 SAOptionmenu.menu.add_command(label=
"Store trace [s]", command=BSTOREtraceSA)
17192 SAOptionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
17193 SAOptionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
17194 SAOptionmenu.pack(side=LEFT, anchor=W)
17196 RUNframe = Frame( frame2fr )
17197 RUNframe.pack(side=TOP)
17198 rb = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStartSA)
17200 sb = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStopSA)
17203 Modeframe = Frame( frame2fr )
17204 Modeframe.pack(side=TOP)
17205 Modemenu = Menubutton(Modeframe, text=
"Mode", style=
"W5.TButton")
17206 Modemenu.menu = Menu(Modemenu, tearoff = 0 )
17207 Modemenu[
"menu"] = Modemenu.menu
17208 Modemenu.menu.add_command(label=
"Normal mode [n]", command=BNormalmode)
17209 Modemenu.menu.add_command(label=
"Peak hold [p]", command=BPeakholdmode)
17210 Modemenu.menu.add_command(label=
"Average [a]", command=BAveragemode)
17211 Modemenu.menu.add_command(label=
"Reset Average [r]", command=BResetFreqAvg)
17212 Modemenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShotSA)
17213 Modemenu.pack(side=LEFT)
17215 SAFFTwindmenu = Menubutton(Modeframe, text=
"FFTwindow", style=
"W11.TButton")
17216 SAFFTwindmenu.menu = Menu(SAFFTwindmenu, tearoff = 0 )
17217 SAFFTwindmenu[
"menu"] = SAFFTwindmenu.menu
17218 SAFFTwindmenu.menu.add_radiobutton(label=
'Rectangular window (B=1)', variable=FFTwindow, value=0)
17219 SAFFTwindmenu.menu.add_radiobutton(label=
'Cosine window (B=1.24)', variable=FFTwindow, value=1)
17220 SAFFTwindmenu.menu.add_radiobutton(label=
'Triangular window (B=1.33)', variable=FFTwindow, value=2)
17221 SAFFTwindmenu.menu.add_radiobutton(label=
'Hann window (B=1.5)', variable=FFTwindow, value=3)
17222 SAFFTwindmenu.menu.add_radiobutton(label=
'Blackman window (B=1.73)', variable=FFTwindow, value=4)
17223 SAFFTwindmenu.menu.add_radiobutton(label=
'Nuttall window (B=2.02)', variable=FFTwindow, value=5)
17224 SAFFTwindmenu.menu.add_radiobutton(label=
'Flat top window (B=3.77)', variable=FFTwindow, value=6)
17225 SAFFTwindmenu.menu.add_radiobutton(label=
'User Defined window', variable=FFTwindow, value=7)
17226 SAFFTwindmenu.menu.add_command(label=
"Enter User function", command=BUserFFTwindow)
17227 SAFFTwindmenu.menu.add_radiobutton(label=
'FFT Window from file', variable=FFTwindow, value=8, command=BFileFFTwindow)
17228 SAFFTwindmenu.pack(side=LEFT)
17230 SamplesMenu = Frame( frame2fr )
17231 SamplesMenu.pack(side=TOP)
17232 bless = Button(SamplesMenu, text=
"-Samples", style=
"W8.TButton", command=Bsamples1)
17233 bless.pack(side=LEFT)
17234 bmore = Button(SamplesMenu, text=
"+Samples", style=
"W8.TButton", command=Bsamples2)
17235 bmore.pack(side=LEFT)
17238 ShowC1_VdB = IntVar(0)
17239 ShowC1_P = IntVar(0)
17240 ShowC2_VdB = IntVar(0)
17241 ShowC2_P = IntVar(0)
17242 ShowMarker = IntVar(0)
17243 ShowRA_VdB = IntVar(0)
17244 ShowRA_P = IntVar(0)
17245 ShowRB_VdB = IntVar(0)
17246 ShowRB_P = IntVar(0)
17247 ShowMathSA = IntVar(0)
17248 ShowRMath = IntVar(0)
17250 MarkersMenu = Frame( frame2fr )
17251 MarkersMenu.pack(side=TOP)
17252 SAShowmenu = Menubutton(MarkersMenu, text=
"Curves", style=
"W7.TButton")
17253 SAShowmenu.menu = Menu(SAShowmenu, tearoff = 0 )
17254 SAShowmenu[
"menu"] = SAShowmenu.menu
17255 SAShowmenu.menu.add_command(label=
"-Show-", command=donothing)
17256 SAShowmenu.menu.add_command(label=
"All", command=BShowCurvesAllSA)
17257 SAShowmenu.menu.add_command(label=
"None", command=BShowCurvesNoneSA)
17258 SAShowmenu.menu.add_checkbutton(label=
'CA-dBV [1]', variable=ShowC1_VdB, command=UpdateFreqAll)
17259 SAShowmenu.menu.add_checkbutton(label=
'CB-dBV [2]', variable=ShowC2_VdB, command=UpdateFreqAll)
17260 SAShowmenu.menu.add_checkbutton(label=
'Phase A-B [3]', variable=ShowC1_P, command=UpdateFreqAll)
17261 SAShowmenu.menu.add_checkbutton(label=
'Phase B-A [4]', variable=ShowC2_P, command=UpdateFreqAll)
17262 SAShowmenu.menu.add_command(label=
"-Math-", command=donothing)
17263 SAShowmenu.menu.add_radiobutton(label=
'None [0]', variable=ShowMathSA, value=0, command=UpdateFreqAll)
17264 SAShowmenu.menu.add_radiobutton(label=
'CA-dB - CB-dB [9]', variable=ShowMathSA, value=1, command=UpdateFreqAll)
17265 SAShowmenu.menu.add_radiobutton(label=
'CB-dB - CA-dB [8]', variable=ShowMathSA, value=2, command=UpdateFreqAll)
17266 SAShowmenu.menu.add_command(label=
"-Ref Trace-", command=donothing)
17267 SAShowmenu.menu.add_checkbutton(label=
'RA-dBV [6]', variable=ShowRA_VdB, command=UpdateFreqAll)
17268 SAShowmenu.menu.add_checkbutton(label=
'RB-dBV [7]', variable=ShowRB_VdB, command=UpdateFreqAll)
17269 SAShowmenu.menu.add_checkbutton(label=
'RPhase A-B', variable=ShowRA_P, command=UpdateFreqAll)
17270 SAShowmenu.menu.add_checkbutton(label=
'RPhase B-A', variable=ShowRB_P, command=UpdateFreqAll)
17271 SAShowmenu.menu.add_checkbutton(label=
'Ref Math', variable=ShowRMath, command=UpdateFreqAll)
17272 SAShowmenu.pack(side=LEFT)
17273 SACursormenu = Menubutton(MarkersMenu, text=
"Cursors", style=
"W7.TButton")
17274 SACursormenu.menu = Menu(SACursormenu, tearoff = 0 )
17275 SACursormenu[
"menu"] = SACursormenu.menu
17276 SACursormenu.menu.add_command(label=
"-Marker-", command=donothing)
17277 SACursormenu.menu.add_radiobutton(label=
'Markers Off', variable=ShowMarker, value=0, command=UpdateFreqAll)
17278 SACursormenu.menu.add_radiobutton(label=
'Markers [5]', variable=ShowMarker, value=1, command=UpdateFreqAll)
17279 SACursormenu.menu.add_radiobutton(label=
'Delta Markers', variable=ShowMarker, value=2, command=UpdateFreqAll)
17280 SACursormenu.menu.add_command(label=
"-Cursors-", command=donothing)
17281 SACursormenu.menu.add_radiobutton(label=
'Cursor Off', variable=ShowdBCur, value=0)
17282 SACursormenu.menu.add_radiobutton(label=
'dB Cursor [d]', variable=ShowdBCur, value=1)
17283 SACursormenu.menu.add_radiobutton(label=
'Phase Cursor [h]', variable=ShowdBCur, value=2)
17284 SACursormenu.menu.add_checkbutton(label=
'Freq Cursor [f]', variable=ShowFCur)
17285 SACursormenu.pack(side=LEFT)
17287 Frange1 = Frame( frame2fr )
17288 Frange1.pack(side=TOP)
17289 startfreqlab = Label(Frange1, text=
"Startfreq")
17290 startfreqlab.pack(side=LEFT)
17291 StartFreqEntry = Entry(Frange1, width=5)
17292 StartFreqEntry.bind(
'<Return>', onTextKey)
17293 StartFreqEntry.bind(
'<MouseWheel>', onTextScroll)
17294 StartFreqEntry.bind(
"<Button-4>", onTextScroll)
17295 StartFreqEntry.bind(
"<Button-5>", onTextScroll)
17296 StartFreqEntry.bind(
'<Key>', onTextKey)
17297 StartFreqEntry.pack(side=LEFT)
17298 StartFreqEntry.delete(0,
"end")
17299 StartFreqEntry.insert(0,10)
17301 Frange2 = Frame( frame2fr )
17302 Frange2.pack(side=TOP)
17303 stopfreqlab = Label(Frange2, text=
"Stopfreq")
17304 stopfreqlab.pack(side=LEFT)
17305 StopFreqEntry = Entry(Frange2, width=7)
17306 StopFreqEntry.bind(
'<Return>', onTextKey)
17307 StopFreqEntry.bind(
'<MouseWheel>', onStopfreqScroll)
17308 StopFreqEntry.bind(
"<Button-4>", onStopfreqScroll)
17309 StopFreqEntry.bind(
"<Button-5>", onStopfreqScroll)
17310 StopFreqEntry.bind(
'<Key>', onTextKey)
17311 StopFreqEntry.pack(side=LEFT)
17312 StopFreqEntry.delete(0,
"end")
17313 StopFreqEntry.insert(0,10000)
17316 HzScale = Frame( frame2fr )
17317 HzScale.pack(side=TOP)
17318 rb1 = Radiobutton(HzScale, text=
"Lin F", variable=HScale, value=0, command=UpdateFreqTrace )
17319 rb1.pack(side=LEFT)
17320 rb2 = Radiobutton(HzScale, text=
"Log F", variable=HScale, value=1, command=UpdateFreqTrace )
17321 rb2.pack(side=LEFT)
17323 PhaseCenter = Frame( frame2fr )
17324 PhaseCenter.pack(side=TOP)
17325 PhCenlab = Label(PhaseCenter, text=
"Center Phase on")
17326 PhCenlab.pack(side=LEFT)
17327 PhCenFreqEntry = Entry(PhaseCenter, width=5)
17328 PhCenFreqEntry.bind(
'<Return>', onTextKey)
17329 PhCenFreqEntry.bind(
'<MouseWheel>', onTextScroll)
17330 PhCenFreqEntry.bind(
"<Button-4>", onTextScroll)
17331 PhCenFreqEntry.bind(
"<Button-5>", onTextScroll)
17332 PhCenFreqEntry.bind(
'<Key>', onTextKey)
17333 PhCenFreqEntry.pack(side=LEFT)
17334 PhCenFreqEntry.delete(0,
"end")
17335 PhCenFreqEntry.insert(0,RelPhaseCenter.get())
17337 DBrange = Frame( frame2fr )
17338 DBrange.pack(side=TOP)
17339 b3 = Button(DBrange, text=
"+dB/div", style=
"W8.TButton", command=BDBdiv2)
17341 b4 = Button(DBrange, text=
"-dB/div", style=
"W8.TButton", command=BDBdiv1)
17344 LVBrange = Frame( frame2fr )
17345 LVBrange.pack(side=TOP)
17346 b5 = Button(LVBrange, text=
"LVL+10", style=
"W8.TButton", command=Blevel4)
17348 b6 = Button(LVBrange, text=
"LVL-10", style=
"W8.TButton", command=Blevel3)
17351 LVSrange = Frame( frame2fr )
17352 LVSrange.pack(side=TOP)
17353 b7 = Button(LVSrange, text=
"LVL+1", style=
"W8.TButton", command=Blevel2)
17355 b8 = Button(LVSrange, text=
"LVL-1", style=
"W8.TButton", command=Blevel1)
17358 sadismiss1button = Button(frame2fr, text=
"Dismiss", style=
"W8.TButton", command=DestroySpectrumScreen)
17359 sadismiss1button.pack(side=TOP)
17361 ADI2 = Label(frame2fr, image=logo, anchor=
"sw", compound=
"top")
17362 ADI2.pack(side=TOP)
17363 if ShowBallonHelp > 0:
17374 sadismiss1button_tip =
CreateToolTip(sadismiss1button,
'Dismiss Spectrum Analyzer window')
17377 global freqwindow, SpectrumScreenStatus, ca
17379 SpectrumScreenStatus.set(0)
17382 freqwindow.destroy()
17383 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
17386 global XYca, GRWXY, XOLXY, GRHXY, Y0TXY, CANVASwidthXY, CANVASheightXY, FontSize
17387 global YminXY, YmaxXY, XminXY, XmaxXY
17389 CANVASwidthXY = event.width - 4
17390 CANVASheightXY = event.height - 4
17391 GRWXY = CANVASwidthXY - int(2.25 * FontSize) - X0LXY
17392 GRHXY = CANVASheightXY - int(10 * FontSize)
17394 YmaxXY = Y0TXY + GRHXY
17396 XmaxXY = X0LXY + GRWXY
17401 global logo, CANVASwidthXY, CANVASheightXY, Xsignal, Ysignal, ShowRXY
17402 global XYScreenStatus, MarkerXYScale, XYca, xywindow, RevDate, SWRev, XYDisp
17403 global CHAsbxy, CHBsbxy, CHAxylab, CHBxylab, CHAVPosEntryxy, CHBVPosEntryxy
17404 global CHAIsbxy, CHBIsbxy, CHAIPosEntryxy, CHBIPosEntryxy, ScreenXYrefresh
17405 global YminXY, Y0TXY, YmaxXY, GRHXY, XminXY, X0LXY, XmaxXY, X0LXY, GRWXY, CANVASwidthXY, CANVASheightXY
17407 if XYScreenStatus.get() == 0:
17408 XYScreenStatus.set(1)
17412 YmaxXY = Y0TXY + GRHXY
17414 XmaxXY = X0LXY + GRWXY
17415 CANVASwidthXY = GRWXY + 18 + X0LXY
17416 CANVASheightXY = GRHXY + 80
17417 xywindow = Toplevel()
17418 xywindow.title(
"X-Y Plot " + SWRev + RevDate)
17419 xywindow.protocol(
"WM_DELETE_WINDOW", DestroyXYScreen)
17420 frame2xyr = Frame(xywindow, borderwidth=5, relief=RIDGE)
17421 frame2xyr.pack(side=RIGHT, expand=NO, fill=BOTH)
17423 frame2xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
17424 frame2xy.pack(side=TOP, expand=YES, fill=BOTH)
17426 frame3xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
17427 frame3xy.pack(side=TOP, expand=NO, fill=BOTH)
17429 frame4xy = Frame(xywindow, borderwidth=5, relief=RIDGE)
17430 frame4xy.pack(side=TOP, expand=NO, fill=BOTH)
17432 XYca = Canvas(frame2xy, width=CANVASwidthXY, height=CANVASheightXY, background=COLORcanvas, cursor=
'cross')
17433 XYca.bind(
'<Configure>', XYcaresize)
17434 XYca.bind(
'<1>', onCanvasXYLeftClick)
17435 XYca.bind(
'<3>', onCanvasXYRightClick)
17436 XYca.bind(
"<Motion>",onCanvasMouse_xy)
17437 XYca.bind(
'<MouseWheel>', onCanvasXYScrollClick)
17438 XYca.bind(
"<Button-4>", onCanvasXYScrollClick)
17439 XYca.bind(
"<Button-5>", onCanvasXYScrollClick)
17440 XYca.bind(
"<Up>", onCanvasUpArrow)
17441 XYca.bind(
"<Down>", onCanvasDownArrow)
17442 XYca.bind(
"<Left>", onCanvasLeftArrow)
17443 XYca.bind(
"<Right>", onCanvasRightArrow)
17444 XYca.bind(
"<space>", onCanvasSpaceBar)
17445 XYca.bind(
"a", onCanvasAverage)
17446 XYca.pack(side=TOP, fill=BOTH, expand=YES)
17448 RUNframe = Frame( frame2xyr )
17449 RUNframe.pack(side=TOP)
17450 rbxy = Button(RUNframe, text=
"Run", style=
"Run.TButton", command=BStart)
17451 rbxy.pack(side=LEFT)
17452 sbxy = Button(RUNframe, text=
"Stop", style=
"Stop.TButton", command=BStop)
17453 sbxy.pack(side=LEFT)
17455 mathbt = Button(frame2xyr, text=
"Math", style=
"W5.TButton", command = NewEnterMathControls)
17456 mathbt.pack(side=TOP)
17459 AxisLabX = Label(frame2xyr, text =
"-X Axis-", style=
"A10R1.TLabelframe.Label")
17460 AxisLabX.pack(side=TOP)
17461 chaxmenu = Frame( frame2xyr )
17462 chaxmenu.pack(side=TOP)
17463 rbx2 = Radiobutton(chaxmenu, text=
'CA-V', variable=Xsignal, value=1, command=UpdateXYTrace)
17464 rbx2.pack(side=LEFT, anchor=W)
17465 rbx3 = Radiobutton(chaxmenu, text=
'CA-I', variable=Xsignal, value=2, command=UpdateXYTrace)
17466 rbx3.pack(side=LEFT, anchor=W)
17467 chbxmenu = Frame( frame2xyr )
17468 chbxmenu.pack(side=TOP)
17469 rbx4 = Radiobutton(chbxmenu, text=
'CB-V', variable=Xsignal, value=3, command=UpdateXYTrace)
17470 rbx4.pack(side=LEFT, anchor=W)
17471 rbx5 = Radiobutton(chbxmenu, text=
'CB-I', variable=Xsignal, value=4, command=UpdateXYTrace)
17472 rbx5.pack(side=LEFT, anchor=W)
17473 rbx7 = Radiobutton(frame2xyr, text=
'Histogram CA-V', variable=Xsignal, value=6, command=BHistAsPercent)
17474 rbx7.pack(side=TOP)
17475 rbx8 = Radiobutton(frame2xyr, text=
'Histogram CB-V', variable=Xsignal, value=7, command=BHistAsPercent)
17476 rbx8.pack(side=TOP)
17477 rbx6 = Radiobutton(frame2xyr, text=
'Math', variable=Xsignal, value=5, command=UpdateXYTrace)
17478 rbx6.pack(side=TOP)
17480 AxisLabY = Label(frame2xyr, text =
"-Y Axis-", style=
"A10R2.TLabelframe.Label")
17481 AxisLabY.pack(side=TOP)
17482 chaymenu = Frame( frame2xyr )
17483 chaymenu.pack(side=TOP)
17484 rby2 = Radiobutton(chaymenu, text=
'CA-V', variable=Ysignal, value=1, command=UpdateXYTrace)
17485 rby2.pack(side=LEFT, anchor=W)
17486 rby3 = Radiobutton(chaymenu, text=
'CA-I', variable=Ysignal, value=2, command=UpdateXYTrace)
17487 rby3.pack(side=LEFT, anchor=W)
17488 chbymenu = Frame( frame2xyr )
17489 chbymenu.pack(side=TOP)
17490 rby4 = Radiobutton(chbymenu, text=
'CB-V', variable=Ysignal, value=3, command=UpdateXYTrace)
17491 rby4.pack(side=LEFT, anchor=W)
17492 rby5 = Radiobutton(chbymenu, text=
'CB-I', variable=Ysignal, value=4, command=UpdateXYTrace)
17493 rby5.pack(side=LEFT, anchor=W)
17494 rby6 = Radiobutton(frame2xyr, text=
'Math', variable=Ysignal, value=5, command=UpdateXYTrace)
17495 rby6.pack(side=TOP)
17497 cursormenu = Frame( frame2xyr )
17498 cursormenu.pack(side=TOP)
17499 cb1 = Checkbutton(cursormenu, text=
'X-Cur', variable=ShowXCur)
17500 cb1.pack(side=LEFT, anchor=W)
17501 cb2 = Checkbutton(cursormenu, text=
'Y-Cur', variable=ShowYCur)
17502 cb2.pack(side=LEFT, anchor=W)
17503 cb3 = Checkbutton(frame2xyr, text=
'RX-Y', variable=ShowRXY, command=UpdateXYTrace)
17505 cb4 = Checkbutton(frame2xyr, text=
'Persistance', variable=ScreenXYrefresh, command=UpdateXYTrace)
17508 snapbutton = Button(frame2xyr, style=
"W11.TButton", text=
"SnapShot", command=BSnapShot)
17509 snapbutton.pack(side=TOP)
17510 savebutton = Button(frame2xyr, style=
"W11.TButton", text=
"Save Screen", command=BSaveScreenXY)
17511 savebutton.pack(side=TOP)
17512 dismissxybutton = Button(frame2xyr, style=
"W7.TButton", text=
"Dismiss", command=DestroyXYScreen)
17513 dismissxybutton.pack(side=TOP)
17514 ADI1xy = Label(frame2xyr, image=logo, anchor=
"sw", compound=
"top")
17515 ADI1xy.pack(side=TOP)
17518 MarkerXYScale = IntVar(0)
17519 MarkerXYScale.set(1)
17521 CHAsbxy = Spinbox(frame3xy, width=4, values=CHvpdiv)
17522 CHAsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17523 CHAsbxy.pack(side=LEFT)
17524 CHAsbxy.delete(0,
"end")
17525 CHAsbxy.insert(0,0.5)
17526 CHAxylab = Button(frame3xy, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetXYScaleA)
17527 CHAxylab.pack(side=LEFT)
17529 CHAVPosEntryxy = Entry(frame3xy, width=5)
17530 CHAVPosEntryxy.bind(
'<Return>', onTextKey)
17531 CHAVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17532 CHAVPosEntryxy.bind(
"<Button-4>", onTextScroll)
17533 CHAVPosEntryxy.bind(
"<Button-5>", onTextScroll)
17534 CHAVPosEntryxy.bind(
'<Key>', onTextKey)
17535 CHAVPosEntryxy.pack(side=LEFT)
17536 CHAVPosEntryxy.delete(0,
"end")
17537 CHAVPosEntryxy.insert(0,2.5)
17538 CHAofflabxy = Button(frame3xy, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetXYVAPoss)
17539 CHAofflabxy.pack(side=LEFT)
17541 CHAIsbxy = Spinbox(frame3xy, width=4, values=CHipdiv)
17542 CHAIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17543 CHAIsbxy.pack(side=LEFT)
17544 CHAIsbxy.delete(0,
"end")
17545 CHAIsbxy.insert(0,50.0)
17546 CHAIlabxy = Label(frame3xy, text=
"CA mA/Div", style=
"Strace3.TButton")
17547 CHAIlabxy.pack(side=LEFT)
17549 CHAIPosEntryxy = Entry(frame3xy, width=5)
17550 CHAIPosEntryxy.bind(
'<Return>', onTextKey)
17551 CHAIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17552 CHAIPosEntryxy.bind(
"<Button-4>", onTextScroll)
17553 CHAIPosEntryxy.bind(
"<Button-5>", onTextScroll)
17554 CHAIPosEntryxy.bind(
'<Key>', onTextKey)
17555 CHAIPosEntryxy.pack(side=LEFT)
17556 CHAIPosEntryxy.delete(0,
"end")
17557 CHAIPosEntryxy.insert(0,0.0)
17558 CHAIofflabxy = Button(frame3xy, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetXYIAPoss)
17559 CHAIofflabxy.pack(side=LEFT)
17561 CHBsbxy = Spinbox(frame4xy, width=4, values=CHvpdiv)
17562 CHBsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17563 CHBsbxy.pack(side=LEFT)
17564 CHBsbxy.delete(0,
"end")
17565 CHBsbxy.insert(0,0.5)
17567 CHBxylab = Button(frame4xy, text=
"CB V/Div", style=
"Strace2.TButton", command=SetXYScaleB)
17568 CHBxylab.pack(side=LEFT)
17570 CHBVPosEntryxy = Entry(frame4xy, width=5)
17571 CHBVPosEntryxy.bind(
'<Return>', onTextKey)
17572 CHBVPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17573 CHBVPosEntryxy.bind(
"<Button-4>", onTextScroll)
17574 CHBVPosEntryxy.bind(
"<Button-5>", onTextScroll)
17575 CHBVPosEntryxy.bind(
'<Key>', onTextKey)
17576 CHBVPosEntryxy.pack(side=LEFT)
17577 CHBVPosEntryxy.delete(0,
"end")
17578 CHBVPosEntryxy.insert(0,2.5)
17579 CHBofflabxy = Button(frame4xy, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetXYVBPoss)
17580 CHBofflabxy.pack(side=LEFT)
17582 CHBIsbxy = Spinbox(frame4xy, width=4, values=CHipdiv)
17583 CHBIsbxy.bind(
'<MouseWheel>', onSpinBoxScroll)
17584 CHBIsbxy.pack(side=LEFT)
17585 CHBIsbxy.delete(0,
"end")
17586 CHBIsbxy.insert(0,50.0)
17587 CHBIlabxy = Label(frame4xy, text=
"CB mA/Div", style=
"Strace4.TButton")
17588 CHBIlabxy.pack(side=LEFT)
17590 CHBIPosEntryxy = Entry(frame4xy, width=5)
17591 CHBIPosEntryxy.bind(
'<Return>', onTextKey)
17592 CHBIPosEntryxy.bind(
'<MouseWheel>', onTextScroll)
17593 CHBIPosEntryxy.bind(
"<Button-4>", onTextScroll)
17594 CHBIPosEntryxy.bind(
"<Button-5>", onTextScroll)
17595 CHBIPosEntryxy.bind(
'<Key>', onTextKey)
17596 CHBIPosEntryxy.pack(side=LEFT)
17597 CHBIPosEntryxy.delete(0,
"end")
17598 CHBIPosEntryxy.insert(0,0.0)
17599 CHBIofflabxy = Button(frame4xy, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetXYIBPoss)
17600 CHBIofflabxy.pack(side=LEFT)
17602 if ShowBallonHelp > 0:
17610 snapbutton_tip =
CreateToolTip(snapbutton,
'Take snap shot of current trace')
17611 savebutton_tip =
CreateToolTip(savebutton,
'Save current trace to EPS file')
17612 dismissxybutton_tip =
CreateToolTip(dismissxybutton,
'Diamiss X-Y plot window')
17613 CHAxylab_tip =
CreateToolTip(CHAxylab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
17614 CHBxylab_tip =
CreateToolTip(CHBxylab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
17615 CHAxyofflab_tip =
CreateToolTip(CHAofflabxy,
'Set CHA-V position to DC average of signal')
17616 CHBxyofflab_tip =
CreateToolTip(CHBofflabxy,
'Set CHB-V position to DC average of signal')
17617 CHAIxyofflab_tip =
CreateToolTip(CHAIofflabxy,
'Set CHA-I position to DC average of signal')
17618 CHBIxyofflab_tip =
CreateToolTip(CHBIofflabxy,
'Set CHB-I position to DC average of signal')
17621 global xywindow, XYScreenStatus, ca, XYDisp
17623 XYScreenStatus.set(0)
17627 ca.bind_all(
'<MouseWheel>', onCanvasClickScroll)
17632 global DevID, devx, CHA, CHB, RevDate, OnBoardRes, AD584act, FWRevOne
17633 global discontloop, contloop, session, AWGSync, SWRev
17636 if FWRevOne < 2.06:
17637 showwarning(
"WARNING",
"Out of date Firmware Revision!")
17639 calwindow = Toplevel()
17640 calwindow.title(
"ALM1000 Calibration tool " + SWRev + RevDate)
17642 prlab = Label(calwindow, text=
"Channel Gain / Offset calibration")
17643 prlab.grid(row=0, column=0, columnspan=2, sticky=W)
17644 labelA0 = Label(calwindow, style=
"A12B.TLabel")
17645 labelA0.grid(row=1, column=0, columnspan=2, sticky=W)
17646 labelA0.config(text =
"CA gnd Volts")
17647 labelAMax = Label(calwindow, style=
"A12B.TLabel")
17648 labelAMax.grid(row=2, column=0, columnspan=2, sticky=W)
17649 labelAMax.config(text =
"CA 584 Volts")
17650 labelAMin = Label(calwindow, style=
"A12B.TLabel")
17651 labelAMin.grid(row=3, column=0, columnspan=2, sticky=W)
17652 labelAMin.config(text =
"CA 5V Src I ")
17653 labelB0 = Label(calwindow, style=
"A12B.TLabel")
17654 labelB0.grid(row=4, column=0, columnspan=2, sticky=W)
17655 labelB0.config(text =
"CA gnd Volts")
17656 labelBMax = Label(calwindow, style=
"A12B.TLabel")
17657 labelBMax.grid(row=5, column=0, columnspan=2, sticky=W)
17658 labelBMax.config(text =
"CB 584 Volts")
17659 labelBMin = Label(calwindow, style=
"A12B.TLabel")
17660 labelBMin.grid(row=6, column=0, columnspan=2, sticky=W)
17661 labelBMin.config(text =
"CB 5V Src I ")
17662 labelAB = Label(calwindow, style=
"A12B.TLabel")
17663 labelAB.grid(row=7, column=0, columnspan=2, sticky=W)
17664 labelAB.config(text =
"CA 0V Src I")
17665 labelBA = Label(calwindow, style=
"A12B.TLabel")
17666 labelBA.grid(row=8, column=0, columnspan=2, sticky=W)
17667 labelBA.config(text =
"CA 0V Src I")
17668 labelSIA0 = Label(calwindow, style=
"A12B.TLabel")
17669 labelSIA0.grid(row=9, column=0, columnspan=2, sticky=W)
17670 labelSIA0.config(text =
"CA 2.5 Src 0 I")
17671 labelSIA = Label(calwindow, style=
"A12B.TLabel")
17672 labelSIA.grid(row=10, column=0, columnspan=2, sticky=W)
17673 labelSIA.config(text =
"CA 50 Src 100 ")
17674 labelSIAN = Label(calwindow, style=
"A12B.TLabel")
17675 labelSIAN.grid(row=11, column=0, columnspan=2, sticky=W)
17676 labelSIAN.config(text =
"CA 50 Src -45")
17677 labelSIB0 = Label(calwindow, style=
"A12B.TLabel")
17678 labelSIB0.grid(row=12, column=0, columnspan=2, sticky=W)
17679 labelSIB0.config(text =
"CB 2.5 Src 0 I")
17680 labelSIB = Label(calwindow, style=
"A12B.TLabel")
17681 labelSIB.grid(row=13, column=0, columnspan=2, sticky=W)
17682 labelSIB.config(text =
"CB 50 Src 100 ")
17683 labelSIBN = Label(calwindow, style=
"A12B.TLabel")
17684 labelSIBN.grid(row=14, column=0, columnspan=2, sticky=W)
17685 labelSIBN.config(text =
"CB 50 Src -45")
17687 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
17688 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
17691 if session.continuous:
17692 print(
"ending session")
17695 if askyesno(
"Reset Calibration",
"Do You Need To Reset Default Calibration?", parent=calwindow):
17698 devx.write_calibration(
"calib_default.txt")
17701 filename = askopenfilename(defaultextension =
".txt", filetypes=[(
"Default Cal File",
"*.txt")], parent=calwindow)
17702 devx.write_calibration(filename)
17705 devidstr = DevID[17:31]
17706 filename =
"calib" + devidstr +
".txt"
17707 if os.path.isfile(filename):
17708 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?", parent=calwindow):
17709 devx.write_calibration(filename)
17711 calwindow.destroy()
17714 if askyesno(
"Continue?",
"Continure with self calibration?", parent=calwindow):
17717 calwindow.destroy()
17720 CalFile = open(filename,
"w")
17722 CHA.mode = Mode.HI_Z
17723 CHB.mode = Mode.HI_Z
17724 devx.ctrl_transfer( 0x40, 0x50, 34, 0, 0, 0, 100)
17725 devx.ctrl_transfer( 0x40, 0x50, 39, 0, 0, 0, 100)
17727 ADsignal1 = devx.get_samples(1010)
17730 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
17731 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17732 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
17733 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17734 RequestVRef = askstring(
"External Reference",
"Enter External Reference Voltage", initialvalue=AD584act, parent=root)
17736 AD584act = float(RequestVRef)*1.0
17739 showinfo(
"CONNECT",
"Connect External Voltage to both CHA and CHB inputs.", parent=calwindow)
17742 CHA.mode = Mode.HI_Z
17743 CHB.mode = Mode.HI_Z
17744 ADsignal1 = devx.get_samples(1010)
17745 CHA584Raw = CHB584Raw = 0.0
17747 for index
in range(1000):
17748 CHA584Raw += ADsignal1[index+10][0][0]
17749 CHB584Raw += ADsignal1[index+10][1][0]
17751 CHA584Raw = CHA584Raw / 1000.0
17752 CHB584Raw = CHB584Raw / 1000.0
17753 VString =
"Extern A Volts " +
' {0:.4f} '.format(CHA584Raw)
17754 labelAMax.config(text = VString)
17755 VString =
"Extern B Volts " +
' {0:.4f} '.format(CHB584Raw)
17756 labelBMax.config(text = VString)
17757 Lower = AD584act - 0.3
17758 Upper = AD584act + 0.3
17759 if CHA584Raw < Lower
or CHA584Raw > Upper
or CHB584Raw < Lower
or CHB584Raw > Upper:
17760 if askyesno(
"CONNECT",
"Did not get good data from Ref V check connections!\n Abort(Y) or Try again(N)", parent=calwindow):
17761 CHA.mode = Mode.HI_Z
17762 CHB.mode = Mode.HI_Z
17765 calwindow.destroy()
17770 showinfo(
"DISCONNECT",
"Disconnect everything from CHA and CHB pins.", parent=calwindow)
17771 CHAGndRaw = CHBGndRaw = CHAI0gRaw = CHBI0gRaw = 0.0
17773 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
17774 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
17775 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
17776 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
17777 CHA.mode = Mode.HI_Z
17778 CHB.mode = Mode.HI_Z
17779 ADsignal1 = devx.get_samples(1010)
17781 for index
in range(1000):
17782 CHAGndRaw += ADsignal1[index+10][0][0]
17783 CHBGndRaw += ADsignal1[index+10][1][0]
17784 CHAI0gRaw += ADsignal1[index+10][0][1]
17785 CHBI0gRaw += ADsignal1[index+10][1][1]
17787 CHAGndRaw = CHAGndRaw / 1000.0
17788 CHAI0gRaw = CHAI0gRaw / 1000.0
17789 CHBGndRaw = CHBGndRaw / 1000.0
17790 CHBI0gRaw = CHBI0gRaw / 1000.0
17791 VString =
"CA gnd Volts " +
' {0:.4f} '.format(CHAGndRaw)
17792 labelA0.config(text = VString)
17793 VString =
"CB gnd Volts " +
' {0:.4f} '.format(CHBGndRaw)
17794 labelB0.config(text = VString)
17795 CHA2p5Raw = CHB2p5Raw = CHAI02p5Raw = CHBI02p5Raw = 0.0
17797 CHA.mode = Mode.HI_Z
17798 CHB.mode = Mode.HI_Z
17799 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
17800 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17801 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
17802 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17803 ADsignal1 = devx.get_samples(1010)
17805 for index
in range(1000):
17806 CHA2p5Raw += ADsignal1[index+10][0][0]
17807 CHB2p5Raw += ADsignal1[index+10][1][0]
17808 CHAI02p5Raw += ADsignal1[index+10][0][1]
17809 CHBI02p5Raw += ADsignal1[index+10][1][1]
17811 CHA2p5Raw = CHA2p5Raw / 1000.0
17812 CHAI02p5Raw = CHAI02p5Raw / 1000.0
17813 CHB2p5Raw = CHB2p5Raw / 1000.0
17814 CHBI02p5Raw = CHBI02p5Raw / 1000.0
17816 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
17817 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17818 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
17819 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17820 CHA.mode = Mode.SVMI
17822 CHB.mode = Mode.SVMI
17824 ADsignal1 = devx.get_samples(1010)
17825 CHAF0vRaw = CHBF0vRaw = CHAI0F0Raw = CHBI0F0Raw = 0.0
17827 for index
in range(1000):
17828 CHAF0vRaw += ADsignal1[index+10][0][0]
17829 CHBF0vRaw += ADsignal1[index+10][1][0]
17830 CHAI0F0Raw += ADsignal1[index+10][0][1]
17831 CHBI0F0Raw += ADsignal1[index+10][1][1]
17833 CHAF0vRaw = CHAF0vRaw / 1000.0
17834 CHAI0F0Raw = CHAI0F0Raw / 1000.0
17835 CHBF0vRaw = CHBF0vRaw / 1000.0
17836 CHBI0F0Raw = CHBI0F0Raw / 1000.0
17838 CHA.mode = Mode.SVMI
17840 CHB.mode = Mode.SVMI
17842 ADsignal1 = devx.get_samples(1010)
17843 CHAF25vRaw = CHAI0F25Raw = CHBF25vRaw = CHBI0F25Raw = 0.0
17845 for index
in range(1000):
17846 CHAF25vRaw += ADsignal1[index+10][0][0]
17847 CHBF25vRaw += ADsignal1[index+10][1][0]
17848 CHAI0F25Raw += ADsignal1[index+10][0][1]
17849 CHBI0F25Raw += ADsignal1[index+10][1][1]
17851 CHAF25vRaw = CHAF25vRaw / 1000.0
17852 CHAI0F25Raw = CHAI0F25Raw / 1000.0
17853 CHBF25vRaw = CHBF25vRaw / 1000.0
17854 CHBI0F25Raw = CHBI0F25Raw / 1000.0
17857 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
17858 devx.ctrl_transfer(0x40, 0x50, 33, 0, 0, 0, 100)
17859 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
17860 devx.ctrl_transfer(0x40, 0x50, 38, 0, 0, 0, 100)
17861 CHA.mode = Mode.SVMI
17863 CHB.mode = Mode.SVMI
17865 ADsignal1 = devx.get_samples(1010)
17866 CHASr5vRaw = CHAISr5vRaw = CHBSr5vRaw = CHBISr5vRaw = 0.0
17867 for index
in range(1000):
17868 CHASr5vRaw += ADsignal1[index+10][0][0]
17869 CHBSr5vRaw += ADsignal1[index+10][1][0]
17870 CHAISr5vRaw += ADsignal1[index+10][0][1]
17871 CHBISr5vRaw += ADsignal1[index+10][1][1]
17873 CHASr5vRaw = CHASr5vRaw / 1000.0
17874 CHAISr5vRaw = CHAISr5vRaw / 1000.0
17875 CHBSr5vRaw = CHBSr5vRaw / 1000.0
17876 CHBISr5vRaw = CHBISr5vRaw / 1000.0
17877 VString =
"CA 5V Src I " +
' {0:.4f} '.format(CHAISr5vRaw)
17878 labelAMin.config(text = VString)
17879 VString =
"CB 5V Src I " +
' {0:.4f} '.format(CHBISr5vRaw)
17880 labelBMin.config(text = VString)
17882 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
17883 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17884 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
17885 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17886 CHA.mode = Mode.SVMI
17887 CHA.constant(0.001)
17888 CHB.mode = Mode.SVMI
17889 CHB.constant(0.001)
17890 ADsignal1 = devx.get_samples(1010)
17891 CHASr0vRaw = CHAISr0vRaw = CHBSr0vRaw = CHBISr0vRaw = 0.0
17892 for index
in range(1000):
17893 CHASr0vRaw += ADsignal1[index+10][0][0]
17894 CHBSr0vRaw += ADsignal1[index+10][1][0]
17895 CHAISr0vRaw += ADsignal1[index+10][0][1]
17896 CHBISr0vRaw += ADsignal1[index+10][1][1]
17898 CHASr0vRaw = CHASr0vRaw / 1000.0
17899 CHAISr0vRaw = CHAISr0vRaw / 1000.0
17900 CHBSr0vRaw = CHBSr0vRaw / 1000.0
17901 CHBISr0vRaw = CHBISr0vRaw / 1000.0
17902 VString =
"CA 0V Src I " +
' {0:.4f} '.format(CHAISr0vRaw)
17903 labelAB.config(text = VString)
17904 VString =
"CB 0V Src I " +
' {0:.4f} '.format(CHBISr0vRaw)
17905 labelBA.config(text = VString)
17908 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
17909 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17910 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
17911 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17912 CHA.mode = Mode.SIMV
17914 CHB.mode = Mode.SIMV
17916 ADsignal1 = devx.get_samples(1010)
17917 CHAVSr0iRaw = CHAISr0iRaw = CHBVSr0iRaw = CHBISr0iRaw = 0.0
17918 for index
in range(1000):
17919 CHAVSr0iRaw += ADsignal1[index+10][0][0]
17920 CHBVSr0iRaw += ADsignal1[index+10][1][0]
17921 CHAISr0iRaw += ADsignal1[index+10][0][1]
17922 CHBISr0iRaw += ADsignal1[index+10][1][1]
17924 CHAVSr0iRaw = CHAVSr0iRaw / 1000.0
17925 CHAISr0iRaw = CHAISr0iRaw / 1000.0
17926 CHBVSr0iRaw = CHBVSr0iRaw / 1000.0
17927 CHBISr0iRaw = CHBISr0iRaw / 1000.0
17928 VString =
"CA 2.5 Src 0 I" +
' {0:.4f} '.format(CHAISr0iRaw)
17929 labelSIA0.config(text = VString)
17930 VString =
"CB 2.5 Src 0 I" +
' {0:.4f} '.format(CHBISr0iRaw)
17931 labelSIB0.config(text = VString)
17934 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
17935 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17936 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
17937 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17938 CHA.mode = Mode.SIMV
17939 CHA.constant(0.045)
17940 CHB.mode = Mode.SIMV
17941 CHB.constant(0.045)
17942 ADsignal1 = devx.get_samples(1010)
17943 CHAVSr100Raw = CHAISr100Raw = CHBVSr100Raw = CHBISr100Raw = 0.0
17944 for index
in range(1000):
17945 CHAVSr100Raw += ADsignal1[index+10][0][0]
17946 CHBVSr100Raw += ADsignal1[index+10][1][0]
17947 CHAISr100Raw += ADsignal1[index+10][0][1]
17948 CHBISr100Raw += ADsignal1[index+10][1][1]
17950 CHAVSr100Raw = CHAVSr100Raw / 1000.0
17951 CHAISr100Raw = CHAISr100Raw / 1000.0
17952 CHBVSr100Raw = CHBVSr100Raw / 1000.0
17953 CHBISr100Raw = CHBISr100Raw / 1000.0
17954 VString =
"CA 50 Src +45 " +
' {0:.4f} '.format(CHAVSr100Raw)
17955 labelSIA.config(text = VString)
17956 VString =
"CB 50 Src +45 " +
' {0:.4f} '.format(CHBVSr100Raw)
17957 labelSIB.config(text = VString)
17960 devx.ctrl_transfer(0x40, 0x50, 32, 0, 0, 0, 100)
17961 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17962 devx.ctrl_transfer(0x40, 0x50, 37, 0, 0, 0, 100)
17963 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17964 CHA.mode = Mode.SIMV
17965 CHA.constant(-0.045)
17966 CHB.mode = Mode.SIMV
17967 CHB.constant(-0.045)
17968 ADsignal1 = devx.get_samples(1010)
17969 CHAVSrN45Raw = CHAISrN45Raw = CHBVSrN45Raw = CHBISrN45Raw = 0.0
17970 for index
in range(1000):
17971 CHAVSrN45Raw += ADsignal1[index+10][0][0]
17972 CHBVSrN45Raw += ADsignal1[index+10][1][0]
17973 CHAISrN45Raw += ADsignal1[index+10][0][1]
17974 CHBISrN45Raw += ADsignal1[index+10][1][1]
17976 CHAVSrN45Raw = CHAVSrN45Raw / 1000.0
17977 CHAISrN45Raw = CHAISrN45Raw / 1000.0
17978 CHBVSrN45Raw = CHBVSrN45Raw / 1000.0
17979 CHBISrN45Raw = CHBISrN45Raw / 1000.0
17980 VString =
"CA 50 Src -45 " +
' {0:.4f} '.format(CHAVSrN45Raw)
17981 labelSIAN.config(text = VString)
17982 VString =
"CB 50 Src -45 " +
' {0:.4f} '.format(CHBVSrN45Raw)
17983 labelSIBN.config(text = VString)
17985 devx.ctrl_transfer(0x40, 0x51, 32, 0, 0, 0, 100)
17986 devx.ctrl_transfer(0x40, 0x51, 33, 0, 0, 0, 100)
17987 devx.ctrl_transfer(0x40, 0x51, 37, 0, 0, 0, 100)
17988 devx.ctrl_transfer(0x40, 0x51, 38, 0, 0, 0, 100)
17991 CHAF25V = CHAF25vRaw * ( AD584act / CHA584Raw )
17992 CHBF25V = CHBF25vRaw * ( AD584act / CHB584Raw )
17994 CHASr5v = CHASr5vRaw * ( AD584act / CHA584Raw )
17995 CHBSr5v = CHBSr5vRaw * ( AD584act / CHB584Raw )
17997 CHA2p5 = CHA2p5Raw * ( AD584act / CHA584Raw )
17999 CHB2p5 = CHB2p5Raw * ( AD584act / CHB584Raw )
18002 CHAActSrI = CHASr5v / OnBoardRes
18003 CHBActSrI = CHBSr5v / OnBoardRes
18005 CHAActSnkI = CHASr0vRaw - CHA2p5 / OnBoardRes
18006 CHBActSnkI = CHBSr0vRaw - CHB2p5 / OnBoardRes
18008 CHASr0i = CHAVSr0iRaw * ( AD584act / CHA584Raw )
18009 CHASr0iAct = CHASr0i / OnBoardRes
18010 CHASr100 = CHAVSr100Raw * ( AD584act / CHA584Raw )
18011 CHASrI100Act = (CHASr100 - CHA2p5) / OnBoardRes
18012 CHASrN45 = CHAVSrN45Raw * ( AD584act / CHA584Raw )
18013 CHASrIN45Act = (CHASrN45 - CHA2p5) / OnBoardRes
18015 CHBSr0i = CHBVSr0iRaw * ( AD584act / CHB584Raw )
18016 CHBSr0iAct = CHBSr0i / OnBoardRes
18017 CHBSr100 = CHBVSr100Raw * ( AD584act / CHB584Raw )
18018 CHBSrI100Act = (CHBSr100 - CHB2p5) / OnBoardRes
18019 CHBSrN45 = CHBVSrN45Raw * ( AD584act / CHB584Raw )
18020 CHBSrIN45Act = (CHBSrN45 - CHB2p5) / OnBoardRes
18023 CalFile.write(
'# Channel A, measure V\n')
18024 CalFile.write(
'</>\n')
18025 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAGndRaw) +
'>\n')
18026 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHA584Raw) +
'>\n')
18027 CalFile.write(
'<>\n')
18028 CalFile.write(
'\n')
18030 CalFile.write(
'# Channel A, measure I\n')
18031 CalFile.write(
'</>\n')
18032 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAI02p5Raw) +
'>\n')
18033 CalFile.write(
'<' +
'{0:.4f}'.format(CHAActSrI) +
', ' +
'{0:.4f}'.format(CHAISr5vRaw) +
'>\n')
18035 CalFile.write(
'<' +
'{0:.4f}'.format(-CHAActSrI) +
', ' +
'{0:.4f}'.format(-CHAISr5vRaw) +
'>\n')
18036 CalFile.write(
'<>\n')
18037 CalFile.write(
'\n')
18039 CalFile.write(
'# Channel A, source V\n')
18040 CalFile.write(
'</>\n')
18041 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAF0vRaw) +
'>\n')
18042 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
18043 CalFile.write(
'<>\n')
18044 CalFile.write(
'\n')
18046 CalFile.write(
'# Channel A, source I\n')
18047 CalFile.write(
'</>\n')
18048 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHAISr0iRaw) +
'>\n')
18049 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHASrI100Act) +
'>\n')
18050 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHASrIN45Act) +
'>\n')
18051 CalFile.write(
'<>\n')
18052 CalFile.write(
'\n')
18054 CalFile.write(
'# Channel B, measure V\n')
18055 CalFile.write(
'</>\n')
18056 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBGndRaw) +
'>\n')
18057 CalFile.write(
'<' +
'{0:.4f}'.format(AD584act) +
', ' +
'{0:.4f}'.format(CHB584Raw) +
'>\n')
18058 CalFile.write(
'<>\n')
18059 CalFile.write(
'\n')
18061 CalFile.write(
'# Channel B, measure I\n')
18062 CalFile.write(
'</>\n')
18063 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBI02p5Raw) +
'>\n')
18064 CalFile.write(
'<' +
'{0:.4f}'.format(CHBActSrI) +
', ' +
'{0:.4f}'.format(CHBISr5vRaw) +
'>\n')
18066 CalFile.write(
'<' +
'{0:.4f}'.format(-CHBActSrI) +
', ' +
'{0:.4f}'.format(-CHBISr5vRaw) +
'>\n')
18067 CalFile.write(
'<>\n')
18068 CalFile.write(
'\n')
18070 CalFile.write(
'# Channel B, source V\n')
18071 CalFile.write(
'</>\n')
18072 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBF0vRaw) +
'>\n')
18073 CalFile.write(
'<4.5000, ' +
'{0:.4f}'.format(CHAF25V) +
'>\n')
18074 CalFile.write(
'<>\n')
18075 CalFile.write(
'\n')
18077 CalFile.write(
'# Channel B source I\n')
18078 CalFile.write(
'</>\n')
18079 CalFile.write(
'<0.0000, ' +
'{0:.4f}'.format(CHBISr0iRaw) +
'>\n')
18080 CalFile.write(
'<0.045, ' +
'{0:.4f}'.format(CHBSrI100Act) +
'>\n')
18081 CalFile.write(
'<-0.0450, ' +
'{0:.4f}'.format(CHBSrIN45Act) +
'>\n')
18082 CalFile.write(
'<>\n')
18085 showinfo(
"Finish",
"Successfully measured cal factors!", parent=calwindow)
18086 if askyesno(
"Write cal",
"Write Cal Data to Board?", parent=calwindow):
18087 devx.write_calibration(filename)
18091 CHA.mode = Mode.HI_Z_SPLIT
18092 CHB.mode = Mode.HI_Z_SPLIT
18096 calwindow.destroy()
18099 global cal, DevID, devx
18101 devidstr = DevID[17:31]
18102 filename =
"calib" + devidstr +
"test.txt"
18103 if os.path.isfile(filename):
18104 if askyesno(
"Calibration exists",
"A previous Calibration file exists. /n Do you want to load that?"):
18107 if askyesno(
"Continue?",
"Continure with save calibration file?"):
18110 calwindow.destroy()
18113 CalFile = open(filename,
"w")
18117 CalFile.write(
'# Channel A, measure V\n')
18118 CalFile.write(
'</>\n')
18119 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[0][0]) +
'>\n')
18120 CHAgp = (5.0/cal[0][1])+cal[0][0]
18121 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18122 CalFile.write(
'<>\n')
18123 CalFile.write(
'\n')
18125 CalFile.write(
'# Channel A, measure I\n')
18126 CalFile.write(
'</>\n')
18127 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[1][0]) +
'>\n')
18128 CHAgp = (0.1/cal[0][1])+cal[1][0]
18129 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18130 CHAgn = (-0.1/cal[0][2])+cal[1][0]
18131 CalFile.write(
'<-0.1000' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18132 CalFile.write(
'<>\n')
18133 CalFile.write(
'\n')
18135 CalFile.write(
'# Channel A, source V\n')
18136 CalFile.write(
'</>\n')
18137 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[2][0]) +
'>\n')
18138 CHAgp = (5.0/cal[2][1])+cal[2][0]
18139 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18140 CalFile.write(
'<>\n')
18141 CalFile.write(
'\n')
18143 CalFile.write(
'# Channel A, source I\n')
18144 CalFile.write(
'</>\n')
18145 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[3][0]) +
'>\n')
18146 CHAgp = (0.1/cal[3][1])+cal[3][0]
18147 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18148 CHAgn = (-0.1/cal[3][2])+cal[3][0]
18149 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18150 CalFile.write(
'<>\n')
18151 CalFile.write(
'\n')
18153 CalFile.write(
'# Channel B, measure V\n')
18154 CalFile.write(
'</>\n')
18155 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[4][0]) +
'>\n')
18156 CHAgp = (5.0/cal[4][1])+cal[4][0]
18157 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18158 CalFile.write(
'<>\n')
18159 CalFile.write(
'\n')
18161 CalFile.write(
'# Channel B, measure I\n')
18162 CalFile.write(
'</>\n')
18163 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[5][0]) +
'>\n')
18164 CHAgp = (0.1/cal[5][1])+cal[5][0]
18165 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18166 CHAgn = (-0.1/cal[5][2])+cal[5][0]
18167 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18168 CalFile.write(
'<>\n')
18169 CalFile.write(
'\n')
18171 CalFile.write(
'# Channel B, source V\n')
18172 CalFile.write(
'</>\n')
18173 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[6][0]) +
'>\n')
18174 CHAgp = (5.0/cal[6][1])+cal[6][0]
18175 CalFile.write(
'<5.0000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18176 CalFile.write(
'<>\n')
18177 CalFile.write(
'\n')
18179 CalFile.write(
'# Channel B source I\n')
18180 CalFile.write(
'</>\n')
18181 CalFile.write(
'<0.0000, ' +
'{0:.5f}'.format(cal[7][0]) +
'>\n')
18182 CHAgp = (0.1/cal[7][1])+cal[7][0]
18183 CalFile.write(
'<0.1000, ' +
'{0:.5f}'.format(CHAgp) +
'>\n')
18184 CHAgn = (-0.1/cal[7][2])+cal[7][0]
18185 CalFile.write(
'<-0.1000, ' +
'{0:.5f}'.format(CHAgn) +
'>\n')
18186 CalFile.write(
'<>\n')
18192 global devx, PIO_0, PIO_1, PIO_2, PIO_3, SCLKPort, SDATAPort, SLATCHPort
18194 binstr = bin(DValue)
18195 binlen = len(binstr)
18196 datastr = binstr[2:binlen]
18197 datalen = len(datastr)
18199 datastr = str.rjust(datastr , 16 ,
'0')
18200 datalen = len(datastr)
18202 devx.ctrl_transfer(0x40, 0x50, SLATCHPort.get(), 0, 0, 0, 100)
18203 while i < datalen+1:
18205 D1code = 0x50 + int(datastr[i-1])
18206 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
18207 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
18208 devx.ctrl_transfer(0x40, 0x50, SCLKPort.get(), 0, 0, 0, 100)
18209 devx.ctrl_transfer(0x40, 0x51, SCLKPort.get(), 0, 0, 0, 100)
18211 devx.ctrl_transfer(0x40, 0x51, SLATCHPort.get(), 0, 0, 0, 100)
18214 global FminEntry, HtMulEntry, MinigenFout, MinigenMode, etssrlab, EnableMinigenMode
18215 global Two28, mclk, EnableHSsampling, MinigenScreenStatus, ETSts, Two_X_Sample
18218 if MinigenScreenStatus.get() == 0:
18223 if EnableMinigenMode == 2:
18224 MinigenMode.set(40)
18227 FminE = float(eval(FminEntry.get()))*1000
18229 if EnableHSsampling > 0:
18230 FminEntry.delete(0,END)
18231 FminEntry.insert(0, FminE/1000)
18235 Fmin = FminE - (FminE/MulX)
18237 MinigenFout.delete(0,
"end")
18238 MinigenFout.insert(0,Fmin)
18244 global MinigenFclk, MinigenFout, MinigenMode
18245 global Two28, SCLKPort, SDATAPort, SLATCHPort
18247 DValue = 8192 + MinigenMode.get()
18250 fout = float(eval(MinigenFout.get()))
18252 MinigenFout.delete(0,
"end")
18253 MinigenFout.insert(0,100)
18255 mclk = float(eval(MinigenFclk.get()))*1000000
18257 MingenFclk.delete(0,
"end")
18258 MinigenFclk.insert(0,16)
18259 Freg = int((fout*Two28)/mclk)
18260 Foutstr = bin(Freg)
18261 Foutlen = len(Foutstr)
18262 datastr = Foutstr[2:Foutlen]
18263 datalen = len(datastr)
18265 datastr = str.rjust(datastr , 28 ,
'0')
18266 datalen = len(datastr)
18267 Fmsb =
'0b01' + datastr[0:14]
18268 Flsb =
'0b01' + datastr[14:]
18269 FValue = int(eval(Flsb))
18271 FValue = int(eval(Fmsb))
18276 global RevDate, minigenwindow, MinigenMode, MinigenScreenStatus, MinigenFclk, MinigenFout, SWRev
18277 global SCLKPort, SDATAPort, SLATCHPort
18278 global GenericSerialStatus
18279 global PIO_0, PIO_1, PIO_2, PIO_3
18281 if GenericSerialStatus.get() == 1:
18282 GenericSerialStatus.set(0)
18284 if MinigenScreenStatus.get() == 0:
18285 MinigenScreenStatus.set(1)
18286 minigenwindow = Toplevel()
18287 minigenwindow.title(
"-AD983x DDS- " + SWRev + RevDate)
18288 minigenwindow.resizable(FALSE,FALSE)
18289 minigenwindow.protocol(
"WM_DELETE_WINDOW", DestroyMinigenScreen)
18291 MinigenMode = IntVar(0)
18292 mgb1 = Radiobutton(minigenwindow, text=
"Sine", variable=MinigenMode, value=0, command=BSendMG )
18293 mgb1.grid(row=1, column=0, sticky=W)
18294 mgb2 = Radiobutton(minigenwindow, text=
"Triangle", variable=MinigenMode, value=2, command=BSendMG )
18295 mgb2.grid(row=1, column=1, columnspan=2, sticky=W)
18296 mgb3 = Radiobutton(minigenwindow, text=
"Square", variable=MinigenMode, value=40, command=BSendMG )
18297 mgb3.grid(row=2, column=0, sticky=W)
18298 mgb4 = Radiobutton(minigenwindow, text=
"Square/2", variable=MinigenMode, value=32, command=BSendMG )
18299 mgb4.grid(row=2, column=1, columnspan=2, sticky=W)
18300 f0lab = Label(minigenwindow, text=
"Mclk in MHz")
18301 f0lab.grid(row=3, column=0, columnspan=2, sticky=W)
18302 MinigenFclk = Entry(minigenwindow, width=5)
18303 MinigenFclk.grid(row=3, column=1, columnspan=2, sticky=W, padx=6)
18304 MinigenFclk.delete(0,
"end")
18305 MinigenFclk.insert(0,16)
18306 f1lab = Label(minigenwindow, text=
"Output Freq")
18307 f1lab.grid(row=4, column=0, columnspan=2, sticky=W)
18308 MinigenFout = Entry(minigenwindow, width=8)
18309 MinigenFout.bind(
'<MouseWheel>', onMiniGenScroll)
18310 MinigenFout.bind(
"<Button-4>", onMiniGenScroll)
18311 MinigenFout.bind(
"<Button-5>", onMiniGenScroll)
18312 MinigenFout.grid(row=4, column=1, columnspan=2, sticky=W)
18313 MinigenFout.delete(0,
"end")
18314 MinigenFout.insert(0,100)
18315 bsn1 = Button(minigenwindow, text=
'UpDate', style=
"W7.TButton", command=BSendMG)
18316 bsn1.grid(row=5, column=0, sticky=W, pady=4)
18317 dismissmgbutton = Button(minigenwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyMinigenScreen)
18318 dismissmgbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
18320 label3 = Label(minigenwindow,text=
"SCLK PI/O Port ")
18321 label3.grid(row=6, column=0, sticky=W)
18322 sclk1 = Radiobutton(minigenwindow, text=
"0", variable=SCLKPort, value=PIO_0)
18323 sclk1.grid(row=6, column=1, sticky=W)
18324 sclk2 = Radiobutton(minigenwindow, text=
"1", variable=SCLKPort, value=PIO_1)
18325 sclk2.grid(row=6, column=2, sticky=W)
18326 sclk3 = Radiobutton(minigenwindow, text=
"2", variable=SCLKPort, value=PIO_2)
18327 sclk3.grid(row=6, column=3, sticky=W)
18328 sclk4 = Radiobutton(minigenwindow, text=
"3", variable=SCLKPort, value=PIO_3)
18329 sclk4.grid(row=6, column=4, sticky=W)
18331 label4 = Label(minigenwindow,text=
"SData PI/O Port ")
18332 label4.grid(row=7, column=0, sticky=W)
18333 sdat1 = Radiobutton(minigenwindow, text=
"0", variable=SDATAPort, value=PIO_0)
18334 sdat1.grid(row=7, column=1, sticky=W)
18335 sdat2 = Radiobutton(minigenwindow, text=
"1", variable=SDATAPort, value=PIO_1)
18336 sdat2.grid(row=7, column=2, sticky=W)
18337 sdat3 = Radiobutton(minigenwindow, text=
"2", variable=SDATAPort, value=PIO_2)
18338 sdat3.grid(row=7, column=3, sticky=W)
18339 sdat4 = Radiobutton(minigenwindow, text=
"3", variable=SDATAPort, value=PIO_3)
18340 sdat4.grid(row=7, column=4, sticky=W)
18342 label5 = Label(minigenwindow,text=
"FSync PI/O Port ")
18343 label5.grid(row=8, column=0, sticky=W)
18344 slth1 = Radiobutton(minigenwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
18345 slth1.grid(row=8, column=1, sticky=W)
18346 slth2 = Radiobutton(minigenwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
18347 slth2.grid(row=8, column=2, sticky=W)
18348 slth3 = Radiobutton(minigenwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
18349 slth3.grid(row=8, column=3, sticky=W)
18350 slth4 = Radiobutton(minigenwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
18351 slth4.grid(row=8, column=4, sticky=W)
18356 global minigenwindow, MinigenScreenStatus
18358 MinigenScreenStatus.set(0)
18359 minigenwindow.destroy()
18362 global ETSStatus, ETSDisp
18370 global PIO_0, PIO_1, PIO_2, PIO_3
18372 binstr = bin(D1Value)
18373 binlen = len(binstr)
18374 data1str = binstr[2:binlen]
18375 datalen = len(data1str)
18377 data1str = str.rjust(data1str , 16 ,
'0')
18378 datalen = len(data1str)
18380 binstr = bin(D2Value)
18381 binlen = len(binstr)
18382 data2str = binstr[2:binlen]
18383 datalen = len(data2str)
18385 data2str = str.rjust(data2str , 16 ,
'0')
18386 datalen = len(data2str)
18393 devx.ctrl_transfer(0x40, 0x50, 0, 0, 0, 0, 100)
18394 while i < datalen+1:
18396 D1code = 0x50 + int(data1str[i-1])
18397 D2code = 0x50 + int(data2str[i-1])
18398 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
18399 devx.ctrl_transfer(0x40, D2code, PIO_2, 0, 0, 0, 100)
18400 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18401 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18402 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18404 devx.ctrl_transfer(0x40, 0x51, PIO_0, 0, 0, 0, 100)
18407 global DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry, REFEntry
18410 RefValue = float(eval(REFEntry.get()))
18414 D1Value = float(eval(DAC1Entry.get()))
18417 D1Code = int((D1Value/RefValue)*255)
18420 D1Code = D1Code + 0x2000
18422 D2Value = float(eval(DAC2Entry.get()))
18425 D2Code = int((D2Value/RefValue)*255)
18428 D2Code = D2Code + 0x2400
18430 D3Value = float(eval(DAC3Entry.get()))
18433 D3Code = int((D3Value/RefValue)*255)
18436 D3Code = D3Code + 0x2000
18438 D4Value = float(eval(DAC4Entry.get()))
18441 D4Code = int((D4Value/RefValue)*255)
18444 D4Code = D4Code + 0x2400
18451 global da1window, DA1ScreenStatus, DAC1Entry, DAC2Entry, DAC3Entry, DAC4Entry
18452 global REFEntry, RevDate, SWRev
18454 if DA1ScreenStatus.get() == 0:
18455 DA1ScreenStatus.set(1)
18456 da1window = Toplevel()
18457 da1window.title(
"-DA1 PMOD- " + SWRev + RevDate)
18458 da1window.resizable(FALSE,FALSE)
18459 da1window.protocol(
"WM_DELETE_WINDOW", DestroyDA1Screen)
18461 d1lab = Label(da1window, text=
"DAC A1 output")
18462 d1lab.grid(row=0, column=0, columnspan=1, sticky=W)
18463 DAC1Entry = Entry(da1window, width=5)
18464 DAC1Entry.grid(row=0, column=1, sticky=W)
18465 DAC1Entry.delete(0,
"end")
18466 DAC1Entry.insert(0,0)
18467 d2lab = Label(da1window, text=
"DAC B1 output")
18468 d2lab.grid(row=1, column=0, columnspan=1, sticky=W)
18469 DAC2Entry = Entry(da1window, width=5)
18470 DAC2Entry.grid(row=1, column=1, sticky=W)
18471 DAC2Entry.delete(0,
"end")
18472 DAC2Entry.insert(0,0)
18474 d3lab = Label(da1window, text=
"DAC A2 output")
18475 d3lab.grid(row=2, column=0, columnspan=1, sticky=W)
18476 DAC3Entry = Entry(da1window, width=5)
18477 DAC3Entry.grid(row=2, column=1, sticky=W)
18478 DAC3Entry.delete(0,
"end")
18479 DAC3Entry.insert(0,0)
18481 d4lab = Label(da1window, text=
"DAC B2 output")
18482 d4lab.grid(row=3, column=0, columnspan=1, sticky=W)
18483 DAC4Entry = Entry(da1window, width=5)
18484 DAC4Entry.grid(row=3, column=1, sticky=W)
18485 DAC4Entry.delete(0,
"end")
18486 DAC4Entry.insert(0,0)
18488 d5lab = Label(da1window, text=
"Reference V")
18489 d5lab.grid(row=4, column=0, columnspan=1, sticky=W)
18490 REFEntry = Entry(da1window, width=5)
18491 REFEntry.grid(row=4, column=1, sticky=W)
18492 REFEntry.delete(0,
"end")
18493 REFEntry.insert(0,3.3)
18495 bsn1 = Button(da1window, text=
'UpDate', style=
"W7.TButton", command=BSendDA1)
18496 bsn1.grid(row=5, column=0, sticky=W)
18497 dismissdabutton = Button(da1window, text=
"Dismiss", style=
"W8.TButton", command=DestroyDA1Screen)
18498 dismissdabutton.grid(row=5, column=1, sticky=W, pady=4)
18502 global da1window, DA1ScreenStatus
18504 DA1ScreenStatus.set(0)
18505 da1window.destroy()
18508 global devx, SingleDualPot
18509 global PIO_0, PIO_1, PIO_2, PIO_3
18511 binstr = bin(DValue)
18512 binlen = len(binstr)
18513 datastr = binstr[2:binlen]
18514 datalen = len(datastr)
18515 if SingleDualPot.get() == 0:
18517 datastr = str.rjust(datastr , 10 ,
'0')
18518 datalen = len(datastr)
18519 if SingleDualPot.get() == 1:
18521 datastr = str.rjust(datastr , 8 ,
'0')
18522 datalen = len(datastr)
18523 if SingleDualPot.get() == 2:
18525 datastr = str.rjust(datastr , 8 ,
'0')
18526 datalen = len(datastr)
18528 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18529 devx.ctrl_transfer(0x40, 0x50, PIO_0, 0, 0, 0, 100)
18530 while i < datalen+1:
18535 D1code = 0x50 + int(datastr[i-1])
18536 devx.ctrl_transfer(0x40, D1code, PIO_1, 0, 0, 0, 100)
18537 devx.ctrl_transfer(0x40, 0x51, PIO_3, 0, 0, 0, 100)
18538 devx.ctrl_transfer(0x40, 0x50, PIO_3, 0, 0, 0, 100)
18540 devx.ctrl_transfer(0x40, 0x51, 0, 0, 0, 0, 100)
18543 global DigPot1, DigPot2, DigPot3, DigPot4, SendPot1, SendPot2, SendPot3, SendPot4
18544 global SingleDualPot
18546 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
18548 if SingleDualPot.get() == 2:
18551 DValue1 = DigPot1.get()
18552 if DValue1 > NumTaps:
18557 DValue2 = DigPot2.get()
18558 if DValue2 > NumTaps:
18563 DValue3 = DigPot3.get()
18564 if DValue3 > NumTaps:
18569 DValue4 = DigPot4.get()
18570 if DValue4 > NumTaps:
18574 if SendPot1.get() > 0:
18576 if SendPot2.get() > 0:
18578 if SendPot3.get() > 0:
18580 if SendPot4.get() > 0:
18584 global SingleDualPot, DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
18586 if SingleDualPot.get() == 0
or SingleDualPot.get() == 1:
18587 DPotlabel.config(text=
"Enter number from 0 to 255")
18588 DigPot1.config(from_=0, to=255, length=256)
18589 DigPot2.config(from_=0, to=255, length=256)
18590 DigPot3.config(from_=0, to=255, length=256)
18591 DigPot4.config(from_=0, to=255, length=256)
18592 if SingleDualPot.get() == 2:
18593 DPotlabel.config(text=
"Enter number from 0 to 63")
18594 DigPot1.config(from_=0, to=63, length=64)
18595 DigPot2.config(from_=0, to=63, length=64)
18596 DigPot3.config(from_=0, to=63, length=64)
18597 DigPot4.config(from_=0, to=63, length=64)
18601 global digpotwindow, DigPotScreenStatus, DigPot1, DigPot2, DigPot3, DigPot4, RevDate
18602 global SendPot1, SendPot2, SendPot3, SendPot4, SingleDualPot, SWRev
18603 global DPotlabel, DigPot1, DigPot2, DigPot3, DigPot4
18605 if DigPotScreenStatus.get() == 0:
18606 DigPotScreenStatus.set(1)
18607 digpotwindow = Toplevel()
18608 digpotwindow.title(
"Digital Potentiometer " + SWRev + RevDate)
18609 digpotwindow.resizable(FALSE,FALSE)
18610 digpotwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigPotScreen)
18612 SendPot1 = IntVar(0)
18614 SendPot2 = IntVar(0)
18616 SendPot3 = IntVar(0)
18618 SendPot4 = IntVar(0)
18620 DPotlabel = Label(digpotwindow,text=
"Enter number from 0 to 255", style=
"A12B.TLabel")
18621 DPotlabel.grid(row=0, column=0, columnspan=3, sticky=W)
18623 SingleDualPot = IntVar(0)
18624 SingleDualPot.set(0)
18625 CompMenu = Menubutton(digpotwindow, text=
"Sel Comp.", style=
"W8.TButton")
18626 CompMenu.menu = Menu(CompMenu, tearoff = 0 )
18627 CompMenu[
"menu"] = CompMenu.menu
18628 CompMenu.menu.add_radiobutton(label=
"AD840X", variable=SingleDualPot, value=0, command=UpdatePotSlider)
18629 CompMenu.menu.add_radiobutton(label=
"AD5160", variable=SingleDualPot, value=1, command=UpdatePotSlider)
18630 CompMenu.menu.add_radiobutton(label=
"AD5203", variable=SingleDualPot, value=2, command=UpdatePotSlider)
18631 CompMenu.grid(row=1, column=0, columnspan=2, sticky=W)
18632 lab1 = Checkbutton(digpotwindow,text=
"Pot 1", pady=0, variable=SendPot1)
18633 lab1.grid(row=2, column=0, sticky=W)
18634 DigPot1 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
18635 DigPot1.grid(row=3, column=0, columnspan=3, sticky=W)
18636 lab2 = Checkbutton(digpotwindow,text=
"Pot 2", pady=0, variable=SendPot2)
18637 lab2.grid(row=4, column=0, sticky=W)
18638 DigPot2 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
18639 DigPot2.grid(row=5, column=0, columnspan=3, sticky=W)
18640 lab3 = Checkbutton(digpotwindow,text=
"Pot 3", pady=0, variable=SendPot3)
18641 lab3.grid(row=6, column=0, sticky=W)
18642 DigPot3 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
18643 DigPot3.grid(row=7, column=0, columnspan=3, sticky=W)
18644 lab4 = Checkbutton(digpotwindow,text=
"Pot 4", pady=0, variable=SendPot4)
18645 lab4.grid(row=8, column=0, sticky=W)
18646 DigPot4 = Scale(digpotwindow, from_=0, to=255, orient=HORIZONTAL, command=DigPotSend, length=256)
18647 DigPot4.grid(row=9, column=0, columnspan=3, sticky=W)
18648 dismissdpbutton = Button(digpotwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigPotScreen)
18649 dismissdpbutton.grid(row=10, column=0, sticky=W, pady=4)
18652 global digpotwindow, DigPotScreenStatus
18654 DigPotScreenStatus.set(0)
18655 digpotwindow.destroy()
18658 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
18659 global NumBitsEntry, DataBitsEntry, devx, SerDirection, DValue, NumBits, AD5626SerialStatus, AD5626Entry
18661 if AD5626SerialStatus.get() == 0:
18663 DValue = int(eval(DataBitsEntry.get()))
18669 NumBits = int(NumBitsEntry.get())
18676 DValue = int(eval(AD5626Entry.get())*1000)
18679 AD5626Entry.delete(0,
"end")
18680 AD5626Entry.insert(0,
'0.000')
18683 AD5626Entry.delete(0,
"end")
18684 AD5626Entry.insert(0,DValue/1000.0)
18687 AD5626Entry.delete(0,
"end")
18688 AD5626Entry.insert(0,
'0.000')
18691 binstr = bin(DValue)
18692 binlen = len(binstr)
18693 datastr = binstr[2:binlen]
18694 datalen = len(datastr)
18695 if datalen < NumBits:
18696 datastr = str.rjust(datastr , NumBits ,
'0')
18697 datalen = len(datastr)
18698 if SLatchPhase.get() == 0:
18704 if AD5626SerialStatus.get() > 0:
18707 if SClockPhase.get() == 0:
18713 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
18714 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
18716 while i < datalen+1:
18717 if SerDirection.get() == 1:
18718 D1code = 0x50 + int(datastr[datalen-i])
18720 D1code = 0x50 + int(datastr[i-1])
18721 devx.ctrl_transfer(0x40, D1code, SDATAPort.get(), 0, 0, 0, 100)
18722 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
18723 devx.ctrl_transfer(0x40, ClockInt, SCLKPort.get(), 0, 0, 0, 100)
18725 devx.ctrl_transfer(0x40, ClockEnd, SCLKPort.get(), 0, 0, 0, 100)
18726 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
18727 devx.ctrl_transfer(0x40, LatchInt, SLATCHPort.get(), 0, 0, 0, 100)
18728 devx.ctrl_transfer(0x40, LatchEnd, SLATCHPort.get(), 0, 0, 0, 100)
18732 global ad5626window, AD5626SerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
18733 global GenericSerialStatus, AD5626Entry, SerDirection, SWRev
18734 global PIO_0, PIO_1, PIO_2, PIO_3
18736 if GenericSerialStatus.get() == 1:
18737 GenericSerialStatus.set(0)
18739 if AD5626SerialStatus.get() == 0:
18740 AD5626SerialStatus.set(1)
18741 ad5626window = Toplevel()
18742 ad5626window.title(
"AD5626 Output " + SWRev + RevDate)
18743 ad5626window.resizable(FALSE,FALSE)
18744 ad5626window.protocol(
"WM_DELETE_WINDOW", DestroyAD5626Screen)
18746 SLatchPhase = IntVar(0)
18748 SClockPhase = IntVar(0)
18750 SerDirection = IntVar(0)
18751 SerDirection.set(0)
18753 label2 = Label(ad5626window,text=
"Enter Output Volts")
18754 label2.grid(row=1, column=0, columnspan=1, sticky=W)
18755 AD5626Entry = Entry(ad5626window, width=10)
18756 AD5626Entry.bind(
'<MouseWheel>', onAD5626Scroll)
18757 AD5626Entry.bind(
"<Button-4>", onAD5626Scroll)
18758 AD5626Entry.bind(
"<Button-5>", onAD5626Scroll)
18759 AD5626Entry.grid(row=1, column=1, columnspan=3, sticky=W)
18760 AD5626Entry.delete(0,
"end")
18761 AD5626Entry.insert(0,
'0.000')
18763 label3 = Label(ad5626window,text=
"SCLK PI/O Port ")
18764 label3.grid(row=2, column=0, columnspan=1, sticky=W)
18765 sclk1 = Radiobutton(ad5626window, text=
"0", variable=SCLKPort, value=PIO_0)
18766 sclk1.grid(row=2, column=1, sticky=W)
18767 sclk2 = Radiobutton(ad5626window, text=
"1", variable=SCLKPort, value=PIO_1)
18768 sclk2.grid(row=2, column=2, sticky=W)
18769 sclk3 = Radiobutton(ad5626window, text=
"2", variable=SCLKPort, value=PIO_2)
18770 sclk3.grid(row=2, column=3, sticky=W)
18771 sclk4 = Radiobutton(ad5626window, text=
"3", variable=SCLKPort, value=PIO_3)
18772 sclk4.grid(row=2, column=4, sticky=W)
18774 label4 = Label(ad5626window,text=
"SData PI/O Port ")
18775 label4.grid(row=3, column=0, columnspan=1, sticky=W)
18776 sdat1 = Radiobutton(ad5626window, text=
"0", variable=SDATAPort, value=PIO_0)
18777 sdat1.grid(row=3, column=1, sticky=W)
18778 sdat2 = Radiobutton(ad5626window, text=
"1", variable=SDATAPort, value=PIO_1)
18779 sdat2.grid(row=3, column=2, sticky=W)
18780 sdat3 = Radiobutton(ad5626window, text=
"2", variable=SDATAPort, value=PIO_2)
18781 sdat3.grid(row=3, column=3, sticky=W)
18782 sdat4 = Radiobutton(ad5626window, text=
"3", variable=SDATAPort, value=PIO_3)
18783 sdat4.grid(row=3, column=4, sticky=W)
18785 label5 = Label(ad5626window,text=
"Latch PI/O Port ")
18786 label5.grid(row=4, column=0, columnspan=1, sticky=W)
18787 slth1 = Radiobutton(ad5626window, text=
"0", variable=SLATCHPort, value=PIO_0)
18788 slth1.grid(row=4, column=1, sticky=W)
18789 slth2 = Radiobutton(ad5626window, text=
"1", variable=SLATCHPort, value=PIO_1)
18790 slth2.grid(row=4, column=2, sticky=W)
18791 slth3 = Radiobutton(ad5626window, text=
"2", variable=SLATCHPort, value=PIO_2)
18792 slth3.grid(row=4, column=3, sticky=W)
18793 slth4 = Radiobutton(ad5626window, text=
"3", variable=SLATCHPort, value=PIO_3)
18794 slth4.grid(row=4, column=4, sticky=W)
18796 bsn1 = Button(ad5626window, text=
'Send', style=
"W5.TButton", command=BSendGS)
18797 bsn1.grid(row=5, column=0, sticky=W)
18798 dismissgsbutton = Button(ad5626window, text=
"Dismiss", style=
"W8.TButton", command=DestroyAD5626Screen)
18799 dismissgsbutton.grid(row=5, column=1, columnspan=2, sticky=W, pady=4)
18806 global ad5626window, AD5626SerialStatus
18808 AD5626SerialStatus.set(0)
18809 ad5626window.destroy()
18812 global serialwindow, GenericSerialStatus, SCLKPort, SDATAPort, SLATCHPort, SLatchPhase, SClockPhase
18813 global NumBitsEntry, DataBitsEntry, SerDirection, RevDate, SWRev
18814 global PIO_0, PIO_1, PIO_2, PIO_3
18816 if GenericSerialStatus.get() == 0:
18817 GenericSerialStatus.set(1)
18818 serialwindow = Toplevel()
18819 serialwindow.title(
"Generic Serial Output " + SWRev + RevDate)
18820 serialwindow.resizable(FALSE,FALSE)
18821 serialwindow.protocol(
"WM_DELETE_WINDOW", DestroyGenericSerialScreen)
18823 SCLKPort = IntVar(0)
18824 SCLKPort.set(PIO_2)
18825 SDATAPort = IntVar(0)
18826 SDATAPort.set(PIO_1)
18827 SLATCHPort = IntVar(0)
18828 SLATCHPort.set(PIO_0)
18829 SLatchPhase = IntVar(0)
18830 SClockPhase = IntVar(0)
18831 SerDirection = IntVar(0)
18832 label = Label(serialwindow,text=
"Enter number of Bits")
18833 label.grid(row=1, column=0, columnspan=2, sticky=W)
18834 NumBitsEntry = Entry(serialwindow, width=3)
18835 NumBitsEntry.grid(row=1, column=2, sticky=W)
18836 NumBitsEntry.delete(0,
"end")
18837 NumBitsEntry.insert(0,8)
18839 label2 = Label(serialwindow,text=
"Enter Data Word")
18840 label2.grid(row=2, column=0, columnspan=1, sticky=W)
18841 DataBitsEntry = Entry(serialwindow, width=10)
18842 DataBitsEntry.grid(row=2, column=1, columnspan=3, sticky=W)
18843 DataBitsEntry.delete(0,
"end")
18844 DataBitsEntry.insert(0,0)
18846 label3 = Label(serialwindow,text=
"SCLK PI/O Port ")
18847 label3.grid(row=3, column=0, columnspan=1, sticky=W)
18848 sclk1 = Radiobutton(serialwindow, text=
"0", variable=SCLKPort, value=PIO_0)
18849 sclk1.grid(row=3, column=1, sticky=W)
18850 sclk2 = Radiobutton(serialwindow, text=
"1", variable=SCLKPort, value=PIO_1)
18851 sclk2.grid(row=3, column=2, sticky=W)
18852 sclk3 = Radiobutton(serialwindow, text=
"2", variable=SCLKPort, value=PIO_2)
18853 sclk3.grid(row=3, column=3, sticky=W)
18854 sclk4 = Radiobutton(serialwindow, text=
"3", variable=SCLKPort, value=PIO_3)
18855 sclk4.grid(row=3, column=4, sticky=W)
18857 label4 = Label(serialwindow,text=
"SData PI/O Port ")
18858 label4.grid(row=4, column=0, columnspan=1, sticky=W)
18859 sdat1 = Radiobutton(serialwindow, text=
"0", variable=SDATAPort, value=PIO_0)
18860 sdat1.grid(row=4, column=1, sticky=W)
18861 sdat2 = Radiobutton(serialwindow, text=
"1", variable=SDATAPort, value=PIO_1)
18862 sdat2.grid(row=4, column=2, sticky=W)
18863 sdat3 = Radiobutton(serialwindow, text=
"2", variable=SDATAPort, value=PIO_2)
18864 sdat3.grid(row=4, column=3, sticky=W)
18865 sdat4 = Radiobutton(serialwindow, text=
"3", variable=SDATAPort, value=PIO_3)
18866 sdat4.grid(row=4, column=4, sticky=W)
18868 label5 = Label(serialwindow,text=
"Latch PI/O Port ")
18869 label5.grid(row=5, column=0, columnspan=1, sticky=W)
18870 slth1 = Radiobutton(serialwindow, text=
"0", variable=SLATCHPort, value=PIO_0)
18871 slth1.grid(row=5, column=1, sticky=W)
18872 slth2 = Radiobutton(serialwindow, text=
"1", variable=SLATCHPort, value=PIO_1)
18873 slth2.grid(row=5, column=2, sticky=W)
18874 slth3 = Radiobutton(serialwindow, text=
"2", variable=SLATCHPort, value=PIO_2)
18875 slth3.grid(row=5, column=3, sticky=W)
18876 slth4 = Radiobutton(serialwindow, text=
"3", variable=SLATCHPort, value=PIO_3)
18877 slth4.grid(row=5, column=4, sticky=W)
18879 label6 = Label(serialwindow,text=
"Latch Phase ")
18880 label6.grid(row=6, column=0, columnspan=1, sticky=W)
18881 sph1 = Radiobutton(serialwindow, text=
"0", variable=SLatchPhase, value=0)
18882 sph1.grid(row=6, column=1, sticky=W)
18883 sph2 = Radiobutton(serialwindow, text=
"1", variable=SLatchPhase, value=1)
18884 sph2.grid(row=6, column=2, sticky=W)
18886 label7 = Label(serialwindow,text=
"Clock Phase ")
18887 label7.grid(row=7, column=0, columnspan=1, sticky=W)
18888 sph7 = Radiobutton(serialwindow, text=
"0", variable=SClockPhase, value=0)
18889 sph7.grid(row=7, column=1, sticky=W)
18890 sph8 = Radiobutton(serialwindow, text=
"1", variable=SClockPhase, value=1)
18891 sph8.grid(row=7, column=2, sticky=W)
18893 sdir1 = Radiobutton(serialwindow, text=
"LSB First", variable=SerDirection, value=0 )
18894 sdir1.grid(row=8, column=0, sticky=W)
18895 sdir2 = Radiobutton(serialwindow, text=
"MSB First", variable=SerDirection, value=1 )
18896 sdir2.grid(row=8, column=1, columnspan=2, sticky=W)
18898 bsn1 = Button(serialwindow, text=
'Send', style=
"W5.TButton", command=BSendGS)
18899 bsn1.grid(row=9, column=0, sticky=W)
18900 dismissgsbutton = Button(serialwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyGenericSerialScreen)
18901 dismissgsbutton.grid(row=9, column=1, columnspan=2, sticky=W, pady=4)
18904 global serialwindow, GenericSerialStatus
18906 GenericSerialStatus.set(0)
18907 serialwindow.destroy()
18911 global digfltwindow, DigFiltStatus, RevDate, SWRev
18912 global DigFiltA, DigFiltB, DifFiltALength, DifFiltBLength, DifFiltAFile, DifFiltBFile
18913 global DigFiltABoxCar, DigFiltBBoxCar, BCALenEntry, BCBLenEntry
18915 if DigFiltStatus.get() == 0:
18916 DigFiltStatus.set(1)
18917 digfltwindow = Toplevel()
18918 digfltwindow.title(
"Digital Filter " + SWRev + RevDate)
18919 digfltwindow.resizable(FALSE,FALSE)
18920 digfltwindow.protocol(
"WM_DELETE_WINDOW", DestroyDigFiltScreen)
18922 frame2 = LabelFrame(digfltwindow, text=
"CH A Filter", style=
"A10R1.TLabelframe")
18923 frame3 = LabelFrame(digfltwindow, text=
"CH B Filter", style=
"A10R2.TLabelframe")
18924 frame2.pack(side=LEFT, expand=1, fill=X)
18925 frame3.pack(side=LEFT, expand=1, fill=X)
18927 digfilta = Frame( frame2 )
18928 digfilta.pack(side=TOP)
18931 lab1 = Checkbutton(digfilta,text=
"Filter CH A", variable=DigFiltA)
18932 lab1.grid(row=0, column=0, columnspan=2, sticky=W)
18933 lab3 = Checkbutton(digfilta,text=
"Box Car", variable=DigFiltABoxCar, command=BuildBoxCarA)
18934 lab3.grid(row=1, column=0, sticky=W)
18935 BCALenEntry = Entry(digfilta, width=3)
18936 BCALenEntry.bind(
"<Return>", onRetDigFiltA)
18937 BCALenEntry.bind(
'<MouseWheel>', onDigFiltAScroll)
18938 BCALenEntry.bind(
"<Button-4>", onDigFiltAScroll)
18939 BCALenEntry.bind(
"<Button-5>", onDigFiltAScroll)
18941 BCALenEntry.grid(row=1, column=1, sticky=W)
18942 BCALenEntry.delete(0,
"end")
18943 BCALenEntry.insert(0,2)
18944 bcalab = Label(digfilta, text=
"Length")
18945 bcalab.grid(row=1, column=2, sticky=W)
18946 DifFiltALength = Label(digfilta, text=
"Length = 0 ")
18947 DifFiltALength.grid(row=2, column=0, sticky=W)
18948 DifFiltAFile = Label(digfilta, text=
"File Name, none ")
18949 DifFiltAFile.grid(row=3, column=0, sticky=W)
18950 cald = Button(digfilta, text=
'Load CH A Filter Coef', command=BLoadDFiltA)
18951 cald.grid(row=4, column=0, columnspan=2, sticky=W)
18952 camath = Button(digfilta, text=
'CH A Filter formula', command=BDFiltAMath)
18953 camath.grid(row=5, column=0, columnspan=2, sticky=W)
18955 digfiltb = Frame( frame3 )
18956 digfiltb.pack(side=TOP)
18957 lab2 = Checkbutton(digfiltb,text=
"Filter CH B", variable=DigFiltB)
18958 lab2.grid(row=0, column=0, columnspan=2, sticky=W)
18959 lab4 = Checkbutton(digfiltb,text=
"Box Car", variable=DigFiltBBoxCar, command=BuildBoxCarB)
18960 lab4.grid(row=1, column=0, sticky=W)
18961 BCBLenEntry = Entry(digfiltb, width=3)
18962 BCBLenEntry.bind(
"<Return>", onRetDigFiltB)
18963 BCBLenEntry.bind(
'<MouseWheel>', onDigFiltBScroll)
18964 BCBLenEntry.bind(
"<Button-4>", onDigFiltBScroll)
18965 BCBLenEntry.bind(
"<Button-5>", onDigFiltBScroll)
18967 BCBLenEntry.grid(row=1, column=1, sticky=W)
18968 BCBLenEntry.delete(0,
"end")
18969 BCBLenEntry.insert(0,2)
18970 bcblab = Label(digfiltb, text=
"Length")
18971 bcblab.grid(row=1, column=2, sticky=W)
18972 DifFiltBLength = Label(digfiltb,text=
"Length = 0 ")
18973 DifFiltBLength.grid(row=2, column=0, sticky=W)
18974 DifFiltBFile = Label(digfiltb,text=
"File Name, none ")
18975 DifFiltBFile.grid(row=3, column=0, sticky=W)
18976 camath.grid(row=8, column=0, sticky=W)
18977 cbld = Button(digfiltb, text=
'Load CH B Filter Coef', command=BLoadDFiltB)
18978 cbld.grid(row=4, column=0, sticky=W)
18979 cbmath = Button(digfiltb, text=
'CH B Filter formula', command=BDFiltBMath)
18980 cbmath.grid(row=5, column=0, sticky=W)
18981 dismissdfbutton = Button(digfiltb, text=
"Dismiss", style=
"W8.TButton", command=DestroyDigFiltScreen)
18982 dismissdfbutton.grid(row=6, column=0, columnspan=1, sticky=W)
18992 global BCALenEntry, DFiltACoef, DigFiltABoxCar, DifFiltALength
18994 if DigFiltABoxCar.get() == 0:
18997 FLength = int(BCALenEntry.get())
19003 for n
in range(FLength):
19004 DFiltACoef.append(float(1.0/FLength))
19006 DFiltACoef = numpy.array(DFiltACoef)
19007 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19017 global BCBLenEntry, DFiltBCoef, DigFiltBBoxCar, DifFiltBLength
19019 if DigFiltBBoxCar.get() == 0:
19022 FLength = int(BCBLenEntry.get())
19028 for n
in range(FLength):
19029 DFiltBCoef.append(float(1.0/FLength))
19031 DFiltBCoef = numpy.array(DFiltBCoef)
19032 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19035 global digfltwindow, DigFiltStatus
19037 DigFiltStatus.set(0)
19038 digfltwindow.destroy()
19041 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile
19044 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
19046 CSVFile = open(filename)
19047 csv_f = csv.reader(CSVFile)
19049 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
19055 DFiltACoef.append(float(row[0]))
19057 print(
'skipping non-numeric row')
19058 DFiltACoef = numpy.array(DFiltACoef)
19059 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19060 DifFiltAFile.config(text =
"File Name, " + os.path.basename(filename))
19064 global DFiltACoef, digfltwindow, DifFiltALength, DifFiltAFile, DigFilterAString
19066 TempString = DigFilterAString
19067 DigFilterAString = askstring(
"CH A Filter Math Formula",
"Current Formula: " + DigFilterAString +
"\n\nNew Formula:\n", initialvalue=DigFilterAString, parent=digfltwindow)
19068 if (DigFilterAString ==
None):
19069 DigFilterAString = TempString
19071 DFiltACoef = eval(DigFilterAString)
19072 DFiltACoef = numpy.array(DFiltACoef)
19073 coefsum = numpy.sum(DFiltACoef)
19074 DFiltACoef = DFiltACoef / coefsum
19075 DifFiltALength.config(text =
"Length = " + str(int(len(DFiltACoef))))
19076 DifFiltAFile.config(text =
"Using Filter A formula" )
19079 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile
19082 filename = askopenfilename(defaultextension =
".csv", filetypes=[(
"CSV files",
"*.csv")], parent=digfltwindow)
19084 CSVFile = open(filename)
19085 csv_f = csv.reader(CSVFile)
19087 showwarning(
"WARNING",
"No such file found or wrong format!", parent=digfltwindow)
19093 DFiltBCoef.append(float(row[0]))
19095 print(
'skipping non-numeric row')
19096 DFiltBCoef = numpy.array(DFiltBCoef)
19097 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19098 DifFiltBFile.config(text =
"File Name, " + os.path.basename(filename))
19102 global DFiltBCoef, digfltwindow, DifFiltBLength, DifFiltBFile, DigFilterBString
19104 TempString = DigFilterBString
19105 DigFilterBString = askstring(
"CH B Filter Math Formula",
"Current Formula: " + DigFilterBString +
"\n\nNew Formula:\n", initialvalue=DigFilterBString, parent=digfltwindow)
19106 if (DigFilterBString ==
None):
19107 DigFilterBString = TempString
19109 DFiltBCoef = eval(DigFilterBString)
19110 DFiltBCoef = numpy.array(DFiltBCoef)
19111 coefsum = numpy.sum(DFiltBCoef)
19112 DFiltBCoef = DFiltBCoef / coefsum
19113 DifFiltBLength.config(text =
"Length = " + str(int(len(DFiltBCoef))))
19114 DifFiltBFile.config(text =
"Using Filter B formula" )
19117 global commandwindow, CommandStatus, ExecString, LastCommand, RevDate, SWRev
19119 if CommandStatus.get() == 0:
19120 CommandStatus.set(1)
19121 commandwindow = Toplevel()
19122 commandwindow.title(
"Command Line " + SWRev + RevDate)
19123 commandwindow.resizable(FALSE,FALSE)
19124 commandwindow.protocol(
"WM_DELETE_WINDOW", DestroyCommandScreen)
19125 toplab = Label(commandwindow,text=
"Command Line Interface ", style=
"A12B.TLabel")
19126 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
19127 cl1 = Label(commandwindow,text=
"Last command:")
19128 cl1.grid(row=1, column=0, sticky=W)
19129 LastCommand = Label(commandwindow,text=
" ")
19130 LastCommand.grid(row=2, column=0, columnspan=4, sticky=W)
19131 ExecString = Entry(commandwindow, width=40)
19132 ExecString.bind(
"<Return>", RExecuteFromString)
19133 ExecString.grid(row=3, column=0, columnspan=4, sticky=W)
19134 ExecString.delete(0,
"end")
19135 ExecString.insert(0,
"global ; ")
19136 executeclbutton = Button(commandwindow, text=
"Execute", style=
"W8.TButton", command=BExecuteFromString)
19137 executeclbutton.grid(row=4, column=0, sticky=W, pady=8)
19139 dismissclbutton = Button(commandwindow, text=
"Dismiss", style=
"W8.TButton", command=DestroyCommandScreen)
19140 dismissclbutton.grid(row=4, column=1, sticky=W, pady=7)
19143 global commandwindow, CommandStatus
19145 CommandStatus.set(0)
19146 commandwindow.destroy()
19153 global ExecString, LastCommand
19156 exec( ExecString.get() )
19157 LastCommand.config(text = ExecString.get() )
19159 LastCommand.config(text =
"Syntax Error Encountered" )
19163 global ca, GRW, XOL, GRH, Y0T, CANVASwidth, CANVASheight, FontSize
19166 CANVASwidth = event.width - 4
19167 CANVASheight = event.height - 4
19168 GRW = CANVASwidth - (2 * X0L)
19169 GRH = CANVASheight - (Y0T + (FontSize * 7))
19173 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
19174 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
19175 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
19176 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
19177 global ChaMeasString1, ChaMeasString2, ChaMeasString3, ChaMeasString4, ChaMeasString5, ChaMeasString6
19178 global ChbMeasString1, ChbMeasString2, ChbMeasString3, ChbMeasString4, ChbMeasString5, ChbMeasString6
19180 ValueText =
' {0:.4f} '.format(eval(ChaMeasString1))
19181 ChaValue1.config(text = ValueText)
19182 ValueText =
' {0:.4f} '.format(eval(ChaMeasString2))
19183 ChaValue2.config(text = ValueText)
19184 ValueText =
' {0:.4f} '.format(eval(ChaMeasString3))
19185 ChaValue3.config(text = ValueText)
19186 ValueText =
' {0:.4f} '.format(eval(ChaMeasString4))
19187 ChaValue4.config(text = ValueText)
19188 ValueText =
' {0:.4f} '.format(eval(ChaMeasString5))
19189 ChaValue5.config(text = ValueText)
19190 ValueText =
' {0:.4f} '.format(eval(ChaMeasString6))
19191 ChaValue6.config(text = ValueText)
19192 ValueText =
' {0:.4f} '.format(eval(ChbMeasString1))
19193 ChbValue1.config(text = ValueText)
19194 ValueText =
' {0:.4f} '.format(eval(ChbMeasString2))
19195 ChbValue2.config(text = ValueText)
19196 ValueText =
' {0:.4f} '.format(eval(ChbMeasString3))
19197 ChbValue3.config(text = ValueText)
19198 ValueText =
' {0:.4f} '.format(eval(ChbMeasString4))
19199 ChbValue4.config(text = ValueText)
19200 ValueText =
' {0:.4f} '.format(eval(ChbMeasString5))
19201 ChbValue5.config(text = ValueText)
19202 ValueText =
' {0:.4f} '.format(eval(ChbMeasString6))
19203 ChbValue6.config(text = ValueText)
19206 global measurewindow, MeasureStatus, RevDate, SWRev
19207 global ChaLab1, ChaLab12, ChaLab3, ChaLab4, ChaLab5, ChaLab6
19208 global ChaValue1, ChaValue2, ChaValue3, ChaValue4, ChaValue5, ChaValue6
19209 global ChbLab1, ChbLab12, ChbLab3, ChbLab4, ChbLab5, ChbLab6
19210 global ChbValue1, ChbValue2, ChbValue3, ChbValue4, ChbValue5, ChbValue6
19211 global ChaLableSrring1, ChaLableSrring2, ChaLableSrring3, ChaLableSrring4, ChaLableSrring5, ChaLableSrring6
19212 global ChbLableSrring1, ChbLableSrring2, ChbLableSrring3, ChbLableSrring4, ChbLableSrring5, ChbLableSrring6
19214 if MeasureStatus.get() == 0:
19215 MeasureStatus.set(1)
19216 measurewindow = Toplevel()
19217 measurewindow.title(
"Measurements " + SWRev + RevDate)
19218 measurewindow.resizable(FALSE,FALSE)
19219 measurewindow.protocol(
"WM_DELETE_WINDOW", DestroyMeasureScreen)
19220 toplab = Label(measurewindow,text=
"Measurements ", style=
"A12B.TLabel")
19221 toplab.grid(row=0, column=0, columnspan=2, sticky=W)
19222 ChaLab1 = Label(measurewindow,text=ChaLableSrring1, style=
"A10B.TLabel")
19223 ChaLab1.grid(row=1, column=0, columnspan=1, sticky=W)
19224 ChaValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19225 ChaValue1.grid(row=1, column=1, columnspan=1, sticky=W)
19226 ChaLab2 = Label(measurewindow,text=ChaLableSrring2, style=
"A10B.TLabel")
19227 ChaLab2.grid(row=1, column=2, columnspan=1, sticky=W)
19228 ChaValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19229 ChaValue2.grid(row=1, column=3, columnspan=1, sticky=W)
19230 ChaLab3 = Label(measurewindow,text=ChaLableSrring3, style=
"A10B.TLabel")
19231 ChaLab3.grid(row=2, column=0, columnspan=1, sticky=W)
19232 ChaValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19233 ChaValue3.grid(row=2, column=1, columnspan=1, sticky=W)
19234 ChaLab4 = Label(measurewindow,text=ChaLableSrring4, style=
"A10B.TLabel")
19235 ChaLab4.grid(row=2, column=2, columnspan=1, sticky=W)
19236 ChaValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19237 ChaValue4.grid(row=2, column=3, columnspan=1, sticky=W)
19238 ChaLab5 = Label(measurewindow,text=ChaLableSrring5, style=
"A10B.TLabel")
19239 ChaLab5.grid(row=3, column=0, columnspan=1, sticky=W)
19240 ChaValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19241 ChaValue5.grid(row=3, column=1, columnspan=1, sticky=W)
19242 ChaLab6 = Label(measurewindow,text=ChaLableSrring6, style=
"A10B.TLabel")
19243 ChaLab6.grid(row=3, column=2, columnspan=1, sticky=W)
19244 ChaValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19245 ChaValue6.grid(row=3, column=3, columnspan=1, sticky=W)
19247 ChbLab1 = Label(measurewindow,text=ChbLableSrring1, style=
"A10B.TLabel")
19248 ChbLab1.grid(row=4, column=0, columnspan=1, sticky=W)
19249 ChbValue1 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19250 ChbValue1.grid(row=4, column=1, columnspan=1, sticky=W)
19251 ChbLab2 = Label(measurewindow,text=ChbLableSrring2, style=
"A10B.TLabel")
19252 ChbLab2.grid(row=4, column=2, columnspan=1, sticky=W)
19253 ChbValue2 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19254 ChbValue2.grid(row=4, column=3, columnspan=1, sticky=W)
19255 ChbLab3 = Label(measurewindow,text=ChbLableSrring3, style=
"A10B.TLabel")
19256 ChbLab3.grid(row=5, column=0, columnspan=1, sticky=W)
19257 ChbValue3 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19258 ChbValue3.grid(row=5, column=1, columnspan=1, sticky=W)
19259 ChbLab4 = Label(measurewindow,text=ChbLableSrring4, style=
"A10B.TLabel")
19260 ChbLab4.grid(row=5, column=2, columnspan=1, sticky=W)
19261 ChbValue4 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19262 ChbValue4.grid(row=5, column=3, columnspan=1, sticky=W)
19263 ChbLab5 = Label(measurewindow,text=ChbLableSrring5, style=
"A10B.TLabel")
19264 ChbLab5.grid(row=6, column=0, columnspan=1, sticky=W)
19265 ChbValue5 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19266 ChbValue5.grid(row=6, column=1, columnspan=1, sticky=W)
19267 ChbLab6 = Label(measurewindow,text=ChbLableSrring6, style=
"A10B.TLabel")
19268 ChbLab6.grid(row=6, column=2, columnspan=1, sticky=W)
19269 ChbValue6 = Label(measurewindow,text=
"0.0000", style=
"A10B.TLabel")
19270 ChbValue6.grid(row=6, column=3, columnspan=1, sticky=W)
19273 global measurewindow, MeasureStatus
19275 MeasureStatus.set(0)
19276 measurewindow.destroy()
19279 global boardwindow, BoardStatus, session, devx, dev0, dev1, dev2, MultipleBoards
19280 global RevDate, BrdSel, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
19282 if len(session.devices) > 1
and MultipleBoards.get() > 0:
19283 if BoardStatus.get() == 0:
19285 boardwindow = Toplevel()
19286 boardwindow.title(
"Select Board " + RevDate)
19287 boardwindow.resizable(FALSE,FALSE)
19288 boardwindow.protocol(
"WM_DELETE_WINDOW", DestroyBoardScreen)
19289 toplab = Label(boardwindow,text=
"- Select ALM1000 -", style=
"A12B.TLabel")
19290 toplab.pack(side=TOP)
19291 for idx, devx
in enumerate(session.devices):
19292 BrdText =
"Board # " + str(idx)
19294 devx.set_led(0b010)
19295 FWRevOne = float(devx.fwver)
19296 HWRevOne = devx.hwver
19298 brd = Radiobutton(boardwindow, text=BrdText, style=
"Run.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
19300 devx.set_led(0b100)
19301 FWRevTwo = float(devx.fwver)
19302 HWRevTwo = devx.hwver
19304 brd = Radiobutton(boardwindow, text=BrdText, style=
"Stop.TRadiobutton", variable=BrdSel, value=idx, command=SelectBoard)
19306 devx.set_led(0b001)
19307 FWRevThree = float(devx.fwver)
19308 HWRevThree = devx.hwver
19310 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
19312 dev3 = session.devices[3]
19313 brd = Radiobutton(boardwindow, text=BrdText, variable=BrdSel, value=idx, command=SelectBoard)
19316 devx = session.devices[0]
19318 devx.set_led(0b010)
19320 FWRevOne = float(devx.fwver)
19321 HWRevOne = devx.hwver
19323 FWRevOne =
"Before 2.06"
19325 dev0 = session.devices[0]
19328 global boardwindow, BoardStatus
19331 boardwindow.destroy()
19334 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples, AWGSAMPLErate
19335 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree, SAMPLErate, MultipleBoards
19337 if DevID ==
"No Device" or DevID ==
"m1k":
19339 session = Session(ignore_dataflow=
True, sample_rate=SAMPLErate, queue_size=MaxSamples)
19342 if not session.devices:
19343 print(
'No Device plugged IN!')
19344 DevID =
"No Device"
19346 bcon.configure(text=
"Recon", style=
"RConn.TButton")
19348 session.configure(sample_rate=SAMPLErate)
19352 bcon.configure(text=
"Conn", style=
"GConn.TButton")
19353 devx.set_adc_mux(0)
19354 devx.ctrl_transfer(0x40, 0x24, 0x0, 0, 0, 0, 100)
19355 devx.ctrl_transfer(0x40, 0x25, 0x1, 0, 0, 0, 100)
19363 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, RUNstatus, FWRevOne, HWRevOne
19364 global PIO_0, PIO_1, PIO_2, PIO_3, PIO_4, PIO_5, PIO_6, PIO_7, cal, SAMPLErate, MaxSamples
19365 global IgnoreFirmwareCheck, SDATAPort, SCLKPort, SLATCHPort
19367 if RUNstatus.get() == 1:
19371 if BrdSel.get() == 0:
19373 session.remove(dev1)
19374 print(
"Removing dev1")
19376 print(
"Skipping dev1")
19378 session.remove(dev2)
19379 print(
"Removing dev2")
19381 print(
"Skipping dev2")
19385 if BrdSel.get() == 1:
19387 session.remove(dev0)
19388 print(
"Removing dev0")
19390 print(
"Skipping dev0")
19392 session.remove(dev2)
19393 print(
"Removing dev2")
19395 print(
"Skipping dev2")
19399 DevID = devx.serial
19401 FWRevOne = float(devx.fwver)
19402 HWRevOne = str(devx.hwver)
19403 print( FWRevOne, HWRevOne)
19406 if IgnoreFirmwareCheck == 0:
19407 if FWRevOne < 2.17:
19408 showwarning(
"WARNING",
"This ALICE version Requires Firmware version > 2.16")
19410 cal = devx.calibration
19411 CHA = devx.channels[
'A']
19412 CHA.mode = Mode.HI_Z_SPLIT
19413 CHB = devx.channels[
'B']
19414 CHB.mode = Mode.HI_Z_SPLIT
19427 devx.set_adc_mux(0)
19428 if devx.hwver ==
"F":
19429 print(
"Rev F Board I/O ports set")
19448 SDATAPort.set(PIO_1)
19449 SCLKPort.set(PIO_2)
19450 SLATCHPort.set(PIO_0)
19453 global SAMPLErate, AWGSAMPLErate, BaseSampleRate, session, ETSStatus, etssrlab, RevDate
19454 global Two_X_Sample, ADC_Mux_Mode, SampleRatewindow, SampleRateStatus, BaseRatesb
19455 global Alternate_Sweep_Mode, DeBugMode, FWRevOne, SWRev, SampRateList
19457 if SampleRateStatus.get() == 0:
19458 SampleRateStatus.set(1)
19459 SampleRatewindow = Toplevel()
19460 SampleRatewindow.title(
"Set Sample Rate " + SWRev + RevDate)
19461 SampleRatewindow.resizable(FALSE,FALSE)
19462 SampleRatewindow.protocol(
"WM_DELETE_WINDOW", DestroySampleRate)
19463 frame1 = Frame(SampleRatewindow, borderwidth=5, relief=RIDGE)
19464 frame1.grid(row=0, column=0, sticky=W)
19466 BaseRATE = Frame( frame1 )
19467 BaseRATE.grid(row=0, column=0, sticky=W)
19468 baseratelab = Label(BaseRATE, text=
"Base Sample Rate", style=
"A10B.TLabel")
19469 baseratelab.pack(side=LEFT)
19470 BaseRatesb = Spinbox(BaseRATE, width=6, values=SampRateList, command=SetSampleRate)
19471 BaseRatesb.bind(
'<MouseWheel>', onSrateScroll)
19472 BaseRatesb.bind(
"<Button-4>", onSrateScroll)
19473 BaseRatesb.bind(
"<Button-5>", onSrateScroll)
19474 BaseRatesb.bind(
"<Return>", onRetSrate)
19475 BaseRatesb.pack(side=LEFT)
19476 BaseRatesb.delete(0,
"end")
19477 BaseRatesb.insert(0,BaseSampleRate)
19480 if FWRevOne > 2.16:
19481 twoX = Checkbutton(frame1, text=
"Double Sample Rate", variable=Two_X_Sample, command=SetADC_Mux )
19482 twoX.grid(row=1, column=0, sticky=W)
19483 muxlab1 = Label(frame1, text=
"ADC MUX Modes", style=
"A10B.TLabel")
19484 muxlab1.grid(row=2, column=0, sticky=W)
19485 AltSweep = Checkbutton(frame1, text=
"Alternate Sweep Mode", variable=Alternate_Sweep_Mode )
19486 AltSweep.grid(row=3, column=0, sticky=W)
19487 chabuttons = Frame( frame1 )
19488 chabuttons.grid(row=4, column=0, sticky=W)
19489 muxrb1 = Radiobutton(chabuttons, text=
"VA and VB", variable=ADC_Mux_Mode, value=0, command=SetADC_Mux )
19490 muxrb1.pack(side=LEFT)
19491 muxrb2 = Radiobutton(chabuttons, text=
"IA and IB", variable=ADC_Mux_Mode, value=1, command=SetADC_Mux )
19492 muxrb2.pack(side=LEFT)
19493 chcbuttons = Frame( frame1 )
19494 chcbuttons.grid(row=5, column=0, sticky=W)
19495 muxrb5 = Radiobutton(chcbuttons, text=
"VA and IA", variable=ADC_Mux_Mode, value=4, command=SetADC_Mux )
19496 muxrb5.pack(side=LEFT)
19497 muxrb6 = Radiobutton(chcbuttons, text=
"VB and IB", variable=ADC_Mux_Mode, value=5, command=SetADC_Mux )
19498 muxrb6.pack(side=LEFT)
19501 chbbuttons = Frame( frame1 )
19502 chbbuttons.grid(row=nextrow, column=0, sticky=W)
19503 muxrb3 = Radiobutton(chbbuttons, text=
"VA and IB", variable=ADC_Mux_Mode, value=2, command=SetADC_Mux )
19504 muxrb3.pack(side=LEFT)
19505 muxrb4 = Radiobutton(chbbuttons, text=
"VB and IA", variable=ADC_Mux_Mode, value=3, command=SetADC_Mux )
19506 muxrb4.pack(side=LEFT)
19507 nextrow = nextrow + 1
19509 sratedismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySampleRate)
19510 sratedismissclbutton.grid(row=nextrow, column=0, sticky=W, pady=7)
19513 global SampleRatewindow, SampleRateStatus
19515 SampleRateStatus.set(0)
19516 SampleRatewindow.destroy()
19530 global SAMPLErate, BaseSampleRate, AWGSAMPLErate, session, ETSStatus, etssrlab, BaseRatesb
19531 global Two_X_Sample, ADC_Mux_Mode, rtsrlab, RUNstatus
19535 if (RUNstatus.get() == 1):
19539 NewRate = int(BaseRatesb.get())
19540 if NewRate <= 100000:
19541 BaseSampleRate = NewRate
19543 BaseSampleRate = 100000
19544 BaseRatesb.delete(0,
"end")
19545 BaseRatesb.insert(0,BaseSampleRate)
19546 SAMPLErate = BaseSampleRate
19549 session.configure(sample_rate=BaseSampleRate)
19550 BaseSampleRate = session.sample_rate
19552 SAMPLErate = BaseSampleRate
19554 AWGSAMPLErate = BaseSampleRate
19555 if ETSStatus.get() > 0:
19556 SRstring =
"RT Sample Rate = " + str(BaseSampleRate)
19557 rtsrlab.config(text=SRstring)
19559 BaseRatesb.delete(0,
"end")
19560 BaseRatesb.insert(0,BaseSampleRate)
19562 if (WasRunning == 1):
19567 global StopFreqEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
19571 StopFrequency = float(StopFreqEntry.get())
19573 StopFreqEntry.delete(0,
"end")
19574 StopFreqEntry.insert(0,50000)
19575 StopFrequency = 50000
19576 if FWRevOne > 2.16:
19577 if StopFrequency >= 50000:
19578 Two_X_Sample.set(1)
19579 ADC_Mux_Mode.set(0)
19582 Two_X_Sample.set(0)
19583 ADC_Mux_Mode.set(0)
19587 global StopBodeEntry, Two_X_Sample, ADC_Mux_Mode, FWRevOne
19591 StopFrequency = float(StopBodeEntry.get())
19593 StopBodeEntry.delete(0,
"end")
19594 StopBodeEntry.insert(0,20000)
19595 StopFrequency = 20000
19596 if FWRevOne > 2.16:
19597 if StopFrequency >= 20000:
19598 Two_X_Sample.set(1)
19599 ADC_Mux_Mode.set(0)
19602 Two_X_Sample.set(0)
19603 ADC_Mux_Mode.set(0)
19607 global devx, SAMPLErate, BaseSampleRate, Two_X_Sample, ADC_Mux_Mode, CHA, CHB
19608 global v1_adc_conf, i1_adc_conf, v2_adc_conf, i2_adc_conf
19610 if Two_X_Sample.get() == 1:
19611 if ADC_Mux_Mode.get() == 0:
19612 devx.set_adc_mux(1)
19613 elif ADC_Mux_Mode.get() == 1:
19614 devx.set_adc_mux(2)
19615 elif ADC_Mux_Mode.get() == 2:
19617 devx.set_adc_mux(2)
19619 devx.set_adc_mux(7)
19620 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
19621 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
19622 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
19623 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
19625 elif ADC_Mux_Mode.get() == 3:
19628 devx.set_adc_mux(7)
19629 devx.ctrl_transfer(0x40, 0x20, v1_adc_conf, 0, 0, 0, 100)
19630 devx.ctrl_transfer(0x40, 0x21, i1_adc_conf, 0, 0, 0, 100)
19631 devx.ctrl_transfer(0x40, 0x22, v2_adc_conf, 0, 0, 0, 100)
19632 devx.ctrl_transfer(0x40, 0x22, i2_adc_conf, 0, 0, 0, 100)
19634 elif ADC_Mux_Mode.get() == 4:
19636 devx.set_adc_mux(4)
19637 elif ADC_Mux_Mode.get() == 5:
19639 devx.set_adc_mux(5)
19640 SAMPLErate = BaseSampleRate * 2
19642 devx.set_adc_mux(0)
19643 SAMPLErate = BaseSampleRate
19646 global ADC_Mux_Mode, Alternate_Sweep_Mode, ShowC1_V, ShowC1_I, ShowC2_V, ShowC2_I
19648 if ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
19649 ADC_Mux_Mode.set(0)
19650 Alternate_Sweep_Mode.set(1)
19651 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 0:
19652 ADC_Mux_Mode.set(0)
19653 Alternate_Sweep_Mode.set(1)
19654 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
19655 ADC_Mux_Mode.set(0)
19656 Alternate_Sweep_Mode.set(1)
19657 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
19658 ADC_Mux_Mode.set(0)
19659 Alternate_Sweep_Mode.set(1)
19660 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
19661 ADC_Mux_Mode.set(0)
19662 Alternate_Sweep_Mode.set(1)
19664 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
19665 ADC_Mux_Mode.set(1)
19666 Alternate_Sweep_Mode.set(0)
19667 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
19668 ADC_Mux_Mode.set(1)
19669 Alternate_Sweep_Mode.set(0)
19670 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 0
and ShowC2_I.get() == 1:
19671 ADC_Mux_Mode.set(1)
19672 Alternate_Sweep_Mode.set(0)
19673 elif ShowC1_V.get() == 1
and ShowC1_I.get() == 1
and ShowC2_V.get() == 0
and ShowC2_I.get() == 0:
19674 ADC_Mux_Mode.set(4)
19675 Alternate_Sweep_Mode.set(0)
19676 elif ShowC1_V.get() == 0
and ShowC1_I.get() == 0
and ShowC2_V.get() == 1
and ShowC2_I.get() == 1:
19677 ADC_Mux_Mode.set(5)
19678 Alternate_Sweep_Mode.set(0)
19680 ADC_Mux_Mode.set(0)
19681 Alternate_Sweep_Mode.set(0)
19686 global devx, dev0, dev1, dev2, session, BrdSel, CHA, CHB, DevID, MaxSamples
19687 global bcon, FWRevOne, HWRevOne, FWRevTwo, HWRevTwo, WRevThree, HWRevThree
19690 if askyesno(
"Update current firmware",
"Flash new firmware to current device:\n(Yes) or (No)?"):
19691 filename = askopenfilename(defaultextension =
".bin", filetypes=[(
"Binary",
"*.bin")])
19696 print(
"Cancel current session.")
19698 print( session.cancelled)
19700 print(
"Waiting 5...")
19702 print(
"Put board in Samba mode and flash firmware.")
19703 session.flash_firmware(filename)
19705 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
19714 showwarning(
"Complete",
"Flash Firmware Complete: \n Un-plug board to cycle power.")
19715 showwarning(
"Exit ALICE",
"Must Exit Program: \n Restart ALICE to continue.")
19727 global OhmDisp, OhmStatus, ohmwindow, RevDate, RMode, OhmA0, OhmA1, OhmRunStatus
19728 global CHATestVEntry, CHATestREntry, SWRev, AWGSync, OnBoardRes
19730 if OhmStatus.get() == 0:
19735 ohmwindow = Toplevel()
19736 ohmwindow.title(
"DC Ohmmeter " + SWRev + RevDate)
19737 ohmwindow.resizable(FALSE,FALSE)
19738 ohmwindow.protocol(
"WM_DELETE_WINDOW", DestroyOhmScreen)
19739 frame1 = Frame(ohmwindow, borderwidth=5, relief=RIDGE)
19740 frame1.grid(row=0, column=0, sticky=W)
19742 buttons = Frame( frame1 )
19743 buttons.grid(row=0, column=0, sticky=W)
19744 rb2 = Radiobutton(buttons, text=
"Run", style=
"Run.TRadiobutton", variable=OhmRunStatus, value=1, command=BStartOhm )
19745 rb2.pack(side=LEFT)
19746 rb1 = Radiobutton(buttons, text=
"Stop", style=
"Stop.TRadiobutton", variable=OhmRunStatus, value=0, command=BStop )
19747 rb1.pack(side=LEFT)
19749 OhmA0 = Label(frame1, style=
"A16B.TLabel")
19750 OhmA0.grid(row=1, column=0, columnspan=2, sticky=W)
19751 OhmA0.config(text =
"0.000 Ohms")
19753 OhmA1 = Label(frame1, style=
"A12B.TLabel")
19754 OhmA1.grid(row=2, column=0, columnspan=2, sticky=W)
19755 OhmA1.config(text =
"Meas 0.00 mA 0.00 V")
19757 TestVA = Frame( frame1 )
19758 TestVA.grid(row=3, column=0, sticky=W)
19759 chatestvlab = Label(TestVA, text=
"Test Voltage", style=
"A10B.TLabel")
19760 chatestvlab.pack(side=LEFT)
19761 CHATestVEntry = Entry(TestVA, width=6)
19762 CHATestVEntry.pack(side=LEFT)
19763 CHATestVEntry.bind(
'<MouseWheel>', onTextScroll)
19764 CHATestVEntry.bind(
"<Button-4>", onTextScroll)
19765 CHATestVEntry.bind(
"<Button-5>", onTextScroll)
19766 CHATestVEntry.delete(0,
"end")
19767 CHATestVEntry.insert(0,5.0)
19771 TestMode = Frame( frame1 )
19772 TestMode.grid(row=4, column=0, sticky=W)
19773 modelab = Label(TestMode, text=
"Known Res", style=
"A10B.TLabel")
19774 modelab.pack(side=LEFT)
19775 rm3 = Radiobutton(TestMode, text=
"Ext", variable=RMode, value=0)
19776 rm3.pack(side=LEFT)
19777 rm4 = Radiobutton(TestMode, text=
"Int", variable=RMode, value=1)
19778 rm4.pack(side=LEFT)
19780 TestRA = Frame( frame1 )
19781 TestRA.grid(row=5, column=0, sticky=W)
19782 chatestrlab = Label(TestRA, text=
"Known Res", style=
"A10B.TLabel")
19783 chatestrlab.pack(side=LEFT)
19784 CHATestREntry = Entry(TestRA, width=6)
19785 CHATestREntry.pack(side=LEFT)
19786 CHATestREntry.bind(
'<MouseWheel>', onTextScroll)
19787 CHATestREntry.bind(
"<Button-4>", onTextScroll)
19788 CHATestREntry.bind(
"<Button-5>", onTextScroll)
19789 CHATestREntry.delete(0,
"end")
19790 CHATestREntry.insert(0,OnBoardRes)
19792 ohmdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyOhmScreen)
19793 ohmdismissclbutton.grid(row=6, column=0, sticky=W, pady=7)
19796 global ohmwindow, OhmStatus, OhmDisp
19801 ohmwindow.destroy()
19804 global FMulXEntry, MulXEntry, etswindow, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate
19805 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, enb1, rtsrlab, etssrlab, RevDate, SWRev
19806 global MinigenScreenStatus, DeBugMode
19809 if ETSStatus.get() == 0:
19810 BaseFreq = (-10, -15, -20, -25, -30, -35, -40, -45, -50, -60, -70, -80, -90, -100)
19813 etswindow = Toplevel()
19814 etswindow.title(
"ETS Controls " + SWRev + RevDate)
19815 etswindow.resizable(FALSE,FALSE)
19816 etswindow.protocol(
"WM_DELETE_WINDOW", DestroyETSScreen)
19817 frame1 = Frame(etswindow, borderwidth=5, relief=RIDGE)
19818 frame1.grid(row=0, column=0, sticky=W)
19820 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
19821 rtsrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
19822 rtsrlab.grid(row=1, column=0, sticky=W)
19823 ESRstring =
"ET Sample Rate = " + str(SAMPLErate)
19824 etssrlab = Label(frame1, text=SRstring, style=
"A10B.TLabel")
19825 etssrlab.grid(row=2, column=0, sticky=W)
19826 etssrbutton = Button(frame1, text=
"Set RT Sample Rate", command=MakeSampleRateMenu)
19827 etssrbutton.grid(row=3, column=0, sticky=W, pady=7)
19828 enb1 = Checkbutton(frame1,text=
"Enable ETS", variable=ETSDisp, command=ETSCheckBox)
19829 enb1.grid(row=4, column=0, sticky=W)
19831 Divx = Frame( frame1 )
19832 Divx.grid(row=5, column=0, sticky=W)
19833 DivXEntry = Entry(Divx, width=6)
19834 DivXEntry.bind(
'<MouseWheel>', ETSscroll)
19835 DivXEntry.bind(
"<Button-4>", ETSscroll)
19836 DivXEntry.bind(
"<Button-5>", ETSscroll)
19837 DivXEntry.pack(side=RIGHT)
19838 DivXEntry.delete(0,
"end")
19839 DivXEntry.insert(0,2)
19840 divxlab = Label( Divx, text =
"Divide Factor")
19841 divxlab.pack(side=RIGHT)
19845 FOffEntry = Label(frame1, text=
"Samples")
19846 FOffEntry.grid(row=GridRow+1, column=0, sticky=W)
19847 MulXEntry = Label( frame1, text =
"Rec Len Mul")
19848 MulXEntry.grid(row=GridRow+2, column=0, sticky=W)
19849 GridRow = GridRow + 2
19851 eqivsamplerate = Label(frame1, text=
"MHz", style=
"A10B.TLabel")
19852 eqivsamplerate.grid(row=GridRow+1, column=0, sticky=W)
19854 FConv = Frame( frame1 )
19855 FConv.grid(row=GridRow+2, column=0, sticky=W)
19856 FMulXEntry = Entry(FConv, width=3)
19857 FMulXEntry.bind(
'<MouseWheel>', ETSscroll)
19858 FMulXEntry.bind(
"<Button-4>", ETSscroll)
19859 FMulXEntry.bind(
"<Button-5>", ETSscroll)
19860 FMulXEntry.pack(side=RIGHT)
19861 FMulXEntry.delete(0,
"end")
19862 FMulXEntry.insert(0,1)
19863 fminlab = Label( FConv, text =
"Freq Multiplier")
19864 fminlab.pack(side=RIGHT)
19866 FminDisp = Label(frame1, text=
"32768 Hz", style=
"A10B.TLabel")
19867 FminDisp.grid(row=GridRow+3, column=0, sticky=W)
19869 if MinigenScreenStatus.get() > 0:
19870 mgloadbutton = Button(frame1, text=
"Load to MinGen", command=MGLoad)
19871 mgloadbutton.grid(row=GridRow+4, column=0, sticky=W)
19872 GridRow = GridRow + 1
19874 dirlab = Label(frame1, text=
"Sample Data Order", style=
"A10B.TLabel")
19875 dirlab.grid(row=GridRow+5, column=0, sticky=W)
19876 DataMode = Frame( frame1 )
19877 DataMode.grid(row=GridRow+6, column=0, sticky=W)
19878 dm3 = Radiobutton(DataMode, text=
"Forward", variable=ETSDir, value=0)
19879 dm3.pack(side=LEFT)
19880 dm4 = Radiobutton(DataMode, text=
"Reverse", variable=ETSDir, value=1)
19881 dm4.pack(side=LEFT)
19882 tclab = Label(frame1, text=
"CH B Time Shift", style=
"A10B.TLabel")
19883 tclab.grid(row=GridRow+7, column=0, sticky=W)
19884 TSMode = Frame( frame1 )
19885 TSMode.grid(row=GridRow+8, column=0, sticky=W)
19886 ETSts = Entry(TSMode, width=6)
19887 ETSts.bind(
'<MouseWheel>', ETSscroll)
19888 ETSts.bind(
"<Button-4>", ETSscroll)
19889 ETSts.bind(
"<Button-5>", ETSscroll)
19890 ETSts.pack(side=RIGHT)
19891 ETSts.delete(0,
"end")
19893 ETStslab = Label( TSMode, text =
"Factor")
19894 ETStslab.pack(side=RIGHT)
19896 etsdismissclbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroyETSScreen)
19897 etsdismissclbutton.grid(row=GridRow+9, column=0, sticky=W, pady=7)
19902 global etswindow, ETSStatus, ETSDisp
19907 etswindow.destroy()
19910 global MinigenFout, Fmin, ETSDir
19912 MinigenFout.delete(0,
"end")
19913 if ETSDir.get() == 0:
19914 MinigenFout.insert(0,Fmin+20)
19916 MinigenFout.insert(0,Fmin-20)
19930 global Two_X_Sample, HtMulEntry, ETSts, etssrlab, SAMPLErate
19935 TscaleX = float(HtMulEntry.get())
19937 HtMulEntry.delete(0,END)
19938 HtMulEntry.insert(0, 1)
19939 if Two_X_Sample.get() == 0:
19940 ToffsetX = TscaleX/10.0
19943 ETSts.delete(0,
"end")
19944 ETSts.insert(0,ToffsetX)
19945 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
19946 etssrlab.config(text=SRstring)
19952 global FMulXEntry, MulXEntry, ETSStatus, ETSDisp, ETSDir, ETSts, eqivsamplerate, MaxETSrecord
19953 global SAMPLErate, DivXEntry, FOffEntry, FminDisp, DivX, FOff, MulX, Fmin, FMul, SAMPLErate, TIMEdiv
19954 global FminEntry, HtMulEntry, Two_X_Sample, DeBugMode
19957 MaxETSrecord = int(SAMPLErate * 10 * TIMEdiv / 1000.0)
19959 MaxETSrecord = int(SAMPLErate * 20 * TIMEdiv / 1000.0)
19960 if (MaxETSrecord*100) > MaxSamples:
19961 MaxETSrecord = MaxSamples / 100
19963 DivX = float(eval(DivXEntry.get()))
19968 DivXEntry.delete(0,END)
19969 DivXEntry.insert(0, DivX)
19971 DivXEntry.delete(0,END)
19972 DivXEntry.insert(0, DivX)
19975 MulX = (DivX*SAMPLErate)/(100*FOff)
19976 while MulX > MaxETSrecord:
19978 MulX = (DivX*SAMPLErate)/(100*FOff)
19981 SRstring =
"Rec Len Mul = " + str(MulX) +
" samples"
19982 MulXEntry.config(text = SRstring)
19983 SRstring =
"Offset = " + str(FOff) +
" samples"
19984 FOffEntry.config(text = SRstring)
19985 baseFreq = SAMPLErate/DivX
19987 FMul = float(eval(FMulXEntry.get()))
19990 FMulXEntry.delete(0,END)
19991 FMulXEntry.insert(0, int(FMul))
19994 FMulXEntry.delete(0,END)
19995 FMulXEntry.insert(0, int(FMul))
19997 FMulXEntry.delete(0,END)
19998 FMulXEntry.insert(0, int(FMul))
19999 FreqMin = baseFreq * FMul
20000 SRstring =
"Multiplied Freq = " +
' {0:.1f} '.format(FreqMin) +
" Hz"
20001 FminDisp.config(text = SRstring)
20002 SRstring =
"Base Frequency = " +
' {0:.2f} '.format(baseFreq) +
" Hz"
20003 eqivsamplerate.config(text = SRstring)
20006 MinFreq = eval(FminEntry.get()) * 1000
20008 FminEntry.delete(0,END)
20009 FminEntry.insert(0, 25)
20012 TscaleX = int((MinFreq)/(DivX * (MinFreq - FreqMin)))
20020 TscaleX = abs(TscaleX)
20021 if Two_X_Sample.get() == 0:
20022 ToffsetX = TscaleX/10.0
20025 ETSts.delete(0,
"end")
20026 ETSts.insert(0,ToffsetX)
20028 HtMulEntry.delete(0,END)
20029 HtMulEntry.insert(0, TscaleX)
20030 SRstring =
"RT Sample Rate = " + str(SAMPLErate)
20031 rtsrlab.config(text=SRstring)
20032 SRstring =
"ET Sample Rate = " + str(SAMPLErate*TscaleX)
20033 etssrlab.config(text=SRstring)
20044 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
20045 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
20046 global AWG_Amp_Mode, SWRev, EnableHSsampling, Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
20047 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry, TrgLPFEntry, Trigger_LPF_length
20048 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20049 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
20050 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20051 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20053 if SettingsStatus.get() == 0:
20054 SettingsStatus.set(1)
20055 Settingswindow = Toplevel()
20056 Settingswindow.title(
"Settings " + SWRev + RevDate)
20057 Settingswindow.resizable(FALSE,FALSE)
20058 Settingswindow.protocol(
"WM_DELETE_WINDOW", DestroySettings)
20059 frame1 = Frame(Settingswindow, borderwidth=5, relief=RIDGE)
20060 frame1.grid(row=0, column=0, sticky=W)
20062 zstlab = Label(frame1, text=
"FFT Zero Stuffing", style=
"A10B.TLabel")
20063 zstlab.grid(row=0, column=0, sticky=W)
20064 zstMode = Frame( frame1 )
20065 zstMode.grid(row=0, column=1, sticky=W)
20066 ZSTuff = Entry(zstMode, width=4)
20067 ZSTuff.bind(
"<Return>", SettingsTextKey)
20068 ZSTuff.bind(
'<MouseWheel>', Settingsscroll)
20069 ZSTuff.bind(
"<Button-4>", Settingsscroll)
20070 ZSTuff.bind(
"<Button-5>", Settingsscroll)
20071 ZSTuff.bind(
'<Key>', SettingsTextKey)
20072 ZSTuff.pack(side=RIGHT)
20073 ZSTuff.delete(0,
"end")
20074 ZSTuff.insert(0,ZEROstuffing.get())
20076 Avglab = Label(frame1, text=
"Number Traces to Average", style=
"A10B.TLabel")
20077 Avglab.grid(row=1, column=0, sticky=W)
20078 AvgMode = Frame( frame1 )
20079 AvgMode.grid(row=1, column=1, sticky=W)
20080 TAvg = Entry(AvgMode, width=4)
20081 TAvg.bind(
"<Return>", SettingsTextKey)
20082 TAvg.bind(
'<MouseWheel>', Settingsscroll)
20083 TAvg.bind(
"<Button-4>", Settingsscroll)
20084 TAvg.bind(
"<Button-5>", Settingsscroll)
20085 TAvg.bind(
'<Key>', SettingsTextKey)
20086 TAvg.pack(side=RIGHT)
20087 TAvg.delete(0,
"end")
20088 TAvg.insert(0,TRACEaverage.get())
20090 HarMlab = Label(frame1, text=
"Number of Harmonic Markers", style=
"A10B.TLabel")
20091 HarMlab.grid(row=2, column=0, sticky=W)
20092 HarMMode = Frame( frame1 )
20093 HarMMode.grid(row=2, column=1, sticky=W)
20094 HarMon = Entry(HarMMode, width=4)
20095 HarMon.bind(
"<Return>", SettingsTextKey)
20096 HarMon.bind(
'<MouseWheel>', Settingsscroll)
20097 HarMon.bind(
"<Button-4>", Settingsscroll)
20098 HarMon.bind(
"<Button-5>", Settingsscroll)
20099 HarMon.bind(
'<Key>', SettingsTextKey)
20100 HarMon.pack(side=RIGHT)
20101 HarMon.delete(0,
"end")
20102 HarMon.insert(0,HarmonicMarkers.get())
20104 Vdivlab = Label(frame1, text=
"Number Vertical Div (SA, Bode)", style=
"A10B.TLabel")
20105 Vdivlab.grid(row=3, column=0, sticky=W)
20106 VdivMode = Frame( frame1 )
20107 VdivMode.grid(row=3, column=1, sticky=W)
20108 VDivE = Entry(VdivMode, width=4)
20109 VDivE.bind(
"<Return>", SettingsTextKey)
20110 VDivE.bind(
'<MouseWheel>', Settingsscroll)
20111 VDivE.bind(
"<Button-4>", Settingsscroll)
20112 VDivE.bind(
"<Button-5>", Settingsscroll)
20113 VDivE.bind(
'<Key>', SettingsTextKey)
20114 VDivE.pack(side=RIGHT)
20115 VDivE.delete(0,
"end")
20116 VDivE.insert(0,Vdiv.get())
20118 Twdthlab = Label(frame1, text=
"Trace Width in Pixels", style=
"A10B.TLabel")
20119 Twdthlab.grid(row=4, column=0, sticky=W)
20120 TwdthMode = Frame( frame1 )
20121 TwdthMode.grid(row=4, column=1, sticky=W)
20122 TwdthE = Entry(TwdthMode, width=4)
20123 TwdthE.bind(
"<Return>", SettingsTextKey)
20124 TwdthE.bind(
'<MouseWheel>', Settingsscroll)
20125 TwdthE.bind(
"<Button-4>", Settingsscroll)
20126 TwdthE.bind(
"<Button-5>", Settingsscroll)
20127 TwdthE.bind(
'<Key>', SettingsTextKey)
20128 TwdthE.pack(side=RIGHT)
20129 TwdthE.delete(0,
"end")
20130 TwdthE.insert(0,TRACEwidth.get())
20132 Gwdthlab = Label(frame1, text=
"Grid Width in Pixels", style=
"A10B.TLabel")
20133 Gwdthlab.grid(row=5, column=0, sticky=W)
20134 GwdthMode = Frame( frame1 )
20135 GwdthMode.grid(row=5, column=1, sticky=W)
20136 GwdthE = Entry(GwdthMode, width=4)
20137 GwdthE.bind(
"<Return>", SettingsTextKey)
20138 GwdthE.bind(
'<MouseWheel>', Settingsscroll)
20139 GwdthE.bind(
"<Button-4>", Settingsscroll)
20140 GwdthE.bind(
"<Button-5>", Settingsscroll)
20141 GwdthE.bind(
'<Key>', SettingsTextKey)
20142 GwdthE.pack(side=RIGHT)
20143 GwdthE.delete(0,
"end")
20144 GwdthE.insert(0,GridWidth.get())
20146 trglpflab = Label(frame1, text=
"Trigger LPF Length", style=
"A10B.TLabel")
20147 trglpflab.grid(row=6, column=0, sticky=W)
20148 TrgLPFMode = Frame( frame1 )
20149 TrgLPFMode.grid(row=6, column=1, sticky=W)
20150 TrgLPFEntry = Entry(TrgLPFMode, width=4)
20151 TrgLPFEntry.bind(
"<Return>", SettingsTextKey)
20152 TrgLPFEntry.bind(
'<MouseWheel>', Settingsscroll)
20153 TrgLPFEntry.bind(
"<Button-4>", Settingsscroll)
20154 TrgLPFEntry.bind(
"<Button-5>", Settingsscroll)
20155 TrgLPFEntry.bind(
'<Key>', SettingsTextKey)
20156 TrgLPFEntry.pack(side=RIGHT)
20157 TrgLPFEntry.delete(0,
"end")
20158 TrgLPFEntry.insert(0,Trigger_LPF_length.get())
20160 AwgAmplrb1 = Radiobutton(frame1, text=
"AWG Min/Max", variable=AWG_Amp_Mode, value=0, command=UpdateAWGWin)
20161 AwgAmplrb1.grid(row=7, column=0, sticky=W)
20162 AwgAmplrb2 = Radiobutton(frame1, text=
"AWG Amp/Off ", variable=AWG_Amp_Mode, value=1, command=UpdateAWGWin)
20163 AwgAmplrb2.grid(row=7, column=1, sticky=W)
20165 cha_Rcomplab = Label(frame1, text=
"CHA Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20166 cha_Rcomplab.grid(row=8, column=0, sticky=W)
20167 cha_RcomplabMode = Frame( frame1 )
20168 cha_RcomplabMode.grid(row=8, column=1, sticky=W)
20169 cha_TC1Entry = Entry(cha_RcomplabMode, width=5)
20170 cha_TC1Entry.bind(
"<Return>", SettingsTextKey)
20171 cha_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20172 cha_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20173 cha_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20174 cha_TC1Entry.bind(
'<Key>', SettingsTextKey)
20175 cha_TC1Entry.pack(side=LEFT)
20176 cha_TC1Entry.delete(0,
"end")
20177 cha_TC1Entry.insert(0,CHA_TC1.get())
20178 cha_A1Entry = Entry(cha_RcomplabMode, width=5)
20179 cha_A1Entry.bind(
"<Return>", SettingsTextKey)
20180 cha_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20181 cha_A1Entry.bind(
"<Button-4>", Settingsscroll)
20182 cha_A1Entry.bind(
"<Button-5>", Settingsscroll)
20183 cha_A1Entry.bind(
'<Key>', SettingsTextKey)
20184 cha_A1Entry.pack(side=LEFT)
20185 cha_A1Entry.delete(0,
"end")
20186 cha_A1Entry.insert(0,CHA_A1.get())
20188 cha_Ccomplab = Label(frame1, text=
"CHA Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20189 cha_Ccomplab.grid(row=9, column=0, sticky=W)
20190 cha_CcomplabMode = Frame( frame1 )
20191 cha_CcomplabMode.grid(row=9, column=1, sticky=W)
20192 cha_TC2Entry = Entry(cha_CcomplabMode, width=5)
20193 cha_TC2Entry.bind(
"<Return>", SettingsTextKey)
20194 cha_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20195 cha_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20196 cha_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20197 cha_TC2Entry.bind(
'<Key>', SettingsTextKey)
20198 cha_TC2Entry.pack(side=LEFT)
20199 cha_TC2Entry.delete(0,
"end")
20200 cha_TC2Entry.insert(0,CHA_TC2.get())
20201 cha_A2Entry = Entry(cha_CcomplabMode, width=5)
20202 cha_A2Entry.bind(
"<Return>", SettingsTextKey)
20203 cha_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20204 cha_A2Entry.bind(
"<Button-4>", Settingsscroll)
20205 cha_A2Entry.bind(
"<Button-5>", Settingsscroll)
20206 cha_A2Entry.bind(
'<Key>', SettingsTextKey)
20207 cha_A2Entry.pack(side=LEFT)
20208 cha_A2Entry.delete(0,
"end")
20209 cha_A2Entry.insert(0,CHA_A2.get())
20211 chb_Rcomplab = Label(frame1, text=
"CHB Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20212 chb_Rcomplab.grid(row=10, column=0, sticky=W)
20213 chb_RcomplabMode = Frame( frame1 )
20214 chb_RcomplabMode.grid(row=10, column=1, sticky=W)
20215 chb_TC1Entry = Entry(chb_RcomplabMode, width=5)
20216 chb_TC1Entry.bind(
"<Return>", SettingsTextKey)
20217 chb_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20218 chb_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20219 chb_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20220 chb_TC1Entry.bind(
'<Key>', SettingsTextKey)
20221 chb_TC1Entry.pack(side=LEFT)
20222 chb_TC1Entry.delete(0,
"end")
20223 chb_TC1Entry.insert(0,CHB_TC1.get())
20224 chb_A1Entry = Entry(chb_RcomplabMode, width=5)
20225 chb_A1Entry.bind(
"<Return>", SettingsTextKey)
20226 chb_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20227 chb_A1Entry.bind(
"<Button-4>", Settingsscroll)
20228 chb_A1Entry.bind(
"<Button-5>", Settingsscroll)
20229 chb_A1Entry.bind(
'<Key>', SettingsTextKey)
20230 chb_A1Entry.pack(side=LEFT)
20231 chb_A1Entry.delete(0,
"end")
20232 chb_A1Entry.insert(0,CHB_A1.get())
20234 chb_Ccomplab = Label(frame1, text=
"CHB Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20235 chb_Ccomplab.grid(row=11, column=0, sticky=W)
20236 chb_CcomplabMode = Frame( frame1 )
20237 chb_CcomplabMode.grid(row=11, column=1, sticky=W)
20238 chb_TC2Entry = Entry(chb_CcomplabMode, width=5)
20239 chb_TC2Entry.bind(
"<Return>", SettingsTextKey)
20240 chb_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20241 chb_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20242 chb_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20243 chb_TC2Entry.bind(
'<Key>', SettingsTextKey)
20244 chb_TC2Entry.pack(side=LEFT)
20245 chb_TC2Entry.delete(0,
"end")
20246 chb_TC2Entry.insert(0,CHB_TC2.get())
20247 chb_A2Entry = Entry(chb_CcomplabMode, width=5)
20248 chb_A2Entry.bind(
"<Return>", SettingsTextKey)
20249 chb_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20250 chb_A2Entry.bind(
"<Button-4>", Settingsscroll)
20251 chb_A2Entry.bind(
"<Button-5>", Settingsscroll)
20252 chb_A2Entry.bind(
'<Key>', SettingsTextKey)
20253 chb_A2Entry.pack(side=LEFT)
20254 chb_A2Entry.delete(0,
"end")
20255 chb_A2Entry.insert(0,CHB_A2.get())
20257 if EnableHSsampling > 0:
20258 hs_ckb1 = Checkbutton(frame1, text=
"Auto Set ETS Comp", variable=Auto_ETS_Comp, command=SetETSComp)
20259 hs_ckb1.grid(row=12, column=0, sticky=W)
20260 hs1_Complab = Label(frame1, text=
"ETS Comp, TC1 (uSec), A1", style=
"A10B.TLabel")
20261 hs1_Complab.grid(row=13, column=0, sticky=W)
20262 hs1_ComplabMode = Frame( frame1 )
20263 hs1_ComplabMode.grid(row=13, column=1, sticky=W)
20264 ets_TC1Entry = Entry(hs1_ComplabMode, width=5)
20265 ets_TC1Entry.bind(
"<Return>", SettingsTextKey)
20266 ets_TC1Entry.bind(
'<MouseWheel>', Settingsscroll)
20267 ets_TC1Entry.bind(
"<Button-4>", Settingsscroll)
20268 ets_TC1Entry.bind(
"<Button-5>", Settingsscroll)
20269 ets_TC1Entry.bind(
'<Key>', SettingsTextKey)
20270 ets_TC1Entry.pack(side=LEFT)
20271 ets_TC1Entry.delete(0,
"end")
20272 ets_TC1Entry.insert(0,ETS_TC1.get())
20273 ets_A1Entry = Entry(hs1_ComplabMode, width=5)
20274 ets_A1Entry.bind(
"<Return>", SettingsTextKey)
20275 ets_A1Entry.bind(
'<MouseWheel>', Settingsscroll)
20276 ets_A1Entry.bind(
"<Button-4>", Settingsscroll)
20277 ets_A1Entry.bind(
"<Button-5>", Settingsscroll)
20278 ets_A1Entry.bind(
'<Key>', SettingsTextKey)
20279 ets_A1Entry.pack(side=LEFT)
20280 ets_A1Entry.delete(0,
"end")
20281 ets_A1Entry.insert(0,ETS_A1.get())
20283 hs2_Complab = Label(frame1, text=
"ETS Comp, TC2 (uSec), A2", style=
"A10B.TLabel")
20284 hs2_Complab.grid(row=14, column=0, sticky=W)
20285 hs2_ComplabMode = Frame( frame1 )
20286 hs2_ComplabMode.grid(row=14, column=1, sticky=W)
20287 ets_TC2Entry = Entry(hs2_ComplabMode, width=5)
20288 ets_TC2Entry.bind(
"<Return>", SettingsTextKey)
20289 ets_TC2Entry.bind(
'<MouseWheel>', Settingsscroll)
20290 ets_TC2Entry.bind(
"<Button-4>", Settingsscroll)
20291 ets_TC2Entry.bind(
"<Button-5>", Settingsscroll)
20292 ets_TC2Entry.bind(
'<Key>', SettingsTextKey)
20293 ets_TC2Entry.pack(side=LEFT)
20294 ets_TC2Entry.delete(0,
"end")
20295 ets_TC2Entry.insert(0,ETS_TC2.get())
20296 ets_A2Entry = Entry(hs2_ComplabMode, width=5)
20297 ets_A2Entry.bind(
"<Return>", SettingsTextKey)
20298 ets_A2Entry.bind(
'<MouseWheel>', Settingsscroll)
20299 ets_A2Entry.bind(
"<Button-4>", Settingsscroll)
20300 ets_A2Entry.bind(
"<Button-5>", Settingsscroll)
20301 ets_A2Entry.bind(
'<Key>', SettingsTextKey)
20302 ets_A2Entry.pack(side=LEFT)
20303 ets_A2Entry.delete(0,
"end")
20304 ets_A2Entry.insert(0,ETS_A2.get())
20306 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
20307 Settingsdismissbutton.grid(row=15, column=0, sticky=W, pady=7)
20309 Settingsdismissbutton = Button(frame1, text=
"Dismiss", style=
"W8.TButton", command=DestroySettings)
20310 Settingsdismissbutton.grid(row=12, column=0, sticky=W, pady=7)
20313 global Auto_ETS_Comp, ETS_TC1, ETS_A1, ETS_TC2, ETS_A2
20314 global ets_TC1Entry, ets_A1Entry, ets_TC2Entry, ets_A2Entry
20315 global CHA_RC_HP, CHB_RC_HP, CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20316 global CHA_A1, CHA_A2, CHB_A1, CHB_A2
20317 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20318 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20320 if Auto_ETS_Comp.get() == 1:
20322 MulX = float(HtMulEntry.get())
20324 Value = float(ets_TC1Entry.get()) * MulX
20325 cha_TC1Entry.delete(0,
"end")
20326 cha_TC1Entry.insert(0, Value)
20327 cha_A1Entry.delete(0,
"end")
20328 cha_A1Entry.insert(0, ets_A1Entry.get())
20329 chb_TC1Entry.delete(0,
"end")
20330 chb_TC1Entry.insert(0, Value)
20331 chb_A1Entry.delete(0,
"end")
20332 chb_A1Entry.insert(0, ets_A1Entry.get())
20334 Value = float(ets_TC2Entry.get()) * MulX
20335 cha_TC2Entry.delete(0,
"end")
20336 cha_TC2Entry.insert(0, Value)
20337 cha_A2Entry.delete(0,
"end")
20338 cha_A2Entry.insert(0, ets_A2Entry.get())
20339 chb_TC2Entry.delete(0,
"end")
20340 chb_TC2Entry.insert(0, Value)
20341 chb_A2Entry.delete(0,
"end")
20342 chb_A2Entry.insert(0, ets_A2Entry.get())
20353 global GridWidth, TRACEwidth, TRACEaverage, Vdiv, HarmonicMarkers, ZEROstuffing, RevDate
20354 global Settingswindow, SettingsStatus, ZSTuff, TAvg, VDivE, TwdthE, GwdthE, HarMon
20355 global CHA_TC1, CHA_TC2, CHB_TC1, CHB_TC2
20356 global CHA_A1, CHA_A2, CHB_A1, CHB_A2, TrgLPFEntry, Trigger_LPF_length
20357 global cha_TC1Entry, cha_TC2Entry, chb_TC1Entry, chb_TC2Entry
20358 global cha_A1Entry, cha_A2Entry, chb_A1Entry, chb_A2Entry
20361 GW = int(eval(GwdthE.get()))
20364 GwdthE.delete(0,END)
20365 GwdthE.insert(0, int(GW))
20368 GwdthE.delete(0,END)
20369 GwdthE.insert(0, int(GW))
20371 GwdthE.delete(0,END)
20372 GwdthE.insert(0, GridWidth.get())
20376 T_length = int(eval(TrgLPFEntry.get()))
20379 TrgLPFEntry.delete(0,END)
20380 TrgLPFEntry.insert(0, int(GW))
20383 TrgLPFEntry.delete(0,END)
20384 TrgLPFEntry.insert(0, int(GW))
20386 TrgLPFEntry.delete(0,END)
20387 TrgLPFEntry.insert(0, Trigger_LPF_length.get())
20388 Trigger_LPF_length.set(T_length)
20391 TW = int(eval(TwdthE.get()))
20394 TwdthE.delete(0,END)
20395 TwdthE.insert(0, int(TW))
20398 TwdthE.delete(0,END)
20399 TwdthE.insert(0, int(TW))
20401 TwdthE.delete(0,END)
20402 TwdthE.insert(0, TRACEwidth.get())
20406 TA = int(eval(TAvg.get()))
20410 TAvg.insert(0, int(TA))
20414 TAvg.insert(0, int(TA))
20417 TAvg.insert(0, TRACEaverage.get())
20418 TRACEaverage.set(TA)
20421 VDv = int(eval(VDivE.get()))
20424 VDivE.delete(0,END)
20425 VDivE.insert(0, int(VDv))
20428 VDivE.delete(0,END)
20429 VDivE.insert(0, int(VDv))
20431 VDivE.delete(0,END)
20432 VDivE.insert(0, Vdiv.get())
20436 HM = int(eval(HarMon.get()))
20439 HarMon.delete(0,END)
20440 HarMon.insert(0, int(HM))
20443 HarMon.delete(0,END)
20444 HarMon.insert(0, int(HM))
20446 HarMon.delete(0,END)
20447 HarMon.insert(0, HarmonicMarkers.get())
20448 HarmonicMarkers.set(HM)
20451 ZST = int(eval(ZSTuff.get()))
20454 ZSTuff.delete(0,END)
20455 ZSTuff.insert(0, int(ZST))
20458 ZSTuff.delete(0,END)
20459 ZSTuff.insert(0, int(ZST))
20461 ZSTuff.delete(0,END)
20462 ZSTuff.insert(0, ZEROstuffing.get())
20463 ZEROstuffing.set(ZST)
20466 TC1A = float(cha_TC1Entry.get())
20470 cha_TC1Entry.delete(0,END)
20471 cha_TC1Entry.insert(0, TC1A)
20473 cha_TC1Entry.delete(0,END)
20474 cha_TC1Entry.insert(0, CHA_TC1.get())
20476 TC2A = float(cha_TC2Entry.get())
20480 cha_TC2Entry.delete(0,END)
20481 cha_TC2Entry.insert(0, TC2A)
20483 cha_TC2Entry.delete(0,END)
20484 cha_TC2Entry.insert(0, CHA_TC2.get())
20487 Gain1A = float(cha_A1Entry.get())
20490 cha_A1Entry.delete(0,END)
20491 cha_A1Entry.insert(0, CHA_A1.get())
20493 Gain2A = float(cha_A2Entry.get())
20496 cha_A2Entry.delete(0,END)
20497 cha_A2Entry.insert(0, CHA_A2.get())
20500 TC1B = float(chb_TC1Entry.get())
20504 chb_TC1Entry.delete(0, END)
20505 chb_TC1Entry.insert(0, TC1B)
20507 chb_TC1Entry.delete(0,END)
20508 chb_TC1Entry.insert(0, CHB_TC1.get())
20510 TC2B = float(chb_TC2Entry.get())
20514 chb_TC2Entry.delete(0, END)
20515 chb_TC2Entry.insert(0, TC2B)
20517 chb_TC2Entry.delete(0,END)
20518 chb_TC2Entry.insert(0, CHB_TC2.get())
20521 Gain1B = float(chb_A1Entry.get())
20524 chb_A1Entry.delete(0,END)
20525 chb_A1Entry.insert(0, CHB_A1.get())
20527 Gain2B = float(chb_A2Entry.get())
20530 chb_A2Entry.delete(0,END)
20531 chb_A2Entry.insert(0, CHB_A2.get())
20537 global Settingswindow, SettingsStatus
20539 SettingsStatus.set(0)
20541 Settingswindow.destroy()
20544 global MouseX, MouseY, MouseWidget
20546 MouseWidget = event.widget
20547 MouseX, MouseY = event.x, event.y
20550 global FminEntry, CHAfreq
20553 String =
'{0:.3f}'.format(CHAfreq/1000)
20554 FminEntry.delete(0,
"end")
20555 FminEntry.insert(0,String)
20558 TgInput = IntVar(0)
20559 SingleShot = IntVar(0)
20560 ManualTrigger = IntVar(0)
20561 AutoLevel = IntVar(0)
20562 ShowC1_V = IntVar(0)
20565 ShowC1_V = IntVar(0)
20566 ShowC1_I = IntVar(0)
20567 ShowC2_V = IntVar(0)
20568 ShowC2_I = IntVar(0)
20569 ShowAV_I = IntVar(0)
20570 ShowBV_I = IntVar(0)
20571 ShowRA_V = IntVar(0)
20572 ShowRA_I = IntVar(0)
20573 ShowRB_V = IntVar(0)
20574 ShowRB_I = IntVar(0)
20575 ShowMath = IntVar(0)
20576 ShowPB_A = IntVar(0)
20577 ShowPB_B = IntVar(0)
20578 ShowPB_C = IntVar(0)
20579 ShowPB_D = IntVar(0)
20580 Show_MathX = IntVar(0)
20581 Show_MathY = IntVar(0)
20582 AutoCenterA = IntVar(0)
20583 AutoCenterB = IntVar(0)
20584 SmoothCurves = IntVar(0)
20586 TRACEmodeTime = IntVar(0)
20587 TRACEmodeTime.set(0)
20588 ColorMode = IntVar(0)
20589 DecimateOption = IntVar(0)
20590 MathTrace = IntVar(0)
20592 MeasDCV1 = IntVar(0)
20593 MeasMinV1 = IntVar(0)
20594 MeasMaxV1 = IntVar(0)
20595 MeasMidV1 = IntVar(0)
20596 MeasPPV1 = IntVar(0)
20597 MeasRMSV1 = IntVar(0)
20598 MeasRMSVA_B = IntVar(0)
20599 MeasDCI1 = IntVar(0)
20600 MeasMinI1 = IntVar(0)
20601 MeasMaxI1 = IntVar(0)
20602 MeasMidI1 = IntVar(0)
20603 MeasPPI1 = IntVar(0)
20604 MeasRMSI1 = IntVar(0)
20605 MeasDiffAB = IntVar(0)
20606 MeasDCV2 = IntVar(0)
20607 MeasMinV2 = IntVar(0)
20608 MeasMaxV2 = IntVar(0)
20609 MeasMidV2 = IntVar(0)
20610 MeasPPV2 = IntVar(0)
20611 MeasRMSV2 = IntVar(0)
20612 MeasDCI2 = IntVar(0)
20613 MeasMinI2 = IntVar(0)
20614 MeasMaxI2 = IntVar(0)
20615 MeasMidI2 = IntVar(0)
20616 MeasPPI2 = IntVar(0)
20617 MeasRMSI2 = IntVar(0)
20618 MeasDiffBA = IntVar(0)
20619 MeasUserA = IntVar(0)
20620 MeasAHW = IntVar(0)
20621 MeasALW = IntVar(0)
20622 MeasADCy = IntVar(0)
20623 MeasAPER = IntVar(0)
20624 MeasAFREQ = IntVar(0)
20625 MeasBHW = IntVar(0)
20626 MeasBLW = IntVar(0)
20627 MeasBDCy = IntVar(0)
20628 MeasBPER = IntVar(0)
20629 MeasBFREQ = IntVar(0)
20630 MeasPhase = IntVar(0)
20631 MeasTopV1 = IntVar(0)
20632 MeasBaseV1 = IntVar(0)
20633 MeasTopV2 = IntVar(0)
20634 MeasBaseV2 = IntVar(0)
20635 MeasUserB = IntVar(0)
20636 MeasDelay = IntVar(0)
20637 TimeDisp = IntVar(0)
20640 FreqDisp = IntVar(0)
20641 PhADisp = IntVar(0)
20642 BodeDisp = IntVar(0)
20644 OhmDisp = IntVar(0)
20645 PhAScreenStatus = IntVar(0)
20646 PhAScreenStatus.set(0)
20647 AppendPhAData = IntVar(0)
20648 AppendPhAData.set(0)
20649 PhAPlotMode = IntVar(0)
20650 PhADatafilename =
"PhaseData.csv"
20651 BodeScreenStatus = IntVar(0)
20652 BodeScreenStatus.set(0)
20653 DigScreenStatus = IntVar(0)
20654 DigScreenStatus.set(0)
20655 DacScreenStatus = IntVar(0)
20656 DacScreenStatus.set(0)
20657 MuxScreenStatus = IntVar(0)
20658 MuxScreenStatus.set(0)
20659 DualMuxMode = IntVar(0)
20660 MinigenScreenStatus = IntVar(0)
20661 MinigenScreenStatus.set(0)
20662 DA1ScreenStatus = IntVar(0)
20663 DA1ScreenStatus.set(0)
20664 DigPotScreenStatus = IntVar(0)
20665 DigPotScreenStatus.set(0)
20666 GenericSerialStatus = IntVar(0)
20667 GenericSerialStatus.set(0)
20668 AD5626SerialStatus = IntVar(0)
20669 AD5626SerialStatus.set(0)
20670 DigFiltStatus = IntVar(0)
20671 DigFiltStatus.set(0)
20672 CommandStatus = IntVar(0)
20673 CommandStatus.set(0)
20674 MeasureStatus = IntVar(0)
20675 MeasureStatus.set(0)
20676 MarkerScale = IntVar(0)
20678 SettingsStatus = IntVar(0)
20679 CHA_RC_HP = IntVar(0)
20680 CHB_RC_HP = IntVar(0)
20681 CHAI_RC_HP = IntVar(0)
20682 CHBI_RC_HP = IntVar(0)
20684 frame2r = Frame(root, borderwidth=5, relief=RIDGE)
20685 frame2r.pack(side=RIGHT, fill=BOTH, expand=NO)
20687 frame1 = Frame(root, borderwidth=5, relief=RIDGE)
20688 frame1.pack(side=TOP, fill=BOTH, expand=NO)
20690 frame2 = Frame(root, borderwidth=5, relief=RIDGE)
20691 frame2.pack(side=TOP, fill=BOTH, expand=YES)
20693 frame3 = Frame(root, borderwidth=5, relief=RIDGE)
20694 frame3.pack(side=TOP, fill=BOTH, expand=NO)
20696 root.style.configure(
"W3.TButton", width=3, relief=RAISED)
20697 root.style.configure(
"W4.TButton", width=4, relief=RAISED)
20698 root.style.configure(
"W5.TButton", width=5, relief=RAISED)
20699 root.style.configure(
"W6.TButton", width=6, relief=RAISED)
20700 root.style.configure(
"W7.TButton", width=7, relief=RAISED)
20701 root.style.configure(
"W8.TButton", width=8, relief=RAISED)
20702 root.style.configure(
"W9.TButton", width=9, relief=RAISED)
20703 root.style.configure(
"W10.TButton", width=10, relief=RAISED)
20704 root.style.configure(
"W11.TButton", width=11, relief=RAISED)
20705 root.style.configure(
"W16.TButton", width=16, relief=RAISED)
20706 root.style.configure(
"W17.TButton", width=17, relief=RAISED)
20707 root.style.configure(
"Stop.TButton", background=ButtonRed, width=4, relief=RAISED)
20708 root.style.configure(
"Run.TButton", background=ButtonGreen, width=4, relief=RAISED)
20709 root.style.configure(
"Pwr.TButton", background=ButtonGreen, width=7, relief=RAISED)
20710 root.style.configure(
"PwrOff.TButton", background=ButtonRed, width=7, relief=RAISED)
20711 root.style.configure(
"RConn.TButton", background=ButtonRed, width=5, relief=RAISED)
20712 root.style.configure(
"GConn.TButton", background=ButtonGreen, width=5, relief=RAISED)
20713 root.style.configure(
"Rtrace1.TButton", background=COLORtrace1, width=7, relief=RAISED)
20714 root.style.configure(
"Strace1.TButton", background=COLORtrace1, width=7, relief=SUNKEN)
20715 root.style.configure(
"Rtrace2.TButton", background=COLORtrace2, width=7, relief=RAISED)
20716 root.style.configure(
"Strace2.TButton", background=COLORtrace2, width=7, relief=SUNKEN)
20717 root.style.configure(
"Rtrace3.TButton", background=COLORtrace3, width=7, relief=RAISED)
20718 root.style.configure(
"Strace3.TButton", background=COLORtrace3, width=7, relief=SUNKEN)
20719 root.style.configure(
"Rtrace4.TButton", background=COLORtrace4, width=7, relief=RAISED)
20720 root.style.configure(
"Strace4.TButton", background=COLORtrace4, width=7, relief=SUNKEN)
20721 root.style.configure(
"Rtrace6.TButton", background=COLORtrace6, width=7, relief=RAISED)
20722 root.style.configure(
"Strace6.TButton", background=COLORtrace6, width=7, relief=SUNKEN)
20723 root.style.configure(
"Rtrace7.TButton", background=COLORtrace7, width=7, relief=RAISED)
20724 root.style.configure(
"Strace7.TButton", background=COLORtrace7, width=7, relief=SUNKEN)
20725 root.style.configure(
"RGray.TButton", background=
"#808080", width=7, relief=RAISED)
20726 root.style.configure(
"SGray.TButton", background=
"#808080", width=7, relief=SUNKEN)
20727 root.style.configure(
"A10R1.TLabelframe.Label", foreground=COLORtraceR1, font=(
'Arial', 10,
'bold'))
20728 root.style.configure(
"A10R1.TLabelframe", borderwidth=5, relief=RIDGE)
20729 root.style.configure(
"A10R2.TLabelframe.Label", foreground=COLORtraceR2, font=(
'Arial', 10,
'bold'))
20730 root.style.configure(
"A10R2.TLabelframe", borderwidth=5, relief=RIDGE)
20731 root.style.configure(
"A10B.TLabel", foreground=COLORcanvas, font=
"Arial 10 bold")
20732 root.style.configure(
"A10R.TLabel", foreground=ButtonRed, font=
"Arial 10 bold")
20733 root.style.configure(
"A10G.TLabel", foreground=ButtonGreen, font=
"Arial 10 bold")
20734 root.style.configure(
"A12B.TLabel", foreground=COLORcanvas, font=
"Arial 12 bold")
20735 root.style.configure(
"A16B.TLabel", foreground=COLORcanvas, font=
"Arial 16 bold")
20736 root.style.configure(
"Stop.TRadiobutton", background=ButtonRed)
20737 root.style.configure(
"Run.TRadiobutton", background=ButtonGreen)
20738 root.style.configure(
"Disab.TCheckbutton", indicatorcolor=ButtonRed)
20739 root.style.configure(
"Enab.TCheckbutton", indicatorcolor=ButtonGreen)
20740 root.style.configure(
"Strace1.TCheckbutton", background=COLORtrace1)
20741 root.style.configure(
"Strace2.TCheckbutton", background=COLORtrace2)
20742 root.style.configure(
"Strace3.TCheckbutton", background=COLORtrace3)
20743 root.style.configure(
"Strace4.TCheckbutton", background=COLORtrace4)
20744 root.style.configure(
"Strace6.TCheckbutton", background=COLORtrace6)
20745 root.style.configure(
"Strace7.TCheckbutton", background=COLORtrace7)
20746 root.style.configure(
"WPhase.TRadiobutton", width=5, background=
"white", indicatorcolor=(
"red",
"green"))
20747 root.style.configure(
"GPhase.TRadiobutton", width=5, background=
"gray", indicatorcolor=(
"red",
"green"))
20750 Triggermenu = Menubutton(frame1, text=
"Trigger", style=
"W7.TButton")
20751 Triggermenu.menu = Menu(Triggermenu, tearoff = 0 )
20752 Triggermenu[
"menu"] = Triggermenu.menu
20753 Triggermenu.menu.add_radiobutton(label=
'None', variable=TgInput, value=0)
20754 Triggermenu.menu.add_radiobutton(label=
'CA-V', variable=TgInput, value=1)
20755 Triggermenu.menu.add_radiobutton(label=
'CA-I', variable=TgInput, value=2)
20756 Triggermenu.menu.add_radiobutton(label=
'CB-V', variable=TgInput, value=3)
20757 Triggermenu.menu.add_radiobutton(label=
'CB-I', variable=TgInput, value=4)
20758 Triggermenu.menu.add_checkbutton(label=
'Auto Level', variable=AutoLevel)
20759 Triggermenu.menu.add_checkbutton(label=
'Low Pass Filter', variable=LPFTrigger)
20760 Triggermenu.menu.add_checkbutton(label=
'Manual Trgger', variable=ManualTrigger)
20761 Triggermenu.menu.add_checkbutton(label=
'SingleShot', variable=SingleShot)
20762 Triggermenu.pack(side=LEFT)
20764 Edgemenu = Menubutton(frame1, text=
"Edge", style=
"W5.TButton")
20765 Edgemenu.menu = Menu(Edgemenu, tearoff = 0 )
20766 Edgemenu[
"menu"] = Edgemenu.menu
20767 Edgemenu.menu.add_radiobutton(label=
'Rising [+]', variable=TgEdge, value=0)
20768 Edgemenu.menu.add_radiobutton(label=
'Falling [-]', variable=TgEdge, value=1)
20769 Edgemenu.pack(side=LEFT)
20771 tlab = Label(frame1, text=
"Trig Level")
20772 tlab.pack(side=LEFT)
20773 TRIGGERentry = Entry(frame1, width=5)
20774 TRIGGERentry.bind(
'<MouseWheel>', onTextScroll)
20775 TRIGGERentry.bind(
"<Button-4>", onTextScroll)
20776 TRIGGERentry.bind(
"<Button-5>", onTextScroll)
20777 TRIGGERentry.bind(
"<Return>", BTriglevel)
20778 TRIGGERentry.bind(
'<Key>', onTextKey)
20779 TRIGGERentry.pack(side=LEFT)
20780 TRIGGERentry.delete(0,
"end")
20781 TRIGGERentry.insert(0,0.0)
20783 tgb = Button(frame1, text=
"50%", style=
"W4.TButton", command=BTrigger50p)
20784 tgb.pack(side=LEFT)
20786 hldlab = Button(frame1, text=
"Hold Off", style=
"W8.TButton", command=IncHoldOff)
20787 hldlab.pack(side=LEFT)
20788 HoldOffentry = Entry(frame1, width=4)
20789 HoldOffentry.bind(
'<MouseWheel>', onTextScroll)
20790 HoldOffentry.bind(
"<Button-4>", onTextScroll)
20791 HoldOffentry.bind(
"<Button-5>", onTextScroll)
20792 HoldOffentry.bind(
"<Return>", BHoldOff)
20793 HoldOffentry.bind(
'<Key>', onTextKey)
20794 HoldOffentry.pack(side=LEFT)
20795 HoldOffentry.delete(0,
"end")
20796 HoldOffentry.insert(0,0.0)
20798 hozlab = Button(frame1, text=
"Horz Pos", style=
"W8.TButton", command=SetTriggerPoss)
20799 hozlab.pack(side=LEFT)
20800 HozPossentry = Entry(frame1, width=4)
20801 HozPossentry.bind(
'<MouseWheel>', onTextScroll)
20802 HozPossentry.bind(
"<Button-4>", onTextScroll)
20803 HozPossentry.bind(
"<Button-5>", onTextScroll)
20804 HozPossentry.bind(
"<Return>", BHozPoss)
20805 HozPossentry.bind(
'<Key>', onTextKey)
20806 HozPossentry.pack(side=LEFT)
20807 HozPossentry.delete(0,
"end")
20808 HozPossentry.insert(0,0.0)
20810 bexit = Button(frame1, text=
"Exit", style=
"W4.TButton", command=Bcloseexit)
20811 bexit.pack(side=RIGHT)
20812 bstop = Button(frame1, text=
"Stop", style=
"Stop.TButton", command=BStop)
20813 bstop.pack(side=RIGHT)
20814 brun = Button(frame1, text=
"Run", style=
"Run.TButton", command=BStart)
20815 brun.pack(side=RIGHT)
20816 PwrBt = Button(frame1, text=
"PWR-ON", style=
"Pwr.TButton", command=BPower)
20817 PwrBt.pack(side=RIGHT)
20819 Showmenu = Menubutton(frame1, text=
"Curves", style=
"W7.TButton")
20820 Showmenu.menu = Menu(Showmenu, tearoff = 0 )
20821 Showmenu[
"menu"] = Showmenu.menu
20822 Showmenu.menu.add_command(label=
"-Show-", foreground=
"blue", command=donothing)
20823 Showmenu.menu.add_command(label=
"All", command=BShowCurvesAll)
20824 Showmenu.menu.add_command(label=
"None", command=BShowCurvesNone)
20825 Showmenu.menu.add_checkbutton(label=
'CA-V [1]', background=COLORtrace1, variable=ShowC1_V, command=TraceSelectADC_Mux)
20826 Showmenu.menu.add_checkbutton(label=
'CA-I [3]', background=COLORtrace3, variable=ShowC1_I, command=TraceSelectADC_Mux)
20827 Showmenu.menu.add_checkbutton(label=
'CB-V [2]', background=COLORtrace2, variable=ShowC2_V, command=TraceSelectADC_Mux)
20828 Showmenu.menu.add_checkbutton(label=
'CB-I [4]', background=COLORtrace4,variable=ShowC2_I, command=TraceSelectADC_Mux)
20829 Showmenu.menu.add_checkbutton(label=
'Math-X', background=COLORtrace6, variable=Show_MathX, command=UpdateTimeTrace)
20830 Showmenu.menu.add_checkbutton(label=
'Math-Y', background=COLORtrace7, variable=Show_MathY, command=UpdateTimeTrace)
20831 Showmenu.menu.add_command(label=
"-Auto Vert Center-", foreground=
"blue", command=donothing)
20832 Showmenu.menu.add_checkbutton(label=
'Center CA-V', variable=AutoCenterA)
20833 Showmenu.menu.add_checkbutton(label=
'Center CB-V', variable=AutoCenterB)
20834 Showmenu.menu.add_command(label=
"-Input HP Comp-", foreground=
"blue", command=donothing)
20835 Showmenu.menu.add_checkbutton(label=
'Comp CA-V', variable=CHA_RC_HP)
20836 Showmenu.menu.add_checkbutton(label=
'Comp CB-V', variable=CHB_RC_HP)
20837 if EnableHSsampling > 0:
20838 Showmenu.menu.add_checkbutton(label=
'Comp CA-I', variable=CHAI_RC_HP)
20839 Showmenu.menu.add_checkbutton(label=
'Comp CB-I', variable=CHBI_RC_HP)
20840 Showmenu.menu.add_separator()
20841 Showmenu.menu.add_checkbutton(label=
'RA-V', background=COLORtraceR1, variable=ShowRA_V, command=UpdateTimeTrace)
20842 Showmenu.menu.add_checkbutton(label=
'RA-I', background=COLORtraceR3, variable=ShowRA_I, command=UpdateTimeTrace)
20843 Showmenu.menu.add_checkbutton(label=
'RB-V', background=COLORtraceR2, variable=ShowRB_V, command=UpdateTimeTrace)
20844 Showmenu.menu.add_checkbutton(label=
'RB-I', background=COLORtraceR4, variable=ShowRB_I, command=UpdateTimeTrace)
20845 Showmenu.menu.add_checkbutton(label=
'RMath', background=COLORtraceR5, variable=ShowMath, command=UpdateTimeTrace)
20846 Showmenu.menu.add_separator()
20847 Showmenu.menu.add_checkbutton(label=
'T Cursor [t]', variable=ShowTCur, command=UpdateTimeTrace)
20848 Showmenu.menu.add_checkbutton(label=
'V Cursor [v]', variable=ShowVCur, command=UpdateTimeTrace)
20849 Showmenu.pack(side=RIGHT)
20851 if ShowBallonHelp > 0:
20855 hldlab_tip =
CreateToolTip(hldlab,
'Increment Hold Off setting by one time division')
20856 hozlab_tip =
CreateToolTip(hozlab,
'When triggering, set trigger point to center of screen')
20864 if EnableHSsampling > 0:
20865 fminlab2 = Label(frame1, text=
"KHz")
20866 fminlab2.pack(side=RIGHT)
20867 FminEntry = Entry(frame1, width=6)
20868 FminEntry.bind(
'<MouseWheel>', onFminScroll)
20869 FminEntry.bind(
"<Button-4>", onFminScroll)
20870 FminEntry.bind(
"<Button-5>", onFminScroll)
20871 FminEntry.bind(
"<Return>", SetAD9833)
20872 FminEntry.pack(side=RIGHT)
20873 FminEntry.delete(0,
"end")
20874 FminEntry.insert(0,25)
20875 fminlab = Button(frame1, text=
"Fmin", style=
"W5.TButton", command=BSetFmin)
20876 fminlab.pack(side=RIGHT)
20878 HtMulEntry = Entry(frame1, width=4)
20879 HtMulEntry.bind(
'<MouseWheel>', onMulXScroll)
20880 HtMulEntry.bind(
"<Button-4>", onMulXScroll)
20881 HtMulEntry.bind(
"<Button-5>", onMulXScroll)
20882 HtMulEntry.bind(
"<Return>", SetAD9833)
20883 HtMulEntry.pack(side=RIGHT)
20884 HtMulEntry.delete(0,
"end")
20885 HtMulEntry.insert(0,1)
20886 mulxlab = Label( frame1, text =
"Mul X")
20887 mulxlab.pack(side=RIGHT)
20890 TMsb = Spinbox(frame1, width=5, values= TMpdiv, command=BTime)
20891 TMsb.bind(
'<MouseWheel>', onSpinBoxScroll)
20892 TMsb.pack(side=RIGHT)
20893 TMsb.delete(0,
"end")
20895 TMlab = Label(frame1, text=
"Time mS/Div")
20896 TMlab.pack(side=RIGHT)
20898 ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas, cursor=
'cross')
20900 ca.bind(
'<Configure>', CAresize)
20901 ca.bind(
'<1>', onCanvasClickLeft)
20902 ca.bind(
'<3>', onCanvasClickRight)
20903 ca.bind(
"<Motion>",onCanvasMouse_xy)
20904 ca.bind(
"<Up>", onCanvasUpArrow)
20905 ca.bind(
"<Down>", onCanvasDownArrow)
20906 ca.bind(
"<Left>", onCanvasLeftArrow)
20907 ca.bind(
"<Right>", onCanvasRightArrow)
20908 ca.bind(
"<space>", onCanvasSpaceBar)
20909 ca.bind(
"1", onCanvasOne)
20910 ca.bind(
"2", onCanvasTwo)
20911 ca.bind(
"3", onCanvasThree)
20912 ca.bind(
"4", onCanvasFour)
20913 ca.bind(
"5", onCanvasFive)
20914 ca.bind(
"6", onCanvasSix)
20915 ca.bind(
"7", onCanvasSeven)
20916 ca.bind(
"8", onCanvasEight)
20917 ca.bind(
"9", onCanvasNine)
20918 ca.bind(
"0", onCanvasZero)
20919 ca.bind(
"a", onCanvasAverage)
20920 ca.bind(
"t", onCanvasShowTcur)
20921 ca.bind(
"v", onCanvasShowVcur)
20922 ca.bind(
"s", onCanvasSnap)
20923 ca.bind(
"+", onCanvasTrising)
20924 ca.bind(
"-", onCanvasTfalling)
20925 ca.bind(
'<MouseWheel>', onCanvasClickScroll)
20926 ca.bind(
"<Button-4>", onCanvasClickScroll)
20927 ca.bind(
"<Button-5>", onCanvasClickScroll)
20928 ca.pack(side=TOP, fill=BOTH, expand=YES)
20931 dropmenu = Frame( frame2r )
20932 dropmenu.pack(side=TOP)
20933 bcon = Button(dropmenu, text=
"Recon", style=
"RConn.TButton", command=ConnectDevice)
20934 bcon.pack(side=LEFT, anchor=W)
20936 Filemenu = Menubutton(dropmenu, text=
"File", style=
"W4.TButton")
20937 Filemenu.menu = Menu(Filemenu, tearoff = 0 )
20938 Filemenu[
"menu"] = Filemenu.menu
20939 Filemenu.menu.add_command(label=
"Save Config", command=BSaveConfigTime)
20940 Filemenu.menu.add_command(label=
"Load Config", command=BLoadConfigTime)
20941 Filemenu.menu.add_command(label=
"Save Adj", command=BSaveCal)
20942 Filemenu.menu.add_command(label=
"Load Adj", command=BLoadCal)
20943 Filemenu.menu.add_command(label=
"Save Screen", command=BSaveScreen)
20944 Filemenu.menu.add_command(label=
"Save To CSV", command=BSaveData)
20945 Filemenu.menu.add_command(label=
"Load From CSV", command=BReadData)
20946 Filemenu.menu.add_command(label=
"Save PWL Data", command=BSaveChannelData)
20947 Filemenu.menu.add_command(label=
"Help", command=BHelp)
20948 Filemenu.menu.add_command(label=
"About", command=BAbout)
20949 Filemenu.pack(side=LEFT, anchor=W)
20951 Optionmenu = Menubutton(dropmenu, text=
"Options", style=
"W7.TButton")
20952 Optionmenu.menu = Menu(Optionmenu, tearoff = 0 )
20953 Optionmenu[
"menu"] = Optionmenu.menu
20954 Optionmenu.menu.add_command(label=
'Change Settings', command=MakeSettingsMenu)
20955 Optionmenu.menu.add_command(label=
'Set Sample Rate', command=MakeSampleRateMenu)
20956 Optionmenu.menu.add_checkbutton(label=
'Smooth', variable=SmoothCurves, command=UpdateTimeTrace)
20957 Optionmenu.menu.add_checkbutton(label=
'Z-O-Hold', variable=ZOHold, command=UpdateTimeTrace)
20958 Optionmenu.menu.add_checkbutton(label=
'Decimate', variable=DecimateOption)
20959 Optionmenu.menu.add_checkbutton(label=
'Gated Meas', variable=MeasGateStatus)
20960 Optionmenu.menu.add_checkbutton(label=
'Trace Avg [a]', variable=TRACEmodeTime)
20961 Optionmenu.menu.add_checkbutton(label=
'Persistance', variable=ScreenTrefresh)
20962 Optionmenu.menu.add_command(label=
'Set Marker Location', command=BSetMarkerLocation)
20963 Optionmenu.menu.add_command(label=
'Change Plot Label', command=BUserCustomPlotText)
20964 Optionmenu.menu.add_command(label=
"SnapShot [s]", command=BSnapShot)
20965 Optionmenu.menu.add_radiobutton(label=
'Black BG', variable=ColorMode, value=0, command=BgColor)
20966 Optionmenu.menu.add_radiobutton(label=
'White BG', variable=ColorMode, value=1, command=BgColor)
20967 Optionmenu.menu.add_command(label=
"Run Self Cal", command=SelfCalibration)
20968 if AllowFlashFirmware == 1:
20969 Optionmenu.menu.add_command(label=
"Save Cal Settings", command=Save_Cal_file)
20970 Optionmenu.menu.add_command(label=
"Update Firmware", command=UpdateFirmware)
20971 Optionmenu.pack(side=LEFT, anchor=W)
20973 dropmenu2 = Frame( frame2r )
20974 dropmenu2.pack(side=TOP)
20976 mathbt = Button(dropmenu2, text=
"Math", style=
"W4.TButton", command = NewEnterMathControls)
20977 mathbt.pack(side=RIGHT, anchor=W)
20979 measlab = Label(dropmenu2, text=
"Meas")
20980 measlab.pack(side=LEFT, anchor=W)
20981 MeasmenuA = Menubutton(dropmenu2, text=
"CA", style=
"W3.TButton")
20982 MeasmenuA.menu = Menu(MeasmenuA, tearoff = 0 )
20983 MeasmenuA[
"menu"] = MeasmenuA.menu
20984 MeasmenuA.menu.add_command(label=
"-CA-V-", foreground=
"blue", command=donothing)
20985 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCV1)
20986 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinV1)
20987 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxV1)
20988 MeasmenuA.menu.add_checkbutton(label=
'Base', variable=MeasBaseV1)
20989 MeasmenuA.menu.add_checkbutton(label=
'Top', variable=MeasTopV1)
20990 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidV1)
20991 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPV1)
20992 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV1)
20993 MeasmenuA.menu.add_checkbutton(label=
'CA-CB', variable=MeasDiffAB)
20994 MeasmenuA.menu.add_checkbutton(label=
'CA-CB RMS', variable=MeasRMSVA_B)
20995 MeasmenuA.menu.add_checkbutton(label=
'User', variable=MeasUserA, command=BUserAMeas)
20997 MeasmenuA.menu.add_command(label=
"-CA-I-", foreground=
"blue", command=donothing)
20998 MeasmenuA.menu.add_checkbutton(label=
'Avg', variable=MeasDCI1)
20999 MeasmenuA.menu.add_checkbutton(label=
'Min', variable=MeasMinI1)
21000 MeasmenuA.menu.add_checkbutton(label=
'Max', variable=MeasMaxI1)
21001 MeasmenuA.menu.add_checkbutton(label=
'Mid', variable=MeasMidI1)
21002 MeasmenuA.menu.add_checkbutton(label=
'P-P', variable=MeasPPI1)
21003 MeasmenuA.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI1)
21005 MeasmenuA.menu.add_command(label=
"-CA-Time-", foreground=
"blue", command=donothing)
21006 MeasmenuA.menu.add_checkbutton(label=
'H-Width', variable=MeasAHW)
21007 MeasmenuA.menu.add_checkbutton(label=
'L-Width', variable=MeasALW)
21008 MeasmenuA.menu.add_checkbutton(label=
'DutyCyle', variable=MeasADCy)
21009 MeasmenuA.menu.add_checkbutton(label=
'Period', variable=MeasAPER)
21010 MeasmenuA.menu.add_checkbutton(label=
'Freq', variable=MeasAFREQ)
21011 MeasmenuA.menu.add_checkbutton(label=
'A-B Phase', variable=MeasPhase)
21013 MeasmenuA.pack(side=LEFT)
21015 MeasmenuB = Menubutton(dropmenu2, text=
"CB", style=
"W3.TButton")
21016 MeasmenuB.menu = Menu(MeasmenuB, tearoff = 0 )
21017 MeasmenuB[
"menu"] = MeasmenuB.menu
21018 MeasmenuB.menu.add_command(label=
"-CB-V-", foreground=
"blue", command=donothing)
21019 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCV2)
21020 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinV2)
21021 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxV2)
21022 MeasmenuB.menu.add_checkbutton(label=
'Base', variable=MeasBaseV2)
21023 MeasmenuB.menu.add_checkbutton(label=
'Top', variable=MeasTopV2)
21024 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidV2)
21025 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPV2)
21026 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSV2)
21027 MeasmenuB.menu.add_checkbutton(label=
'CB-CA', variable=MeasDiffBA)
21028 MeasmenuB.menu.add_checkbutton(label=
'User', variable=MeasUserB, command=BUserBMeas)
21030 MeasmenuB.menu.add_command(label=
"-CB-I-", foreground=
"blue", command=donothing)
21031 MeasmenuB.menu.add_checkbutton(label=
'Avg', variable=MeasDCI2)
21032 MeasmenuB.menu.add_checkbutton(label=
'Min', variable=MeasMinI2)
21033 MeasmenuB.menu.add_checkbutton(label=
'Max', variable=MeasMaxI2)
21034 MeasmenuB.menu.add_checkbutton(label=
'Mid', variable=MeasMidI2)
21035 MeasmenuB.menu.add_checkbutton(label=
'P-P', variable=MeasPPI2)
21036 MeasmenuB.menu.add_checkbutton(label=
'RMS', variable=MeasRMSI2)
21038 MeasmenuB.menu.add_command(label=
"-CB-Time-", foreground=
"blue", command=donothing)
21039 MeasmenuB.menu.add_checkbutton(label=
'H-Width', variable=MeasBHW)
21040 MeasmenuB.menu.add_checkbutton(label=
'L-Width', variable=MeasBLW)
21041 MeasmenuB.menu.add_checkbutton(label=
'DutyCyle', variable=MeasBDCy)
21042 MeasmenuB.menu.add_checkbutton(label=
'Period', variable=MeasBPER)
21043 MeasmenuB.menu.add_checkbutton(label=
'Freq', variable=MeasBFREQ)
21044 MeasmenuB.menu.add_checkbutton(label=
'B-A Delay', variable=MeasDelay)
21045 MeasmenuB.pack(side=LEFT)
21047 BuildAWGScreen = Button(frame2r, text=
"AWG Window", style=
"W16.TButton", command=MakeAWGWindow)
21048 BuildAWGScreen.pack(side=TOP)
21050 timebtn = Frame( frame2r )
21051 timebtn.pack(side=TOP)
21052 ckb1 = Checkbutton(timebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=TimeDisp, command=TimeCheckBox)
21053 ckb1.pack(side=LEFT)
21054 timelab = Label(timebtn, text=
"Time Plot")
21055 timelab.pack(side=LEFT)
21056 if EnableXYPlotter > 0:
21057 xybtn = Frame( frame2r )
21058 xybtn.pack(side=TOP)
21059 ckb2 = Checkbutton(xybtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=XYDisp, command=XYCheckBox)
21060 ckb2.pack(side=LEFT)
21061 BuildXYScreen = Button(xybtn, text=
"X-Y Plot", style=
"W11.TButton", command=MakeXYWindow)
21062 BuildXYScreen.pack(side=TOP)
21064 if EnablePhaseAnalizer > 0:
21065 phasebtn = Frame( frame2r )
21066 phasebtn.pack(side=TOP)
21067 phckb = Checkbutton(phasebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=PhADisp, command=PhACheckBox)
21068 phckb.pack(side=LEFT)
21069 BuildPhAScreen = Button(phasebtn, text=
"Phasor Plot", style=
"W11.TButton", command=MakePhAWindow)
21070 BuildPhAScreen.pack(side=LEFT)
21072 if EnableSpectrumAnalizer > 0:
21073 freqbtn = Frame( frame2r )
21074 freqbtn.pack(side=TOP)
21075 ckb3 = Checkbutton(freqbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=FreqDisp, command=FreqCheckBox)
21076 ckb3.pack(side=LEFT)
21077 BuildSpectrumScreen = Button(freqbtn, text=
"Spectrum Plot", style=
"W11.TButton", command=MakeSpectrumWindow)
21078 BuildSpectrumScreen.pack(side=LEFT)
21080 if EnableBodePlotter > 0:
21081 bodebtn = Frame( frame2r )
21082 bodebtn.pack(side=TOP)
21083 ckb5 = Checkbutton(bodebtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=BodeDisp, command=BodeCheckBox)
21084 ckb5.pack(side=LEFT)
21085 BuildBodeScreen = Button(bodebtn, text=
"Bode Plot", style=
"W11.TButton", command=MakeBodeWindow)
21086 BuildBodeScreen.pack(side=LEFT)
21088 if EnableImpedanceAnalizer > 0:
21089 impdbtn = Frame( frame2r )
21090 impdbtn.pack(side=TOP)
21091 ckb4 = Checkbutton(impdbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=IADisp, command=IACheckBox)
21092 ckb4.pack(side=LEFT)
21093 BuildIAScreen = Button(impdbtn, text=
"Impedance", style=
"W11.TButton", command=MakeIAWindow)
21094 BuildIAScreen.pack(side=LEFT)
21096 if EnableOhmMeter > 0:
21097 dcohmbtn = Frame( frame2r )
21098 dcohmbtn.pack(side=TOP)
21099 ckb6 = Checkbutton(dcohmbtn, text=
"Enab", style=
"Disab.TCheckbutton", variable=OhmDisp, command=OhmCheckBox)
21100 ckb6.pack(side=LEFT)
21101 BuildOhmScreen = Button(dcohmbtn, text=
"Ohmmeter", style=
"W11.TButton", command=MakeOhmWindow)
21102 BuildOhmScreen.pack(side=LEFT)
21104 if ShowTraceControls > 0:
21105 ckbt1 = Checkbutton(frame2r, text=
'CA-V [1]', style=
"Strace1.TCheckbutton", variable=ShowC1_V, command=TraceSelectADC_Mux)
21106 ckbt1.pack(side=TOP)
21107 ckbt2 = Checkbutton(frame2r, text=
'CA-I [3]', style=
"Strace3.TCheckbutton", variable=ShowC1_I, command=TraceSelectADC_Mux)
21108 ckbt2.pack(side=TOP)
21109 ckbt3 = Checkbutton(frame2r, text=
'CB-V [2]', style=
"Strace2.TCheckbutton", variable=ShowC2_V, command=TraceSelectADC_Mux)
21110 ckbt3.pack(side=TOP)
21111 ckbt4 = Checkbutton(frame2r, text=
'CB-I [4]', style=
"Strace4.TCheckbutton", variable=ShowC2_I, command=TraceSelectADC_Mux)
21112 ckbt4.pack(side=TOP)
21114 if ShowBallonHelp > 0:
21118 BuildSpectrumScreen_tip =
CreateToolTip(BuildSpectrumScreen,
'Open spectrum analyzer window')
21123 DigScreenStatus = IntVar(0)
21124 DigScreenStatus.set(0)
21125 if EnableDigIO > 0:
21126 BuildDigScreen = Button(frame2r, text=
"Digital I/O Screen", style=
"W17.TButton", command=MakeDigScreen)
21127 BuildDigScreen.pack(side=TOP)
21130 if EnablePIODACMode > 0:
21131 BuildDacScreen = Button(frame2r, text=
"PIO-DAC Screen", style=
"W17.TButton", command=MakeDacScreen)
21132 BuildDacScreen.pack(side=TOP)
21133 if EnableMuxMode > 0:
21134 BuildMuxScreen = Button(frame2r, text=
"Analog In Mux Screen", style=
"W17.TButton", command=MakeMuxModeWindow)
21135 BuildMuxScreen.pack(side=TOP)
21136 if EnableMinigenMode > 0:
21137 BuildMinigenScreen = Button(frame2r, text=
"AD983x DDS Screen", style=
"W17.TButton", command=MakeMinigenWindow)
21138 BuildMinigenScreen.pack(side=TOP)
21139 if EnablePmodDA1Mode > 0:
21140 BuildDA1Screen = Button(frame2r, text=
"PMOD DA1 Screen", style=
"W17.TButton", command=MakeDA1Window)
21141 BuildDA1Screen.pack(side=TOP)
21142 if EnableDigPotMode >0:
21143 BuildDigPotScreen = Button(frame2r, text=
"Dig Pot Screen", style=
"W17.TButton", command=MakeDigPotWindow)
21144 BuildDigPotScreen.pack(side=TOP)
21145 if EnableGenericSerialMode >0:
21146 GenericSerialScreen = Button(frame2r, text=
"Generic Serial Output", style=
"W17.TButton", command=MakeGenericSerialWindow)
21147 GenericSerialScreen.pack(side=TOP)
21148 if EnableAD5626SerialMode >0:
21149 AD5626SerialScreen = Button(frame2r, text=
"AD5626 Output", style=
"W17.TButton", command=MakeAD5626Window)
21150 AD5626SerialScreen.pack(side=TOP)
21151 if EnableDigitalFilter >0:
21152 DigFiltScreen = Button(frame2r, text=
"Digital Filter", style=
"W17.TButton", command=MakeDigFiltWindow)
21153 DigFiltScreen.pack(side=TOP)
21154 if EnableCommandInterface > 0:
21155 CommandLineScreen = Button(frame2r, text=
"Command Interface", style=
"W17.TButton", command=MakeCommandScreen)
21156 CommandLineScreen.pack(side=TOP)
21157 if EnableMeasureScreen > 0:
21158 MeasureScreen = Button(frame2r, text=
"Measure Screen", style=
"W17.TButton", command=MakeMeasureScreen)
21159 MeasureScreen.pack(side=TOP)
21160 if EnableETSScreen > 0:
21161 ETSScreen = Button(frame2r, text=
"ETS Controls", style=
"W17.TButton", command=MakeETSWindow)
21162 ETSScreen.pack(side=TOP)
21164 prlab = Label(frame2r, text=
"Adjust Gain / Offset")
21165 prlab.pack(side=TOP)
21167 ProbeA = Frame( frame2r )
21168 ProbeA.pack(side=TOP)
21169 gain1lab = Label(ProbeA, text=
"CA-V")
21170 gain1lab.pack(side=LEFT)
21171 CHAVGainEntry = Entry(ProbeA, width=5)
21172 CHAVGainEntry.bind(
'<Return>', onTextKey)
21173 CHAVGainEntry.bind(
'<MouseWheel>', onTextScroll)
21174 CHAVGainEntry.bind(
"<Button-4>", onTextScroll)
21175 CHAVGainEntry.bind(
"<Button-5>", onTextScroll)
21176 CHAVGainEntry.bind(
'<Key>', onTextKey)
21177 CHAVGainEntry.pack(side=LEFT)
21178 CHAVGainEntry.delete(0,
"end")
21179 CHAVGainEntry.insert(0,1.0)
21180 CHAVOffsetEntry = Entry(ProbeA, width=5)
21181 CHAVOffsetEntry.bind(
'<Return>', onTextKey)
21182 CHAVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
21183 CHAVOffsetEntry.bind(
"<Button-4>", onTextScroll)
21184 CHAVOffsetEntry.bind(
"<Button-5>", onTextScroll)
21185 CHAVOffsetEntry.bind(
'<Key>', onTextKey)
21186 CHAVOffsetEntry.pack(side=LEFT)
21187 CHAVOffsetEntry.delete(0,
"end")
21188 CHAVOffsetEntry.insert(0,0.0)
21190 ProbeB = Frame( frame2r )
21191 ProbeB.pack(side=TOP)
21192 gain2lab = Label(ProbeB, text=
"CB-V")
21193 gain2lab.pack(side=LEFT)
21194 CHBVGainEntry = Entry(ProbeB, width=5)
21195 CHBVGainEntry.bind(
'<Return>', onTextKey)
21196 CHBVGainEntry.bind(
'<MouseWheel>', onTextScroll)
21197 CHBVGainEntry.bind(
"<Button-4>", onTextScroll)
21198 CHBVGainEntry.bind(
"<Button-5>", onTextScroll)
21199 CHBVGainEntry.bind(
'<Key>', onTextKey)
21200 CHBVGainEntry.pack(side=LEFT)
21201 CHBVGainEntry.delete(0,
"end")
21202 CHBVGainEntry.insert(0,1.0)
21203 CHBVOffsetEntry = Entry(ProbeB, width=5)
21204 CHBVOffsetEntry.bind(
'<Return>', onTextKey)
21205 CHBVOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
21206 CHBVOffsetEntry.bind(
"<Button-4>", onTextScroll)
21207 CHBVOffsetEntry.bind(
"<Button-5>", onTextScroll)
21208 CHBVOffsetEntry.bind(
'<Key>', onTextKey)
21209 CHBVOffsetEntry.pack(side=LEFT)
21210 CHBVOffsetEntry.delete(0,
"end")
21211 CHBVOffsetEntry.insert(0,0.0)
21213 ProbeAI = Frame( frame2r )
21214 ProbeAI.pack(side=TOP)
21215 gainailab = Label(ProbeAI, text=
"CA-I")
21216 gainailab.pack(side=LEFT)
21217 CHAIGainEntry = Entry(ProbeAI, width=5)
21218 CHAIGainEntry.bind(
'<Return>', onTextKey)
21219 CHAIGainEntry.bind(
'<MouseWheel>', onTextScroll)
21220 CHAIGainEntry.bind(
"<Button-4>", onTextScroll)
21221 CHAIGainEntry.bind(
"<Button-5>", onTextScroll)
21222 CHAIGainEntry.bind(
'<Key>', onTextKey)
21223 CHAIGainEntry.pack(side=LEFT)
21224 CHAIGainEntry.delete(0,
"end")
21225 CHAIGainEntry.insert(0,1.0)
21226 CHAIOffsetEntry = Entry(ProbeAI, width=5)
21227 CHAIOffsetEntry.bind(
'<Return>', onTextKey)
21228 CHAIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
21229 CHAIOffsetEntry.bind(
"<Button-4>", onTextScroll)
21230 CHAIOffsetEntry.bind(
"<Button-5>", onTextScroll)
21231 CHAIOffsetEntry.bind(
'<Key>', onTextKey)
21232 CHAIOffsetEntry.pack(side=LEFT)
21233 CHAIOffsetEntry.delete(0,
"end")
21234 CHAIOffsetEntry.insert(0,0.0)
21236 ProbeBI = Frame( frame2r )
21237 ProbeBI.pack(side=TOP)
21238 gainbilab = Label(ProbeBI, text=
"CB-I")
21239 gainbilab.pack(side=LEFT)
21240 CHBIGainEntry = Entry(ProbeBI, width=5)
21241 CHBIGainEntry.bind(
'<Return>', onTextKey)
21242 CHBIGainEntry.bind(
'<MouseWheel>', onTextScroll)
21243 CHBIGainEntry.bind(
"<Button-4>", onTextScroll)
21244 CHBIGainEntry.bind(
"<Button-5>", onTextScroll)
21245 CHBIGainEntry.bind(
'<Key>', onTextKey)
21246 CHBIGainEntry.pack(side=LEFT)
21247 CHBIGainEntry.delete(0,
"end")
21248 CHBIGainEntry.insert(0,1.0)
21249 CHBIOffsetEntry = Entry(ProbeBI, width=5)
21250 CHBIOffsetEntry.bind(
'<Return>', onTextKey)
21251 CHBIOffsetEntry.bind(
'<MouseWheel>', onTextScroll)
21252 CHBIOffsetEntry.bind(
"<Button-4>", onTextScroll)
21253 CHBIOffsetEntry.bind(
"<Button-5>", onTextScroll)
21254 CHBIOffsetEntry.bind(
'<Key>', onTextKey)
21255 CHBIOffsetEntry.pack(side=LEFT)
21256 CHBIOffsetEntry.delete(0,
"end")
21257 CHBIOffsetEntry.insert(0,0.0)
21260 R0lGODlhdAAxAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
21261 /////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
21262 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm
21263 AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/
21264 MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm
21265 ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/
21266 mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm
21267 zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/
21268 /5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ
21269 AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA
21270 M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ
21271 ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A
21272 mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z
21273 zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAB0ADEA
21274 AAj/AP8JHEiwoMGDCBMqXMiwocOHEBlSS5WKIUWJfqj9S+XnokGPEUOKdEito0WNCC9OpEbtz7+V
21275 HyuOnEnzI6yMEylWpNgx50aOGkt6LElUoB9VPFHyTAXrYipVNaOSTOWzEEuqA61SXTnxH06ZK7EK
21276 5Ap2J9WdKKWqRVjyJ1c/1ZbqvPnyrKqS215mzEiwo8yfer22XUs4Zse9V31mPFuxbdKxjAU65Si5
21277 8Vm+hTNXrvuWKFKdjs8WJEqR5V63bkP/1bx28E+rK28ihckRayHQnH/yVdUTMtB/1fywHj7TI0iR
21278 x4krd7g0bcjSy6NLn069uvXr2LNr3/6Sip/vU777//EOXjx5P+G/nw/vnCA18gXFOy+JWfL31V6/
21279 s001ZQqK8AdN1B8KJiVETX9TMIGggv0xmOCCEDbYX3sDoTdhXwi6199qFjJRUIMB3iEhgs7x56CC
21280 wrH134r+tcjiiy7G+B+FL7nIYYsp1ojCX9SwuFqLBh343xQc+bGiUjhyhCNbLTbR4oBTODlkk09S
21281 iQKNBz7Z139OotQjkQPxx2WO/3D5kZNUDDSRk8IJOUVabqoo45ww1tkijejt+N9fUM64kX9/GQne
21282 lQMBWdCRGs6Yyp4FFYllhIVM6aCkCFL65kGAHshEjhZa2NiGAlWzJzUK8pngaAmSKVAh/fHWX0Rf
21283 sv+oSnB01iprkIwOWKF//wzIEqBG8drrf4USS9CiYBYEy39/GCrQHzpZFWCVhOoFpZSVRkktheg1
21284 MRaoXhGLbEaM9tpEinmiNGSj4CaaipNTqKltuaPBOF+ftt6JKgpUnGUoFcIaGR6wX371X4rOjnXw
21285 R3tSYexLL+L37YgUmhjhgxSjijHGGln4rYMVoXdihr2eqiETdxhEooUUtuuevQEiayeL7eU5p3B5
21286 ZmXjsHRWlLBAWgA7ULME/rPsqxjuOC2X/tE4VrfUztuef6oCKXDSRBb8MoBc6gSalD1BDVW4E5rW
21287 osQQx+i0mgLbOd/CSWeJwtY7pvvhjLWmDWOOJc3/jHaWHDckd4TOsawxePEeuyGJ7O44opbWDukH
21288 LB8hOGFtAcI4dkNEx7g5d+6xtBBLa8s7ZbUk/XF66aBLFau+D/GntntbwdQo6bXnHmTu83FFO+6k
21289 wxm8QoAzyDrbI186UPIF/vk4in6UStA2DKaC4q4OKp98qsFmnPnsC21jM8zF3izZzB1RTRDRfrBa
21290 dMl1alSrcPgOmVeQVpYuYNRSOtf/RFDbSaaCJzop9cVJFOkPzs6mF3iVjEheo0qzmvAHpcCtXuA7
21291 iJjy5ZyE2Wwi9IpPub4ULzFlhIFP25P6DCKwzQlJVRML3EEstDFLOYdBH7qcyxQ3hUJIJkE7ORip
21292 /5CmptJcEENMQNv3bkW7mc3pcz8bl8xilKN1ka0i7HMfDMsHo42wqIdiWVqlSmSlbGHLVwTRleII
21293 tMFrccpPVnxXeGSnxH+csUk/tFJ96Aa7kuTLbWl82PnmKLn06OeHOxKTTExowoTgCD3i6UvbVqix
21294 wMlue5i80PKIuKoN0VEhCJLd2KzHnushxJSjuySFXnewP3IwkIkrH0WYpRCBkewfWnSTc1TRyvfF
21295 RwuqEtgqy3gt/hkTdXYUVl0cqEiFyE5ozlugL+GXpS32pwkdjNIqncjNWnXwYBZaEVSm+CIyQekv
21296 jYTffaDkpjqpzpOym6a8HmepKk2KcAS5J+OcV0JDAIXJioPMEZQaxJd6Kkqfe1RTNxfquWNRBFo6
21297 oV0qbvNQ6BQxjP/4TOGSpBSKUDQVEH2awHrTupKa9KQoTWl0AgIAOw==
21299 logo = PhotoImage(data=ADIlogo)
21300 ADI1 = Label(frame2r, image=logo, anchor=
"sw", compound=
"top")
21301 ADI1.pack(side=TOP)
21305 CHAsb = Spinbox(frame3, width=4, values=CHvpdiv, command=BCHAlevel)
21306 CHAsb.bind(
'<MouseWheel>', onSpinBoxScroll)
21307 CHAsb.pack(side=LEFT)
21308 CHAsb.delete(0,
"end")
21309 CHAsb.insert(0,0.5)
21311 CHAlab = Button(frame3, text=
"CA V/Div", style=
"Rtrace1.TButton", command=SetScaleA)
21312 CHAlab.pack(side=LEFT)
21314 CHAVPosEntry = Entry(frame3, width=5)
21315 CHAVPosEntry.bind(
"<Return>", BOffsetA)
21316 CHAVPosEntry.bind(
'<MouseWheel>', onTextScroll)
21317 CHAVPosEntry.bind(
"<Button-4>", onTextScroll)
21318 CHAVPosEntry.bind(
"<Button-5>", onTextScroll)
21319 CHAVPosEntry.bind(
'<Key>', onTextKey)
21320 CHAVPosEntry.pack(side=LEFT)
21321 CHAVPosEntry.delete(0,
"end")
21322 CHAVPosEntry.insert(0,2.5)
21323 CHAofflab = Button(frame3, text=
"CA V Pos", style=
"Rtrace1.TButton", command=SetVAPoss)
21324 CHAofflab.pack(side=LEFT)
21326 CHAIsb = Spinbox(frame3, width=4, values=CHipdiv, command=BCHAIlevel)
21327 CHAIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
21328 CHAIsb.pack(side=LEFT)
21329 CHAIsb.delete(0,
"end")
21330 CHAIsb.insert(0,50.0)
21331 CHAIlab = Button(frame3, text=
"CA mA/Div", style=
"Strace3.TButton", command=SetScaleIA)
21332 CHAIlab.pack(side=LEFT)
21334 CHAIPosEntry = Entry(frame3, width=5)
21335 CHAIPosEntry.bind(
"<Return>", BIOffsetA)
21336 CHAIPosEntry.bind(
'<MouseWheel>', onTextScroll)
21337 CHAIPosEntry.bind(
"<Button-4>", onTextScroll)
21338 CHAIPosEntry.bind(
"<Button-5>", onTextScroll)
21339 CHAIPosEntry.bind(
'<Key>', onTextKey)
21340 CHAIPosEntry.pack(side=LEFT)
21341 CHAIPosEntry.delete(0,
"end")
21342 CHAIPosEntry.insert(0,0.0)
21343 CHAIofflab = Button(frame3, text=
"CA I Pos", style=
"Rtrace3.TButton", command=SetIAPoss)
21344 CHAIofflab.pack(side=LEFT)
21346 CHBsb = Spinbox(frame3, width=4, values=CHvpdiv, command=BCHBlevel)
21347 CHBsb.bind(
'<MouseWheel>', onSpinBoxScroll)
21348 CHBsb.pack(side=LEFT)
21349 CHBsb.delete(0,
"end")
21350 CHBsb.insert(0,0.5)
21352 CHBlab = Button(frame3, text=
"CB V/Div", style=
"Strace2.TButton", command=SetScaleB)
21353 CHBlab.pack(side=LEFT)
21355 CHBVPosEntry = Entry(frame3, width=5)
21356 CHBVPosEntry.bind(
"<Return>", BOffsetB)
21357 CHBVPosEntry.bind(
'<MouseWheel>', onTextScroll)
21358 CHBVPosEntry.bind(
"<Button-4>", onTextScroll)
21359 CHBVPosEntry.bind(
"<Button-5>", onTextScroll)
21360 CHBVPosEntry.bind(
'<Key>', onTextKey)
21361 CHBVPosEntry.pack(side=LEFT)
21362 CHBVPosEntry.delete(0,
"end")
21363 CHBVPosEntry.insert(0,2.5)
21364 CHBofflab = Button(frame3, text=
"CB V Pos", style=
"Rtrace2.TButton", command=SetVBPoss)
21365 CHBofflab.pack(side=LEFT)
21367 CHBIsb = Spinbox(frame3, width=4, values=CHipdiv, command=BCHBIlevel)
21368 CHBIsb.bind(
'<MouseWheel>', onSpinBoxScroll)
21369 CHBIsb.pack(side=LEFT)
21370 CHBIsb.delete(0,
"end")
21371 CHBIsb.insert(0,50.0)
21372 CHBIlab = Button(frame3, text=
"CB mA/Div", style=
"Strace4.TButton", command=SetScaleIB)
21373 CHBIlab.pack(side=LEFT)
21375 CHBIPosEntry = Entry(frame3, width=5)
21376 CHBIPosEntry.bind(
"<Return>", BIOffsetB)
21377 CHBIPosEntry.bind(
'<MouseWheel>', onTextScroll)
21378 CHBIPosEntry.bind(
"<Button-4>", onTextScroll)
21379 CHBIPosEntry.bind(
"<Button-5>", onTextScroll)
21380 CHBIPosEntry.bind(
'<Key>', onTextKey)
21381 CHBIPosEntry.pack(side=LEFT)
21382 CHBIPosEntry.delete(0,
"end")
21383 CHBIPosEntry.insert(0,0.0)
21384 CHBIofflab = Button(frame3, text=
"CB I Pos", style=
"Rtrace4.TButton", command=SetIBPoss)
21385 CHBIofflab.pack(side=LEFT)
21387 if ShowBallonHelp > 0:
21388 CHAlab_tip =
CreateToolTip(CHAlab,
'Select CHA-V vertical range/position axis to be used for markers and drawn color')
21389 CHBlab_tip =
CreateToolTip(CHBlab,
'Select CHB-V vertical range/position axis to be used for markers and drawn color')
21390 CHAIlab_tip =
CreateToolTip(CHAIlab,
'Select CHA-I vertical range/position axis to be used for markers and drawn color')
21391 CHBIlab_tip =
CreateToolTip(CHBIlab,
'Select CHB-I vertical range/position axis to be used for markers and drawn color')
21392 CHAofflab_tip =
CreateToolTip(CHAofflab,
'Set CHA-V position to DC average of signal')
21393 CHBofflab_tip =
CreateToolTip(CHBofflab,
'Set CHB-V position to DC average of signal')
21394 CHAIofflab_tip =
CreateToolTip(CHAIofflab,
'Set CHA-I position to DC average of signal')
21395 CHBIofflab_tip =
CreateToolTip(CHBIofflab,
'Set CHB-I position to DC average of signal')
21397 root.geometry(
'+300+0')
21398 root.protocol(
"WM_DELETE_WINDOW", Bcloseexit)
21400 if not numpy_found:
21402 showwarning(
"WARNING",
"Numpy not found!")
21407 BoardStatus = IntVar(0)
21422 showwarning(
"WARNING",
"Pysmu not found!")