我使用原子哥的iic程序去操作一个温湿度原件可是连应答都没都 我把原件资料和代码贴出来 希望有大神帮我找出问题 我接的是4.7的上拉电阻 Vcc=3.3
[mw_shl_code=c,true]#include "dht11_iic.h"
#include"myiic.h"
#include "delay.h"
#include "sys.h"
u16 ws_rec[10];//存放接受到的温湿度
void dht_write(void)//向传感器发送指令
{
IIC_Start();
IIC_Send_Byte(0XB8); //发送写命令
delay_us(1500);
IIC_Stop();//产生一个停止条件
delay_ms(2);
IIC_Start();
IIC_Send_Byte(0XB8); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(0x03);//发送功能码
IIC_Wait_Ack();
IIC_Send_Byte(0x00);//发送起始地址
IIC_Wait_Ack();
IIC_Send_Byte(0x04);//读取寄存器个数
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(2);
}
void dht11_rec(void)//接受传感器数据
{
u8 i;
IIC_Start();
IIC_Send_Byte(0XB9); //进入接收模式
IIC_Wait_Ack();
delay_us(50);
for(i=0;i<8;i++) //接收从机发来的字节
ws_rec=IIC_Read_Byte(1);
IIC_Stop();//产生一个停止条件
}
unsigned short crc16(u16 *ptr, unsigned char len)
{
unsigned short crc=0xFFFF;
unsigned char i;
while(len--)
{
crc ^=*ptr++; for(i=0;i<8;i++)
{
if(crc & 0x01)
{
crc>>=1;
crc^=0xA001;
}
else { crc>>=1; }
}
}
return crc;
}
void data_deal(u8 *tem,u8 *huim)//获取温湿度
{
dht_write();
delay_ms(10);
dht11_rec();
ws_rec[8]=ws_rec[7]<<8+ws_rec[6];
// if (ws_rec[8]==crc16(ws_rec,6))
{
*huim=ws_rec[3];
*tem=ws_rec[5];
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我买了3个AM2320,第一个引脚上焊了4条线,接到开发板的I2C总线上,调试了一整天,发现传感器没有任何反应,然后换第二个,引脚上焊了4条线,接到开发板上,终于出结果了,为了在I2C总线上挂接其它元件,又焊了4条线,然后在没接其它其它元件的情况下,这个传感器也没有任何反应,这时候我才意识到这个问题,最后换上第三个,迅速焊了4条线,赶紧用嘴吹气降温,接上开发板,终于好了,之后再也不敢把这个碰烙铁了。
所以,如果调试时发现传感器没有任何反应,可以考虑是不是坏掉了。
烙铁我也用很久了,从来没有把某个元件或芯片搞坏过,我想应该不是烙铁的问题。
也不知道我是不是买到次品了?
---------------------------------
最近我也调试AM2320, 以前用51单片机调试通过的.
STM32 调试, 调不通, 逻辑分析仪看的话, 没有应答信号.
你方便把程序共享一下吗
一周热门 更多>