DS18B20温度测量

[复制链接]
2208|14
 楼主| konglingfei0615 发表于 2014-8-20 08:56 | 显示全部楼层 |阅读模式
用STM32写的DS18B20驱动,温度可以显示,但是当显示到31度左右再往上升高时就直接跳到48度了,中间呈现不连续的状态,不知道是什么原因呢?
xg3469 发表于 2014-8-20 09:13 | 显示全部楼层
可能时序上还需要调整一下。
 楼主| konglingfei0615 发表于 2014-8-20 09:55 | 显示全部楼层
刚上电温度显示是正常的啊,如果时序有问题应该一上电就显示不正常啊。
完美世界吧 发表于 2014-8-20 11:02 | 显示全部楼层
前十~~~~果断插入
dirtwillfly 发表于 2014-8-20 11:29 | 显示全部楼层
是不是温度换算部分的代码有问题?
 楼主| konglingfei0615 发表于 2014-8-20 15:32 | 显示全部楼层
dirtwillfly 发表于 2014-8-20 11:29
是不是温度换算部分的代码有问题?

没有问题啊,以前用430成功测量过啊,怎么换了个CPU就不行了呢
 楼主| konglingfei0615 发表于 2014-8-20 15:33 | 显示全部楼层
dirtwillfly 发表于 2014-8-20 11:29
是不是温度换算部分的代码有问题?

//获取温度
unsigned int Get_Tmp(void)
{
        u8 a=0;
        u8 b=0;
        unsigned int tmp ;
//        float temp=0.0f;
//        __disable_irq();        //关闭总中断     
    TEMP_18b20Init();
    TEMP_WByte(ROM_Read_Cmd);
  
    TEMP_18b20Init();
    TEMP_WByte(ROM_Skip_Cmd);//跳过读序列号操作
    TEMP_WByte(Convert_T); //启动温度转换
//    __enable_irq();//开放总中断        
    Delay_Nms(100);//等待DS18b20转换完成
//        __disable_irq();//;    关闭总中断  
    TEMP_18b20Init();
    TEMP_WByte(ROM_Skip_Cmd);
    TEMP_WByte(Read_Scratchpad); //读取寄存器内容(可以从寄存器0读到寄存器8)
   
    a= TEMP_RByte();     //温度低8位
    b= TEMP_RByte();     //温度高8位
   
    TEMP_ResetPulse();  //中断数据读取
    tmp = (b<<8) | a ;
    if(b & 0xF0)
    {
            tmp = ~tmp+1 ;
    }
//        __enable_irq();//开放总中断
   // *interger = (tmp>>4) & 0x00FF;  //整数部分
   // *decimal = (tmp & 0x000F) * 625 ; //小数部分         
// SysTick_CounterCmd(SysTick_Counter_Enable);
//USART_ITConfig( USART1, USART_IT_RXNE, ENABLE );
//        temp=(float) (tmp * 0.0625f);
        return tmp;
}
ningling_21 发表于 2014-8-20 16:23 | 显示全部楼层
konglingfei0615 发表于 2014-8-20 15:32
没有问题啊,以前用430成功测量过啊,怎么换了个CPU就不行了呢

两个CPU的运行速度肯定不一样,这个快了不少...
命中注定0818 发表于 2014-8-20 21:45 | 显示全部楼层
chunyang 发表于 2014-8-20 22:09 | 显示全部楼层
软件问题。
 楼主| konglingfei0615 发表于 2014-8-21 09:15 | 显示全部楼层
ningling_21 发表于 2014-8-20 16:23
两个CPU的运行速度肯定不一样,这个快了不少...

定时是没有问题的,已经排除了
ningling_21 发表于 2014-8-21 09:23 | 显示全部楼层
konglingfei0615 发表于 2014-8-21 09:15
定时是没有问题的,已经排除了

程序问题的可能性比较大...
zh_sl 发表于 2014-8-21 10:52 | 显示全部楼层
读写时序问题..DS18B20的时序会随温度稍微变化的,可能你读写的时序刚好在临界附近
weilaiheike 发表于 2014-8-21 11:00 | 显示全部楼层
楼主再仔细检测下程序吧 这种情况肯定是程序问题 有以下几种可能性 1.DS18B20的驱动函数问题 2.温度换算的问题 3.显示部分驱动的问题
ningling_21 发表于 2014-8-21 14:26 | 显示全部楼层
konglingfei0615 发表于 2014-8-21 09:15
定时是没有问题的,已经排除了

数据线的波形怎么样,可以用示波器看看...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部