Jump to content

Getting Data faster from GPIB bus


Dchamberss

Recommended Posts

Hey guys

I've posted here before but couldn't access my account anymore.

I would be greatly appreciative to anyone who cares to scrutinize my work and leaves a comment. I'm pretty new to labview and I don't have anyone I work with knows labview. I searched these forums (and Google) before posting. I think the Keithley 6487 is a commonly used instrument and I'm surprised not to see any discussion directly related (maybe I'm naive).

Please look at my program structure and tell me if I've added the time delay in the right place and if there is a way to increase the speed I can run the measurement at or improve/optimize my coding (perhaps use the device's buffer ??). It seems the writes and read on the GPIB but are slowing down the measurement. Also, I put in the Voltage and Current frontpanel indicators, but they don't work (in real time). I'm measuring the IV of photodiodes I fabricate (research). I use a Keithly 6487 Picoameter as the voltage source/measurement and current measurement unit. I'm also using a cornerstone (oriel) monochromator to shine different wavelengths of light on the diode. It's all set up on an optical table and both the Pico and the Mono are being run by GPIB. The hardworking tax-payers could only provide me with LabView7 express (for which I'm thankful).

So here's the basic experiment:

100 Shine a single color light on diode (set mono to desired wavelength, open shutter)

200 run an IV curves (step the voltage from A-B w/stepsize x, record measured current)

300 close the shutter

400 increase mono set point ( change the color/wavelength setting)

500 GOTO 100

REPEAT 100-500 over the desired wavelength range.

So this a basic nested loop (loop within a loop).

I want to optizmize the timing of the IV curve so the measurement isn't so slow, but I also want a time delay between the voltage write and current read commands to give the device response a few hundered milliseconds to respond/stabilize. And here's my code (IV-inner loop):

http://picasaweb.google.com/research.ifm/labview

Thanks Everyone for reading this and especially for any helpful comments (even critisism, I'm new so tell now!)

David Keith Chambers

Louisiana Tech University

Link to comment

QUOTE(Dchamberss @ Jun 21 2007, 04:31 PM)

I would be greatly appreciative to anyone who cares to scrutinize my work and leaves a comment. I'm pretty new to labview and I don't have anyone I work with knows labview. I searched these forums (and Google) before posting. I think the Keithley 6487 is a commonly used instrument and I'm surprised not to see any discussion directly related (maybe I'm naive).

Your current and voltage indicators aren't updating because they are outside the main While Loop. They don't get their data until that loop finishes. Move them inside it and they will update each iteration.

As for the speed issue, you have two delays in your VI. You have the Wait (ms) VI and the ms timer output of that is wired to the Time Delay Express VI. I would suggest removing the Express VI, and putting the GPIB Write, Wait (ms), and GPIB in three frames of a Flat Sequence structure. You can eliminate the need for the sequence structure if you use the OpenG version of the Wait (ms) VI. Use the error clusters with that to enforce the correct dataflow.

Link to comment

Dave,

You should NOT have to put a wait between GPIB functions. The GPIB Serial poll is the way to poll the instrument for the MAV bit (message avaliable) and then you should perform a GPIB read it the GPIB serial poll reports bit 64 is ON.

You need to look at the documentation for the Keithley instrument and look at the layout of the Serial poll register - one of the bits should flag when the instrument is done executing a command, or has data for you to read.

You don't need a sequence structure - just have the GPIB write - then a small while loop with the GPIB serial poll inside - then the GPIB read on the outside right. The while loop should exit on the MAV bit set or and error from the poll function.

This is the fastest way to code this - it will run as fast the Keithely instruments can perform the operations.

Regards

Jack Hamilton

I can help you with coding this if you have problems....

Link to comment

Dear Jack and EA Olson,

Thanks so much for the replies. There is no substitute for experience and all of this is shrouded in the mists for me at this point. I actually "inherited" this code from a member of our research group who is now gone. As you can tell, she was no labview expert either.

I've learned enough to understand the code and make it function, but elegant, LOL. No. To be honest I can hardly understand the first reply. I'm going to try to digest (understand) and use your suggestions. You guys have probably save me a week, so I just wanted say "Thanks" ASAP.

Sincerely,

David Keith Chambers

Jack, thanks for the info, I'll check for that set bit to do the polling. I put the delay between the write/read so I could adjust the time in case the photodiode I'm testing needs time to establish a steady-state current, but otherwise, I need the code to run as fast as possible. If the responsivity is high enough, I'll want to do the measurements w/min delay here, using the polling method. I'll chew on this and post again if I have more problems.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.