CYPRESS PSoC 4200L 驱动DHT11,配置成双向口,数据读取不成功

[复制链接]
767|2
手机看帖
扫描二维码
随时随地手机跟帖
xianting77|  楼主 | 2017-3-19 16:39 | 显示全部楼层 |阅读模式
本帖最后由 xianting77 于 2017-3-19 16:41 编辑

使用的网友们调试通过的代码,由于SHT 既有输出,又有输入,将其配置成双向口, 是否就不需要手动配置成,输入或者输入了啊,但是很被悲惨,我就是不能正确监测到DHT11 ,我的IO配置对么,是什么原因么,是否可以有高手帮忙指点迷津
2017-03-19_163115.jpg


//Reset DHT11
void DHT11_Rst(void)          
{                 
// DHT11_IO_OUT();        
    //SET OUTPUT
  DHT11_DATA_Clr();                                                                                         //GPIOA.0=0
  DH11_Write(0);
  CyDelay(25);   
                                                                                          //Pull down Least 18ms
  DHT11_DATA_Set();                                                                                         //GPIOA.0=1
  CyDelayUs(20) ;                                                                                     //Pull up 20~40us
}

uint8_t DHT11_Check(void)           
{   
  uint8_t retry=0;
   volatile  uint8_t  temp,temp1;
  //DHT11_IO_IN();                                                                                                //SET INPUT         
  while (DHT11_DQ_IN&&retry<100)                                //DHT11 Pull down 40~80us
  {
    retry++;
    Delay_us(1);
  }         

  if(retry>=100)
    return 1;
  else
    retry=0;

  while (!DHT11_DQ_IN&&retry<100)                                //DHT11 Pull up 40~80us
  {
    retry++;
    Delay_us(1);
  }

  if(retry>=100)
    return 1;                                                                                                                //chack error            

  return 0;
}

uint8_t DHT11_Read_Bit(void)                          
{
  volatile uint8_t retry=0;
  volatile uint8_t  temp =0 ;  
  while(DHT11_DQ_IN&&retry<100)                                        //wait become Low level
  {
    retry++;
    Delay_us(1);
  }

  retry=0;
  while(!DHT11_DQ_IN&&retry<100)                                //wait become High level
  {
    retry++;
    Delay_us(1);
  }

  Delay_us(40);//wait 40us
//   temp = DH11_Read();
  if(DHT11_DQ_IN)
    return 1;
  else
    return 0;                  
}


leijixiaomile| | 2017-3-22 10:01 | 显示全部楼层
设置成 Resister Pull up/Pull down 试试。用示波器抓下波形,看启动信号是否正确,看回包信号是否正常,根据示波器的反馈调试,会比较快。

使用特权

评论回复
lemon9527| | 2017-3-31 23:41 | 显示全部楼层
楼主搞定了吗?我也在研究PSOC如何连接DHT11.

使用特权

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

本版积分规则

10

主题

45

帖子

2

粉丝