OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2522|回复: 11

请教一下,18b20测温度和光敏传感器冲突吗?

[复制链接]

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
发表于 2016-11-9 11:13:37 | 显示全部楼层 |阅读模式
1金钱
我今天用精英版插上18b20,外接出来DHT11,想在lcd上显示温度,湿度和光照强度,但是一初始化 LSENS_Init(),就不显示数值了,注释掉光敏的初始化函数就可以显示温度和湿度值了,问题出在哪呢?是初始化ADC3的原因吗?

最佳答案

查看完整内容[请看2#楼]

解决啦~~~while(ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));判断读取完成状态时少了个取反。。。应该是while(!ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 11:13:38 | 显示全部楼层
解决啦~~~while(ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));判断读取完成状态时少了个取反。。。应该是while(!ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 11:15:27 | 显示全部楼层
C:\Users\Administrator\Desktop
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 11:21:31 | 显示全部楼层
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 11:23:30 | 显示全部楼层
主程序里是这样
int main(void)
{         
         u8 adcx;
         u8 t=0;
         short tempature;
         u8 shidu;
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
         LED_Init();
         uart_init(115200);
         delay_init();
         LCD_Init();
         LSENS_Init();
         while(DS18B20_Init())
         {
                 POINT_COLOR=RED;
                 LCD_ShowString(30,50,200,16,16,"NOT FOUND 18B20");
         }
         while(DHT11_Init())
         {
                 LCD_ShowString(30,90,200,16,16,"DHT11 ERROR!");
         }
         POINT_COLOR=BLUE;
         LCD_ShowString(30,50,200,16,16,"18B20 IS READY!");
         LCD_ShowString(30,70,200,16,16,"Tempature:   . C");
         POINT_COLOR=GREEN;
         LCD_ShowString(30,90,200,16,16,"DHT11 IS READY!");
         LCD_ShowString(30,110,200,16,16,"SHIDU:   %RH");
         POINT_COLOR=BROWN;
         LCD_ShowString(30,130,200,16,16,"LSENS_VAL:   ");
         while(1)
         {
                adcx=LSENS_Get_Val();
                LCD_ShowxNum(118,130,adcx,3,16,0);
                if(t%10==0)
                {
                        tempature=DS18B20_Get_Tempature();
                        DHT11_Read_Data(&shidu);
                        POINT_COLOR=GREEN;
                        LCD_ShowNum(86,110,shidu,2,16);
                        POINT_COLOR=BLUE;
                        if(tempature<0)
                                LCD_ShowChar(118,70,'-',16,0);
                        else
                                LCD_ShowChar(118,70,' ',16,0);
                        LCD_ShowNum(120,70,tempature/10,2,16);
                        LCD_ShowNum(142,70,tempature%10,1,16);
                        //LSENS_Init();
                       
                }
                delay_ms(10);
                t++;
                if(t==20)
                {
                        LED0=!LED0;
                        t=0;
                }
         }
}
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-9 11:41:47 | 显示全部楼层

光敏传感器也是1wire接口?
和18B20、DHT11是什么关系?

回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 15:13:53 | 显示全部楼层
我认为他们之间没什么联系吧,18b20的数据线连的PG11,DHT11我外接的,连到了PA11,可是调用初始化光敏传感器的函数后,就不显示温度和湿度了,把这个函数注释掉,就可以显示了
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 15:14:18 | 显示全部楼层
xuande 发表于 2016-11-9 11:41
光敏传感器也是1wire接口?
和18B20、DHT11是什么关系?


我认为他们之间没什么联系吧,18b20的数据线连的PG11,DHT11我外接的,连到了PA11,可是调用初始化光敏传感器的函数后,就不显示温度和湿度了,把这个函数注释掉,就可以显示了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-9 15:58:05 | 显示全部楼层
ym434569502 发表于 2016-11-9 15:14
我认为他们之间没什么联系吧,18b20的数据线连的PG11,DHT11我外接的,连到了PA11,可是调用初始化光敏 ...


那就是自己的问题了。

用仿真器一步步查,应当不难,很容易。


回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 16:16:18 | 显示全部楼层
xuande 发表于 2016-11-9 15:58
那就是自己的问题了。

用仿真器一步步查,应当不难,很容易。

困扰了一天了,不开心
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 16:41:53 | 显示全部楼层
发现是这一步&#160; adcx=LSENS_Get_Val(); 的错误,并不是Lsens.Init()的错误,啥原因呢。。。
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2016-10-14
在线时间
13 小时
 楼主| 发表于 2016-11-9 16:50:40 | 显示全部楼层
运行到这一步,进入u16 Get_ADC3(void)
{
        ADC_RegularChannelConfig(ADC3,ADC_Channel_6,1,ADC_SampleTime_239Cycles5);
        ADC_SoftwareStartConvCmd(ADC3,ENABLE);
        while(ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));
        return ADC_GetConversionValue(ADC3);
}这个函数后,运行到while(ADC_GetFlagStatus(ADC3,ADC_FLAG_EOC));这一步就死循环了。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 08:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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