From Friday, January 17th 11 PM CDT (January 18th 5 AM UTC) through Saturday, January 18th 11:30 AM CDT (January 18th 5:30 PM UTC), ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Problems "doing too much" with a USB-6009

Solved!
Go to solution

I've developed a little routine to measure muscle twitches using a small triaxial accelerometer.  We have a stimulator that produces an excitation pulse to start the recording, which consists of three voltage channels at 1KHz for 400 points.

 

Our prototype uses an NI USB-6009 Multifunction I/O device, with the TTL Pulse from the stimulator going to the PFI terminal on the 6009.  Here is the code to set up the Triax Task:

Triax Task.png

When we are ready to record, we do a DAQmx Start Task, then do a DAQmx Read (Analog 2D Dbl NChan N Samp), which waits for the trigger pulse, then delivers us 400 data points.

 

This works fine, but I want to Have My VI and Demo It, Too.  The Prototype, with both the 6009 and the pulse generator, is currently "in use", so I decided to take another 6009, hook it up to another accelerometer, and use LabVIEW to "fake" the pulse generator.  I tried two things, and neither of them worked.

 

The first thing I tried was to use a "non-triggered" form of the Task.  I modified the Task definition by removing the DAQmx Start Trigger function.  I then started the Task, and in a For loop, waited 500 msec and did a DAQmx Read.  When the For Loop was set to 1, I got an array of 3 channels, 400 points (as expected).  But when the loop was set to 2, the second iteration generated Error -200278, Attempted to Read Sample: 400; Property: RelativeTo; Corresponding Value: Current Read Position; Property: Offset; Corresponding Value: 0.

 

I don't know what this means nor why it failed, but figured it had something to do with missing a "Restart" signal that had come in on the PFI line.  OK, so I'll "add to the Task" by modifying it to include a Digital Out channel that I can toggle on and off to create a TTL pulse I can wire to the PFI line, since I know triggering works.  Here's the code:

Modify Triax Task.png This, however, immediately generates Error -200559, complaining that I'm adding a DO channel to a task configured for AI lines.  [I'd also tried creating a brand new task for DO only, and got yet another error that I figured meant I couldn't have two tasks running in a single USB-6009 -- not illustrated here.]

 

So I can't get the 6009 to trigger itself, and I can't do multiple Finite Reads without a trigger.  Oooh, all this writing has given me an idea -- what if I go back to the Finite Read model, but put a Start Task and Stop Task "around" the DAQmx Read (i.e. inside the For loop) -- would that work?

 

I'm going to post this here, go do the test, and come back with the results.  This will either be Success (and a Solution), or Failure, and a cry for help ...

 

Bob Schor

 

0 Kudos
Message 1 of 2
(2,758 Views)
Solution
Accepted by topic author Bob_Schor

I have Good News and Bad News -- the Good News is that, indeed, putting the Start Task/Stop Task inside the loop (effectively making the task "Take a single Finite Sample" instead of "Take Multiple Finite Samples when I give you a Trigger") fixes it.  I guess that the PFI Trigger "resets" something internally in the USB-6009 -- probably if I read the Manual thoroughly, this would have been all explained.

 

The Bad News is I've been struggling with this for several days (on and off).  Live and Learn.

 

Bob Schor

0 Kudos
Message 2 of 2
(2,752 Views)