打印

DSP读取DHT22数据

[复制链接]
3192|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xukeming1992092|  楼主 | 2015-11-9 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DSP288335采用30M晶振的情况下,进行DHT22温湿度传感器数据读取,部分程序如下:
void COM(void)
{
Uint16 i;
comdata=0;
GpioCtrlRegs.GPADIR.bit.GPIO3=0;
for(i=0;i<8;i++)
{
  FLAG=0xFF02;
  while((!GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  DELAY_US(10);
  DELAY_US(10);
  DELAY_US(10);
  temp=0;
  if(GpioDataRegs.GPADAT.bit.GPIO3)
  {
   temp=1;
   FLAG=0xFF02;
  }
  while((GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  if(FLAG==0x0001)
   break;          //判断数据位是0还是1
  //如果高电平高过预定0高电平值则数据位为1
  comdata<<=1;
  comdata|=temp;
}
for(i=0;i<8;i++)
{
  comdata<<=1;
}
comdata=comdata&0x00FF;
}
void DHT22_RH(void)
{
GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//将GPIO设置成普通通用口
GpioCtrlRegs.GPADIR.bit.GPIO3=1;
GpioDataRegs.GPADAT.bit.GPIO3=0;
DELAY_US(600);
GpioDataRegs.GPADAT.bit.GPIO3=1;
DELAY_US(40);
GpioDataRegs.GPADAT.bit.GPIO3=1;
GpioCtrlRegs.GPADIR.bit.GPIO3=0;
if(!GpioDataRegs.GPADAT.bit.GPIO3)
{
  FLAG=0xFF02;
  while((!GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  FLAG=0xFF02;
  while((GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  COM();
  RH_data_H_temp=comdata;
  COM();
  RH_data_L_temp=comdata;
  COM();
  T_data_H_temp=comdata;
  COM();
  T_data_L_temp=comdata;
  COM();
  checkdata_temp=comdata;
  GpioCtrlRegs.GPADIR.bit.GPIO3=1;
  GpioDataRegs.GPADAT.bit.GPIO3=1;
  //数据校检
  temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
  if(temp==checkdata_temp)
  {
   RH_data_H=RH_data_H_temp;
   RH_data_L=RH_data_L_temp;
   T_data_H=T_data_H_temp;
   T_data_L=T_data_L_temp;
   checkdata=checkdata_temp;
  }
}
DHT22DATA[0]=RH_data_H;//将温湿度数据存储在DHT22DATA中
DHT22DATA[1]=RH_data_L;
DHT22DATA[2]=T_data_H;
DHT22DATA[3]=T_data_L;
}
为什么读出来的数据不正确

相关帖子

沙发
dirtwillfly| | 2015-11-10 06:49 | 只看该作者
用逻辑分析仪或者示波器看看波形

使用特权

评论回复
板凳
JY-DX-JY| | 2015-11-10 15:08 | 只看该作者
时序问题。

使用特权

评论回复
地板
Thor9| | 2015-11-12 19:14 | 只看该作者
用示波器观察一下时序

使用特权

评论回复
5
sunmeat| | 2015-11-13 17:15 | 只看该作者
可以移植过来其他例程看看。对着时序图写好程序就好了。

使用特权

评论回复
6
欧阳元清| | 2017-7-12 09:36 | 只看该作者
楼主请问你的问题解决了吗,可否共享下

使用特权

评论回复
7
quickman| | 2017-7-14 08:40 | 只看该作者
你的数据哪里不正常?差值是多少

使用特权

评论回复
8
jstgotodo| | 2017-7-14 08:41 | 只看该作者
IO的驱动能力一般不足。

使用特权

评论回复
9
iamaiqiyi| | 2017-7-14 08:41 | 只看该作者
这个芯片的通信速度有什么要求

使用特权

评论回复
10
dzfansman| | 2017-7-14 08:42 | 只看该作者
发一个数据读取之后是0x00吗

使用特权

评论回复
11
sanxingnote7| | 2017-7-14 08:43 | 只看该作者
读取的时序有问题,你的IO延时怎么这么长?

使用特权

评论回复
12
backlugin| | 2017-7-14 08:43 | 只看该作者
13
backlugin| | 2017-7-14 08:44 | 只看该作者
14
sdCAD| | 2017-7-14 08:44 | 只看该作者
只有16M以下时钟才能测量

使用特权

评论回复
15
fengm| | 2017-7-14 08:44 | 只看该作者
数据总线(SDA)串出40 位数据,高位先出

使用特权

评论回复
16
uiint| | 2017-7-14 08:45 | 只看该作者
手册上写的SDA用于微处理器与 AM2302之间的通讯和同步。

使用特权

评论回复
17
quickman| | 2017-7-14 08:45 | 只看该作者
测量IO的电平没有问题吧。

使用特权

评论回复
18
jstgotodo| | 2017-7-14 08:45 | 只看该作者
建议添加上拉电阻试试看。

使用特权

评论回复
19
iamaiqiyi| | 2017-7-14 08:45 | 只看该作者
是不是单独读取数据造成信号太快,数据错误。

使用特权

评论回复
20
dzfansman| | 2017-7-14 08:45 | 只看该作者
示波器测量是否正确的电平电压

使用特权

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

本版积分规则

3

主题

5

帖子

1

粉丝