pico-python icon indicating copy to clipboard operation
pico-python copied to clipboard

Issue at repeating measurements

Open AZahoneroAT3W opened this issue 3 years ago • 2 comments

Hello guys, I've been working with the scripts for some weeks now and since this point its all working well. My current objetive is to make the measurements repeatible, as I'm trying to make frequency sweeps. The script I've been working with till now:

    print("Attempting to open Picoscope 2000...")
    ps = ps2000a.PS2000a()
    print("Found the following picoscope:")
    print(ps.getAllUnitInfo())
    Ipeaks=[]
    Vpeaks=[]
    while(True):
        check=input("ready?")
        if check != 'y':
            Vpeaks=list(map(str, Vpeaks))
            Ipeaks=list(map(str, Ipeaks))
            for i in range(len(Vpeaks)):
                Vpeaks[i]=Vpeaks[i].replace('.',',')
                Ipeaks[i]=Ipeaks[i].replace('.',',')
            hoy=datetime.now()
            forma=hoy.strftime('%d%m%y%H%M')
            directorio=r"C:/Users/azahonero/Documents/Mejoradores/temp/{}.txt" .format(forma)
            fd= open("{}" .format(directorio), "w+")
            fd.write('Ipeaks, Vpeaks \n')
            j=0
            for j in range (0,len(Ipeaks),1):
                fd.write("{}, {}\n" .format(Ipeaks[j], Vpeaks[j]))
            fd.close()
            return Ipeaks, Vpeaks
        else:
            inyec=eval(input('Frecuency: '))
            if inyec<100000:
                waveform_desired_duration = 50E-4
                obs_duration = 3 * waveform_desired_duration
                sampling_interval = obs_duration / 8192
                (actualSamplingInterval, nSamples, maxSamples) = \
                ps.setSamplingInterval(sampling_interval, obs_duration)
            elif inyec>=100000:
                waveform_desired_duration = 50E-5
                obs_duration = 3 * waveform_desired_duration
                sampling_interval = obs_duration / 8192
                (actualSamplingInterval, nSamples, maxSamples) = \
                ps.setSamplingInterval(sampling_interval, obs_duration)
            else:
                return 'error'
            print("Sampling interval = %f ns" % (actualSamplingInterval * 1E9))
            print("Taking  samples = %d" % nSamples)
            print("Maximum samples = %d" % maxSamples)

It keeps on, but the rest works properly. The point is that it executes one time perfectly, but when it returns to the ps.setSamplingInterval for the second time I get this error:

File "", line 1, in repmeas()

File "C:\Users\azahonero\Documents\uic\Scriptspico3.py", line 159, in repmeas ps.setSamplingInterval(sampling_interval, obs_duration)

File "C:\Users\azahonero\Anaconda3\lib\site-packages\picoscope\picobase.py", line 318, in setSamplingInterval (self.sampleInterval, self.maxSamples) = self._lowLevelGetTimebase(

File "C:\Users\azahonero\Anaconda3\lib\site-packages\picoscope\ps2000a.py", line 299, in _lowLevelGetTimebase c_int16(self.handle), c_uint32(tb), c_uint32(noSamples),

TypeError: an integer is required (got type NoneType)

So it seems that some argument of the low level function doesn't reach this point. I dont really understand why, as it works only the first time without problems. The point is that I need to change the duration of the waveform because my range of frequencies is wide and at lower frequencies I dont get a full period with waveform_desired_duration = 50E-5. Moreover, I'm aiming to optimize the resolution of the measurement as much as posible, but found this problem. I can avoid this by not changing the waveform_desired_duration (that's what I really need to change) but then other low level functions give similar errors. I dont really know what more to try, so will really appreciate any idea.

AZahoneroAT3W avatar Oct 05 '21 10:10 AZahoneroAT3W

What might be helpful is to add code to dump the value of each of those - not sure which one is getting set to None.

Typically this is because of some collision in variable namespace - the first time through it was set correctly, after that it got overwritten. But I think it might make more sense if you can see which variable is having the issue!

colinoflynn avatar Oct 07 '21 23:10 colinoflynn

I avoided this simply by programing the code I shown as a function for a single measurement and looping that one on another function, which worked for me. If anyone having the same issue ask I can upload my functions. Thanks for the help anyway!

AZahoneroAT3W avatar Oct 21 '21 10:10 AZahoneroAT3W