搜索
bottom↓
回复: 80

尽管很基础---DS18B20彻底应用,送给需要的人

[复制链接]

出0入0汤圆

发表于 2008-7-22 22:57:07 | 显示全部楼层 |阅读模式
这个实验的目的就是要通过MEGA128把DS18B20里面能读的东西都读出来,然后通过UART0发出去送给电脑显示,而不是简单的显示一个33度就了事,程序是用CV写的,UART0的发送程序是CV自动生成的,很方便,DS18B20的程序也是在论坛的基础上改的


(原文件名:1.JPG)
这是我的"实验平台",万用板焊的,很寒酸,但很适合我用,手机拍的,不是很清楚

(原文件名:2.JPG)
简单解释一下:
1.the ds18b20 id is 28-C6-9-16-1-0-0-5A
这个是DS18B20的ID,0x28代表它是DS18B20,如果你读出来不是0x28,说明DS18B20是坏的,或着程序电路有问题,C6-9-16-1-0-0是DS18B20的自身的序列号,每个DS18B20都是不一样的,5A是前面56位的循环冗余校验码(CRC=X8+X5+X4+1),详细的内容请看datasheet
2.the temperature lsb is--fb
  the temperature msb is--1
lsb 是温度值的低8位,msb是温度值的高8位,msb的高5位是符号位,如果是0,表示温度>0,是1表示温度<0,详细的内容请看datasheet

3.the th is--4b
  the tl is--46
  这个是高低温报警值,可由自己设定,详细的内容请看datasheet

4.the config is--7f
  配置寄存器的内容,这个每个DS18B20读出来的内容都是一样的,具体的内容请看datasheet
5.the reserved is--ff 1 10
保留位,没必要研究,具体的内容请看datasheet
6.the crc is--a1
  CRC校验值,具体的内容请看datasheet
7.the real temperature is 31.6875c
实际温度值,最高精度显示,把0x1fb转成10进制,再乘上0.0625,就等于31.6875,具体的内容请看datasheet

程序在2楼

出0入0汤圆

 楼主| 发表于 2008-7-22 23:00:51 | 显示全部楼层
请教2个问题   1:温度报警功能怎么用
              2:the ds18b20 id is 28-C6-9-16-1-0-0-5A中的5A是根据 CRC=X8+X5+X4+1算出来的,但具体是怎么算的,有人愿意详细的说明一下吗,谢谢

出0入0汤圆

 楼主| 发表于 2008-7-22 23:02:03 | 显示全部楼层
程序:点击此处下载 ourdev_355590.rar(文件大小:72K) (原文件名:m128+2 ds1820+uart display.rar)
  我这个DQ接的是PORTD.7,使用内部8M振荡,UART只有停止位,没有校验,有时候会出现接受错误(很少)

出0入0汤圆

 楼主| 发表于 2008-7-22 23:03:25 | 显示全部楼层
顶,本来想搞2个DS18B20组网,但郁闷的是有一个是坏的,搞不了了

出0入0汤圆

发表于 2008-7-23 08:22:29 | 显示全部楼层
ds18b20_init(&rom_code[i++][0],-55,tempset,DS18B20_11BIT_RES);//设定报警温度

ds18b20_alarm_num=w1_search(DS18B20_ALARM_SEARCH_CMD,rom_code);//检查警报启动探头数量。

出0入0汤圆

发表于 2008-7-23 08:56:50 | 显示全部楼层
谢谢LZ

出0入0汤圆

 楼主| 发表于 2008-7-23 09:19:53 | 显示全部楼层
四楼愿意解释一下我提出的问题吗,谢谢

出0入0汤圆

 楼主| 发表于 2008-7-23 11:16:48 | 显示全部楼层
欢迎交流

出0入0汤圆

 楼主| 发表于 2008-7-23 13:06:47 | 显示全部楼层
算了,世道就世道,热心的人总是少数,有就行了

出0入0汤圆

 楼主| 发表于 2008-7-23 14:38:58 | 显示全部楼层
请教2个问题   1:温度报警功能怎么用
              2:the ds18b20 id is 28-C6-9-16-1-0-0-5A中的5A是根据 CRC=X8+X5+X4+1算出来的,但具体是怎么算的,有人愿意详细的说明一下吗,谢谢

就没人知道吗

出0入0汤圆

发表于 2008-7-23 14:42:29 | 显示全部楼层
markup

出0入0汤圆

发表于 2008-7-23 17:07:21 | 显示全部楼层
lz的串口终端软件不错,能提供吗?

出0入0汤圆

 楼主| 发表于 2008-7-23 19:09:28 | 显示全部楼层
to aviator
这个我也是在论坛下的,忘记在哪下的了
点击此处下载 ourdev_356393.rar(文件大小:460K) (原文件名:串口调试EDS.rar)

出0入0汤圆

发表于 2008-7-23 19:32:32 | 显示全部楼层
给你一段代码参考

BYTE CalCRC8(BYTE crc,BYTE data)
{
    BYTE i;
    crc ^= data;// crc = crc ^ data;
    for (i=0;i<8;i++)
    {
        if (crc & (BYTE)0x01) // 只测试最低位
            crc = (crc>>1)^(BYTE)0x8C;//最低位为1,移位和异或处理
        else
            crc = crc>>1; // 否则只移位(除2)
    }
    return crc;
}

...
    BYTE s[9]={0};
    BYTE crc=0;
        for(i=0;i<8;i++)
        {
            s = OneWire_ReadByte();
           crc = CalCRC8(crc,s);//读8个字节,算crc值
        }
        s = OneWire_ReadByte();//读第9个和前面算出的crc相比,相等说明正确
        if (crc == s)
        {
             //CRC OK
         }

出0入0汤圆

 楼主| 发表于 2008-7-23 23:48:26 | 显示全部楼层
谢谢shark

出0入0汤圆

发表于 2008-7-23 23:52:52 | 显示全部楼层
报警功能我觉得没什么用,我都是读回温度自己和预设值比的。(也可能在总线上有很多DS18B20的时候报警有用,未核实)

出675入8汤圆

发表于 2008-7-24 01:45:08 | 显示全部楼层
ding

出0入0汤圆

 楼主| 发表于 2008-7-24 01:52:49 | 显示全部楼层
MEGA128才ISP了半个月,就ISP挂了,真是郁闷,是不是用高压编程或着JTAG下载它的寿命就长一些啊,突然发现DRAGON有一个缺陷,当你接了外部晶振,而设置又是使用内部的RC的话,就会出现错误,不能下载,这一点还不如USBASP

感谢shark的热心,我只是想看看那报警功能是怎么回事情,等着看有没有人把它搞出来

出0入0汤圆

 楼主| 发表于 2008-7-24 02:02:49 | 显示全部楼层
突然发现test搞成text了

出0入0汤圆

 楼主| 发表于 2008-7-24 02:04:50 | 显示全部楼层
积分600,留个纪念,不知道10后再回首是个什么感觉

(原文件名:未命名.JPG)

出0入0汤圆

 楼主| 发表于 2008-7-24 22:30:21 | 显示全部楼层
大家也帮忙灌灌水吗,不然寂寞啊

出0入0汤圆

发表于 2008-7-24 22:48:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-7-24 23:24:20 | 显示全部楼层
ok!perfect!

出0入0汤圆

发表于 2008-7-26 19:12:54 | 显示全部楼层
呵呵,厉害,我也做过这个DS18B20测温!从没用过报警!

出0入0汤圆

发表于 2008-7-27 15:59:40 | 显示全部楼层
不错,我去试试我的DS18B20...
头像被屏蔽

出0入0汤圆

发表于 2008-7-27 16:06:59 | 显示全部楼层
Cool!

谢谢楼主的共享。

出0入0汤圆

 楼主| 发表于 2008-7-27 19:37:00 | 显示全部楼层
居然被置cool了,高兴,高兴,一定要再接再厉

正在摸索SD卡,FAT...................

出0入0汤圆

发表于 2008-7-28 09:20:37 | 显示全部楼层
xiexie!!!!!!!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2008-7-28 11:30:54 | 显示全部楼层
各位大侠:DS2760能不能用单片机把它模拟出来。不用特别高精度。

出0入0汤圆

发表于 2008-7-28 13:41:44 | 显示全部楼层
可以,高速都可以模拟出来。

出0入0汤圆

 楼主| 发表于 2008-7-29 01:18:24 | 显示全部楼层
DS2760  没接触过,不发表意见

出0入0汤圆

发表于 2008-8-7 21:10:24 | 显示全部楼层
看看咯。。。a

出0入0汤圆

发表于 2009-2-26 13:22:13 | 显示全部楼层
记号个!!

出0入0汤圆

发表于 2009-2-26 14:31:09 | 显示全部楼层
很有用,先收下

出0入0汤圆

发表于 2009-2-26 17:59:07 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-3-11 19:19:51 | 显示全部楼层
我用的DS18B20有个奇怪个的事情.

我读出来的温度后面的最后一位
"6.the crc is--a1 "
这一位一直是0x10..晚上回去再研究研究!

出0入0汤圆

发表于 2009-3-11 19:21:44 | 显示全部楼层
还有search rom功能.研究后,会将代码跟帖.

出0入0汤圆

发表于 2009-3-11 20:02:40 | 显示全部楼层
过来看看。。!

出0入0汤圆

发表于 2009-3-11 22:48:32 | 显示全部楼层
不得了

出0入0汤圆

发表于 2009-3-11 23:06:08 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-4-21 16:17:12 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-8-27 19:45:21 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2009-11-1 17:23:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-3 20:35:02 | 显示全部楼层
温度18b20标记一下

出0入0汤圆

发表于 2009-11-3 23:22:39 | 显示全部楼层
从头学习

出0入0汤圆

发表于 2009-11-9 13:03:23 | 显示全部楼层
非常感谢

出0入0汤圆

发表于 2009-11-9 20:34:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-9 20:45:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-9 22:06:10 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-11-9 22:27:45 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-11-9 22:31:29 | 显示全部楼层
有用

出0入0汤圆

发表于 2010-6-10 09:25:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-10 16:22:53 | 显示全部楼层
我看DS18B20说明书上说,存测得的温度值的两个8位存贮器RAM编号为0号和1号1号存贮器存放温度值的符号如果温度为负()则1号存贮器8位全为1否则全为00号存贮器用于存放温度值的补码LSB(最低位)的1表示0.5将存贮器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-550125),所以00AAH为+85度,但是我按照上面说的计算了,得出来的却不是85度,请楼主指教一下……

出0入0汤圆

发表于 2010-6-10 19:15:16 | 显示全部楼层
mark!~

出0入0汤圆

发表于 2010-6-14 15:02:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-19 20:46:06 | 显示全部楼层
非常感谢,我正在搞单线这块!

出0入0汤圆

发表于 2010-6-22 16:03:33 | 显示全部楼层
还没有玩过呢,先标上

出0入4汤圆

发表于 2010-6-22 16:06:59 | 显示全部楼层
这个要记号

出0入0汤圆

发表于 2010-6-23 12:02:52 | 显示全部楼层
kan

出0入0汤圆

发表于 2010-6-23 12:19:35 | 显示全部楼层
不懂这个,还是赞下!

出0入0汤圆

发表于 2010-6-23 13:51:16 | 显示全部楼层
东西做的不错,顶一把!~

出0入0汤圆

发表于 2010-6-23 18:08:21 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2010-6-25 18:18:13 | 显示全部楼层
楼主有没有想过,可以用PID算法来控制温度,这样不是更强大吗?

出0入0汤圆

发表于 2010-6-25 22:48:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-15 13:14:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-15 17:59:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-15 18:12:23 | 显示全部楼层
这个要顶

出0入0汤圆

发表于 2011-2-26 14:40:33 | 显示全部楼层
1024

出0入0汤圆

发表于 2011-2-26 14:58:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-3 13:03:42 | 显示全部楼层
回复【1楼】lionliu
-----------------------------------------------------------------------

请教楼主一个问题,你的程序代码段
unsigned char init_1820(void)
{
     out_dat;               //set output
     set_dat;               //set dat
     clr_dat;               //clr dat
     delay_us(480);         //wait 480us
     set_dat;               //set dat
     in_dat;                //set input
     delay_us(60);          //wait 15~60us
     while(!ds_dat);//当你等待60us后,也就是DS18B20开始回送低电平的存在脉冲,你这里读取电平并取反,相当于在等待器件发送存在脉冲完毕后,才退出whlie循环,那下面的延时,有什么作用呢?我认为应该是:一直读取器件是否返回回送脉冲,当有回送低电平脉冲后,再退出循环,再延时等待DS18B20回送脉冲发送完毕.你这样做检测不了器件是否存在,因为上拉电阻会起作用,导致你的while循环退出.
      out_dat;               //set output
      set_dat;               //set dat
     delay_us(140);          //wait 60~240us
}


本人也是才疏学浅,不知道分析的对不对,请赐教

出0入0汤圆

发表于 2011-11-4 16:42:32 | 显示全部楼层
DS18B20...

出0入0汤圆

发表于 2011-11-4 19:16:56 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2011-11-21 16:48:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-23 11:02:58 | 显示全部楼层
回复【楼主位】lionliu   
-----------------------------------------------------------------------

出0入0汤圆

发表于 2011-11-23 11:31:24 | 显示全部楼层
楼主很强大,佩服楼主的上位机能力

出0入0汤圆

发表于 2012-2-9 23:45:24 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-10 01:56:51 | 显示全部楼层
DS18B20

出0入0汤圆

发表于 2012-4-8 15:01:20 | 显示全部楼层
楼主有做过多路(一个I/O口接多个DS18B20)吗?
期望可以讨论一下!

出0入0汤圆

发表于 2013-4-21 17:13:13 | 显示全部楼层
又学习了

出0入0汤圆

发表于 2013-7-16 11:33:44 | 显示全部楼层
又温习一下了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 09:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表