天嵌 ARM开发社区

 找回密码
 注册
查看: 1695|回复: 2

多个DS18B20

[复制链接]
海之梦fly 发表于 2013-6-19 21:13:36 | 显示全部楼层 |阅读模式
本帖最后由 海之梦fly 于 2013-6-20 09:41 编辑

在LINUX的单个DS18B20下可以正常采集温度,但用两个DS18B20在单总线上时第二个没法采集温度
下面是APP:
13 #define K 0.0625  
14
15 int main(void)
16 {
17     int fd = -1;
18     char count = 5;
19     unsigned int tmp = 0;float res=0;
20     fd = open("/dev/ds18b20", 0);
21     if(fd < 0)
22     {
23         perror("Can't open /dev/ds18b20 \n");
24         exit(1);
25     }
26     printf("open ds18b20 success \n");
27     while(1)
28     {
29         read(fd, &tmp , sizeof(tmp));
30         res=tmp*K;
31         printf("the currently temperature is %f\n",res);
33         sleep(2);
34     }
35         close(fd);
36     return 0;
37 }

驱动程序关键部分:
//在read 那里采集两个18B20
359  static char ch=0;^M
360 static ssize_t ds18b20_read(struct file *file, char  __user *userbuf, size_t count, loff_t *off )  ^M
361 {  ^M
362         int ret=0;
364         int tem=Ds18b20_GetTemperature(ch);//采集两个18B20
367         ch++;
368         if(ch==2)
369                 ch=0;
373         ret=copy_to_user(userbuf, &tem, sizeof(tem));
         }

245 int  Ds18b20_GetTemperature(char numdevice)
246 {
247         char Tem_H=0,Tem_L=0;//16bit ,high byte,low byte
248         int data=0,i=0;
249         long id=0;
250          Ds18b20_Reset();
268 //Ds18b20_WriteByte(SKIP_ROM );//single ds
269         Match_DS18B20_ID(numdevice);
270         Ds18b20_WriteByte(CONVERT_T);  //all DS convert to digital
271       udelay(2);
272         Ds18b20_Reset();
273         //Ds18b20_WriteByte(SKIP_ROM );
274         Match_DS18B20_ID(numdevice);
275         Ds18b20_WriteByte(READ_SCRATCHPAD);
276
277         Tem_L=Ds18b20_ReadByte();
278         Tem_H=Ds18b20_ReadByte();
279         data=(Tem_H<<8)|Tem_L;//16 bit byte
              return data;
            }

      在无OS下程序是正常采集的,但在LINUX却不好使,不知哪里出问题了??


TQ-ZQL 发表于 2013-6-20 09:15:45 | 显示全部楼层
用示波器看下输出波型对不对,还有就是注意下如果你是使用的一个驱动给两个设备使用注意一些全局变量的使用,建议小用全局。
 楼主| 海之梦fly 发表于 2013-6-20 09:43:40 | 显示全部楼层
TQ-ZQL 发表于 2013-6-20 09:15
用示波器看下输出波型对不对,还有就是注意下如果你是使用的一个驱动给两个设备使用注意一些全局变量的使用 ...

问题是在复位上,没有给第二个SENSOR多的时间来复位,所以它输出总是4096
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 16:52 , Processed in 1.062500 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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