gaving
Thanks for the reply, although I'm not sure I had communicated the problem effectively. What was confusing to me was that the 24 bits of dynamic range did not seem to map in any logical way into the 32 bit integer results I was getting. This was especially true when I examined the positive and negative rails. I finally came across an obscure post that explained it to me. Apparently, the 24 bits is shifted upward to use 31 bits, not 32 as I thought it might (and yes, it does appear to do the sign extension correctly, the 0xBXXX number was indeed negative). The board internally applies its calibration factors prior to the host reading the "raw" values, so you can actually read values that are in excess of your expected dynamic range. The reason they didn't shift the 24 bits up to 32 bits is to account for these small variations caused by the calibration which might otherwise cause it to overrange. The long and the short of it is, I can compute measured voltage at the input from the formula 20.0 * iVal/(2^31) where the 20. is the input range.
A note to NI, this could have been a little better documented, ya know?