PCI-6602 - What to do with unused counter inputs?

I've got an application where I need to track the position on two quadrature encoders.  I've developed my application with VB6 however, I've been using a sample LabView program called "Meas-Ang-Pos-Buff.vi" for testing purposes.  (I got the example off the NI discussion board).  I'm seeing some very odd results that I can't explain. 
For testing purposes, I've got one encoder tied to multiple channels on my 6602.  I have the same 'A' signal and the same 'B' signal (from the one encoder) jumpered to multiple encoder channels.  I'm using a onboard pulse generator to generate the latch pulse (connected to the Index/Z of each counter) to ensure there is no skew in my count values.  I'm using an external servo to turn the encoder at a rate equal to my application speed.
The unexplanable results I'm seeing are below:
If I'm monitoring counters 0, 1 and 2, I see the following.
1)  If I have counters 0,1,2 and 3 inputs connected to the same 'A' & 'B' from my encoder, the counts on all 4 channels (0,1,2,3) track perfectly.
2)  If I disconnect counter 3 and only have counters 0,1, and 2 connected to the encoder, then counter 0 and 2 track perfectly, but counter 1 looses pulses (only when traveling in one direction, the other direction seems to be fine)
3)  If I connect counter 3 to ground and have counters 0,1, and 2 connected to the encoder, I get the same result - bad.
4)  If I connect EVERY counter input (2,3,4,5,6) to ground and only monitor counters 0 and 1, I still get bad results.
In summary, I ONLY am able to see the same number of counts while monitoring 3 channels IF 7 of the 8 counters are connected together (the 8th being my latch).
This happened to me in the past on a previous setup that did the same thing, but I was able to fix it by moving from counter 1 to counter 4.  At that time, I chalked it up to a bad counter 1, but I think there is a bigger issue since it is happening again.
Please any advice would be appreciated.

Thanks for the response.  This one has really got me confused and any help is greatly appreciated.
To answer your questions, no I have not modified the sample program and I'm using NI DAQ v8.5.
I've decided to break the problem down to see if I could find a pattern, but no such luck.  Here is the testing that I've done.
I'm making the following connections while using the sample program I mentioned earlier:
Counter 0...............PFI_39 (term 02) - Channel_A(0).................PFI_37 (term 40) - Channel_B(0)
Counter 1...............PFI_35 (term 07) - Channel_A(1).................PFI_33 (term 06) - Channel_B(1)
Counter 2...............PFI_31 (term 34) - Channel_A(2).................PFI_29 (term 66) - Channel_B(2)
Counter 3...............PFI_27 (term 31) - Channel_A(3).................PFI_25 (term 63) - Channel_B(3)
Note:  I connect the "Z" channel for gating purposes in my VB application, but this isn't required in the LabView sample program since the gating appears to be done internally.
My testing results:
1.  If I jumper my one encoder to channels 0,1,2, & 3 at the same time, everything works great.  Each channel reports the same number of counts regardless of whether I'm turning the encoder in the positive or negative direction.
2.  If I disconnect channel 3 and only have 0,1 & 2 connected, then 0 & 2 track perfectly, but channel 1 looses counts in the negative direction.
3.  If I only connect channels 0 & 1, then channel 0 counts perfectly in both the pos and neg direction, but channel 1 looses counts in the negative direction.
4.  If I connect any channel by itself (0,1,2 or 3), each one counts perfectly.
5.  If I connect channels 0 & 4, everything seems to be fine.
Like I said in my previous e-mail, if this hadn't already happened to me in a previous application, then I would chalk it up to a bad board.  If I didn't get good results on each individual channel then I would chalk it up to a bad encoder pulse train.  However, it definitely seems to have something to do with connecting multiple counters at the same time in a Motion Encoder Application.  I have read the 6602 User Manual backwards and forwards looking for a nugget of explanation, but have found none.  There was a section entitled "Counter Input Selections" on page 4-12 (table 4-2) that might offer some explanation, but neither me or my colleagues could understand what was being described.  Any help deciphering that would be appreciated.
As of now, I'm going to proceed with my application, using channels 0 &4 (just as I've done in the past), however I don't feel comfortable not having an explanation for the 6602's behavior.  Any insight would be greatly appreciated.

Similar Messages

  • How to synchronize two PCI-6602 via RTSI for semi-period counting of four signals?

    Hello,
    I try to measure 4 PWM signals. For that, I created 4 tasks (newest DAQmx), each with semi-period measuring one signal.
    I want to use DMA so I have two 6602 for each two signals.
    The task aquire a finite number of samples.
    This works fine when starting the tasks subsequently.
    Now I want to start the tasks via a trigger on the RTSI bus.
    But I have no idea how to get this done.
    I use the MX drivers for the first time an find it very difficult to get through the help files.
    I looked at many examples but did not find a solution.
    Most of the time my experiments end with an error message saying that the property is not applicable to this task, or s.th.similar.
    Ans sometimes, when there seems to be a trigger defined, the task will not wait for the trigger and time out.
    Is the anybody who can help me out of this?
    Maybe a little sample program?
    I program in CVI.
    Many Thanks
    Michael.

    This topic is discussed here:
    http://forums.ni.com/ni/board/message?board.id=250&message.id=13383&requireLogin=False
    Hope this helps!

  • What to do with unused credit?

    EXACTLY!!! The effect lessens with the MORE you have. If you close cards, the less you have in the future to nullify the closing effect. Thank you for pointing that out. So if the effect LESSENS with the MORE cards you have, then it makes sense to NOT CLOSE them.

    johnnyconsumer wrote:
    I have never really understood the "close it" mentality. When all these accounts that get closed fall off your credit report in 10 years, you will have a major dip in your average age of accounts. Sure it may not seem like a big deal now, but when your AAoA goes from say 10-20 years to say 5 years, you will probably kick yourself for closing "unneeded" accounts.You don't understand in part because a person's open and closed accounts would have also aged in that time.  It's a call that each needs to make and it is not a one-size-fits-all matter.  If you prefer to keep everything open then definitely do so but don't assume that it's the best approach for everyone.  AAoA isn't the only consideration anyway and it's generally 15%.  If one cannot or will not actively montior all accounts then fraud is a potential concern.  The number of accounts that one can manage will vary from person to person.  I have no problems managing my 13 card but there are certainly those that prefer only having a few accounts. I've never kept accounts open that are of no use to me and AAoA has never been an issue.  My FICO's tend to be right around 800.  I could possibly eke out more points with a higher AAoA but it's really not worth it to me as I'm already well above the 740-760 mark.  Each has to do what works for the individual. johnnyconsumer wrote:
    EXACTLY!!! The effect lessens with the MORE you have. If you close cards, the less you have in the future to nullify the closing effect. Thank you for pointing that out. So if the effect LESSENS with the MORE cards you have, then it makes sense to NOT CLOSE them.
    It's an average.  Both the number of accounts and the ages of the accounts matter.  A strong AAoA can be built with a few well aged accounts.   Again, don't assume that these are one-size-fits-all matters.  If X works for you, that's great.  The next may use a different approach. johnnyconsumer wrote:
    If i had 3 30 year old cards and two new cards and decided to get rid of the old ones I dont use, then in 10 years from now I would go to a 10 year AAoA, instead of 28 year AAoA.We create all sorts of scenarios where AAoA is drastically impacted and where AAoA is minimally impacted -- and many points in between.  One should keep AAoA in mind but, again, it's just one factor among many and one needs to keep one's entire credit profile in mind.  Any set of decisions is a matter of making improvements in one area and compromising others.  Each needs to to decide where the individual is willing to make such changes.  One simply cannot assume that the proper course of action is to always maximize AAoA regardless of other considerations.

  • What to do with unused iTunes files?

    Im looking in Mac HD > Music > iTunes and want to clean it out. I have the files:
    -iTunes Libary (DATA, 1.4MB)
    -iTunes Music (5GB)
    -iTunes Music.xml (1.3MB)
    -Previous iTunes Libaries (2.2MB)
    I know that the iTunes music folder is needed, and the iTunes Music.xml, but what about the other two? Do i need 'previous iTunes libaries' and iTunes Libary (DATA)
    *nathan

    Thanks Dave.
    One other question. When i burn a data disc in iTunes to a DVD, does that only save the MP3 track without the track listings, ratings or is that all i need to make a backup. I make a backup every 2 weeks, and im thinking that i may have to burn the .xml file to the disc aswell....i dont want to lose ratings and playcounts.
    *nathan

  • Counter using PCI-6602 for multi output

    Hi guys,
    currently I tried to control a linearmotor using PCI-6052E and PCI-6602.
    The questions is, how to use PCI-6602 to be a counter which will be converted to several output (multioutput):
    (1) converted to position >> 1count = ...[mm] --> position measurement
    (2) converted to voltage >> 1count = ...[mV] or [V] --> voltage measurement
    (3) converted to current >> 1count = ...[mA] or [A] --> current measurement
    (4) converted to velocity >> 1count = ...[mm/s] --> velocity measurement
    (5) converted to acceleration >> 1count = ...[mm/s^2] --> acceleration measurement
    (6) converted to force >> 1count = ...[N] or [kg.mm/s^2] --> force/load measurement
    (7) converted to frequency >> 1count=...[Hz] --> frequency measurement
    (i) Please assist me how to connect the driver's encoder (Ch. A A/ B B/ Z Z/) with PCI-6602, so I can get all informations above (7 measurements). What/which port of PCI-6602 connect to where from the driver.
    (ii) Please assist me how to connect the feedback signal to the PC. What/which port of PCI-6602 connect to PC.
    (iii) How to test those 7 measurements above using Measuremant and Automation Explorer (MAX) ver.4.4.1?
    Thank you for your kindly help and assistance.
    Best wishes,
    hendro

    Dear Jochen,
    (1) Principally, I'd like to use PCI-6602 to be a motion encoder also be a counter (Is it possible? Due to the manual, it is possible). I expect to have all information, such as position, time, velocity, etc. from that motion encoder (or at least the position and time). It is also expected of using PCI-6602 to do all measurements that I mentioned before . My meaning is, after having a signal from the counter, that 'count' will be converted to desire units under other programs. So, in this case, PCI-6602 is only used to get the 'count'.
    Simplified, the voltage command will send to the system (linear motor) through PCI-6052E (-10V to 10V). The actual position or other actual information will be catched (read) by using PCI-6602 (as a motion encoder, also as a counter). Then, this actual position will be used as a feedback, that will be compared to desired position.
    Is that also possible to use PCI-6602 be a motion controller + a counter + a frequency measurement in a same time parallely?
    I don't decide yet (I don't know) which acquisition rate will be needed/required, higher is better.
    (2) I'd like to apply an adaptive robust controller (yes, it is a closed loop system) under matlab with their feature called Real-Time-Workshop instead of using LV.
    (3) Power drive for the linear system will be driven by AC servo drive.
    Thanks for your help before,
    Warmly regards,
    hendro

  • Triggering the reading of counter totals (PCI 6602)

    Hi,
    thanks for reading these lines,
    for a special application I need to read the totals of multiple counters
    simoltanouesly. The inputs of the counters are connected to quadrature encoders.
    Is there a way to reroute the gate to another input pin?
    Thanks for taking the time to support me.
    live long and prosper
    Michael

    Dear Jochen,
    (1) Principally, I'd like to use PCI-6602 to be a motion encoder also be a counter (Is it possible? Due to the manual, it is possible). I expect to have all information, such as position, time, velocity, etc. from that motion encoder (or at least the position and time). It is also expected of using PCI-6602 to do all measurements that I mentioned before . My meaning is, after having a signal from the counter, that 'count' will be converted to desire units under other programs. So, in this case, PCI-6602 is only used to get the 'count'.
    Simplified, the voltage command will send to the system (linear motor) through PCI-6052E (-10V to 10V). The actual position or other actual information will be catched (read) by using PCI-6602 (as a motion encoder, also as a counter). Then, this actual position will be used as a feedback, that will be compared to desired position.
    Is that also possible to use PCI-6602 be a motion controller + a counter + a frequency measurement in a same time parallely?
    I don't decide yet (I don't know) which acquisition rate will be needed/required, higher is better.
    (2) I'd like to apply an adaptive robust controller (yes, it is a closed loop system) under matlab with their feature called Real-Time-Workshop instead of using LV.
    (3) Power drive for the linear system will be driven by AC servo drive.
    Thanks for your help before,
    Warmly regards,
    hendro

  • Graphing Encoder Counter Input in LabVIEW Signal Express

    In LabVIEW SignalExpress, using a simulated daq system with a counter input, I set up a DAQmx Acquire of an Angular measurement based on a quadrature encoder.  Acquiring N samples, I acquired a table of measured values.  I would like to plot the results, however, I am not given the option to view the data in any other format.  I can plot if I acquire one sample, but that does not allow me to sync the data with the analog input signal I would also like to acquire and view.  I had to use an external clock to take the encoder data, so the data is acquired a double datatype.  I would like to be able to view in realtime, encoder position with respect to time.

    HI,
    I want to obtain of this combination of hardware and software a system that  allow me acquire a signal of the load cell and the counts of the incremental encoder’s pulses  and represent in a graphic the force vs the distance.
     The distance is pick up to a incremental encoder in a worm gear that with its movement, move a load cell in a base. the reading of the position is in millimeters.
    In this moment, I can only represent the force, the position is only visible in a display, I want to take a samples of  the force and the count in millimeters, ten or more times per second and perform a graphic in a real time.
    Thank you for your answer
    Best regards
    Lizardo Laguna

  • Count digital events on a Counter with pci-6602 with callback on CVI

    Hi,
    I'm using a PCI-6602 card with CVI 8.5 and I need to trig on event.
    On every pulse I received, I need to do some actions like increasing a counter, send a message on Rs232 etc.. I don't want to do any loop checking that the counter value has changed. I would like to use a callback to execute this code only on the edge or counter value event.
    My problem is that I don't know which function can do this. Is there any way to get an event on a pci-6602? 
     Thanks 
    James 
    Solved!
    Go to Solution.

    Hello.
    It's completely possible to create a callback that will allow you to do what you want when a edge will occur on an external signal you define.
    To do this, you can for exemple create a counting edges task that will use one of the 6602 counters,and the set your external signal to be the source of your sample clock.You'll then be able to register a callback with the function DAQmxRegisterSignalEvent, and your callback will be called each time an edge will occur on your specified sample clock source.
    Here's 2 links that explain the events in DAQmx and how to handle them in CVI. The example ReadDigChan-ChangeDetectionEvent.pr that ships with DAQmx examples (Hardware Input and Output<<DAQmx<<Digital measurements) can be very useful to understand how to do. This example creates a signal event callback to detect change detection for digital inputs.
    Regards.

  • PCI 6602:How can I use the digital lines of the board and in the same time to generate pulse train using a counter?

    Hello!
    My problem appeared when I tried to update my code from Traditional NI-DAQ Legacy to DAQmx.
    I am using 2 counters (counter 5 and counter 7)  from PCI-6602, to generate pulse train, and also the Digital I/O lines of the port 0 (the lines form 0 to 7). What I do in my application is that I am starting to generate the pulse train on the output of the 2 counters, and after that I am playing with the state of the digital lines.
    In traditional there was no problem using the counters and the digital lines in the same time, everything was going perfectly, but in DAQmx this is not possible.
    What happens: I start to generate pulse train on the output of the counters,  no errors encountered, but when I try to modify the state of one line of the digital port the generation of the pulse train is stopped. This is happening when I start the task associated to the digital port.
    My question is: it is possible to create a channel on the digital lines without altered the channels created for the counters?
    Another thing what I manage to see using the  "Measurement & Automation Explorer" and Test panels for PCI-6602, basically is the same thing, I generate pulse train on the output of the counter 7 and try to start a task on the digital line, but I get one error :
    "Error -200022 occurred at Test Panel
    Possible Reason(s):
    Measurements: Resource requested by this task has already been reserved by a different task.
    Device: Dev4
    Terminal: PFI8"
    Instead if I use the counter 0 or counter 1 to generate pulse train I don't encounter the same problem.
    Which resources are used by the counters 2 to 7 from the PCI-6602 board and the counters 0 and 1 do not use?
    Thank in advance for any replies!
    Ciprian
    Solved!
    Go to Solution.

    Hello Jordan, thank you for your reply.
    I am sorry but I can not see or run your example, I don't use LabView, I use Visual C++ for developing.
    Here is the code for generating the pulse train:
    GeneratePulseTrain(unsigned long ulCount1, unsigned long ulCount2)
        short nStatus = 0;
        nStatus = DAQmxCreateTask("",&m_taskHandle);
        nStatus = DAQmxCreateCOPulseChanTicks (m_taskHandle, "Dev4/count5", "", NULL, DAQmx_Val_Low, 0.0, ulCount1,ulCount2);
        if( bTriggerMode == true) // if hardware trigger is enabled
            nStatus = DAQmxSetTrigAttribute (m_taskHandle, DAQmx_ArmStartTrig_Type, DAQmx_Val_DigEdge);
            nStatus = DAQmxSetTrigAttribute (m_taskHandle, DAQmx_DigEdge_ArmStartTrig_Edge, DAQmx_Val_Rising);
            nStatus = DAQmxSetTrigAttribute (m_taskHandle, DAQmx_DigEdge_ArmStartTrig_Src,"Dev4/PFI17" );
        //set the internal timebase
        nStatus = DAQmxSetCOCtrTimebaseSrc(m_taskHandle,"Dev4/count5","20MHzTimeBase" );
        nStatus = DAQmxStartTask(m_taskHandle);
        return nStatus;
    And the code where I try to set the digital line:
    SetChannelState(short nState)
        short nStatus = 0;
        uInt8 wrtBuf0[1]={0};
        nStatus = DAQmxCreateTask("",&m_taskHandle);
        // Configure line as output 
        nStatus = DAQmxCreateDOChan (m_taskHandle, "Dev4/port0/line0", "", DAQmx_Val_ChanPerLine);
        nStatus = DAQmxStartTask(m_taskHandle);
        wrtBuf0[0] = nState;
        nStatus =DAQmxWriteDigitalLines (m_taskHandle, 1, 0, 0, DAQmx_Val_GroupByScanNumber , wrtBuf0, NULL, NULL);
        nStatus = DAQmxWaitUntilTaskDone(m_taskHandle,10);
        nStatus = DAQmxStopTask(m_taskHandle);
        nStatus = DAQmxClearTask(m_taskHandle);
        m_taskHandle = 0;
        return nStatus;      

  • Frequency divide by N doesn't work on Counter-Ti​mer PCI-6602

    Hello everybody,
    I tried to do something basic ( ?) with this Counter-Timer 6602 Board, and it doesn’t work.
    So I hope some people with more experience than me could understand what happens here.
    1) What I need:
    I need to generate 4 synchonised clocks, whose periods will be multiple of 1 ms.
    2) What I have:
    LabVIEW 7.0 and a PCI-6602 Counter-Timer Board in a DELL PC running under XP pro.
    The PCI-6602 Counter-Timer Board has 8 counter timers named CTR 0, CTR 1, ... CTR7.
    3) What I have already done, and that worked:
    - Generate a 1 kHz “Master Clock” signal from CTR 4, configured by “Continuous Pulse Generator Config.vi” (found in “Data Acquisition, Counters...).
    - configure CTR 0 and CTR 1 to work as frequency dividers, by use of “Down Counter or Divider Config.vi”.
    - Apply the output signal of CTR 4 (OUT ) to the SOURCE inputs of CTR 0 and CTR 1 by means of physical wiring in the SCB-68 connection box.
    When I do this, I get two nice secondary clock signals on my oscilloscope screen, ( with periods = 3 ms, or 5 ms or whatever multiples of 1 ms I choose) from CTR 0 and CTR 1 outputs , very clean and perfectly in phase with the 1 kHz Master Clock.
    So far, so good...
    But I still need 2 more secondary clocks...
    One would say: “No problem, do the same trick with two other counters...” Well, not so simple, it seems...
    4) What I tried to do, and that didn’t work:
    When I try to do the same frequency division with any of the remaining counters, (CTR2 to CTR7), the program stops and I get an error “ –10020 : Time base not valid “.
    I can’t figure out what happens here: I thought any counter could be configured to work as a frequency divider, but it seems not to be so, and I am stuck here.
    Has anyone an idea about how to fix this type of problem?
    Attached file: hor_div02New.vi
    Attachments:
    hor_div02New.vi ‏123 KB

    karolik,
    I'm just adding a followup in English. As Marc L. mentioned, the particular vi named "Down Counter or Divider Config" isn't compatible with the 6602. While the 6602 does have the ability to generate 4 synchronized clocks, a different syntax is needed. Here's how I'd do it:
    Traditional NI-DAQ
    1. Configure a continuous pulsetrain on CTR 4. Route its output to, say, RTSI 4. Don't start it yet.
    2. Configure CTR 0,1,2,3 for continuous pulsetrains using RTSI 4 as their "timebase source." Start them.
    3. Start the CTR 4 pulsetrain.
    4. Now CTR's 0-3 should generate separate clocks with synchronized phasing.
    DAQmx
    1. Configure a continuous pulsetrain on CTR 4. Don't start it yet.
    2. Configure CTR 0,1,2,3 for continuous pulsetrains using "Ticks" for units. Use a DAQmx property node (probably Channel property node, but am not 100% sure and don't have a LV PC handy to check) to specify that the "ctr4 internal output" should be used as the timebase. Start them.
    3. Start the CTR 4 pulsetrain.
    4. Now CTR's 0-3 should generate separate clocks with synchronized phasing.
    -Kevin P.

  • Genral How do I get syncronize​d encoders to work with a PCI-6602

    I am new to the DAQmx and need some general help writting VB code that works.
    I can get some things to work, but others don't work at all and I don't have enough knowledge of these drivers to get up the learnign curve hump.
    I wanted to post this as a follow-up
    to the thread:
    http://forums.ni.com/ni/board/message?board.id=40&​message.id=5430&query.id=215100#M5430
    But I couldn’t figure out how.  
    Anyway, my problem is that I will
    eventually have to do much the same thing as the above thread with two encoders in
    sync.
    I have a pci-6602 card, and my code
    snippet is at the bottom  The 6602 doesn't have the analog in to syncronize to like the thread above
      (yes, it is in Visual basic
    6)
    I can’t figure out the
    DAQmxCfgSampClkTiming.   Why do I want to have a sample clock at all?   (okay,
    when I have two channels synced I do – but this sample I want to get working and
    I don’t see why)?
    Can’t I just get a new counter value
    with each quadrature input change?   (That’s what the DEV/PFI39 is, the same as
    encoder channel A )
    Okay, so hopefully you tell me how
    to get that to work.
    Next question:  What can I use for
    the DAQmxCfgSampClkTiming when I am doing two channels in sync?  Nothing seems
    to work, and I have tried a bunch of things.
    Brynn
    Rogers
    DeltaTech
    Controls
    952-403-7400
    x431
    //// code that doesn't really work.   "Dev1/PFI39" is the channel A encoder input, I just want new data whenever the encoder changes (for now)
        ' DAQmx Configure
    Code
        DAQmxErrChk
    DAQmxCreateTask("count", TaskHandle)
        TaskIsRunning =
    True
        DAQmxErrChk
    DAQmxCreateCIAngEncoderChan(TaskHandle, "Dev1/ctr0", "",
    DAQmx_Val_EncoderType2_X4, 0, 0#, DAQmx_Val_EncoderZIndexPhase1_AHighBHigh,
    DAQmx_Val_AngleUnits2_Ticks, 500, 0#, "")
        DAQmxErrChk
    DAQmxCfgSampClkTiming(TaskHandle, "Dev1/PFI39", 1, DAQmx_Val_Rising,
    DAQmx_Val_AcquisitionType_FiniteSamps, samples)
        'DAQmx Start
    Code
        DAQmxErrChk
    DAQmxStartTask(TaskHandle)
        ' DAQmx Read
    Code
        DAQmxErrChk
    DAQmxReadCounterF64(TaskHandle, -1, 0.05 * samples, data(0), samples, ReadCount,
    ByVal 0&)
        ' All done!
    StopTask
        'DAQmxErrChk
    DAQmxStopTask(TaskHandle)
        'Stop task isn't needed because
    Clear Task also stops task
        DAQmxErrChk
    DAQmxClearTask(TaskHandle)
    Solved!
    Go to Solution.

    Okay,   Here is the working routine to get syncronous data from two encoders, and it seems to work okay.
       I have this working with my two 2000 CPR encoders, we'll see how it works when I get the 500,000 CPR encoders later.
    The three big problems that caused it to not work were:  
    1)   Theduty cycle argument for the createCOpulsechanfreq task needed to be between 0 and 1.  I had '50.0' before, it works when it is '0.5'
    2)   The sample timebase that I used (ctr7) needed to be started before either of my two angle encoder tasks were created
    3)   The "dev/PFI8" string needed to be changed to "/dev/PFI8".   I don't really understand why, but that was what seemed to fix it all.
    So this question has been answered...      Now I have a different problem while reading 8 PWM values at once with the Semiperiodcounter,  which I will post in a new a different thread.
    Thanks!
    ''''''''''''''''''   Working code here
    Public Sub Aquireposition(samples As Long, data0() As Double, data1() As Double)
    Dim BaseTaskHandle    As Long
    Dim encoder0TaskHandle    As Long
    Dim encoder1TaskHandle    As Long
    Dim TaskIsRunning As Boolean
    Dim ReadCount As Long
    Dim strCounterString As String
       On Error GoTo ErrorHandler
        DAQmxErrChk DAQmxCreateTask("base", BaseTaskHandle)
        DAQmxErrChk DAQmxCreateCOPulseChanFreq(BaseTaskHandle, "/Dev1/ctr7", "base", DAQmx_Val_FrequencyUnits2_Hz, DAQmx_Val_Level1_Low, 0#, 200#, 0.5)
    'Specify continuous timing
        DAQmxErrChk DAQmxCfgImplicitTiming(BaseTaskHandle, DAQmx_Val_AcquisitionType_ContSamps, 200)
         'DAQmx Start Code
        DAQmxErrChk DAQmxStartTask(BaseTaskHandle)
    ' DAQmx Configure Code
        DAQmxErrChk DAQmxCreateTask("encoder", encoder0TaskHandle)
        TaskIsRunning = True
        DAQmxErrChk DAQmxCreateCIAngEncoderChan(encoder0TaskHandle, "/Dev1/ctr0", "", DAQmx_Val_EncoderType2_X4, 0, 0#, DAQmx_Val_EncoderZIndexPhase1_AHighBHigh, DAQmx_Val_AngleUnits2_Degrees, 500, 0#, "")
        DAQmxErrChk DAQmxCfgSampClkTiming(encoder0TaskHandle, "/Dev1/PFI8", 1, DAQmx_Val_Rising, DAQmx_Val_AcquisitionType_FiniteSamps, samples)
        ' second encoder
        DAQmxErrChk DAQmxCreateTask("encoder1", encoder1TaskHandle)
        TaskIsRunning = True
        DAQmxErrChk DAQmxCreateCIAngEncoderChan(encoder1TaskHandle, "/Dev1/ctr1", "", DAQmx_Val_EncoderType2_X4, 0, 0#, DAQmx_Val_EncoderZIndexPhase1_AHighBHigh, DAQmx_Val_AngleUnits2_Degrees, 500, 0#, "")
        DAQmxErrChk DAQmxCfgSampClkTiming(encoder1TaskHandle, "/Dev1/PFI8", 1, DAQmx_Val_Rising, DAQmx_Val_AcquisitionType_FiniteSamps, samples)
        'DAQmx Start Code
        DAQmxErrChk DAQmxStartTask(encoder0TaskHandle)
        DAQmxErrChk DAQmxStartTask(encoder1TaskHandle)
        ' DAQmx Read Code
        DAQmxErrChk DAQmxReadCounterF64(encoder0TaskHandle, -1, 0.05 * samples, data0(0), samples, ReadCount, ByVal 0&)
        DAQmxErrChk DAQmxReadCounterF64(encoder1TaskHandle, -1, 0.05 * samples, data1(0), samples, ReadCount, ByVal 0&)
        ' All done! StopTask
        'DAQmxErrChk DAQmxStopTask(TaskHandle)
        'Stop task isn't needed because Clear Task also stops task
        DAQmxErrChk DAQmxClearTask(encoder0TaskHandle)
        DAQmxErrChk DAQmxClearTask(encoder1TaskHandle)
        DAQmxErrChk DAQmxClearTask(BaseTaskHandle)
        Exit Sub
    ErrorHandler:
    '   MsgBox "Error: " & Err.Number & " " & Err.Description, , "Error"
    '    mlngPWM_ErrorCount(lngChannel) = mlngPWM_ErrorCount(lngChannel) + 1
        'MainForm.PWMErrorCount = "Errors(" & lngChannel & "): " & mlngPWM_ErrorCount(lngChannel)
        Resume Next
    End Sub

  • Reading encoders with PCI 6602

    Hi,
    I'd like some help to understand correct general purpose counter (GPCTR)
    calling sequence.
    Once configured with a GPCTR_Control (..ND_PROGRAM)call, it is not clear
    what should be done, if at a later stage one would like to set (write) a
    specific value to the counter. I suppose the counter should be un-armed (with
    a GPCTR_Control (..ND_RESET)call). In this case is the previous configuration
    lost (things defined with the Set_Application and Change_parameter calls)
    If negative, what is the shortest sequence call to set a new value to a counter
    already armed ?
    Please mail the answer to
    [email protected]
    Thank you

     Hi Sweety,
    What type of measurement do you want to make with the servo motor (edge count, frequency, pulse width, etc.)?  What wires are output from the servo motor?  Depending on the answers to these questions it will give more information into whether you need to use the gate terminal or just the source. 
    I would recommend to review the User manual for the PCI-6602 (referenced below) because it has information on the pinouts (pg 31) and different application considerations.  Also, the M series user manual discusses some of the different measurements (in the counter section) and how to make the proper connections.
    660x User Manual
    http://www.ni.com/pdf/manuals/372119a.pdf  
    M Series User Manual
    http://digital.ni.com/manuals.nsf/websearch/2025C99AB0614F9E8625748000577B9A
    Regards,
    Jordan F
    National Instruments

  • Connect NI PCI-6602 with NI PCI-6503

    Hello,
    I want to connect a NI PCI-6602 Counter/Timer with the NI PCI-6503 DIO-Card. The problem is the varying number of pins. (6602->68 pins; 6503 -> 50 pins). Is there a possibility to connect both? Maybe a complete adapter?
    regards Thomas

    Thomas,
    You are correct both cards have male connectors. You could still use the 68M-50F connector if you use a 68-68 cable. Or if you had a 68F-50M then you would need a 50 pin cable. I have found another option, the R6850-D1 Cable(part number 777419-01) . This is a digital cable that was made to use our 68 pin digital devices with 50 pin breakout boxes. It ties the ground lines together and you also loose access to PFI 37,the up/down pin for counter 0, and you loose the +5V line. I think you may want to check the pin mappings to make sure that you really want to connect these 2 boards directly together. When using a 50 pin conversion with the 6602 you will get the following pin mapping:
    Pin Number (1-50) 6602 Signal Name
    1 PFI_25
    2 PFI_28
    3 PFI_27
    4 PFI_24
    5 PFI_30
    6 PFI_31
    7 PFI_26
    8 PFI_29
    9 PFI_21
    10 PFI_23
    11 PFI_19
    12 PFI_17
    13 PFI_18
    14 PFI_16
    15 PFI_22
    16 PFI_20
    17 GND
    18 PFI_34
    19 GND
    20 PFI_35
    21 GND
    22 PFI_33
    23 GND
    24 PFI_32
    25 GND
    26 GND
    27 PFI_38
    28 GND
    29 Reserved
    30 GND
    31 PFI_36
    32 GND
    33 PFI_39
    34 GND
    35 PFI_4
    36 PFI_6
    37 PFI_0
    38 PFI_2
    39 PFI_1
    40 PFI_3
    41 PFI_7
    42 PFI_5
    43 PFI_13
    44 PFI_10
    45 PFI_15
    46 PFI_14
    47 PFI_8
    48 PFI_11
    49 PFI_12
    50 PFI_9
    You will loose half of the cards functionality since half the pins (even numbered pins) will be connected to ground on the 6503. It would be easy for you to short lines to ground this way. It would probably be better if you get a breakout box for each card (SCB-50 and SCB-68) and then connect only the lines you want to share between the cards. So in answer to your question, yes you CAN connect then directly together, but do so with caution, and I do not feel this direct connection is the best solution for y
    ou.
    Hope this helps.
    Kevin R

  • Error -200141 when doing buffered events with DAQmx and PCI-6602

    When doing buffered events with DAQmx and PCI-6602 I get error 200141 - Data was overwritten before it could be read by the system.
    This error is generated ONLY with random inputs >200/sec.
    My setup is :
    DAQmxCreateCIVCountEdges(taskhandle,"Dev1/ctr3"....
    DAQmxCG+FGSampClkTiming(taskhandle,"/Dev1/FPI35",...
    DAQmxSetCICountEgdesChan(taskhandlem,"", "/Dev1/80MHZTimeBase")
    DAQmxSetChanAttribute(taskhandlw,",",DAQmx_CI_DataXferMech,DAQmx_Val_DMA,0);
    Can somebody help ?

    i'm getting the same Error-200141, while reading semiperiods. (Meas_Buffered semiperiod continous)
    while loop ex.rate seems to be pulsewidth*no.Samples to read. in my case PW=60ms
    Input buffer size measured with Property node= 10000
    why this error happens?? i cant use any mode other than implicit timing for semi-period measurement right??
    more info: all the ai channels are used ~ 16 differencial.
    i found one solution which is _ reinitializing the whole task if an error occur. is this the right way??
    Kudos always welcome for helpful posts
    Attachments:
    Counter_1_Meas Buffered Semi-Period-Continuous_main_lv09.vi ‏34 KB
    SemiPeriod_Reconnect Counter on Error.vi ‏35 KB

  • How to generate an Interupt for DMA transfer from Counter on NI-PCI-6602

    dear guys:
          how to generate an Interupt for DMA transfer from Counter on NI-PCI-6602,and I have set the DMA and DMA_INT, and also the global interrupt register.
    but there is no Interupt generated in the Interupt callback function.And when I have set the DMA_INT and global interrupt register ,and then read the relevant register,the relevant bit is also 0.
         I suspect there is an Interupt register contral, like the MITE, you must write the value to 0xc4 for opening .
         there is some codes In my enclosure .What can I do?
    Attachments:
    TEST.C ‏21 KB

    dear Steven_T:
            the registers are In my enclosure ,if you have some ideas,please reply me  first time.thank you !
    Attachments:
    PCI6602.pdf ‏818 KB

Maybe you are looking for