Esempio n. 1
0
    def ellipse(self):

        minVolt = -10.0
        maxVolt = 10.0
        freq = 2000  # frequency
        NS = freq * 1  # total number of seconds for entire scan
        COUNT = 32  # 32 data points per circle
        DACFREQ = freq * COUNT  # frequency at which data points are updated for DAC output
        i = np.arange(COUNT) * (
            (2 * np.pi) / 32)  # 2*pi*1second for 32 points => 2pi/32
        x = np.cos(i) * 1
        y = np.sin(i) * 1

        cnt_x = ((((x + self.XSpinBox.value() - minVolt) * 65535 /
                   (maxVolt - minVolt)))).astype(np.uint16)
        cnt_y = ((((y + self.YSpinBox.value() - minVolt) * 65535 /
                   (maxVolt - minVolt)))).astype(np.uint16)

        daq.DacSetOutputMode(handle, daqh.DddtLocal, 1, daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocal, 1, daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 1, daqh.DdcsDacClock)
        daq.DacWaveSetFreq(handle, daqh.DddtLocal, 1, DACFREQ)
        daq.DacWaveSetMode(handle, daqh.DddtLocal, 1, daqh.DdwmNShot,
                           NS * COUNT)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 1, cnt_x, COUNT,
                             daqh.DdtmUserBuffer)
        daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 1)

        daq.DacSetOutputMode(handle, daqh.DddtLocal, 2, daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocal, 2, daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 2, daqh.DdcsDacClock)
        daq.DacWaveSetFreq(handle, daqh.DddtLocal, 2, DACFREQ)
        daq.DacWaveSetMode(handle, daqh.DddtLocal, 2, daqh.DdwmNShot,
                           NS * COUNT)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 2, cnt_y, COUNT,
                             daqh.DdtmUserBuffer)
        daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 2)

        daq.DacWaveArm(handle, daqh.DddtLocal)
        print("Scanning in progress")
        tm.sleep(NS / freq + 0.1)
        print("Scanning complete")
        daq.DacWaveDisarm(handle, daqh.DddtLocal)
Esempio n. 2
0
print "Connecting to %s\n\n" % devName  
handle = daq.Open(devName)
if handle == -1:
    print "Cannot conncet to device\n"
    print "Exit"
    sys.exit(handle)

#settings for channel 0
#Set for a static waveform
daq.DacSetOutputMode(handle, daqh.DddtLocal, 0, daqh.DdomDynamicWave);
#Immediate Trigger, (the final paramater is not yet used)
daq.DacWaveSetTrig(handle, daqh.DddtLocal, 0, daqh.DdtsImmediate, 0)
#Use the Local DAC clock
daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 0, daqh.DdcsDacClock)
#Set the frequency
daq.DacWaveSetFreq(handle, daqh.DddtLocal, 0, FREQ)  
#Repeat infinatly, the final parameter (updateCount) is ignore with infinite loop
daq.DacWaveSetMode(handle, daqh.DddtLocal, 0, daqh.DdwmInfinite, 0)	
#for an infintite loop, the buffer must cycle
daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 0, buf, COUNT, daqh.DdtmCycleOn + daqh.DdtmUpdateBlock)
#set channel 0 to be a user wave
daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 0)	

#settings for channel1, see channel 0 settings for explanations
daq.DacSetOutputMode(handle, daqh.DddtLocal, 1, daqh.DdomDynamicWave)
daq.DacWaveSetTrig(handle, daqh.DddtLocal, 1, daqh.DdtsImmediate, 0)
daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 1, daqh.DdcsDacClock)
daq.DacWaveSetFreq(handle, daqh.DddtLocal, 1, FREQ)
daq.DacWaveSetMode(handle, daqh.DddtLocal, 1, daqh.DdwmInfinite, 0)	
daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 1, buf, COUNT, daqh.DdtmCycleOn + daqh.DdtmUpdateBlock)
daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 1)
buf1    = np.zeros((COUNT,), dtype=np.uint16)

devName = daq.GetDeviceList()[0]
print "Connecting to %s\n\n" % devName  
handle = daq.Open(devName)
if handle == -1:
    print "Cannot conncet to device\n"
    print "Exit"
    sys.exit(handle)

#both channels must have the following same settings
chan = chans[0]
daq.DacSetOutputMode(handle, daqh.DddtLocal, chan, daqh.DdomStaticWave)
daq.DacWaveSetTrig(handle, daqh.DddtLocal, chan, daqh.DdtsImmediate, 1)
daq.DacWaveSetClockSource(handle, daqh.DddtLocal, chan, daqh.DdcsDacClock)
daq.DacWaveSetFreq(handle, daqh.DddtLocal, chan, FREQ*COUNT)  #output freq = clock freq/buffersize
daq.DacWaveSetMode(handle, daqh.DddtLocal, chan, daqh.DdwmInfinite, 0)
chan = chans[1]
daq.DacSetOutputMode(handle, daqh.DddtLocal, chan, daqh.DdomStaticWave)
daq.DacWaveSetTrig(handle, daqh.DddtLocal, chan, daqh.DdtsImmediate, 1)
daq.DacWaveSetClockSource(handle, daqh.DddtLocal, chan, daqh.DdcsDacClock)
daq.DacWaveSetFreq(handle, daqh.DddtLocal, chan, FREQ*COUNT)  #output freq = clock freq/buffersize
daq.DacWaveSetMode(handle, daqh.DddtLocal, chan, daqh.DdwmInfinite, 0)


#waveform settings
AMP0_DWORD = int(round(65535 * AMP0/(maxVolt-minVolt) ))
AMP1_DWORD = int(round(65535 * AMP1/(maxVolt-minVolt) ))
OFF0_DWORD = int(round(65535 * (OFF0-minVolt)/(maxVolt-minVolt) ))
OFF1_DWORD = int(round(65535 * (OFF1-minVolt)/(maxVolt-minVolt) ))
Esempio n. 4
0
    def raster(self):
        minVolt = -10.0
        maxVolt = 10.0
        freq = 1
        COUNT = 68 * 62
        FREQ = freq * COUNT
        x = []
        y = []
        NS = freq * 1
        i = 0
        while i < 62:
            j = 0
            while j < 62:
                x.append(j)
                y.append(i)
                j += 1
            j = 61
            if i is not 61:
                while j >= 10:
                    j -= 10
                    x.append(j)
                    y.append(i)
            if i is 61:  # The scan now has 62+6 points in each line and when it reaches the last line, it uses the same 6 points to go to beginning point
                while j >= 10:  # For the actual data that we are interested, we have to ignore 6 points after every 62 points
                    j -= 10
                    i -= 10
                    x.append(j)
                    y.append(i)
                i = 61
            i += 1

        cnt_x = ((((np.array(x) * 0.01 - minVolt) * 65535 /
                   (maxVolt - minVolt)))).astype(np.uint16)
        cnt_y = ((((np.array(y) * 0.01 - minVolt) * 65535 /
                   (maxVolt - minVolt)))).astype(np.uint16)

        daq.DacSetOutputMode(handle, daqh.DddtLocal, 1, daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocal, 1, daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 1, daqh.DdcsAdcClock)
        daq.DacWaveSetFreq(handle, daqh.DddtLocal, 1, FREQ)
        daq.DacWaveSetMode(handle, daqh.DddtLocal, 1, daqh.DdwmNShot,
                           NS * COUNT)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 1, cnt_x, COUNT,
                             daqh.DdtmUserBuffer)
        daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 1)

        daq.DacSetOutputMode(handle, daqh.DddtLocal, 2, daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocal, 2, daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(handle, daqh.DddtLocal, 2, daqh.DdcsAdcClock)
        daq.DacWaveSetFreq(handle, daqh.DddtLocal, 2, FREQ)
        daq.DacWaveSetMode(handle, daqh.DddtLocal, 2, daqh.DdwmNShot,
                           NS * COUNT)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 2, cnt_y, COUNT,
                             daqh.DdtmUserBuffer)
        daq.DacWaveSetUserWave(handle, daqh.DddtLocal, 2)

        self.rasterbuffer = np.ones(NS * COUNT, dtype=np.uint16)

        channels = [0]
        gains = [daqh.DgainDbd3kX1]
        flags = [daqh.DafCtr16]
        daq.AdcSetAcq(handle, daqh.DaamNShot, 0, NS * COUNT)
        daq.AdcSetScan(handle, channels, gains, flags)
        daq.AdcSetFreq(handle, FREQ)
        daq.SetOption(
            handle, 0, daqh.DcofChannel, daqh.DcotCounterEnhMeasurementMode,
            daqh.DcovCounterEnhMode_Counter +
            daqh.DcovCounterEnhCounter_ClearOnRead)
        daq.AdcTransferSetBuffer(handle, self.rasterbuffer, NS * COUNT, 1,
                                 daqh.DatmUpdateSingle + daqh.DatmCycleOff)
        daq.SetTriggerEvent(handle, daqh.DatsExternalTTL, daqh.DetsRisingEdge,
                            0, daqh.DgainDbd3kX1, daqh.DafCtr16,
                            daqh.DaqTypeCounterLocal, 0, 0, daqh.DaqStartEvent)
        daq.SetTriggerEvent(handle, daqh.DatsScanCount, daqh.DetsRisingEdge, 0,
                            daqh.DgainDbd3kX1, daqh.DafCtr16,
                            daqh.DaqTypeCounterLocal, 0, 0, daqh.DaqStopEvent)

        daq.AdcTransferStart(handle)
        daq.AdcArm(handle)
        print "waiting for Scan trigger...\n"
        daq.DacWaveArm(handle, daqh.DddtLocal)

        tm.sleep(1)
        handle1.Ctrig()

        print("Scanning...\n")

        active, retCount = daq.DacTransferGetStat(handle, daqh.DddtLocal, 1)
        while active & daqh.DdafTransferActive:
            active, retCount = daq.DacTransferGetStat(handle, daqh.DddtLocal,
                                                      1)
            #print(active, retCount)
        tm.sleep(
            0.1
        )  # Sometimes Data Acquisition isn't finished yet even though the DAC output is complete. Don't know why??? (Update frequencies and # of data points are the same)
        daq.AdcDisarm(handle)
        daq.DacWaveDisarm(handle, daqh.DddtLocal)

        print(self.rasterbuffer, len(self.rasterbuffer))
        imagedata = np.zeros((62, 62))
        i = j = k = 0
        while k < len(self.rasterbuffer):
            imagedata[j, i] = self.rasterbuffer[k]
            i += 1
            if i % 62 is 0:
                k += 6
                j += 1
                i = 0
            k += 1
        print(imagedata)

        plt.clf()
        plt.imshow(imagedata, cmap=cm.Greys_r)
        plt.show()
Esempio n. 5
0
    def run(self):

        if self.i is 0:  # Check to see if the zscan is setup at least once.
            print("You need to setup the program first. Starting setup.. \n")
            self.setup()
            self.i = 1
            print("Starting the process now.. \n")

        if self.V0 is not form.voltage:  # Check to see if the focus has changed
            self.V0 = form.voltage  # Change the mid-ramp settings caused by change in focus
            self.Vtadjust = self.V0 - self.Vtmid  # facilitates the mid-ramp to start at the focus point set by piezo
            self.Vt = np.concatenate([
                self.Vtup[self.l:] + self.Vtadjust,
                self.Vtdown + self.Vtadjust, self.Vtup[:self.l] + self.Vtadjust
            ])
            self.Vt = np.tile(self.Vt, self.N)
            self.DACwave = np.around(self.Vt / self.dV_DAC +
                                     self.resolution_half).astype('uint16')

        # initialize DAC output
        # ch0 = V(t)
        daq.DacSetOutputMode(handle, daqh.DddtLocal, 0, daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocal, 0, daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(
            handle, daqh.DddtLocal, 0,
            daqh.DdcsAdcClock)  #slave DAC to ADC clock (synchronous mode)
        daq.DacWaveSetFreq(
            handle, daqh.DddtLocal, 0, self.FREQ
        )  #set to same frequency as ADC (not sure if this step is necessary)
        daq.DacWaveSetMode(handle, daqh.DddtLocal, 0, daqh.DdwmInfinite, 0)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocal, 0, self.DACwave,
                             self.COUNT, daqh.DdtmUserBuffer)
        # ch1 = SYNC(t)
        daq.DacSetOutputMode(handle, daqh.DddtLocalDigital, 0,
                             daqh.DdomStaticWave)
        daq.DacWaveSetTrig(handle, daqh.DddtLocalDigital, 0,
                           daqh.DdtsImmediate, 0)
        daq.DacWaveSetClockSource(handle, daqh.DddtLocalDigital, 0,
                                  daqh.DdcsAdcClock)
        daq.DacWaveSetFreq(handle, daqh.DddtLocalDigital, 0, self.FREQ)
        daq.DacWaveSetMode(handle, daqh.DddtLocalDigital, 0, daqh.DdwmInfinite,
                           0)
        daq.DacWaveSetBuffer(handle, daqh.DddtLocalDigital, 0, self.bufSYNC,
                             self.COUNT, daqh.DdtmUserBuffer)

        # begin data acquisition
        daq.AdcTransferStart(handle)
        daq.AdcArm(handle)
        print "waiting for Scan trigger...\n"
        daq.DacWaveArm(
            handle, daqh.DddtLocal
        )  #need to arm ADC before DAC to ensure that both wait for hardware trigger

        tm.sleep(1)

        self.win = pg.GraphicsWindow()
        self.win.setWindowTitle('Photon Counts')

        self.p1 = self.win.addPlot()
        self.p1.setLabel('bottom', 'Time', 's')
        self.curve1 = self.p1.plot()
        self.win.nextRow()
        self.p2 = self.win.addPlot()
        self.p2.setLabel('bottom', 'Voltage', 'V')
        self.curve2 = self.p2.plot()
        self.curvetime = np.arange(self.SCANS) * (
            self.T * self.N / self.SCANS
        )  # Used to plot real time data with x-axis as time in seconds

        self.timer = pg.QtCore.QTimer()
        self.timer.setInterval(self.T)  # T milliseconds
        self.timer.timeout.connect(self.update)

        handle1.Ctrig()
        print("Scanning...\n")

        self.timer.start()