Hi Alexis,

 we are making great progress with our work. One issue that came up is whether 
it would be possible to add

   .stop_src = TRIG_COUNT,
   .stop_arg = n,

in the command structure, i.e., that the command terminates after n scans. 
Currently, when I try this, dmesg tells me that this method is not supported.

Best wishes,

-Stefan




On Aug 23, 2010, at 23:49, Stefan Schaal wrote:

> Hi Alexis,
> 
> amazing progress!! And it works! I just ran my test program on our NI6259 
> board and got perfect performance. I quickly tested 5MHz  DIO rate, and it 
> appeared to work fine according to the square waves on the oscilloscope. 
> 
> I will go back to developing our DAQ interface, and report back to the 
> Xenomai list about performance.
> 
> Thanks so much!!!!
> 
> Best wishes,
> 
> -Stefan
> 
> 
> On Aug 23, 2010, at 16:09, Alexis Berlemont wrote:
> 
>> Hi,
>> 
>> Stefan Schaal wrote:
>>> 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.
>>> 
>> 
>> At last, it comes!!!
>> 
>> Thanks to your test program and your help, I think I have fixed this
>> bug. Could you clone my git repository (branch analogy), and give it a
>> try with your own test program.
>> 
>> There was a bug in the mite configuration which explained why the
>> wrong data were sent to the DIO subdevice. That was also the reason
>> why no interrupt came from the mite.
>> 
>>> 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.
>>> 
>> 
>> -- 
>> Alexis.
> 
> 
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@gna.org
> https://mail.gna.org/listinfo/xenomai-core


_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to