MY18E20 MY1820 MY18B20Z MY18B20L替代DS18B20时常见问题解答

首页    MY18E20 MY1820 MY18B20Z MY18B20L替代DS18B20时常见问题解答

 

敏源单总线数字温度芯片MY18E20、MY1820、MY18B20Z、MY18B20L仅封装不同,其他特性均一致,以下以MY18E20为例进行问题解答。

 

原DS18B20用户,直接P2P使用MY18E20时,默认程序不用更改。遇到如下问题时,需要特别关注。

 

1、为什么测得的功耗比DS18B20高/MY18E20如何进入睡眠模式?

 

如下表所示,MY18E20的功耗要比DS18B20低很多。如果遇到功耗高的情况,很可能MY18E20并未进入低功耗工作模式。

 

MY18E20

DS18B20

工作电流

0.3mA

1.5mA

待机电流

0.2µA

0.75µA

平均电流

15毫秒测温:5µA@5V,1Hz

500毫秒测温:56µA@5V,1Hz

750µA

 

DS18B20读完两个字节即可进入低功耗模式,而MY18E20必须全部读完9个字节才可进入睡眠模式,即需把Scratchpad寄存器的9个字节全部读完。

 

读取函数按如下进行修改:

 

bool ReadTempWaiting_SkipRom(uint16_t *iTemp)

{

uint8_t scrb[sizeof(MY18E20_SCRATCHPAD_READ)];

MY18E20_SCRATCHPAD_READ *scr = (MY18E20_SCRATCHPAD_READ *) scrb;

/*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/

if(MY18E20_ReadScratchpad_SkipRom(scrb) == FALSE)

{

return FALSE;  /*读寄存器失败*/

}

/*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/

    if(scrb[8] != MY_OW_CRC8(scrb, 8))

    {

return FALSE;  /*CRC验证未通过*/

    }

/*将温度测量结果的两个字节合成为16位字。*/

*iTemp=(uint16_t)scr->T_msb<<8 | scr->T_lsb;

    return TRUE;

}

 

2、当MY18E20需要使用内置14bit ADC时,配置函数如何修改?

 

当MY18E20需要使用内置14bit ADC时,配置函数按如下进行修改:

 

uint8_t trim14=0x01;

boolWriteV3ttrim(uint8_t trim14)

{

uint8_t scrb[sizeof(MY18E20_SCRPARAMETERS)];

MY18E20_SCRPARAMETERS *scr = (MY18E20_SCRPARAMETERS *) scrb;

/*读9个字节。第7字节是系统配置寄存器,第8字节是系统状态寄存器。最后字节是前8个的校验和--CRC。*/

if(MY18E20_ReadParameterV3_SkipRom(scrb) == FALSE)

{

return FALSE;  /*CRC验证未通过*/

}

/*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/

if(scrb[8] !=0xA5)// MY_OW_CRC8(scrb, 8))

{

return FALSE;  /*CRC验证未通过*/

  }

scr->ttrim|= trim14;

  MY18E20_WriteParameters_SkipRom(scrb, i)

return TRUE;

}

 

bool MY18E20_ReadParameterV3_SkipRom(uint8_t *scr)

{

  int16_t a;

  uint8_t j;

/*size < sizeof(MY18E20_SCRATCHPAD_READ)*/

  if(OW_ResetPresence() == FALSE)

return FALSE;

  OW_WriteByte(SKIP_ROM);

  OW_WriteByte(READ_PARAMETERS);

for(a=0; a <9; a++)

  {

*scr++ = OW_ReadByte();

}

  return TRUE;

}

 

bool MY18E20_WriteParameters_SkipRom(uint8_t *scr)

{

int16_t a;

uint8_t j;

if(OW_ResetPresence() == FALSE)

return FALSE;

  OW_WriteByte(SKIP_ROM);

  OW_WriteByte(WRITE_PARAMETERS);

for(a=0; a < sizeof(MY18E20_SCRPARAMETERS); a++)

  {

OW_WriteByte(*scr++);

}

  return TRUE;

 

3、使用MY18E20-15版本,程序上如何修改?

 

当用户希望功耗更低时,可以使用MY18E20-15版本,温度转换时间为15ms快速测温模式。程序上做如下修改:

 

ConvertTemp();//测温指令

Delay_ms(15);//温度转换时间

 

 

2022年12月16日 17:35
浏览量:0
收藏