02-19-2009 08:24 AM
Hello,
Where can I find a manual for MHDDK ?
I would like to find :
I have to find those informations because I have to desing an API for NI card on a linux OS.
Can somebody help me ?
Thanks
02-19-2009 09:32 AM
Hi Stephanie-
There is no published manual for the MHDDK. The example code that ships with the MHDDK is intended to be self-documenting.
If you are interested in individual device information, you should look to the hardware manuals. In another post you mentioned these devices:
There is no published M Series manual for RLP information. However, the functionality of the M Series timing chip (STC-II) is very similar to the timing chip used on E Series (STC). You can find useful information in the STC manual for programming the M Series devices.
This manual contains information about the register set of the NI 6509 and a few other NI DIO devices.
There is no published manual for AO Series RLP information. There are only a few AO-specific registers for that device and basic functionality is shown in the MHDDK examples for 670x.
Please take some time to view the MHDDK. It provides programming examples that answer some of the questions you have about configuration and device operation. If you have any specific questions that the MHDDK does not answer, please post here and we will try to help answer them.
Thanks-
02-26-2009 10:12 AM
Hello,
Please can you explain me what do the 2 parts of example for a PCI-6713 and what can I change ?
//Call this function to program the buffer size and the number of buffers.
void AO_Counting(tSTC *theSTC)
{
//Loading counter values in DAQ-STC
theSTC->Joint_Reset.writeAO_Configuration_Start(1);
theSTC->AO_BC_Load_A.writeRegister((unsigned)(NumberOfBuffers-1));
theSTC->AO_Command_1.writeAO_BC_Load(1);
theSTC->AO_UC_Load_A.writeRegister((unsigned)(PointsPerBuffer));
theSTC->AO_Command_1.writeAO_UC_Load(1);
theSTC->AO_UC_Load_A.writeRegister((unsigned)(PointsPerBuffer-1));
theSTC->Joint_Reset.setAO_Configuration_Start(0);
theSTC->Joint_Reset.setAO_Configuration_End(1);
theSTC->Joint_Reset.flush();
}
//Call this function to program the update interval.
void AO_Updating(tSTC *theSTC)
{
//Program the update interval.
theSTC->Joint_Reset.writeAO_Configuration_Start(1);
theSTC->AO_Command_2.writeAO_BC_Gate_Enable(0);
theSTC->AO_UI_Load_A.writeRegister(0x00000001);
theSTC->AO_Command_1.writeAO_UI_Load(1);
theSTC->AO_UI_Load_A.writeRegister(0x00001999);
theSTC->Joint_Reset.setAO_Configuration_Start(0);
theSTC->Joint_Reset.setAO_Configuration_End(1);
theSTC->Joint_Reset.flush();
return;
}
I search what is the parameters to change the frequency of my signal.
Thank you
02-26-2009 02:57 PM
Hi Stephanie-
The functionality of those registers is described in the STC Technical Reference Manual.
02-27-2009 02:44 AM
Thank you veru much !
Do you have such manual for the card 6713, 6601, 6512, 6511, 6221, 6220, 6703, 6509 ?
02-27-2009 07:51 AM
Hi Stephanie-
The NI 660x devices have an RLP manual, here. The rest of the devices you mention are discussed in my comments earlier in this thread.
02-27-2009 08:14 AM
03-02-2009 09:10 AM
03-17-2009 05:54 AM
03-17-2009 09:02 AM
Hi Stephanie-
The AO_UI counter is used to divide down a timebase and create the update clock signal for AO. The default timebase is 20MHz. So, if you load some value into AO_UI, the resulting update clock is 20MHz / AO_UI_Loadx. If you want an update clock rate of 100Hz, for example, you should choose 20MHz / (200k - 1) because the counter is zero indexed.
The actual frequency output of your signal will then depend on the data you pack into the AO FIFO. Let's say you desire to generate a sine wave of 10Hz. If your update clock rate is 100Hz, then you need to place a 10 sample array representing a sine wave in the AO FIFO. In this way, 100 points from the AO FIFO will be cycled through each second. Because there are 10 samples in each sine period in your AO FIFO set, you will end up with 10 completed sine cycles per second.
Without knowing more about your data set I can't comment on why your frequency if varying in a seemingly unexpected way. Perhaps you are seeing some aliasing in your measurement instrument(?)
In addition to setting the AOWaveformGeneration register to your specified numChannel, you also need to set AOTimed to indicate your channel(s) to use and AOConfiguration to set up various options for the same channel(s). Check out the function Configure_Board() from the 67xx MHDDK examples. Note that the order you specify channels in AOWaveformGeneration.writeDacnum() must match the ordering in which you place samples to be generated in the AO FIFO.