09-16-2014 05:07 AM
Hello,
i am using MHDDK samples to access a PCI-6250 card.
The correction for offset and gain is always done in the function "aiPolynomialScaler", which returns a physical value. For my project however, I do not need a physical value. Instead, I need the raw 16-bit values from AI, corrected for offset and gain.
Unfortunately, the gain and offset data is located in the EEPROM as a floating point number, with no additional information in the documentation.
void aiGetScalingCoefficients (const u8 *eepromMemory, u32 intervalIdx, u32 modeIdx, u32 channel, tScalingCoefficients *scaling) { u32 calOffset = 0; calOffset = getCalibrationAreaOffset (eepromMemory); u32 modeOffset = calOffset + kAiModeBlockStart + (modeIdx*kAiModeBlockSize); tMode mode; mode.order = eepromMemory[modeOffset++]; mode.c[0] = getF32FromEeprom (eepromMemory, modeOffset); modeOffset += 4; mode.c[1] = getF32FromEeprom (eepromMemory, modeOffset); modeOffset += 4; mode.c[2] = getF32FromEeprom (eepromMemory, modeOffset); modeOffset += 4; mode.c[3] = getF32FromEeprom (eepromMemory, modeOffset); tInterval interval; u32 intervalOffset = calOffset + kAiIntervalBlockStart + (intervalIdx*kAiIntervalBlockSize); interval.gain = getF32FromEeprom (eepromMemory, intervalOffset); intervalOffset += 4; interval.offset = getF32FromEeprom (eepromMemory, intervalOffset); scaling->order = mode.order; for (u32 i=0; i <= mode.order; i++) { scaling->c[i] = mode.c[i] * interval.gain; if (i == 0) scaling->c[i] = scaling->c[i] + interval.offset; } return; }
How can I get the raw gain and offset values?
Or is there any other (easier) way to do this?
Best regards