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);//温度转换时间