Hi Alexis, as usually, we are more than grateful that you are willing to spend time on this issue. Here are answers to your questions:
1) I tried CR_INVERT -- no success 2) I tried very slow frequencies like 10Hz in the counter clock (which is nicely visualized on my oscilloscope) -- no success 3) I tried to send a 0 with cmd_bits -- and interestingly, this ALSO takes my DIO line high (sorry, I thought I had tested this before). This would indicate that we do not access the FIFO at all? 4) I have my own test program to send alternating 0xffffffff and 0x0 values to the devices to generate a square wave on the oscilloscope. I cannot see anything of the square wave executed. Best wishes, -Stefan On Jul 19, 2010, at 15:01, Alexis Berlemont wrote: > Hi, > > Sorry for answering late. > > Stefan Schaal wrote: >> Hi Alexis, >> >> I managed to port some of the Comedi examples to Analogy. In particular, I >> could configure one of my counter subdevices to become a high frequency >> clock, following the gpct_pulse_generator.c example. I routed the output of >> the clock to my PFI0 pin, and could visualize the signal on an oscilloscope. >> Thus, I know have the clock I need to trigger CMD-based DIO, as you >> suggested. (I will post some sample code of this in the near future after >> all is cleaned up). >> >> Next, I went back to cmd_bits.c and try to make it work on my NI6259 >> board. For scan_begin_src=TRIG_EXT I need to choose scan_begin_arg = 28 >> (which is kCDO_Update_Source_SelectG0_Out in the NI documentation, and >> NI_CDIO_SCAN_BEGIN_SRC_G0_OUT in the comedi.h file). >> >> When running cmd_bits.c in this way and monitoring the DO channels on an >> oscilloscope, the DO switches to HIGH when the acquisition is triggered >> (i.e., the value of the first element in the FIFO), but the FIFO is not >> processed any further, i.e., not emptied. If I DO NOT run the counter-clock >> above, the DO does not even switch to HIGH. I also checked whether 28 is the >> right value for scan_begin_arg by trying a wide range of values, but only >> for scan_begin_arg = 28 I get the DO bit switched to HIGH at the beginning >> of the acquisition. >> >> In Comedi, the cmd.flags is set to CMDF_WRITE for such externally triggered >> acquisitions, which I tried, but it did not help. >> >> Thus, it appears that I still have a problem in processing the FIFO, >> despite it appears that all other things are now correctly connected (Comedi >> has an example do_waveform.c, which is pretty much what I try to use for >> testing in my own code). >> >> Would you have any thoughts on what might go wrong? It looks like we are >> just a tiny bit away from succeeding with cmd_bits.c on my board. >> > > I had time to have a look at your problem. Unfortunately, I do not > have any solution. I just have some questions you may find stupid: > > - Did you try to invert the sample clock polarity by setting the flag > CR_INVERT in the command field scan_begin_arg? > - Which frequencies did you generate with the counter subdevice? Even > the lowest one did nothing (Something like 10Hz)? > - Did you try to send 0 with cmd_bits ? Just to check that the DO stay > to LOW, which would mean that the values (or at least the first one) > are properly loaded into the device. > - So far, cmd_bits always sends the same value (the one you passed as > argument); we should modify it so that the complement value is > written every two samples. That would allow us to physically check > how many samples are "played" by the DO. > >> Best wishes, >> >> -Stefan >> >> >> >> >> >> On Jul 14, 2010, at 17:46, Stefan Schaal wrote: >> >>> Hi Alexis, >>> >>> in the Comedi examples >>> (http://www.comedi.org/download/comedilib-0.8.1.tar.gz, the do_waveform.c >>> example), they suggest to use a general purpose counter as clocking input >>> to a cmd-based DIO acquisition. This seems to be the signal >>> "kCDO_Update_Source_SelectG0_Out = 28" from the enum you found >>> in the NI documentation. >>> >>> For this purpose, the counter needs to be configured and triggered. Does >>> Analogy already have the functionality to do such operations? The Comedi >>> libraries have an example for this, too, in gpct_pulse_generator.c, just >>> that this example uses a variety of function calls that I cannot directly >>> map to the current Analogy functionality. >>> >>> Or, do you happen to know whether there is another, easier to access, clock >>> source? >>> >>> Best wishes, >>> >>> -Stefan >>> >>> >>> On Jul 14, 2010, at 14:03, Alexis Berlemont wrote: >>> >>>> Stefan Schaal wrote: >>>>> Hi Alexis, >>>>> >>>>> maybe it is more useful to mention what I actually want to achieve with >>>>> DIO on my NI6259. My DIO communication involves a series of interactions >>>>> with another board to collect sensory data from a robot, and to send out >>>>> commands to this board. For instance, to read one of the sensors, a >>>>> sequence of DIO values need to be written to tell the board to send the >>>>> data. I programmed this initially with synchronous instructions using >>>>> a4l_sync_dio(), but this turns out to be too slow. Thus, the hope is to >>>>> use commands, i.e., fill the FIFO with the sequence of values which I >>>>> need to execute, and then use asynchronous DIO to obtain much higher >>>>> speed of communicating the values in the FIFO. >>>>> >>>>> Thus, what I essentially try to do is to put about 10-20 scans in the >>>>> FIFO, and then write the FIFO as fast as possible to my NI6259 DIO >>>>> subdevice. >>>>> >>>>> Would you have any ideas how to do this fast writing of the scans in the >>>>> FIFO with the current analogy functionality? >>>>> >>>> Right now, I don't know. I think your idea of using DIO commands may >>>> be suitable (I don't know your timing constraints). So what not >>>> proceeding ? >>>> >>>>> Thanks a lot! >>>>> >>>>> -Stefan >>>>> >>>>> >>>>> On Jul 12, 2010, at 22:51, Stefan Schaal wrote: >>>>> >>>>>> Hi Alexis, >>>>>> >>>>>> thanks a lot for the explanations. One item I am confused about is that >>>>>> you write that TRIG_TIMER is not suitable for DIO, but in cmd_write.c in >>>>>> your sample code, it is used for the analog write without problems. >>>>>> Wouldn't one be able to just use the same clock source for DIO as in >>>>>> analogue I/O? >>>>>> >>>>>> Best wishes, >>>>>> >>>>>> -Stefan >>>>>> >>>>>> >>>>>> >>>>>> On Jul 12, 2010, at 15:29, Alexis Berlemont wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> Stefan Schaal wrote: >>>>>>>> Hi Alexis, >>>>>>>> >>>>>>>> I guess I slowly understand that my clocking signal connected to >>>>>>>> scan_begin_arg has to come from an external DIO input, if >>>>>>>> scan_bigin_src = TRIG_EXT, and that the insn instruction is still >>>>>>>> needed to trigger the entire acquisition. >>>>>>> >>>>>>> Yes. The trigger instruction is needed so as to start the whole >>>>>>> acquisition (which is composed of many scans). A periodic external >>>>>>> signal is needed so as to trigger each scan. >>>>>>> >>>>>>>> >>>>>>>> Alternatively, would it be possible to use the internal clocking >>>>>>>> signals like >>>>>>>> >>>>>>>> scan_bigin_src = TRIG_FOLLOW >>>>>>>> >>>>>>>> or >>>>>>>> >>>>>>>> scan_bigin_src = TRIG_TIMER >>>>>>> >>>>>>> I think you are right. If the sampling clock comes from another >>>>>>> subdevice, TRIG_EXT may not be the most appropriate constant. However, >>>>>>> the original comedi driver only expects TRIG_EXT even if... the >>>>>>> sampling signal is not external. >>>>>>> >>>>>>> TRIG_TIMER does not seem suitable because it assumes an independant >>>>>>> sampling clock is available. >>>>>>> >>>>>>> And TRIG_FOLLOW may be the most appropriate one. We should modify the >>>>>>> driver so that TRIG_FOLLOW is used if the analog sampling clock is >>>>>>> chosen. >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> if I try any of these sources, I get an error -22, and dmesg reports: >>>>>>>> >>>>>>>> [195882.321300] Analogy: a4l_check_cmddesc: scan_begin_src, trigger >>>>>>>> unsupported >>>>>>>> >>>>>>> >>>>>>> For me, the command interface is an empty shell because the various >>>>>>> parameters (start_src, scan_begin_src, ...) and the values (TRIG_*) >>>>>>> are imposed. And, on the other side, the driver is fully in charge of >>>>>>> the command structure as it is. So, the comedi command imposes a >>>>>>> communication method but does not ease the driver's task of managing >>>>>>> it (errors checking, translation, etc.) >>>>>>> >>>>>>> And, in our case: DIO, we may conclude that this imposed API does not >>>>>>> fit well: in scan_begin_arg, we have to pass an index which is >>>>>>> supposed to correspond to some sampling clock (which is specific to a >>>>>>> board). Then, we use a generic interface with board-specific >>>>>>> arguments. >>>>>>> >>>>>>> So, to sum up, I understand your point: the way we control the driver >>>>>>> may not always be the most appropriate one. But, we inherited from >>>>>>> comedi both the interface and the drivers. >>>>>>> >>>>>>> On my side, I am working on trying to implement (as a background task) >>>>>>> a generic interface a little bit more based on discovery (query / >>>>>>> enum) that would render the command interface obsolete. Unfortunately, >>>>>>> I have nothing interesting to show yet. >>>>>>> >>>>>>>> Best wishes, >>>>>>>> >>>>>>>> -STefan >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Xenomai-core mailing list >>>>>> Xenomai-core@gna.org >>>>>> https://mail.gna.org/listinfo/xenomai-core >>>>> >>>> >>>> -- >>>> Alexis. >>> >>> >>> _______________________________________________ >>> Xenomai-core mailing list >>> Xenomai-core@gna.org >>> https://mail.gna.org/listinfo/xenomai-core >> > > -- > Alexis. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core