Цитата(sensor_ua @ Sep 11 2008, 10:39)

Формула из DS, которую Вы вывернули в ...
при коде равном 0xFFFFFF даёт 5 В
Вы не правы.
При значении 0xFFFFFF получается не 5, а 0.5 . А теперь с этого места идем дальше... И не подгоняйте результат под "сочиненную" формулу.
Стр.22 из даташита AD7799:
Код
with a 2.5 V reference, the unipolar ranges are
from (0 mV to 19.53 mV) to (0 V to 2.5 V), and the bipolar
ranges are from ±19.53 mV to ±2.5 V.
Формулы для расчета входного напряжения:
Код
DATA OUTPUT CODING
When the ADC is configured for unipolar operation, the output
code is natural (straight) binary with a zero differential input
voltage resulting in a code of 00...00, a midscale voltage resulting
in a code of 100...000, and a full-scale input voltage resulting in
a code of 111...111. The output code for any analog input voltage
can be represented as
Code = (2^N × AIN × GAIN)/VREF
When the ADC is configured for bipolar operation, the output
code is offset binary, with a negative full-scale voltage resulting
in a code of 000...000, a zero differential input voltage resulting
in a code of 100...000, and a positive full-scale input voltage
resulting in a code of 111...111. The output code for any analog
input voltage can be represented as
Code = 2^(N – 1) × [(AIN × GAIN/VREF) + 1]
where:
AIN is the analog input voltage.
N = 16 for the AD7798, and N = 24 for the AD7799.
Я разбил ход мыслей на тезисы:
1) АЦП настроен на биполярный режим.
2) Коэффициент усиления АЦП = 16, при этом нет искажения сигнала. Сигнал (в кодах АЦП) меняется почти от 0x000000 до 0xFFFFFF . В спокойном состоянии код равен почти 0x800000.
3) При этом напряжение на входе АЦП (после ИУ) меняется от +2.5В-156мВ до +2.5В+156мВ. Это подтверждается измерением тестером и осциллографом.
4) Значение АЦП по формуле для
биполярного режима перевожу значение АЦП в напряжение в Вольтах с учетом коэффициента усиления ИУ = 5 по формуле
Код
#define Vref 2.51 // 2.5 V
#define GAIN_IA 5.0 // Gain of Instrumental Amplifier 5
#define STEPS_U 16777216.0 // Full-Scale 2^24 for unipolar operation
#define STEPS_B 8388608.0 // Full-Scale 2^(24-1) for bipolar operation
#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_B)
Vin(ValueADC.data[0])/(1<<AD7799_16_GAIN)
и вывожу полученное значение на ЖКИ. Это значение на ЖКИ меняется от -31мВ до +31мВ. Т.е. при создании давления 1PSI = 703мм.вод.ст. сигнал меняется по модулю 31мВ в зависимости от направления давления.
5) Значение напряжения в Вольтах перевожу в мм.вод.ст. по формуле:
Код
#define SPAN (0.015687*2) // Span (V) of Pressure Sensors = 1 psi
#define mm_H2O 703.05 // мм вод. ст. (@ 0 гр. C)
#define dPRESSURE(ain_value) ((ain_value)/SPAN*mm_H2O) // Динамическое давление, мм. вод. ст.
Это подтверждается выводом на ЖКИ - при создании максимального давления выводится по модулю значение 703 мм.вод.ст.
6) При создании давления аспиратором (компрессором) значения, например 300 (по моему прибору), другой "поверенный" прибор показывает в два раза больше, т.е. 600.
А теперь скажите, пожалуйста, в каком месте я не прав?