Raskolin » 03 апр 2011, 23:22
В принципе все были правы. 1 проблема была с типами данных. После исправления стало норм считать температуру. 2 проблема с выводом этих данных. Изменил в конфигурации проекта printf features на "long, width" и использовал %ld. в итоге норм. Температуру показывает четко. Сейчас осталась только проблемка с давлением. при UP=39331 выдает давление 258784, что нереально. Завтра попробую пересчитать вручную. На всякий случай ниже пишу формулы расчета. Вдруг кто ошибку увидит.
nt32_t raschet_p(int16_t AC1,int16_t AC2,int16_t AC3,uint16_t AC4,uint16_t AC5,uint16_t AC6,int16_t B1,int16_t B2,int16_t MB,int16_t MC,int16_t MD,int32_t UT,int32_t UP)
{
int32_t X1,X2,B5,T,B6,X3,B3,P;
uint32_t B4,B7;
int8_t oss=3;
X1 = ((int32_t)UT - (int32_t)AC6) * (int32_t)AC5 >> 15;
X2 = ((int32_t)MC << 11) / (X1 + MD);
B5=X1+X2;
T=(B5+8)>>4;
znach_temp=T;
B6 = B5-4000;
X1 = (B2 * ((B6 * B6) >> 12)) >> 11;
X2 = (AC2 * B6) >> 11;
X3 = X1 + X2;
B3 = (((((int32_t) AC1) * 4 + X3)<<oss) + 2)>> 2;
X1 = (AC3 * B6) >> 13;
X2 = (B1 * ((B6 * B6) >> 12)) >> 16;
X3 = ((X1 + X2) + 2) >> 2;
B4 = (AC4 * (uint32_t) (X3 + 32768)) >> 15;
B7 = ((uint32_t) (UP - B3) * (50000 >> oss));
if (B7 < 0x80000000)
{
P = (B7 << 1) / B4;
}
else
{
P = (B7 / B4) << 1;
}
X1 = (P >> 8) * (P >> 8);
X1 = (X1 * 3038) >> 16;
X2 = (-7357 * P) >> 16;
P = P + ((X1 + X2 + 3791) >> 4);
return P;
}