##// END OF EJS Templates
analog discovery:...
jeandet -
r8:438467acb8ed default draft
parent child
Show More
@@ -1,374 +1,431
1 1 #!/usr/bin/env python
2 2 #-*- coding: utf-8 -*-
3 3 """Simple python library to drive the analog discovery module from www.digilentinc.com
4 4 """
5 5
6 6 from ctypes import *
7 7 import time
8 8 import sys
9 9 import os
10 10 import matplotlib.pyplot as plt
11 11 import numpy as np
12 12
13 13 __author__ = "Alexis Jeandet"
14 14 __copyright__ = "Copyright 2015, Laboratory of Plasma Physics"
15 15 __credits__ = []
16 16 __license__ = "GPLv2"
17 17 __version__ = "1.0.0"
18 18 __maintainer__ = "Alexis Jeandet"
19 19 __email__ = "alexis.jeandet@member.fsf.org"
20 20 __status__ = "Production"
21 21
22 22
23 23 nodev = c_int(0)
24 DwfStateDone = c_int(2)
24
25 DwfStateReady = c_byte(0)
26 DwfStateConfig = c_byte(4)
27 DwfStatePrefill = c_byte(5)
28 DwfStateArmed = c_byte(1)
29 DwfStateWait = c_byte(7)
30 DwfStateTriggered = c_byte(3)
31 DwfStateRunning = c_byte(3)
32 DwfStateDone = c_byte(2)
33
34 DwfStateDict={
35 DwfStateReady.value:"Ready",
36 DwfStateConfig.value:"Config",
37 DwfStatePrefill.value:"Prefill",
38 DwfStateArmed.value:"Armed",
39 DwfStateWait.value:"Wait",
40 DwfStateTriggered.value:"Triggered",
41 DwfStateRunning.value:"Running",
42 DwfStateDone.value:"Done"
43 }
25 44
26 45 DECIAnalogInChannelCount = c_int(1)
27 46 DECIAnalogOutChannelCount = c_int(2)
28 47 DECIAnalogIOChannelCount = c_int(3)
29 48 DECIDigitalInChannelCount = c_int(4)
30 49 DECIDigitalOutChannelCount = c_int(5)
31 50 DECIDigitalIOChannelCount = c_int(6)
32 51 DECIAnalogInBufferSize = c_int(7)
33 52 DECIAnalogOutBufferSize = c_int(8)
34 53 DECIDigitalInBufferSize = c_int(9)
35 54 DECIDigitalOutBufferSize = c_int(10)
36 55
37 56 trigsrcNone = c_byte(0)
38 57 trigsrcPC = c_byte(1)
39 58 trigsrcDetectorAnalogIn = c_byte(2)
40 59 trigsrcDetectorDigitalIn = c_byte(3)
41 60 trigsrcAnalogIn = c_byte(4)
42 61 trigsrcDigitalIn = c_byte(5)
43 62 trigsrcDigitalOut = c_byte(6)
44 63 trigsrcAnalogOut1 = c_byte(7)
45 64 trigsrcAnalogOut2 = c_byte(8)
46 65 trigsrcAnalogOut3 = c_byte(9)
47 66 trigsrcAnalogOut4 = c_byte(10)
48 67 trigsrcExternal1 = c_byte(11)
49 68 trigsrcExternal2 = c_byte(12)
50 69 trigsrcExternal3 = c_byte(13)
51 70 trigsrcExternal4 = c_byte(14)
52 71 trigAuto = c_byte(254)
53 72 trigNormal = c_byte(255)
54 73
55 74 AnalogOutNodeCarrier = c_int(0)
56 75 AnalogOutNodeFM = c_int(1)
57 76 AnalogOutNodeAM = c_int(2)
58 77
59 78
60 79 shapes = {'DC' : 0,
61 80 'Sine' : 1,
62 81 'Square' : 2,
63 82 'Triangle' : 3,
64 83 'RampUp' : 4,
65 84 'RampDown' : 5,
66 85 'Noise' : 6,
67 86 'Custom' : 30,
68 87 'Play' :31, }
69 88
70 89 closed=False
71 90 opened=True
72 91
73 92
74 93 class DiscoveryLimits(object):
75 94 class limitRange(object):
76 95 def __init__(self,Min,Max,name="Unknow",unit=""):
77 96 self.Min = Min
78 97 self.Max = Max
79 98 self.name = name
80 99 self.unit = unit
81 100
82 101 def conform(self,value):
83 102 if value<self.Min:
84 103 raise UserWarning("Parameter "+self.name+" out of bound\nValue="+str(value)+"\nForce to "+str(self.Min))
85 104 return self.Min
86 105 if value>self.Max:
87 106 raise UserWarning("Parameter "+self.name+" out of bound\nValue="+str(value)+"\nForce to "+str(self.Max))
88 107 return self.Max
89 108 return value
90 109
91 110 def __str__(self):
92 111 return self.name + ":\n Min="+str(self.Min)+" "+self.unit+",Max="+str(self.Max)+" "+self.unit
93 112
94 113 errors = {0: RuntimeError("No card opened"),
95 114 1: UserWarning("Parameter out of bound"),
96 115 }
97 116 def __init__(self,libdwf,hdwf):
98 117 self.limits=[]
99 118 self.ACQ_IN_RANGES=[0.0]
100 119 if hdwf.value == nodev.value:
101 120 return
102 121 self.__hdwf=hdwf
103 122 self.__libdwf=libdwf
104 123 Mind=c_double()
105 124 Maxd=c_double()
106 125 Mini=c_int()
107 126 Maxi=c_int()
108 127 StepsCount=c_int()
109 128 Steps=(c_double*32)()
110 129 self.__libdwf.FDwfAnalogInBufferSizeInfo(self.__hdwf, byref(Mini), byref(Maxi))
111 130 self.ACQ_BUF=self.limitRange(Mini.value,Maxi.value,"ACQ Buffer Size","Sps")
112 131 self.limits.append(self.ACQ_BUF)
113 132 self.__libdwf.FDwfAnalogInFrequencyInfo(self.__hdwf, byref(Mind), byref(Maxd))
114 133 self.ACQ_FREQ=self.limitRange(Mind.value,Maxd.value,"ACQ Frequency","Hz")
115 134 self.limits.append(self.ACQ_FREQ)
116 135 self.__libdwf.FDwfAnalogInChannelRangeSteps(self.__hdwf, byref(Steps), byref(StepsCount))
117 136 self.ACQ_IN_RANGES=Steps[0:StepsCount.value]
118 137 self.__libdwf.FDwfAnalogOutNodeAmplitudeInfo(self.__hdwf,c_int(0), AnalogOutNodeCarrier,
119 138 byref(Mind), byref(Maxd))
120 139 self.GEN_AMPL=self.limitRange(Mind.value,Maxd.value,"GEN Amplitude","V")
121 140 self.limits.append(self.GEN_AMPL)
122 141 self.__libdwf.FDwfAnalogOutNodeFrequencyInfo(self.__hdwf,c_int(0), AnalogOutNodeCarrier,
123 142 byref(Mind), byref(Maxd))
124 143 self.GEN_FREQ=self.limitRange(Mind.value,Maxd.value,"GEN Frequency","Hz")
125 144 self.limits.append(self.GEN_FREQ)
126 145 self.__libdwf.FDwfAnalogOutNodeOffsetInfo(self.__hdwf,c_int(0), AnalogOutNodeCarrier,
127 146 byref(Mind), byref(Maxd))
128 147 self.GEN_OFFSET=self.limitRange(Mind.value,Maxd.value,"GEN Offset","V")
129 148 self.limits.append(self.GEN_OFFSET)
130 149 self.__libdwf.FDwfAnalogOutNodeDataInfo(self.__hdwf,c_int(0), AnalogOutNodeCarrier,
131 150 byref(Mini), byref(Maxi))
132 151 self.GEN_BUFF=self.limitRange(Mini.value,Maxi.value,"GEN Buffer size","Sps")
133 152 self.limits.append(self.GEN_BUFF)
134 153
135 154
136 155 def __conformParam(self,minVal,maxVal,val):
137 156 if val<minVal:
138 157 raise self.errors.get(1)
139 158 print("Force to "+str(minVal))
140 159 return minVal
141 160 if val>maxVal:
142 161 raise self.errors.get(1)
143 162 print("Force to "+str(maxVal))
144 163 return maxVal
145 164 return val
146 165
147 166 def acqFreq(self, value):
148 167 return self.ACQ_FREQ.conform(value)
149 168
150 169 def acqBufSize(self, value):
151 170 return self.ACQ_BUF.conform(value)
152 171
153 172 def genFreq(self, value):
154 173 return self.GEN_FREQ.conform(value)
155 174
156 175 def genAmplitude(self, value):
157 176 return self.GEN_AMPL.conform(value)
158 177
159 178 def genOffset(self, value):
160 179 return self.GEN_OFFSET.conform(value)
161 180
162 181 def genBuffSize(self, value):
163 182 return self.GEN_BUFF.conform(value)
164 183
165 184 def __str__(self):
166 185 res=str()
167 186 for i in self.limits:
168 187 res+=i.__str__()+"\n"
169 188 res+="ACQ Input ranes: "+str(self.ACQ_IN_RANGES)
170 189 return res
171 190
172 191
173 192 class Discovery(object):
174 193
175 194 errors = {0: RuntimeError("No card opened"),
176 195 1: UserWarning("Parameter out of bound"),
177 196 }
178 197 def findDevice(self,device):
179 198 if not self.__opened:
180 199 raise self.errors.get(0)
181 200 nbDevices = c_int()
182 201 self.__libdwf.FDwfEnum(c_int(0), byref(nbDevices))
183 202 SN = create_string_buffer(32)
184 203 for i in range(nbDevices.value):
185 204 self.__libdwf.FDwfEnumSN(c_int(i), SN)
186 205 if SN.value.decode("UTF-8") == device:
187 206 return i
188 207 return -1
189 208
190 209
191 210 def __init__(self,card=-1):
192 211 if sys.platform.startswith("win"):
193 212 self.__libdwf = cdll.dwf
194 213 elif sys.platform.startswith("darwin"):
195 214 self.__libdwf = cdll.LoadLibrary("libdwf.dylib")
196 215 else:
197 216 self.__libdwf = cdll.LoadLibrary("libdwf.so")
198 217 self.__opened = True
199 218 self.__hdwf = c_int()
200 219 if card != -1:
201 220 SN=card
202 221 card = self.findDevice(card)
203 222 if card == -1:
204 223 raise RuntimeError( "Card not found "+ SN)
205 224 self.__libdwf.FDwfDeviceOpen(c_int(card), byref(self.__hdwf))
206 225 if self.__hdwf.value == nodev.value:
207 226 szerr = create_string_buffer(512)
208 227 self.__libdwf.FDwfGetLastErrorMsg(szerr)
209 228 print(szerr.value)
210 229 print("failed to open device")
211 230 self.__opened=False
212 231 self.__limits=DiscoveryLimits(self.__libdwf,self.__hdwf)
213 232 print(self.__limits)
214 233
215 234 @property
216 235 def opened(self):
217 236 return self.__opened
218 237
219 238 @property
220 239 def max_sampling_freq(self):
221 240 return self.__limits.ACQ_FREQ.Max
222 241
223 242 @property
224 243 def min_sampling_freq(self):
225 244 return self.__limits.ACQ_FREQ.Min
226 245
227 246 @property
228 247 def max_sampling_buffer(self):
229 248 return self.__limits.ACQ_BUF.Max
230 249
231 250 #############################################################
232 251 # Power Supply
233 252 #############################################################
234 253 def set_power(self,fiveVolt=1,minusFiveVolt=1,master=True):
235 254 if not self.__opened:
236 255 raise self.errors.get(0)
237 256 # enable positive supply
238 257 self.__libdwf.FDwfAnalogIOChannelNodeSet(self.__hdwf, 0, 0, c_double(fiveVolt))
239 258 # enable negative supply
240 259 self.__libdwf.FDwfAnalogIOChannelNodeSet(self.__hdwf, 1, 0, c_double(minusFiveVolt))
241 260 # master enable
242 261 return self.__libdwf.FDwfAnalogIOEnableSet(self.__hdwf, master)
243 262
244 263 def get_power(self):
245 264 if not self.__opened:
246 265 raise self.errors.get(0)
247 266 supplyVoltage = c_double()
248 267 supplyCurrent = c_double()
249 268 IsEnabled = c_bool()
250 269 self.__libdwf.FDwfAnalogIOStatus(self.__hdwf)
251 270 self.__libdwf.FDwfAnalogIOChannelNodeStatus(self.__hdwf, c_int(3), c_int(0), byref(supplyVoltage))
252 271 self.__libdwf.FDwfAnalogIOChannelNodeStatus(self.__hdwf, c_int(3), c_int(1), byref(supplyCurrent))
253 272 self.__libdwf.FDwfAnalogIOEnableStatus(self.__hdwf, byref(IsEnabled))
254 273 return [IsEnabled.value,supplyVoltage.value,supplyCurrent.value]
255 274
256 275 #############################################################
257 276 # AnalogIn
258 277 #############################################################
259 278 def analog_in_read(self,ch1=True,ch2=True,frequency=100000000,samplesCount=100,ch1range=5.0,ch2range=5.0,trigger=trigsrcNone):
260 279 if not self.__opened:
261 280 raise self.errors.get(0)
262 281 cnt=self.__limits.acqBufSize(samplesCount)
263 282 self.__libdwf.FDwfAnalogInFrequencySet(self.__hdwf, c_double(self.__limits.acqFreq(frequency)))
264 283 f=c_double()
265 284 self.__libdwf.FDwfAnalogInFrequencyGet(self.__hdwf, byref(f))
266 285 frequency=f.value
267 286 self.__libdwf.FDwfAnalogInBufferSizeSet(self.__hdwf, c_int(cnt))
268 287 self.__libdwf.FDwfAnalogInChannelEnableSet(self.__hdwf, c_int(0), c_bool(ch1))
269 288 self.__libdwf.FDwfAnalogInChannelRangeSet(self.__hdwf, c_int(0), c_double(ch1range))
270 289 self.__libdwf.FDwfAnalogInChannelEnableSet(self.__hdwf, c_int(1), c_bool(ch2))
271 290 self.__libdwf.FDwfAnalogInChannelRangeSet(self.__hdwf, c_int(1), c_double(ch2range))
272 291 self.set_analog_in_trigger(trigger)
273 292 self.__libdwf.FDwfAnalogInConfigure(self.__hdwf, c_bool(False), c_bool(True))
274 293 status = c_byte()
275 294 while True:
276 295 self.__libdwf.FDwfAnalogInStatus(self.__hdwf, c_int(1), byref(status))
277 296 if status.value == DwfStateDone.value :
278 297 break
279 298 time.sleep(0.1)
280 299 if ch1:
281 300 ch1data = (c_double*cnt)()
282 301 self.__libdwf.FDwfAnalogInStatusData(self.__hdwf, 0, ch1data, cnt)
283 302 if ch2:
284 303 ch2data = (c_double*cnt)()
285 304 self.__libdwf.FDwfAnalogInStatusData(self.__hdwf, 1, ch2data, cnt)
286 305 return [np.array([ch1data,ch2data]),frequency]
287 306 else:
288 307 return [np.array([ch1data]),frequency]
289 308 if ch2:
290 309 ch2data = (c_double*cnt)()
291 310 self.__libdwf.FDwfAnalogInStatusData(self.__hdwf, 1, ch2data, cnt)
292 311 return [np.array([ch2data]),frequency]
293 312
294 313
295 314 def set_analog_in_trigger(self,trigger=trigAuto,autoTimeout=0.0):
296 315 if not self.__opened:
297 316 raise self.errors.get(0)
298 317 if trigger == trigAuto:
299 318 self.__libdwf.FDwfAnalogInTriggerSourceSet(self.__hdwf,trigsrcDetectorAnalogIn)
300 319 self.__libdwf.FDwfAnalogInTriggerAutoTimeoutSet(self.__hdwf,c_double(autoTimeout))
301 320 return
302 321 if trigger == trigNormal:
303 322 self.__libdwf.FDwfAnalogInTriggerSourceSet(self.__hdwf,trigsrcDetectorAnalogIn)
304 323 self.__libdwf.FDwfAnalogInTriggerAutoTimeoutSet(self.__hdwf,c_double(0.0))
305 324 return
306 325 self.__libdwf.FDwfAnalogInTriggerSourceSet(self.__hdwf,trigger)
307 326
308 327 #############################################################
309 328 # AnalogOut
310 329 #############################################################
311 def analog_out_gen(self,frequency=1000, shape='Sine', channel=0, amplitude=1.0, offset=0.0,phase=0.0, syncOnTrigger=False, triggerFrq=1.0):
330 def analog_out_gen(self,frequency=1000, symmetry=50.0, shape='Sine', channel=0, amplitude=1.0, offset=0.0,phase=0.0, syncOnTrigger=False, triggerFrq=1.0, wait=0.0, runDuration=None):
312 331 self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(False))
313 332 self.__libdwf.FDwfAnalogOutNodeEnableSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_bool(True))
314 333 self.__libdwf.FDwfAnalogOutNodeFunctionSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_int(shapes.get(shape)))
334 self.__libdwf.FDwfAnalogOutNodeSymmetrySet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(symmetry))
315 335 if shape!="DC":
316 336 self.__libdwf.FDwfAnalogOutNodeFrequencySet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genFreq(frequency)))
317 337 self.__libdwf.FDwfAnalogOutNodeAmplitudeSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genAmplitude(amplitude)))
318 338 self.__libdwf.FDwfAnalogOutNodeOffsetSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genOffset(offset)))
319 339 self.__libdwf.FDwfAnalogOutNodePhaseSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(phase))
320 340 if syncOnTrigger:
321 341 self.analog_out_set_trigger(channel)
322 342 self.__libdwf.FDwfAnalogOutRepeatSet(self.__hdwf, c_int(channel),c_int(0))
323 # if frequency >= triggerFrq:
324 runDuration = triggerFrq
325 # Doesn't work! try with triggerFrq=1 and frequency=0.8
326 # else:
327 # runDuration = triggerFrq/frequency
343 if runDuration is None:
344 runDuration = triggerFrq
328 345 self.__libdwf.FDwfAnalogOutRunSet(self.__hdwf, c_int(channel),c_double(runDuration))
346 self.__libdwf.FDwfAnalogOutWaitSet(self.__hdwf, c_int(channel), c_double(wait))
329 347 self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(True))
330 348
331 349 def analog_out_gen_arbit(self,samplesBuffer ,repeatingFrequency=100, channel=0, amplitude=1.0, offset=0.0):
332 350 self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(False))
333 351 cnt=self.__limits.genBuffSize(len(samplesBuffer))
334 352 buf=(c_double*cnt)()
335 353 buf[:]=samplesBuffer[0:cnt]
336 354 #repeatingFrequency = self.__limits.genFreq(repeatingFrequency*cnt)/cnt
337 355 self.__libdwf.FDwfAnalogOutNodeEnableSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_bool(True))
338 356 self.__libdwf.FDwfAnalogOutNodeFunctionSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_int(shapes.get("Custom")))
339 357 self.__libdwf.FDwfAnalogOutNodeFrequencySet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(repeatingFrequency))
340 358 self.__libdwf.FDwfAnalogOutNodeAmplitudeSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genAmplitude(amplitude)))
341 359 self.__libdwf.FDwfAnalogOutNodeOffsetSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genOffset(offset)))
342 360 self.__libdwf.FDwfAnalogOutNodeDataSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, buf, c_int(cnt))
343 361 self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(True))
344 362
345 363 def analog_out_set_trigger(self, channel=0, trigSrc=trigsrcExternal1, trigRepeat=True):
346 364 self.__libdwf.FDwfAnalogOutTriggerSourceSet(self.__hdwf, c_int(channel), trigSrc)
347 365 self.__libdwf.FDwfAnalogOutRepeatTriggerSet(self.__hdwf, c_int(channel), c_bool(trigRepeat))
348 366
367
368 def analog_out_status(self, channel=0):
369 status = c_byte(DwfStateDone.value)
370 self.__libdwf.FDwfAnalogOutStatus(self.__hdwf, c_int(channel), byref(status))
371 return status
372 # def analog_out_modulation(self, channel=0,
373 # carrier_frequency=10, carrier_shape='Sine', carrier_amplitude=1.0, carrier_offset=0.0, carrier_phase=0.0, carrier_symmetry=0.5,
374 # AM_frequency=0.2857, AM_shape='Square', AM_amplitude=100.0, AM_offset=0.0, AM_phase=0.0, AM_percentageSymmetry=0.2857,
375 # syncOnTrigger=trigsrcExternal1, triggerFrq=1.0, wait=0.0, runDuration=None):
376 # self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(False))
377 # self.__libdwf.FDwfAnalogOutNodeEnableSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_bool(True))
378 #
379 # self.__libdwf.FDwfAnalogOutNodeFunctionSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_int(shapes.get(carrier_shape)))
380 # self.__libdwf.FDwfAnalogOutNodeFrequencySet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genFreq(carrier_frequency)))
381 # self.__libdwf.FDwfAnalogOutNodeAmplitudeSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genAmplitude(carrier_amplitude)))
382 # self.__libdwf.FDwfAnalogOutNodeOffsetSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(self.__limits.genOffset(carrier_offset)))
383 # self.__libdwf.FDwfAnalogOutNodePhaseSet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(carrier_phase))
384 # self.__libdwf.FDwfAnalogOutNodeSymmetrySet(self.__hdwf, c_int(channel), AnalogOutNodeCarrier, c_double(carrier_percentageSymmetry))
385 #
386 # self.__libdwf.FDwfAnalogOutNodeEnableSet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_bool(True))
387 # self.__libdwf.FDwfAnalogOutNodeFunctionSet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_int(shapes.get(AM_shape)))
388 # self.__libdwf.FDwfAnalogOutNodeFrequencySet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_double(self.__limits.genFreqAM_frequency)))
389 # self.__libdwf.FDwfAnalogOutNodeAmplitudeSet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_double(self.__limits.genAmplitude(AM_amplitude)))
390 # self.__libdwf.FDwfAnalogOutNodeOffsetSet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_double(self.__limits.genOffset(AM_offset)))
391 # self.__libdwf.FDwfAnalogOutNodePhaseSet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_double(AM_phase))
392 # self.__libdwf.FDwfAnalogOutNodeSymmetrySet(self.__hdwf, c_int(channel), AnalogOutNodeAM, c_double(AM_percentageSymmetry))
393 #
394 # if syncOnTrigger:
395 # self.analog_out_set_trigger(channel)
396 # self.__libdwf.FDwfAnalogOutRepeatSet(self.__hdwf, c_int(channel),c_int(0))
397 # if runDuration is None:
398 # runDuration = triggerFrq
399 # self.__libdwf.FDwfAnalogOutRunSet(self.__hdwf, c_int(channel),c_double(runDuration))
400 # self.__libdwf.FDwfAnalogOutWaitSet(self.__hdwf, c_int(channel), c_double(wait))
401 # self.__libdwf.FDwfAnalogOutConfigure(self.__hdwf, c_int(channel), c_bool(True))
402
403
404
405
349 406 def __del__(self):
350 407 if self.__opened:
351 408 self.__libdwf.FDwfDeviceClose(self.__hdwf)
352 409
353 410
354 411 if __name__ == '__main__':
355 412 print("open first dev")
356 413 test = Discovery()
357 414 test.set_power()
358 415 for i in range(2):
359 416 time.sleep(0.2)
360 417 print(test.get_power())
361 418 test.analog_out_gen()
362 419 res=test.analog_in_read(frequency=1000000,samplesCount=1000)
363 420 print(res)
364 421 plt.plot(range(len(res[0][0])),res[0][0])
365 422 plt.plot(range(len(res[0][0])),res[0][1])
366 423 plt.show()
367 424 test.temp()
368 425 # del test
369 426 quit()
370 427
371 428
372 429
373 430
374 431
General Comments 0
You need to be logged in to leave comments. Login now