Quadrature clock converter

Currently i am using an encoder and i need to get the number of counts from the encoder.
I am currently using DAQ6024E card and i am also using it in conjunction with the LS7084 chip.
I want to get the number of counts from the encoder when the encoder rotates in the clockwise direction as well as in the anti clockwise direction ie; the up and down count.
Can anyone advise me on what is the program to write?
i am currently using lab windows.

Leroy,
First, I would suggest that you review the following document:
Using Quadrature Encoders with E Series DAQ Boards
This should provide you with the theory behind the use of a quadrature encoder with an E Series device. It will also detail the required hardware connections. With regards to programming this application in LabWindows/CVI, I would suggest that you begin with the STCeventCount.C example. To modify this application so that it is capable of determining the direction of rotation, you will need to add the following function call:
iStatus = GPCTR_Change_Parameter (iDevice, ulGpctrNum, ND_UP_DOWN, ND_HARDWARE);
This func
tion call causes the direction of counting (up or down) to be controlled by the counter's up-down line.
Good luck with your application.
Spencer S.

Similar Messages

  • Critical warning with AXI Clock Converter IP

    Upon synthesis of my attached block diagram, I get the following critical warning :
    [Common 17-55] 'get_property' expects at least one object. ["i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc":20]
    the 'problem' line 20 in the automatically generated (read-only) xdc contains :
    set_max_delay -from [filter [all_fanout -from [get_ports m_axi_aclk] -flat -endpoints_only] {IS_LEAF}] -to [filter [all_fanout -from [get_ports s_axi_aclk] -flat -only_cells] {IS_SEQUENTIAL && (NAME !~ *dout_i_reg[*])}] -datapath_only [get_property -min PERIOD $m_clk]
    -> Q1 : no clue what's going on here - is it because I renamed my external port to ext_clk?
    I added the following constraint to my xdc file, but that didn't help. Looks like I need to tell that $m_clk matches the ext_clk?
    create_clock -period 62.000 -name ext_clk -waveform {0.000 31.000}
    -> Q2 : is my block diagram the correct way to use AXI4-lite on my custom IP with 2 async clock domains?
    fyi : the full contents of the (read-only) xdc file is :
    # Core-Level Timing Constraints for axi_clock_converter Component "design_1_axi_clock_converter_0_1"
    # This component is configured to perform asynchronous clock-domain-crossing.
    # In order for these core-level constraints to work properly,
    # the following rules apply to your system-level timing constraints:
    # 1. Each of the nets connected to the s_axi_aclk and m_axi_aclk ports of this component
    # must have exactly one clock defined on it, using either
    # a) a create_clock command on a top-level clock pin specified in your system XDC file, or
    # b) a create_generated_clock command, typically generated automatically by a core
    # producing a derived clock signal.
    # 2. The s_axi_aclk and m_axi_aclk ports of this component should not be connected to the
    # same clock source.
    set s_clk [get_clocks -of_objects [get_ports s_axi_aclk]]
    set m_clk [get_clocks -of_objects [get_ports m_axi_aclk]]
    set_false_path -through [get_ports -filter {NAME =~ *_axi_aresetn}] -to [filter [get_cells -hierarchical -filter {NAME =~ */rstblk/*}] {IS_SEQUENTIAL}]
    set_max_delay -from [filter [all_fanout -from [get_ports s_axi_aclk] -flat -endpoints_only] {IS_LEAF}] -to [filter [all_fanout -from [get_ports m_axi_aclk] -flat -only_cells] {IS_SEQUENTIAL && (NAME !~ *dout_i_reg[*])}] -datapath_only [get_property -min PERIOD $s_clk]
    set_max_delay -from [filter [all_fanout -from [get_ports m_axi_aclk] -flat -endpoints_only] {IS_LEAF}] -to [filter [all_fanout -from [get_ports s_axi_aclk] -flat -only_cells] {IS_SEQUENTIAL && (NAME !~ *dout_i_reg[*])}] -datapath_only [get_property -min PERIOD $m_clk]
    set_disable_timing -from CLK -to O [filter [all_fanout -from [get_ports s_axi_aclk] -flat -endpoints_only -only_cells] {PRIMITIVE_SUBGROUP==dram || PRIMITIVE_SUBGROUP==LUTRAM}]
    set_disable_timing -from CLK -to O [filter [all_fanout -from [get_ports m_axi_aclk] -flat -endpoints_only -only_cells] {PRIMITIVE_SUBGROUP==dram || PRIMITIVE_SUBGROUP==LUTRAM}]

     thank you for the very quick reply - in the mean time also tried with using 'ext_clk_1' as that seems to be the net name, but no success. 
    here is the log of the synthesis parsing the xdc files - I understand it's not finding the right clock constaint for the m_axi_aclk input of the axi clock converter. I connected my external clock (16MHz) to this input (ext_clk), but I don't know how to write the constraint correctly. I tried with this :
    create_clock -period 62.000 -name ext_clk -waveform {0.000 31.000}
    Parsing XDC File [I:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/constrs_1/new/NeoScan.xdc]
    INFO: [Constraints 18-483] create_clock: no pin(s)/port(s)/net(s) specified as objects, only virtual clock 'ext_clk_1' will be created. If you don't want this, please specify pin(s)/ports(s)/net(s) as objects to the command. [I:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/constrs_1/new/NeoScan.xdc:1]
    Finished Parsing XDC File [I:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/constrs_1/new/NeoScan.xdc]
    Parsing XDC File [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc] for cell 'design_1_i/axi_clock_converter_0/inst'
    INFO: [Timing 38-35] Done setting XDC timing constraints. [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc:16]
    get_clocks: Time (s): cpu = 00:00:18 ; elapsed = 00:00:18 . Memory (MB): peak = 1924.273 ; gain = 9.031
    WARNING: [Vivado 12-1008] No clocks found for command 'get_clocks -of_objects [get_pins design_1_i/axi_clock_converter_0/inst/m_axi_aclk]'. [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc:17]
    Resolution: Verify the create_clock command was called to create the clock object before it is referenced.
    INFO: [Vivado 12-626] No clocks found. Please use 'create_clock' or 'create_generated_clock' command to create clocks. [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc:17]
    CRITICAL WARNING: [Common 17-55] 'get_property' expects at least one object. [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc:20]
    Resolution: If [get_<value>] was used to populate the object, check to make sure this comm and returns at least one valid object.
    Finished Parsing XDC File [i:/Repositories/Zynq/AsyncAXI4Lite/AsyncAXI4Lite.srcs/sources_1/bd/design_1/ip/design_1_axi_clock_converter_0_1/design_1_axi_clock_converter_0_1_clocks.xdc] for cell 'design_1_i/axi_clock_converter_0/inst'

  • Encoder and LS184 Clock Converter Problems

    I am trying to implement position measurements using a 9000 CPR and 1000 CPR encoder and a clock converter chip LS184 but I have trouble obtaining a consistent count with my PCI-6035E DAQ-STC counter. The count does not seem to be correct (9000 counts in one revolution, which is times 4 in X4 mode or 36,000 counts; I am getting around 14,000 and this is not even the same every time), and the count does not return to zero when turning the encoder back to the original position. I had that problem with the direct encoder connection to the counter (A to source, and B to DIO6), and obtained the LS184 clock converter chip to fix the problem. However, it is even worse with the clock converter. I tried different values of the bias r
    esistor but the problem was still there. What am I doing wrong?

    Hi Ed,
    The DAQ-STC counter/timer chip on your PCI-6035E card is not your most accurate counter/timer chip to perform encoder measurements. You are better off using a PCI-6601 card which is much more accurate and has real encoder capabilities.
    PCI-6601 (w/ NI-TIO Counter/Timer Chip)
    http://sine.ni.com/apps/we/nioc.vp?cid=3589〈=US
    The reason the NI-TIO chip is better suited for encoder measurements than the DAQ-STC is because of the following (which might also explain some of the difficulties):
    1) DAQ-STC can't reset the count after an encoder revolution (NI-TIO can w/ Z-Index line)
    2) DAQ-STC only has one encoder measurement mode and that is the 2-pulse encoder measurement mode. The NI-TIO has the X1, X2, X4, 2-pulse
    This essentially me
    ans that your DAQ-STC will count up when channel A leads B and count down if channel B leads A. There is no reference point, no ability to reset and no filters on the lines to prevent glitches.
    What is probably happening in your case is that you are measuring 9,000 pulses in one revolution and you are also measuring glitches on the line which is why you are getting the extra 5,000 counts. The DAQ-STC shipping example programs will give you some insight into programming your E Series counter to make encoder measurements but your errors are more likely caused by the fact that it is just a simple 2-pulse encoder (up/down encoder).
    Hope that helps. Have a good day.
    Ron

  • Using a Quadrature Encoder as a clock at best precision possible

    I would like to use a Quadrature encoder as a clock for analog data acquisition. Currently, I am using only one line of the encoder and the clock "ticks" when the line goes high. This is only one quarter of the precision the quatrature encoder is capable of, since it can count from both lines when they go either high or low. I was wondering if I can get the counter to send a pulse everytime it increments and use that pulse train as my clock. This would increase my analog data acquisition frequency four fold.

    Hello,
    It is not going to be possible to count both rising and falling edges with a single counter. You could route the A phase and B phase of your encoder to different counters to capture the different edges on the signals, but that will not help you in using this encoder as your clock source. What you may want to invest in is a quadrature clock converter. You can find more information on this at the following tutorial:
    Using Quadrature Encoders with E Series DAQ Boards
    Best,
    Jared A

  • Using LS7083 for quadrature encoders

    I just read Application Note 084 from 7/9/1999 that recommends using an LS7083 quadrature clock converter to eliminate miscounts due to vibration at low speed on an E Series board. It makes sense from what I have read, question is: does this apply to the M Series board I am using as well - PCI6220?
    Ed

    Ed,
    True quadrature conversion is a built-in feature of the M-series boards so there should be no need for an LS7083 or similar interface circuit.
    Personal testimonial: I've been using an M-series counter connected directly to a quadrature device for several months with no miscount issues. The device is a non-contact laser interferometer that resolves at the sub-micron level, and we're getting very repeatable measurements. This in an environment where the otherwise unnoticeable air currents from normal operation of the HVAC system cause a vibration-like fluctuation in counts.
    -Kevin P.

  • Do I need extra logic circuit for quadrature encoder using M-series DAQ PCI-6221?

    Hi,
    I understand that extra logic circuit, say quadrature clock converter LS7083/7084, is needed to enchance the reliability or integrity of the data for E-series board DAQ in accordance to application note: AN084.
    This is due to the vibration/jitter of the motor during running.
    Currently, I'm using M-series PCI-6221.
    Is it this new model itself can eliminate to construct this extra circuit?
    Coz I observed error is accumulating after motor rotating certain period of time. It defintely affect the control performance.
    Other than using hardware, can we use software to eliminate/mitigate the error?
    Please enlighten me. Thanks.
    Best regards,
    IANES

    Hello,
    The ap note you are referring to discusses circuitry that conditions the quadrature encoder signals before they get to the DAQ device to eliminate 'false' signals being sent to the DAQ device. The same system would apply to an M Series Device. I am not aware of any way to achieve this functionality in software. FYI, there is some good documentation for counters and counter applications for M Series. Take a look at the attached M Series help file. Hope this helps some.
    -Alan A.
    Attachments:
    M_Series_Help.zip ‏1145 KB

  • JMS - rollback but no redelivery

    All,
              I have a simple pub/sub on weblogic 8.1 that has a independent thread doing sychronous consumption. The session is transacted. Everything is smooth except when I attempt to rollback a transaction. In such a case, the message is not redelivered when I re-invoke the receive method 1 minute later. It is discarded.
              Looking at the pending messages on the queue, the message is always discarded 40 seconds after transaction is rolled back. If I shorten my wait and call the receive method 20 seconds after the rollback, the message is discarded after 20 seconds on the receive call. I was expecting to pull the message I had previously pulled.
              Message has infinite lifespan, redelivery limit is infinite. I also created a template and hardcoded the redelivery limit for the jms server and topic with no success.
              Any pointers or leads would be appreciated.
              thanks - Dan

    Tom,
              I pasted relevant pieces of config.xml and the listener code below, I hope it's intelligible. We're using the default ConnectionFactory.
              We're using topics and TopicSubscriber for consumption. The flow here is consume a message through receive(), attempt to deliver this message to our client, rollback in case of failure, sleep 60 seconds, then attempt redelivery. When receive is invoked the second time, the message is gone. TopicSession code and the line that does invokes the rollback are surrounded by -------------.
              - Dan
              ------------portions of config.xml---------------
              (the first JmsServer entry was not created by me, second was)
              <JMSServer Name="WSStoreForwardInternalJMSServerwlsD01S001"
              Store="FileStore" Targets="wlsD01S001">
              <JMSQueue CreationTime="1085198870801"
              JNDIName="jms.internal.queue.WSStoreForwardQueue"
              JNDINameReplicated="false" Name="WSInternaljms.internal.queue.WSStoreForwardQueuewlsD01S001"/>
              <JMSQueue CreationTime="1085198871294"
              JNDIName="jms.internal.queue.WSDupsEliminationHistoryQueue"
              JNDINameReplicated="false" Name="WSInternaljms.internal.queue.WSDupsEliminationHistoryQueuewlsD01S001"/>
              </JMSServer>
              <JMSServer Name="Gov JMS Server WLSD04S001"
              Store="Gov JMS File Store" Targets="wlsD01S001" TemporaryTemplate="MyJMS Template">
              <JMSTopic CreationTime="1135118604257" JNDIName="GovJMSTopic"
              Name="Gov JMS Topic" Template="MyJMS Template"/>
              </JMSServer>
              <JMSFileStore Directory="govJmsFileStore" Name="Gov JMS File Store"/>
              <JMSTemplate ExpirationPolicy="Discard" Name="MyJMS Template" RedeliveryDelayOverride="0" RedeliveryLimit="250"/>
              -----------------portions of listener code---------------
              public class RubyMessageListener extends Thread
                   private TopicConnection topicConnection = null;
                   private TopicSession topicSession = null;
                   private TopicSubscriber topicSubscriber = null;
                   Context jndiContext = null;
                   private RubyMessageListener() {;}
                   public RubyMessageListener(String url, AgmemsFilter aFilter, ClientManager cmParam)
                             throws NamingException, JMSException, ConfigurationException
                             Create a JNDI API InitialContext object if none exists
                             yet.
                             jndiContext = new InitialContext();
                                  We're taking care of the connection establishment at object
                                  startup time so that if we throw exception, we can throw
                                  exception back up to subscribe caller who can report NG to
                                  client
                                  Look up connection factory and queue. If either does
                                  not exist, exit.
                             TopicConnectionFactory topicConnectionFactory = null;
                             Topic topic = null;
                             TextMessage message = null;     
                             topicConnectionFactory = (TopicConnectionFactory) PortableRemoteObject.narrow(jndiContext.lookup("weblogic.jms.ConnectionFactory"), TopicConnectionFactory.class);
                             topic = (Topic) PortableRemoteObject.narrow(jndiContext.lookup("GovJMSTopic"), Topic.class);
                             Create connection.
                             Create session from connection; true means session is
                             transacted.
                             Create receiver, then start message delivery.
                             Close connection.
                        topicConnection = topicConnectionFactory.createTopicConnection();
                        topicSession = topicConnection.createTopicSession(true, Session.AUTO_ACKNOWLEDGE);
                        topicSubscriber = topicSession.createSubscriber(topic);
                        topicConnection.start();
                        myLogger.info("RubyMessageListener(): queue connection has been started, now listening on events");
                   public void confirmAndFallout(TopicSession ts, String sleepTime, boolean commitFlag)
                        try
                             if (commitFlag)
                                  ts.commit();
                                  myLogger.info("confirmAndFallout(): transaction is committed.");
                             else
                                  ts.rollback();
                                  myLogger.info("confirmAndFallout(): transaction successfully rolled back, must wait the sleepTime, " + sleepTime + " ms, before pulling message off of queue.");
                                  try
                                       Thread.sleep(Integer.parseInt(sleepTime));
                                  catch (Exception e)
                                       myLogger.error("confirmAndFallout(): After rollback, thread sleep failed, moving on without sleep.");
                             myLogger.info("confirmAndFallout(): sleep has been completed, return to event listening.");
                             return;
                        catch (JMSException je)
                             try
                                  myLogger.error("confirmAndFallout(): Unable to confirm delivery transaction, sleep, then try once more before bailing.");
                                  Thread.sleep(Integer.parseInt(sleepTime));
                                  if (commitFlag)
                                       ts.commit();
                                       myLogger.info("confirmAndFallout(): transaction is committed.");
                                  else
                                       ts.rollback();
                                       myLogger.info("confirmAndFallout(): transaction successfully rolled back.");
                             catch (Exception e)
                                  myLogger.error("confirmAndFallout(): The second attempt at jms confirmation has failed, return.");
                                  return;
                   public void run()
                        try
                             myLogger.info("run(): Client has asked us to begin pulling events for url: " + listenerUrl);
                             while (!haltFlag)
                                  myLogger.info("run(): BACK up at top of receive loop");
                                  StringBuffer errstr = new StringBuffer();
                                  //receive will initiate our jms transaction,
                                  //commit or rollback will end the transaction
                                  //receive is blocking, wait 55 minutes before committing
                                  //transaction and looping again. We do this to avoid
                                  //default 60 minute transaction timeout
                                  Message m = topicSubscriber.receive(3300000);
                                  if (m != null)
                                       if (m instanceof TextMessage)
                                            TextMessage message = (TextMessage) m;
                                            String messageText = "";     
                                            String eventType = "";
                                            Document doc;
                                            Node rootNode=null;
                                            try
                                                 messageText = message.getText();
                                                 myLogger.info("run(): the following message has been pulled from the queue: " + messageText);
                                                 eventType = "";
                                                 doc = rubyxml.stringToXML(messageText);
                                                 rootNode = doc.getFirstChild();
                                            catch (Exception e)
                                                 myLogger.error("run(): unable to understand the message we've pulled off the queue, commit transaction and continue. " + listenerUrl + " will not be receiving this message.");
                                                 confirmAndFallout(topicSession, listenerSleep, true);
                                                 continue;
                                            String operationNodeName = "";
                                            if (rootNode!=null)
                                                 operationNodeName = rootNode.getNodeName();
                                            myLogger.info("run(): operationNodeName: " + operationNodeName);
                                            if (operationNodeName.equals("tktInfoEvt"))
                                                 eventType = "tktInfoEvt";
                                            else if (operationNodeName.equals("prmInfoEvt"))
                                                 eventType = "prmInfoEvt";
                                            else if (operationNodeName.equals("rubyFacilityStatusEvt"))
                                                 eventType = "rubyFacilityStatusEvt";
                                            else if (operationNodeName.equals("killEvt"))
                                                 eventType = "killEvt";
                                            else
                                                 eventType = "heartbeatEvt";
                                            /** If the message is a rubyFacilityStatusEvt,
                                                 tktInfoEvt, or prmInfoEvt
                                                 - perform filter(listenerUrl, mcn) to determine
                                                 whether our client cares about this message
                                                 - if client cares, stamp(url) to refresh clock,
                                                 convert the xml string to java class, and send
                                                 message
                                                 - if client does not care, invoke discardedMsg(mcn)
                                                 and commit the transaction
                                                 - if ws request succeeds, commit
                                                 - if ws request fails, rollback and sit tight      
                                                 for one minute
                                            else if (eventType.equals("rubyFacilityStatusEvt") ||
                                                      eventType.equals("tktInfoEvt") ||
                                                      eventType.equals("prmInfoEvt"))
                                                 String mcn = rubyxml.getValueByTag((Element)rootNode, "mcn", errstr);
                                                 if (gs.filter(listenerUrl, mcn)
                                                      == AgmemsFilter.FILTER_PASSED)
                                                      myLogger.info("run(): we've pulled a " + eventType + " message off of the queue and it's time to send it out to client: " + listenerUrl);
                                                      messageCount += 1;
                                                      Socket agmemsSocket = null;
                                                      try
                                                      if (eventType.equals("rubyFacilityStatusEvt"))
                                                                agmemsSocket = HttpUtilities.sendCommand(cu.populateFacilityEvt(facStatusServiceUrl, messageText, messageCount, facStatusAction, rdate, agmemsUsername, agmemsPassword, "", false), agmemsHost, Integer.parseInt(agmemsPort), Integer.parseInt(agmemsTimeout), facStatusServiceUrl);
                                                      else if (eventType.equals("tktInfoEvt"))
                                                                agmemsSocket = HttpUtilities.sendCommand(cu.populateTicketEvt(tktInfoServiceUrl, messageText, messageCount, tktInfoAction, rdate, agmemsUsername, agmemsPassword), agmemsHost, Integer.parseInt(agmemsPort), Integer.parseInt(agmemsTimeout), tktInfoServiceUrl);
                                                      else
                                                                agmemsSocket = HttpUtilities.sendCommand(cu.populatePrmEvt(prmInfoServiceUrl, messageText, messageCount, prmInfoAction, rdate, agmemsUsername, agmemsPassword), agmemsHost, Integer.parseInt(agmemsPort), Integer.parseInt(agmemsTimeout), prmInfoServiceUrl);
                                                      catch (Exception e)
                                                           //these are the kind of failures,
                                                           //timeout, socketException, etc. that we
                                                           //would like to retry
                                                           myLogger.error("run(): ERROR, " + eventType + " push was unable to be sent to " + listenerUrl + " because of following exception, rolling back transaction." + e);
              ------------------------                         confirmAndFallout(topicSession, listenerSleep, false);
                   continue;
                                       myLogger.info("run(): Continued to readReplyFromSocket");
                                                      StringBuffer respStr = new StringBuffer();
                                                      try
                                                           HttpUtilities.readReplyFromSocket
                                                                (agmemsSocket, respStr);
                                                           myLogger.info("run(): response returned was " + respStr);
                                                      catch (Exception ie)     
                                                           //rollback, something wrong on client side
                                                           myLogger.error("run(): ERROR, " + eventType + " NOT delivered to " + listenerUrl + " rolling back transaction. " + ie.toString());
                                                           confirmAndFallout(topicSession, listenerSleep, false);
                                                           continue;
                                                      int agmemsMessageNumber=0;
                                                      agmemsMessageNumber =
                                                           cu.parseAgmemsResponse(respStr.toString());
                                                      if ((agmemsMessageNumber==-1) ||
                                                           (agmemsMessageNumber!=messageCount))
                                                           confirmAndFallout(topicSession, listenerSleep, true);
                                                           myLogger.error("run(): ERROR, " + eventType + " push response came back with NOT delivered to " + listenerUrl + " confirming transaction.");
                                                      else
                                                           confirmAndFallout(topicSession, listenerSleep, true);
                                                           myLogger.info("run(): " + eventType + " delivered to " + listenerUrl + " and transaction is committed.");
                                                 //Assumes CLIENT_INACTIVE return
                                                 else
                                                      //commit for cleanup only
                                                      confirmAndFallout(topicSession, listenerSleep, true);
                                                      setHaltFlag(true);
                                                      myLogger.error("run(): " + eventType + " NOT delivered to " + listenerUrl + ", CLIENT_INACTIVE, halting message receive on this listener.");
                                            else
                                                 myLogger.error("run(): we've pulled a text message from the queue that is UNKNOWN, commit and continue.");
                                                 confirmAndFallout(topicSession, listenerSleep, true);
                                       else
                                            myLogger.error("run(): we've pulled a message from the queue that is UNKNOWN and not text, commit and continue.");
                                            confirmAndFallout(topicSession, listenerSleep, true);
                                  else
                                       myLogger.error("run(): something strange happened, receive() returned with NO MESSAGE, commit and continue.");
                                       confirmAndFallout(topicSession, listenerSleep, true);
                        catch (JMSException je)
                             myLogger.error("run(): ERROR, exception, cleanup connections: " + je.toString());
                        catch (Exception e)
                             myLogger.error("run(): ERROR, exception, cleanup connections: " + e.toString());
                        finally
                             myLogger.error("run(): broken out of message receive loop, closing session, subscription, and topicConnection and KILLING this thread.");
                             if (topicConnection != null)
                                  try
                                       cm.listenerTable.remove(listenerUrl);
                                       topicSession.close();
                                       topicSubscriber.close();
                                       topicConnection.close();
                                  catch (JMSException e)
                                       myLogger.error("run(): As part of cleanup process, there was an exception attempting to close our topicConnection.");
              Message was edited by:
              whoopsy

  • Nokia 6280 v6.43 standard applications

    Hi everybody!
    I cancelled some standard applications from my Nokia 6280 (firmware 6.43): World Clock, Converter II and Snake III.
    Where can I find and download them?
    Waiting to read from you!

    The only way to get these apps back is to visit a care point and ask them to do a full reset and original firmware reload.
    You won't find them legally available for download.
    Care points:
    UK
    http://www.nokia.co.uk/A4228006
    Europe:
    http://europe.nokia.com/A4388379
    Elsewhere:
    http://www.nokia.com and select your country.

  • How do I use a quadrature encoder as an external clock (PCI 6229)

    Hello, ( a similar post has been placed on DAQ forum apologies as I did not know best place)
    I have a PCI 6229 M Series data acquisition card. I want to use a quadrature encoder to be the external clock driving the acquisition of a number of signals. I have set up reading 24 signals each time a clock pulse is received using the DAQ assistant and set my external clock to pin pfi8 (I think) this is then connected to an encoder output. This works well enough until the encoder is run too fast when it appears I am either missing pulses or getting bounce.
    How can I set up to clock using a quadrature encoder? I have seen a number of questions on this forum regarding quadrature encoders and reverse counting but not on using them as an external clock.
    Basically I want to have the stability and "bounceless" nature of using two outputs from a quadrature encoder whilst still using an external clock. Is this just a case of configuring controls to certain pfi's? If so how is it done?
    Any help or pointers would be helpful. So far I have managed very nicely by simply using the DAQ assistant and the interface it has would suggest that if configured for a certain pfi pin I could actually still use it.
    Thanks in advance.
    Kevin

    Hi,
    Well I've had alook into this for you and I'm not quite sure I understand what you are looking for.
    Is it possible for you to phone back in to support?
    The reason you are seeing bounce at high speeds, or indeed loss of points, is due to the sampling rate that you have set up.
    What you will find is that the trigger will start an aquisition of a number of points at a certain rate.  If your sampling rate is too low then you will not finish that sample batch before the next set of samples is recorded.
    It is possible to use an external clock into a trigger or digital line, however this will limit the number of samples you can take to the speed of your encoder.
    If you increase your sampling rates, and then configure a start trigger from a single input from the encoder you will be able to record a number of samples after a rising/falling edge.  (Set the clock as an internal clock)
    Hope this helps
    AdamB
    Applications Engineering Team Leader | National Instruments | UK & Ireland

  • How to output sample and convert clocks to PFI lines of E-Series DAQ (DAQPad-60​15)

    Hi,
    Can someone tell me how to output sample and convert clocks to PFI lines of E-Series DAQ (DAQPad-6015)?
    Thank you very much.
    Jack

    John --
    Windows is not an option for me. I like your idea of using a counter output -- it may be helpful as I am getting ramped up, but my application will eventually require both timer outputs.
    I have a legacy C application written for Macintosh, and I am in the process of moving it onto OS X. So my options are to use DAQmx Base, or write an in-kernel driver. I actually have already done the latter for 6024/6025 E-series boards (for another company); for this client I was hoping to use the DAQmx Base to allow an easy transition to M-series boards, without the cost of writing and supporting a low-level driver.
    The specific task I am doing is relatively straightforward. I record 2 channels of AI for a short period (usually about 250 ms.) and during this time I drive 2 external digital signals. Right now, I use the 2 timer outputs, which allows precise synchronization with the output and AI sampling.
    I appreciate your comments, and thanks in advance for any additional suggestions you can lob my way.
    --spg
    Scott Gillespie
    Applied Brain, Inc.
    scott gillespie
    applied brain, inc.

  • Generate a pulse train using a count from a quadrature encoder as the clock

    I am trying to generate a pulse train with the same frequency as my quadrature encoder.  Every time the encoder counts, I want the pulse to go high until the next count and then go low and so on.  I am using a 6602 PCI card and a BNC 2121 accessory.

    Maybe I'm not understanding your app, but I *think* you and I are approaching it from two very different directions.
    As I understand it, you'd like to emit a pulse with each quad state change.  Then that pulse would act as a counter Source signal.  The counter will then increment on each pulse, to keep track of accumulated position.  Further, you'd use your device-under-test (DUT) as a counter Gate signal, which would buffer the position count each time there's a rising edge on your DUT.  The end result is a buffer of position values, captured at each rising edge of your DUT.
    I'm talking about a different approach to produce the same data.  You'd use 2 tasks on a M-series board.  One of them is a hardware-timed digital input task based on "change detection."  Each time one of the specified bits has a transition, your whole set of digital input bits can be captured and an internal "change detect pulse" is generated on the board.  This task should be sensitive to the DUT edges.
    The other task would be a buffered position measurement.  It would receive the reference encoder inputs and internally do quad decode and keep a running count.  The sampling clock for this task would be specified as the other task's "change detect pulse."
    Net result: on each specified edge of your DUT, you'll buffer a reference encoder position value and a digital state of your DUT.  You can choose to be sensitive to rising edges, falling edges, or (!!!!) both at once. You can also choose to be sensitive to many bits simultaneously.  These are better capabilities than you get with the 6602 alone.
    I *think* the 6220 should be ok, based on a quick overview of specs.  I assume your 3.6 MHz is the rate of ref encoder quad state changes, right?  In the approach I'm suggesting, you only need concern yourself with the rate of DUT edges which appear to be in the 10's of kHz or less.
    Gotta go for now.  Post back if any further questions.
    -Kevin P.

  • Export "AI Convert Clock" of 4472 to a PXI_Trig line

    i have 11 pxi4472 on the same pxi1006 chassis. previouslly, i routed the "AI Convert" signal of the master 4472 card to an RTSI line, so that whenever there is an A/D convertion it can be timestamped by another card listening to this RTSI line. i used DAQ originally and everything works fine.
    recently, i rewrote all my code using DAQmx. but somehow when i use the "DAQmx Export Signal (Most Signal).vi" to export "AI Convert Clock" to a pxi_trig line, labview complains about a -200375 error: "Signal type requested to be exported is not supported for the specified task running on the given device". so seems like "AI Convert clock" is no longer valid in DAQmx? i tried every other signal that DAQmx allows me to e
    xport, but nothing seems to be the right one.

    To export the Sample Clock from the PXI-4472, use the DAQmx Export Signal property node. Specify the Sample Clock Output Terminal property (Clocks / Sample Clock / Output Terminal), and create a constant or control that specifies the desired PXI trigger line. During an acquisition, the sample clock will be exported as 100ns wide pulses at the specified sample rate.

  • Quadrature encoder as Clock input?...

    Greetings!
    Can anyone give me some advice on using a quadrature encoder as a clock input to an m-series daq?
    -Thus accepting A B and Z inputs..
    My aplication calls for measuring an Analog input on every rising edge (from the Clock generated) , now I've been scanning up and down the forum -found some posts, mostly concerned with the E-series.
    Some pointers will be appreciated!

    Hmmm, not sure how to comment.  When I think of "jitter", I think of an undesired variation in time intervals.  I wouldn't think that the digital filtering features would be a very natural way to address jitter.
    It may be a moot point though.  Digital filtering can be configured for "PFI" pins on the M-series board, but those pins can't be used for correlated DIO -- only for software-timed static DIO.
    I haven't found the need to use digital filtering in quite a while.  Need or lack thereof pretty much depends on the type of sensor signals you have and the kind of electrical environment you're in. 
    -Kevin P.

  • Ai Convert Clock Rate ?

    I am not clear on the AI convert Rate, I have 8 Analog Input channels that I would like to read based on PFI7 Sampling clock. In the documentation, it says that it will do 10 us + fastest clock cycle for interchannel A/D delay, do I have to specify the Rate for the Convert Clock 10us + 50 ns  delay or will it do it automatically for me?

    Hi SoftwareGuy2009,
    The convert clock is set automatically with the DAQmx driver.  If you need to  change the convert clock rate, you can use the AI Convert Rate property with a DAQmx Timing Property Node.  You can find some more information on this with the KnowledgeBase articles below:
    How is the Convert (Channel) Clock Rate Determined in NI-DAQmx and Traditional NI-DAQ?
    How is the Convert Rate Determined for Analog Input Operations with M Series Cards in NI-DAQmx Base...
    How Do I Increase Interchannel Delay Using NI_DAQmx or Traditional NI-DAQ (Legacy)?
    Regards,
    Jim Schwartz

  • Converting async to sync nrz external clock

    Hi, I am reading data through a RS-232 to RS-422 using a B&B electroncs converter.  However when Iread the data through the VISA it comes in asynchronous, and I need it to be synchronous with NRZ (Non-Return to Zero).  I am having trouble figuring out how to make this conversion.  If anyone has any experience with this or any idea as to how to make this happen I would appriciate the help.

    Hello,
    VISA will only read what has been transmitted to and from you COM Port, the mode of transfer, asynchronous or synchronous is not controlled by VISA.
    National
    Instruments serial hardware is designed to be 100% compatible with the
    serial ports that are built-in to your standard PC. These ports use the
    8250 UART (Universal Asynchronous Receiver/Transmitter), which is
    asynchronous. This could also apply to the hardware you are currently using.
    You may want to contact the manufacturers of your device.
    Christian A
    National Instruments
    Applications Engineer

Maybe you are looking for

  • 60% clips on ext drive.  Unable to export video to any format.

    I will get 45% built but then get the error message "iMovie quit unexpectedly". I do have 60% of my clips on an external drive. Not enough room on my small 120Gb internal. I think the ext is the problem, but I can't stored these HD clips anywhere els

  • I installed 10.5.1 (42) now it won't sync with my ipad or iphone

    I installed the most recent update. Tonight I tried to sync my ipad and the sync wouldn't start then timed out. To make sure it was not an issue with my ipad I then tried to sync my iphone. Same result. Any ideas?

  • Front Row customization

    I just got new Mac Mini, to be used as media center. My first Mac, so don't know much about Macs. Can't seem to adjust the way Front Row presents things, especially photos. I can adjust slideshow stuff in iPhoto, but that doesn't seem to apply to Fro

  • Dual usage in plsql

    hi, I have one query for which i am not getting much over net so raising here for help. when we use SELECT FROM DUAL in PLSQL block , is it working like normal SQL query and does it goes every time to oracle server or it will be processed by PLSQL en

  • Transferring Gift Card Money

    I have an AOL account, which I have been using with iTunes. But it's been experiencing problems, so I want to use my Apple account. The problem, however, is that I have gift card money with the AOL account. Is there any way to transfer said money fro