MPL3115A2 temperature conversion

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

MPL3115A2 temperature conversion

2,009 次查看
lukaszprzeniosl
Contributor II

Hello there,

I am having a problem with understanding how to convert the the MPL3115A2 temperature readings exactly (OUT_T_MSB, OUT_T_LSB). Please consider this function:

inline static float rawTemperature2Float(const uint8_t* const rt)
{
    return ((float)((int8_t)rt[0])) + (((rt[1] >> 4) & 0x0F) * 0.0625f);
}

rt[0] = OUT_T_MSB and rt[1] = OUT_T_LSB.

The question is: Does the sign bit in MSB also determinate how should the fractional part be treated, or is it always positive? In the presented function I am always adding the fractional part. But maybe if the sign is negative, I should substract it (or multiply by -1)? Should the function look like this?

inline static float rawTemperature2Float(const uint8_t* const rt)
{
    float frac = ((rt[1] >> 4) & 0x0F) * 0.0625f;

    if (rt[0] & 0x80)

    {
        frac *= -1; // variant #1

        //frac = (1.0f - frac) * -1; // variant #2

     }

    return ((float)((int8_t)rt[0])) + frac;
}

If so, which variant in the if?

This approach gives similar results (all bits threaded for twos complement conversion):

inline static float rawTemperature2Float(const uint8_t* const rt)
{   
    int32_t temp = (((int32_t)rt[0]) << 4) | (rt[1] >> 4);
    if (temp & 0x800)
        temp = (0x1000 - temp) * -1;

    return ((float)(temp)) / 16.0f;
}

I would appreciate all help.

标签 (1)
标记 (1)
2 回复数

1,893 次查看
TomasVaverka
NXP TechSupport
NXP TechSupport

Hello Lukasz,

I do apologize for my delayed response, but I was on a business trip last week with a limited time to react on community questions.

In my code I use the following formula:

Temperature = (float) ((short)((RawData[3] << 8) | (RawData[4] & 0xF0)) >> 4) * 0.0625;

 

You need to get -0.0625 for RawData[3] = OUT_T_MSB = FF and RawData[4] = OUT_T_LSB = F0.

I will retest it again tomorrow when I am back in the office, but if I remember well, I really got -0.0625 for 0xFFF0.

Best regards,

Tomas

PS: If this answer helps to solve your question, please mark it as "Correct" or “Helpful”. Thank you.

1,893 次查看
lukaszprzeniosl
Contributor II

Hello Tomas, thank you for answer.

Code-wise, your method is the same as my last one, which I found working. But yours is optimized better. Thank you for help, now everything is clear.

0 项奖励
%3CLINGO-SUB%20id%3D%22lingo-sub-853523%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EMPL3115A2%20%E6%B8%A9%E5%BA%A6%E8%BD%AC%E6%8D%A2%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-853523%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3Dutf-8%22%20%2F%26gt%3B%0A%3CP%3E%E4%BD%A0%E4%BB%AC%E5%A5%BD%3C%2FP%3E%3CP%3E%E6%88%91%E5%9C%A8%E7%90%86%E8%A7%A3%E5%A6%82%E4%BD%95%E5%87%86%E7%A1%AE%E8%BD%AC%E6%8D%A2%20MPL3115A2%20%E6%B8%A9%E5%BA%A6%E8%AF%BB%E6%95%B0%EF%BC%88OUT_T_MSB%E3%80%81OUT_T_LSB%EF%BC%89%E6%97%B6%E9%81%87%E5%88%B0%E4%BA%86%E9%97%AE%E9%A2%98%E3%80%82%E8%AF%B7%E8%80%83%E8%99%91%E8%BF%99%E4%B8%80%E5%8A%9F%E8%83%BD%EF%BC%9A%3C%2FP%3E%3CBLOCKQUOTE%20class%3D%22jive_macro_quote%20jive-quote%20jive_text_macro%22%3E%3CP%3Einline%20static%20float%20rawTemperature2Float(const%20uint8_t*%20const%20rt)%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20return%20((float)((int8_t)rt%5B0%5D))%2B%20(((rt%5B1%5D%26gt%3B%26gt%3B%204)%26amp%3B%200x0F)%20*%200.0625f)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3C%2FBLOCKQUOTE%3E%3CP%3Ert%5B0%5D%20%3D%20OUT_T_MSB%EF%BC%8Crt%5B1%5D%20%3D%20OUT_T_LSB%E3%80%82%3C%2FP%3E%3CP%3E%E9%97%AE%E9%A2%98%E6%98%AFMSB%20%E4%B8%AD%E7%9A%84%E7%AC%A6%E5%8F%B7%E4%BD%8D%E6%98%AF%E5%90%A6%E4%B9%9F%E8%83%BD%E5%86%B3%E5%AE%9A%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E5%B0%8F%E6%95%B0%E9%83%A8%E5%88%86%EF%BC%8C%E8%BF%98%E6%98%AF%E6%80%BB%E6%98%AF%E6%AD%A3%E6%95%B0%EF%BC%9F%E5%9C%A8%E6%89%80%E5%91%88%E7%8E%B0%E7%9A%84%E5%87%BD%E6%95%B0%E4%B8%AD%EF%BC%8C%E6%88%91%E6%80%BB%E6%98%AF%E5%9C%A8%E6%B7%BB%E5%8A%A0%E5%B0%8F%E6%95%B0%E9%83%A8%E5%88%86%E3%80%82%E4%BD%86%E5%A6%82%E6%9E%9C%E7%AC%A6%E5%8F%B7%E6%98%AF%E8%B4%9F%E6%95%B0%EF%BC%8C%E4%B9%9F%E8%AE%B8%E6%88%91%E5%BA%94%E8%AF%A5%E5%B0%86%E5%85%B6%E5%87%8F%E5%8E%BB%EF%BC%88%E6%88%96%E4%B9%98%E4%BB%A5-1%EF%BC%89%EF%BC%9F%E5%87%BD%E6%95%B0%E5%BA%94%E8%AF%A5%E6%98%AF%E8%BF%99%E6%A0%B7%E7%9A%84%E5%90%97%EF%BC%9F%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CBLOCKQUOTE%20class%3D%22jive_macro_quote%20jive-quote%20jive_text_macro%22%3E%3CP%3Einline%20static%20float%20rawTemperature2Float(const%20uint8_t*%20const%20rt)%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20float%20frac%20%3D%20((rt%5B1%5D%26gt%3B%26gt%3B%204)%26amp%3B%200x0F)%20*%200.0625f%EF%BC%9B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%20%20%20%20%E5%A6%82%E6%9E%9C%EF%BC%88rt%5B0%5D%26amp%3B%200x80%EF%BC%89%3C%2FP%3E%3CP%3E%20%20%20%20%7B%3CBR%20%2F%3E%20frac%20*%3D%20-1%3B%20%2F%2F%20%E5%8F%98%E4%BD%93%20%231%3C%2FP%3E%3CP%3E%20%20%20%20%20%20%20%20%2F%2Ffrac%20%3D%20(1.0f%20-%20frac)%20*%20-1%3B%20%2F%2F%20%E5%8F%98%E5%BC%8F%20%232%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%7D%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%20%20%20%20return%20((float)((int8_t)rt%5B0%5D))%2B%20frac%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3C%2FBLOCKQUOTE%3E%3CP%3E%E5%A6%82%E6%9E%9C%E6%98%AF%EF%BC%8C%E6%98%AF%20%22%E5%A6%82%E6%9E%9C%20%22%E4%B8%AD%E7%9A%84%E5%93%AA%E4%B8%AA%E5%8F%98%E9%87%8F%EF%BC%9F%3C%2FP%3E%3CP%3E%E8%BF%99%E7%A7%8D%E6%96%B9%E6%B3%95%E4%B9%9F%E8%83%BD%E5%BE%97%E5%88%B0%E7%B1%BB%E4%BC%BC%E7%9A%84%E7%BB%93%E6%9E%9C%EF%BC%88%E6%89%80%E6%9C%89%E6%AF%94%E7%89%B9%E9%83%BD%E9%80%9A%E8%BF%87%E7%BA%BF%E7%A8%8B%E8%BF%9B%E8%A1%8C%E4%BA%8C%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2%EF%BC%89%EF%BC%9A%3C%2FP%3E%3CBLOCKQUOTE%20class%3D%22jive_macro_quote%20jive-quote%20jive_text_macro%22%3E%3CP%3Einline%20static%20float%20rawTemperature2Float(const%20uint8_t*%20const%20rt)%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20int32_t%20temp%20%3D%20(((int32_t)rt%5B0%5D)%26lt%3B%26lt%3B%204)%7C%20(rt%5B1%5D%26gt%3B%26gt%3B%204)%3B%3CBR%20%2F%3E%20if%20(temp%26amp%3B%200x800)%3CBR%20%2F%3E%20temp%20%3D%20(0x1000%20-%20temp)%20*%20-1%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%20return%20((float)(temp))%2F%2016.0f%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3C%2FBLOCKQUOTE%3E%3CP%3E%E6%88%91%E5%B0%86%E6%84%9F%E6%BF%80%E6%89%80%E6%9C%89%E7%9A%84%E5%B8%AE%E5%8A%A9%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-853523%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3E%E5%8E%8B%E5%8A%9B%E4%BC%A0%E6%84%9F%E5%99%A8%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-853525%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MPL3115A2%20temperature%20conversion%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-853525%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3Dutf-8%22%20%2F%26gt%3B%0A%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%89%98%E9%A9%AC%E6%96%AF%EF%BC%8C%E8%B0%A2%E8%B0%A2%E4%BD%A0%E7%9A%84%E5%9B%9E%E7%AD%94%E3%80%82%20%3C%2FP%3E%3CP%3E%E4%BB%8E%E4%BB%A3%E7%A0%81%E4%B8%8A%E7%9C%8B%EF%BC%8C%E4%BD%A0%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%88%91%E4%B8%8A%E4%B8%80%E4%B8%AA%E6%96%B9%E6%B3%95%E6%98%AF%E4%B8%80%E6%A0%B7%E7%9A%84%EF%BC%8C%E6%88%91%E5%8F%91%E7%8E%B0%E8%BF%99%E4%B8%AA%E6%96%B9%E6%B3%95%E4%B9%9F%E8%A1%8C%E5%BE%97%E9%80%9A%E3%80%82%E4%BD%86%E4%BD%A0%E7%9A%84%E4%BC%98%E5%8C%96%E6%95%88%E6%9E%9C%E6%9B%B4%E5%A5%BD%E3%80%82%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%B8%AE%E5%8A%A9%EF%BC%8C%E7%8E%B0%E5%9C%A8%E4%B8%80%E5%88%87%E9%83%BD%E6%B8%85%E6%A5%9A%E4%BA%86%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-853524%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20MPL3115A2%20temperature%20conversion%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-853524%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3Dutf-8%22%20%2F%26gt%3B%0A%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E5%8D%A2%E5%8D%A1%E6%96%AF%E3%80%81%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%E6%88%91%E5%AF%B9%E5%BB%B6%E8%BF%9F%E5%9B%9E%E5%A4%8D%E8%A1%A8%E7%A4%BA%E6%AD%89%E6%84%8F%EF%BC%8C%E4%BD%86%E6%88%91%E4%B8%8A%E5%91%A8%E5%87%BA%E5%B7%AE%E4%BA%86%EF%BC%8C%E5%AF%B9%E7%A4%BE%E5%8C%BA%E9%97%AE%E9%A2%98%E5%81%9A%E5%87%BA%E5%8F%8D%E5%BA%94%E7%9A%84%E6%97%B6%E9%97%B4%E6%9C%89%E9%99%90%E3%80%82%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%E5%9C%A8%E6%88%91%E7%9A%84%E4%BB%A3%E7%A0%81%E4%B8%AD%EF%BC%8C%E6%88%91%E4%BD%BF%E7%94%A8%E4%BA%86%E4%BB%A5%E4%B8%8B%E5%85%AC%E5%BC%8F%EF%BC%9A%3C%2FP%3E%3CP%20style%3D%22color%3A%20%2351626f%3B%20background-color%3A%20%23ffffff%3B%20border%3A%200px%3B%22%3E%3CSPAN%20style%3D%22color%3A%20black%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E%E6%B8%A9%E5%BA%A6%20%3D%20(%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E%3CSTRONG%20style%3D%22border%3A%200px%3B%20font-weight%3A%20bold%3B%20font-size%3A%2013.3333px%3B%22%3E%E6%B5%AE%E7%82%B9%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20black%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E)%20((%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20%237f0055%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E%3CSTRONG%20style%3D%22border%3A%200px%3B%20font-weight%3A%20bold%3B%20font-size%3A%2013.3333px%3B%22%3E%E7%9F%AD%3C%2FSTRONG%3E%3C%2FSPAN%3E%3CSPAN%20style%3D%22color%3A%20black%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E)((RawData%5B3%5D%26lt%3B%26lt%3B%20%3CLI-EMOJI%20id%3D%22lia_smiling-face-with-sunglasses%22%20title%3D%22%3Asmiling_face_with_sunglasses%3A%22%3E%3C%2FLI-EMOJI%3E%20%7C%20(RawData%5B4%5D%26amp%3B%200xF0))%26gt%3B%26gt%3B%204)%20*%200.0625%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CP%20style%3D%22color%3A%20%2351626f%3B%20background-color%3A%20%23ffffff%3B%20border%3A%200px%3B%22%3E%3CSPAN%20style%3D%22color%3A%20black%3B%20border%3A%200px%3B%20font-weight%3A%20inherit%3B%20font-size%3A%2010pt%3B%22%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%E6%82%A8%E9%9C%80%E8%A6%81%E5%9C%A8%20RawData%5B3%5D%20%3D%20OUT_T_MSB%20%3D%20FF%20%E5%92%8C%20RawData%5B4%5D%20%3D%20OUT_T_LSB%20%3D%20F0%20%E6%97%B6%E8%8E%B7%E5%BE%97%20-0.0625%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E6%98%8E%E5%A4%A9%E5%9B%9E%E5%8A%9E%E5%85%AC%E5%AE%A4%E5%90%8E%E5%86%8D%E9%87%8D%E6%96%B0%E6%B5%8B%E8%AF%95%E4%B8%80%E6%AC%A1%EF%BC%8C%E4%BD%86%E5%A6%82%E6%9E%9C%E6%88%91%E6%B2%A1%E8%AE%B0%E9%94%99%E7%9A%84%E8%AF%9D%EF%BC%8C0xFFF0%20%E7%9A%84%E7%BB%93%E6%9E%9C%E7%A1%AE%E5%AE%9E%E6%98%AF%20-0.0625%E3%80%82%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%3CP%3E%E6%89%98%E9%A9%AC%E6%96%AF%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CEM%20style%3D%22border%3A%201pt%20none%20windowtext%3B%20font-weight%3A%20inherit%3B%20font-size%3A%209pt%3B%20padding%3A%200in%3B%22%3EPS%EF%BC%9A%E5%A6%82%E6%9E%9C%E6%AD%A4%E7%AD%94%E6%A1%88%E6%9C%89%E5%8A%A9%E4%BA%8E%E8%A7%A3%E5%86%B3%E6%82%A8%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E8%AF%B7%E6%A0%87%E8%AE%B0%E4%B8%BA%22%E6%AD%A3%E7%A1%AE%22%20%E6%88%96%20%22%E6%9C%89%E5%B8%AE%E5%8A%A9%22%E3%80%82%E8%B0%A2%E8%B0%A2%E3%80%82%3C%2FEM%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E