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