打印
[DSP编程]

ds18b20温度传感器采集的数据全是1

[复制链接]
2992|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
牧斯特Z|  楼主 | 2015-9-21 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用dsp gpio控制ds18b20,正常完成了初始化,因为有反馈信号过来,上午已经没问题,可以正常采集温度,可是下午突然不行了,现在能进行初始化,但是读寄存器的值全是1,貌似写入给18b20的指令它没有接收(因为我发现我把温度转换命令去掉,上电温度值不是85)。大神求救啊,谁知道可能什么原因,感激不尽,新手,分数不多,别嫌弃

相关帖子

沙发
zhangmangui| | 2015-9-22 09:14 | 只看该作者
你看看写入波形应该有吧  是不是写入速度过快
放慢一些试试

使用特权

评论回复
板凳
牧斯特Z|  楼主 | 2015-9-22 09:55 | 只看该作者
zhangmangui 发表于 2015-9-22 09:14
你看看写入波形应该有吧  是不是写入速度过快
放慢一些试试

写入的命令我肯定是写了,但是我通过调试的感觉好像18b20并没有采集或者正确采集到写入给它的命令,因为即使屏蔽掉温度转换命令,上电后直接读寄存器读出来的全是1,而不是85度对应的二进制代码。但是之前实现过功能了,没有做什么改动啊 ,时序也是按照datasheet要求弄得。写入失败的话还是可能是什么原因?这是我的写入命令的程序 麻烦你看看时间有什么问题?

for(i=0;i<8;i++)
        {
                DELAY_US(2);
                b=dat & 0x01;       //取最低位开始写入
                dat>>=1;
            if(b)
                {
                  
                    EALLOW;                           
                        GpioCtrlRegs.GPADIR.bit.GPIO2=1;    //配置为输出
                        EDIS;
                        GpioDataRegs.GPASET.bit.GPIO2=1;    //置为1
                        DELAY_US(5);
                        GpioDataRegs.GPACLEAR.bit.GPIO2=1;  //置为低电平0,开始写时序
                        DELAY_US(3);//delay(2);             //1us以上
                        //GpioDataRegs.GPASET.bit.GPIO2=1;
                        EALLOW;                           
                        GpioCtrlRegs.GPADIR.bit.GPIO2=0;    //释放总线
                        EDIS;
                        DELAY_US(80);//delay(20);
                       
                }
                else
                {
                        EALLOW;                           
                        GpioCtrlRegs.GPADIR.bit.GPIO2=1;    //配置为输出
                        EDIS;
                        GpioDataRegs.GPASET.bit.GPIO2=1;    //置为1
                        DELAY_US(5);
                        GpioDataRegs.GPACLEAR.bit.GPIO2=1;   //置为低电平0,开始写时序
                        DELAY_US(80);//delay(100);
                    EALLOW;                           
                        GpioCtrlRegs.GPADIR.bit.GPIO2=0;    //释放总线
                        EDIS;
                           DELAY_US(2);//delay(2);
                                                                   
                }  
   } //for循环结束括号

使用特权

评论回复
地板
海中水| | 2015-9-22 10:46 | 只看该作者
从这个程序上看不出来什么问题。但是应该没有写入,你单步调试一下看行不行。

使用特权

评论回复
5
牧斯特Z|  楼主 | 2015-9-22 10:59 | 只看该作者
海中水 发表于 2015-9-22 10:46
从这个程序上看不出来什么问题。但是应该没有写入,你单步调试一下看行不行。 ...

我在这个程序段加死循环,然后用示波器看了时序,该给写0或1的肯定是正常的给总线0或1了,但是感觉18b20没有接收总线上的信息,为什么会这样呢,单步只能看到我想给它发的命令是什么确实是写到总线上了,但是看不了它到底接没接收命令,好苦恼啊,这程序上周是正常的,今天就不行了。。。。

使用特权

评论回复
6
海中水| | 2015-9-22 14:13 | 只看该作者
牧斯特Z 发表于 2015-9-22 10:59
我在这个程序段加死循环,然后用示波器看了时序,该给写0或1的肯定是正常的给总线0或1了,但是感觉18b20 ...

慢慢调试一下,如果确定数据时发送出去的。但是读取不到值,确定两个问题时序和器件。

使用特权

评论回复
7
牧斯特Z|  楼主 | 2015-9-23 10:42 | 只看该作者
海中水 发表于 2015-9-22 14:13
慢慢调试一下,如果确定数据时发送出去的。但是读取不到值,确定两个问题时序和器件。 ...

我调出来了,貌似是定时器的中断影响了时序把,我把中断时间延长了,可以正常采集温度了,但是出现了另一个问题,就是我发现每次进行温度转换和读取温度暂存器的时候,第一次进入初始化程序用的时间特别长,3分钟左右,甚至有时候初始化失败,而当在代码运行在初始化的过程中,我暂停一下再开始或者在下一行加一个断点,初始化过一小会就完成了,而且接下来几次涉及到的初始化都很快,只有第一次很慢甚至失败,为什么呢?

使用特权

评论回复
8
海中水| | 2015-9-24 09:42 | 只看该作者
这样说的话,可能跟你的时序还是有关系。第一次的时候因受到其他因素的制约所以要等待,第二次的话各项都具备了所以就快些。再仔细调试一下。

使用特权

评论回复
9
yiyigirl2014| | 2015-9-30 20:59 | 只看该作者
时序错误,看看时序时隙是不是不符合要求

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝