Hi, Please, do not forget to CC the mailing-list.
Jonghyun Kim wrote: > I'm so Sorry. 'config.idx_subd = 10' was erratum. > In my code, I used '11'. > > Anyway, thank you for your advise. > > Due to an another advise, I am going to try Xenomai 2.5.4. > But, I cannot find any changelog on this issue in Xenomai 2.5.3 and 2.5.4 > > So, my questions are... > > 1. Now, is ni_pcimio officially supporting the function of counter for > quadratic encoder? I know that the NI counters have been successfully used with instructions (not by myself). The issue, once more, is that you have to pass driver-dependent parameters to make them work. For example, the mode A4L_INSN_CONFIG_GPCT_QUADRATURE_ENCODER cannot be used. So my answer is that counter configuration is not officially supported because of the lack of a generic API. > > 2. If ni_pcimio does not support the function of counter yet, when will this > function be implemented? (with a sample code, such as insn_read for > AI) I already tried to develop an insn_counter program as a demonstration. I faced the problem detailed above: the instruction parameters needed to configure a counter subdevice are not independant from the acquisition card. For example, with the NI boards, you need to pass NI_GPCT_COUNTING_MODE_NORMAL_BITS... and with the s526 board, you need to use A4L_INSN_CONFIG_GPCT_QUADRATURE_ENCODER... > > 3. I also have s526 board. In the case of s526, is this function now worked > officially? The s526 driver is a port from the Comedi one (just like the NI PCI driver). We have tried to reuse as many features as possible: the original counter configuration method is present; so, you can have a look at the driver code in order to know which parameter to pass to configure it. * data[0]: Application Type => A4L_INSN_CONFIG_GPCT_QUADRATURE_ENCODER * data[1]: Counter Mode Register Value =>... * data[2]: Pre-load Register Value * data[3]: Conter Control Register Unfortunately, the problem you are highlighting is not a new one. On the mailing-list, I already had the opportunity to explain the main issue with counters in the following mail: https://mail.gna.org/public/xenomai-help/2010-03/msg00076.html Here is an extracted part of it: ... The most striking examples were in the configuration of the counting stuff. At least four comedi drivers manage gpct: the NI ones, s526, me4000 and vmk80xx. Each one has defined its one configuration instruction, in other words, its one interface. That means for me that a user application must be specific to a driver to work properly (in some cases, you must even give the registers values). Such a situation is, for me, not acceptable. Any acquisition user application should work with any acquisition driver and especially because of the acquisition framework. Starting from here, it is really difficult for me to find out what interface I should implement so as to satisfy all of them. ... Tackling this problem is interesting. It needs time and as many counting cards as possible. If you are interested, do not hesitate :) You can also give us an access to your hardware... > > > Thanks, > > Jonghyun Kim > > > On Mon, Aug 9, 2010 at 6:13 PM, Alexis Berlemont <[email protected] > > wrote: > > > Hi, > > > > Kim, Jonghyun (NIH/CC) [F] wrote: > > > OS : Debian 5.0.4 + Xenomai 2.5.2 > > > HW : NI PCI-6229 > > > > > > > > > Hi. > > > I have a question on the use of counter in NI PCI-6229 board. > > > > > > Thanks to analogy, I can use the functions of AI and AO using NI > > PCI-6229. > > > But, I failed to use its counter for quadratic encoder. > > > > > > I think it may work, but it is hard for me because I don't have any > > verified example. > > > > > > Recently, I tried the following code to set the counter up for quadratic > > encoder: > > > > > --------------------------------------------------------------------------------------------------- > > > a4l_desc_t dsc = {.sbdata = NULL }; > > > a4l_insn_t config; > > > unsigned int data[4]; > > > > > > a4l_open(&dsc, filename); > > > dsc.sbdata = malloc(dsc.sbsize); > > > a4l_fill_desc(&dsc); > > > > > > config.type = A4L_INSN_CONFIG; > > > config.idx_subd = 10; // this is correct. I checked it > > > data[0] = A4L_INSN_CONFIG_GPCT_QUADRATURE_ENCODER; > > > data[1] = 0; // X1, X2, X4 > > > data[2] = 0; // indexphase HH, LH, ... > > > data[3] = 0; // indexreset > > > config.data = data; > > > config.data_size = 4*sizeof(unsigned int); > > > > > > a4l_snd_insn(&dsc, &config); > > > > > ---------------------------------------------------------------------------------------------------- > > > > > > However, the last a4l_snd_insn() returned error code, -22. > > > > > > > Are you still using the subdevice index 10 ? How did you check that it > > was correct? With my NI6221 board, the GCPT counter seems to be > > located at index 11 and the subdevice index are static (unless there > > is a bug). > > > > # cat /proc/analogy/00-analogy_ni_pcimio > > -- Subdevices -- > > > > | idx | type > > | 00 | Analog input subdevice > > | 01 | Analog output subdevice > > | 02 | Digital input/output subdevice > > | 03 | Unused subdevice > > | 04 | Unused subdevice > > | 05 | Calibration subdevice > > | 06 | Memory subdevice > > | 07 | Digital input/output subdevice > > | 08 | Unused subdevice > > | 09 | Serial subdevice > > | 10 | Unused subdevice > > | 11 | Counter subdevice > > | 12 | Counter subdevice > > | 13 | Counter subdevice > > > > > > > > Could you give me the verified sample code for quadratic encoder using NI > > PCI-6229 board? > > > Or plz help me to use my encoder :( > > > > > > Many thanks in advance. > > > > > > Jonghyun > > > _______________________________________________ > > > Xenomai-help mailing list > > > [email protected] > > > https://mail.gna.org/listinfo/xenomai-help > > > > -- > > Alexis. > > -- Alexis. _______________________________________________ Xenomai-help mailing list [email protected] https://mail.gna.org/listinfo/xenomai-help
