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)
*nathanThanks 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,
hendroDear 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
MichaelDear 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. -
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 KBkarolik,
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 youHi 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 ThomasThomas,
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 KBdear 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
-
ello when i try to down load itunes if says "This installation package can not be opened. Verify that the package exist and that can access it. or contact provider" what do i do LOST
-
Problème lors de l'extinction de mon Mac Book Pro.
Bonjour, Lors de l'extinction de mon Mac Book Pro, l'écran blanc avec la molette de chargement s'affiche et le mac ne s'éteint pas ! La seul solution que j'ai est de forcer l'extinction en restant appuyé sur le bouton de démarrage. Que faire?
-
My iphone 3gs vibrated then shut down and won't turn back on.
Also , my home button doesn't work so i won't be able to press the button on the top right for 3-7 seconds. Please Help IM DESPERATE....
-
ORA 12514 once again..
Hello, I knew, there are thousends of topics similiar to mine. I read them all. Nothing works for me. And there i will discribe my problem: I created a Oracle database using Oracle SQL developer setting values : connection name: test, username: bob,
-
Active sync sendMail command throws 103 status code
Here is my post request data : <?xml version=\"1.0\" encoding=\"utf-8\"?> <SendMail xmlns=\"ComposeMail\"> <ClientId>%d</ClientId> <SaveInSentItems/> <Mime>From: [email protected] To: [email protected] Subject: hello MIME-