RW1820兼容DS18B20温度传感器,发个stc15w408的c51测试程序供参考
本帖最后由 wkman 于 2016-12-26 16:45 编辑有些项目简单一直用ds18b20系列的温度传感器。不过做为唯一器件,有时候还是要担心缺货的风险的。
幸好国产的ic不断做出了填补,希望越来越多的兼容器件出现,造福广大电工,{:titter:} {:victory:}
最近找到个号称兼容DS18B20的温度传感器ic,测试了下还可以,硬件算是兼容的,由于缩短的读写时隙的时间,
是不能直接用在原先的老电路板上,必须更新程序。//stc15w408as_IRC_11.0592Mhz测试{:lol:}
最快80ms读一次(12位分辨率下),程序只有读温度功能,其它功能暂时用不上,需要的改改ds18的也差不多{:sweat:} 。
有需要的上tb自己找吧。{:handshake:} //******************************************************************
//RW18b20读写函数
//------------------------------------------------------------------
//stc15w408as_IRC_11.0592Mhz测试
//****************************************************************
//延时函数!!!延时根据不同Crystal和不同mcu要调整!!!
//----------------------------------------------------------------
void delay18(unsigned int count)
{
unsigned char i;
while(count--)
{
for(i=0;i<3;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_(); //延长延时时间,现在旧探头也能用了!!!
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_(); //再增加延时时间,避免长线出现断数据问题!
_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
}
//i=24=>2us
void delay_1us(unsigned int i)//us级延时
{
while(i--) ;//精确延时
}
//******************************************************************
//第二个温度探头
//------------------------------------------------------------------
Init_DS18B20_1(void)//复位(通讯)
{
unsigned char x=0;
DQ = 1; //端口I/O先拉高,准备复位
delay18(4); //80us
DQ = 0; //通讯复位低电平
delay18(28);//(28)=550us时隙
//(30)=590us
DQ=1;//加此句后,0xcc和0x44发送数据命令正确!!! //DQ==1表示释放总线???
x=DQ; //如果x=0:则初始化成功;
//if(x==) //如果x=1: 失败;
delay18(15);//补偿
}
//写字节
WriteOneChar_1(unsigned char my_dat)//写一个字节
{
unsigned char i=0;
unsigned char j=0;
//0xcc=>204=>0b_1100_1100
//==>写入的第一位数据,LSB应该是“0”值啊,示波器看到“1”值??????
EA=0;
for (i=8; i>0; i--) //先写LSB低位,最后MSB
{
DQ = 0; //写0
delay_1us(2); //就算要写“1”也得先发一个2.5us以上的L电平
//(1)=4~5us;(2)=8us;
DQ = my_dat & 0x01;//写1
//---------------------------------
delay18(3); //读写时隙78us(5T)
//--------------------------------- //5T+
DQ = 1; //强制为1恢复Trec //恢复至少3us间隙,是由主机发出1高电平么??????
delay_1us(2); //(3)=7us间隔恢复时间
my_dat >>= 1; //写数据右移一bit,最后第8次是MSB写入
}
EA=1;
}
//读字节
ReadOneChar_1(void)//读一个字节
{
unsigned char i=0;
unsigned char my_dat = 0;
EA=0;
DQ=1; //释放总线 //有无以下两句指令,无影响
delay18(2); //延时
//---------------------------------
for(i=8;i>0;i--) //先读LSB低位,最后MSB
{
my_dat >>= 1; //数据移1位 //读到的LSB数据向右移位,这样8次以后,最后读到的MSB在最高位
DQ = 0; //主机拉低总线 //按pdf_P27页要求,至少保持>3us低电平,后,主机要"释放总线"
//---------------------------------
delay_1us(1); //保持20us //在1T位置,做采样时间点
DQ=1; //释放总线 //zxy若无此两句,温度永远显示为0值,即,主机没有释放总线!!!
delay_1us(3); //延时10us左右 //何云成:疑问???
if( DQ ) //==1 //采样!!!
my_dat |= 0x80;
delay18(3); //读写时隙78us //保持4T,读时隙宽度
//---------------------------------
DQ=1; //5T以后,强制1电平 //T_rec>3us满足此条件!!!
delay_1us(2); //(2)=8us维持,以便下一bit读取
}
EA=1;
return(my_dat);
}
ReadTemperature_1(void)//读取RW1820温度值
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
long int tt=0;
//Delay(85); //等待80ms???再读温度==》没有任何改善???
//while(DQ==0); //用此条件判读,亦无改善!!!
//---------------------------------
Init_DS18B20_1(); //复位
WriteOneChar_1(0xCC); //跳过ROM
WriteOneChar_1(0xBE); //读暂存器
a=ReadOneChar_1(); //L(温度值)
b=ReadOneChar_1(); //H //后面值不需要了
//---------------------------------
Init_DS18B20_1(); //复位
WriteOneChar_1(0xCC); //Skip ROM 跳过 //0xcc=>204=>0b_1100_1100
WriteOneChar_1(0x44); //C-T启动温度转换
//Delay(250);//延时250us //何云成:疑问??? //zxy:不必要,因为读上一次温度就可以了
//---------------------------------
t=b;
t<<=8;
t=t|a;
//tt=t*0.0625*10;
tt=t*0.625;
t=tt;
return(t);
}
{:shocked:} 时序要求严格的,所以建议贴一下对应晶振,机器周期,main().. node720 发表于 2016-12-28 10:29
时序要求严格的,所以建议贴一下对应晶振,机器周期,main()..
源程序头上就写了://stc15w408as_IRC_11.0592Mhz测试{:titter:}1-wire总线,就是这样的,晶振频率不同,就得仔细调整,{:lol:}
留存备用,谢谢分享! 这个和DS18B20相比,时序不同吗? javenreal 发表于 2016-12-28 10:41
这个和DS18B20相比,时序不同吗?
时序缩短了;{:titter:} 都是1-wire的思路,基本相同, 查了一下,RW1820号称是美国的,自称比DS18B20更强。 看功能介绍,确实比DS18B20多了一些功能。 到底是国产的还是美国的? 好,果断代售。没人下手我就先下手啦 谢谢楼主,先做个记号 谢谢楼主分享,找了一下,看到RW1820A+ 好像精度更高 有官网吗? 这个IC多少银子? 这颗 价格 是什么情况?比DS18B20便宜?
zljcat3721 发表于 2016-12-28 18:31
谢谢楼主分享,找了一下,看到RW1820A+ 好像精度更高
只在很小的温度段内0.1度精度,没啥特别意义{:sweat:} ayumi8 发表于 2016-12-28 20:11
这颗 价格 是什么情况?比DS18B20便宜?
{:titter:}价格嘛,上量了可以自己去砍价,肯定比ds18b20便宜很多 javenreal 发表于 2016-12-28 14:23
查了一下,RW1820号称是美国的,自称比DS18B20更强。 看功能介绍,确实比DS18B20多了一些功能。 到底是国产 ...
应该是国产的,,,{:lol:} HZKJ 发表于 2016-12-28 17:42
好,果断代售。没人下手我就先下手啦
月关,早有此想法,,,不过,,,,,{:titter:}
页:
[1]