如何改变DS18B20的分辨率!
默认设置是12位的,可是我想把它改成9位的,要改变配制寄存器中的R0、R1值,但不知道如何操作!请执教! 我不知道怎的我的 18b20一直不发存在信号 DS18B20 也让我很烦恼,如果你用 CodeVision AVR 的话,他自带的库函数可以对 DS18B20 进行操作。如果不用 CodeVision AVR ,ouravr 也有很多实例,特别是花溅泪的例子,链接如下:
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=444555&bbs_page_no=1&sub_kind_id=1165&bbs_id=1000
德国人 Martin Thomas 的网上有个例子,写得很详细并且全面,可以参考,链接如下:
http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html
当然,他网站上还有很多很酷的东西。 恩,也有同样问题!如何对1820的rom读写呢?比如我要改变其ROM的某位有个R0、R1,和楼主的情况一样,不知道用语句怎么写。DX指点! 刚刚做了实验,Martin Thomas 的程序工作良好!
我把他的程序复制到 CodeVision 中,阅读了几个函数的实现,作了少量修改,工作正常。 Martin Thomas 的好东西,做个记号先 void adjust_temp(unsigned char res) ///res 分别等于0x1F、0x3F、0x5F、0x7F代表温度分辨率为
// 0.5°C、 0.25°C、0.125°C、0.0625°C
{
unsigned char i;
i=resetDS18B20();
while(i==0x00);
writeByteDS18B20(0xCC);//跳过Rom
writeByteDS18B20(0x4E);//写暂存器
writeByteDS18B20(0x70);//写TH
writeByteDS18B20(0x01);//写TL
//writeByteDS18B20(0x7f);//写结构寄存器
writeByteDS18B20(res);
i=resetDS18B20();
while(i==0x00);
writeByteDS18B20(0xCC); //跳过Rom
writeByteDS18B20(0x48); //把暂存器内容写到EEPRAM中
resetDS18B20();
} 感谢楼上的提醒 感谢楼上的提醒 /*void adjust_res(unsigned char res) ///res 分别等于 0x1f, 0x3f, 0x5f,0x7f温度读数分辨率分别对应
// 0.5, 0.25, 0.125,0.0625
{
DS18B20_reset(); //复位
DS18B20_write_byte(0xcc); //跳过Rom
DS18B20_write_byte(0x4e); //写暂存器
DS18B20_write_byte(0x02); //写TH
DS18B20_write_byte(0x01); //写TL
DS18B20_write_byte(res); //写结构寄存器
DS18B20_reset(); //复位
DS18B20_write_byte(0xcc); //跳过Rom
DS18B20_write_byte(0x48); //把暂存器内容写到EPRam中
}*/ 请问有人知道0.0625是怎么出来的吗?我知道是1/4的结果,可为什么是1/4呢?18B20是12位的,测量范围是—55度到125度,按说分辨率应该是180/4096(2的十二次方)啊? 回复【9楼】little Monkey
-----------------------------------------------------------------------
mark! t=b;
t<<=8;
t=t|a;
tt=t*0.0625; //将温度的高位与低位合并
t= tt*10+0.5; //对结果进行4舍5入
请问:分辨率改成9了,是不是上面的0.0625也要改成0.5? little_Monkey 发表于 2009-8-17 23:33
/*void adjust_res(unsigned char res) ///res 分别等于 0x1f, 0x3f, 0x5f,0x7f温度读数分辨率分别对应
...
已经按照这个做了,可读出来的数据还是12位的 woyaoaini102 发表于 2011-6-1 14:48
请问有人知道0.0625是怎么出来的吗?我知道是1/4的结果,可为什么是1/4呢?18B20是12位的,测量范围是—55 ...
前面8位带符号的整数部分,后面四位数小数点部分,所以1/2^4=0.0625
页:
[1]