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

Reply via email to