DSP读取DHT22数据

[复制链接]
 楼主| 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 | 显示全部楼层
用示波器观察一下时序
sunmeat 发表于 2015-11-13 17:15 | 显示全部楼层
可以移植过来其他例程看看。对着时序图写好程序就好了。
欧阳元清 发表于 2017-7-12 09:36 | 显示全部楼层
楼主请问你的问题解决了吗,可否共享下
quickman 发表于 2017-7-14 08:40 | 显示全部楼层
你的数据哪里不正常?差值是多少
jstgotodo 发表于 2017-7-14 08:41 | 显示全部楼层
IO的驱动能力一般不足。
iamaiqiyi 发表于 2017-7-14 08:41 | 显示全部楼层
这个芯片的通信速度有什么要求
dzfansman 发表于 2017-7-14 08:42 | 显示全部楼层
发一个数据读取之后是0x00吗
sanxingnote7 发表于 2017-7-14 08:43 | 显示全部楼层
读取的时序有问题,你的IO延时怎么这么长?
backlugin 发表于 2017-7-14 08:43 | 显示全部楼层
backlugin 发表于 2017-7-14 08:44 | 显示全部楼层
sdCAD 发表于 2017-7-14 08:44 | 显示全部楼层
只有16M以下时钟才能测量
fengm 发表于 2017-7-14 08:44 | 显示全部楼层
数据总线(SDA)串出40 位数据,高位先出
uiint 发表于 2017-7-14 08:45 | 显示全部楼层
手册上写的SDA用于微处理器与 AM2302之间的通讯和同步。
quickman 发表于 2017-7-14 08:45 | 显示全部楼层
测量IO的电平没有问题吧。
jstgotodo 发表于 2017-7-14 08:45 | 显示全部楼层
建议添加上拉电阻试试看。
iamaiqiyi 发表于 2017-7-14 08:45 | 显示全部楼层
是不是单独读取数据造成信号太快,数据错误。
dzfansman 发表于 2017-7-14 08:45 | 显示全部楼层
示波器测量是否正确的电平电压
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

1

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