555555 发表于 2007-1-16 15:48:25

如何改变DS18B20的分辨率!

默认设置是12位的,可是我想把它改成9位的,要改变配制寄存器中的R0、R1值,但不知道如何操作!请执教!

kimiyang 发表于 2007-1-16 16:36:33

我不知道怎的我的 18b20一直不发存在信号

atommann 发表于 2007-1-16 16:43:09

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



当然,他网站上还有很多很酷的东西。

avr521 发表于 2007-1-16 20:51:32

恩,也有同样问题!如何对1820的rom读写呢?比如我要改变其ROM的某位有个R0、R1,和楼主的情况一样,不知道用语句怎么写。DX指点!

atommann 发表于 2007-1-17 00:19:37

刚刚做了实验,Martin Thomas 的程序工作良好!

我把他的程序复制到 CodeVision 中,阅读了几个函数的实现,作了少量修改,工作正常。

lrzxc 发表于 2007-1-17 09:22:40

Martin Thomas 的好东西,做个记号先

jackygu 发表于 2007-3-3 09:40:34

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();

}

long-flying 发表于 2009-8-17 21:16:19

感谢楼上的提醒

long-flying 发表于 2009-8-17 21:16:21

感谢楼上的提醒

little_Monkey 发表于 2009-8-17 23:33:56

/*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中
}*/

woyaoaini102 发表于 2011-6-1 14:48:08

请问有人知道0.0625是怎么出来的吗?我知道是1/4的结果,可为什么是1/4呢?18B20是12位的,测量范围是—55度到125度,按说分辨率应该是180/4096(2的十二次方)啊?

willianlong 发表于 2011-6-23 11:31:24

回复【9楼】little Monkey
-----------------------------------------------------------------------

mark!

qqwwzzxx 发表于 2014-6-30 13:34:17

        t=b;
        t<<=8;
        t=t|a;
        tt=t*0.0625; //将温度的高位与低位合并
        t= tt*10+0.5; //对结果进行4舍5入
请问:分辨率改成9了,是不是上面的0.0625也要改成0.5?

刀锋硬汉 发表于 2015-5-14 21:25:42

little_Monkey 发表于 2009-8-17 23:33
/*void adjust_res(unsigned char res) ///res 分别等于 0x1f, 0x3f, 0x5f,0x7f温度读数分辨率分别对应
   ...

已经按照这个做了,可读出来的数据还是12位的

little_Monkey 发表于 2015-5-15 00:00:48

woyaoaini102 发表于 2011-6-1 14:48
请问有人知道0.0625是怎么出来的吗?我知道是1/4的结果,可为什么是1/4呢?18B20是12位的,测量范围是—55 ...

前面8位带符号的整数部分,后面四位数小数点部分,所以1/2^4=0.0625
页: [1]
查看完整版本: 如何改变DS18B20的分辨率!