关于DS18B20的读数问题,为啥一直是高电平?
硬件上加了一个10K上拉电阻,已经试过4.7K及两个4.7K并联,供电3.3V,不加上拉电阻是不能读出数据的。
读取代码:
unsigned char Ds18b20Read(void)
{
unsigned char Value = 0x00;
unsigned int i;
// ds18b20IO_1();
// Ds18b20Delay(3);
for(i=0;i<8;i++)
{
Value >>= 1;
//拉低
Ds18b20OutputInitial();
ds18b20IO_0();
Ds18b20Delay(3);
//释放
ds18b20IO_1();
Ds18b20Delay(3);
if(P2IN & BIT2)
Value |= 0x80;
Ds18b20Delay(60);
}
return Value;
}
读取:
Ds18b20Initial();
Ds18b20Write(0xcc); // 跳过读序号列号的操作
Ds18b20Write(0x44); // 启动温度转换
Ds18b20Delay(2000);
Ds18b20Initial();
Ds18b20Write(0xcc); //跳过读序号列号的操作
Ds18b20Write(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
V1 = Ds18b20Read(); //低位
V2 = Ds18b20Read(); //高位
中间加了2000us的延时,试过800ms及200us各试验数据,波形:


从复位后的应答看,设备是可以正常回应的,而且这个设备替换过,应该不是设备问题,为啥这个回复的信息都是高电平,是哪里接错了致使18B20不能接低,还是延时问题时序不对?求指点
读取代码:
unsigned char Ds18b20Read(void)
{
unsigned char Value = 0x00;
unsigned int i;
// ds18b20IO_1();
// Ds18b20Delay(3);
for(i=0;i<8;i++)
{
Value >>= 1;
//拉低
Ds18b20OutputInitial();
ds18b20IO_0();
Ds18b20Delay(3);
//释放
ds18b20IO_1();
Ds18b20Delay(3);
if(P2IN & BIT2)
Value |= 0x80;
Ds18b20Delay(60);
}
return Value;
}
读取:
Ds18b20Initial();
Ds18b20Write(0xcc); // 跳过读序号列号的操作
Ds18b20Write(0x44); // 启动温度转换
Ds18b20Delay(2000);
Ds18b20Initial();
Ds18b20Write(0xcc); //跳过读序号列号的操作
Ds18b20Write(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
V1 = Ds18b20Read(); //低位
V2 = Ds18b20Read(); //高位
中间加了2000us的延时,试过800ms及200us各试验数据,波形:


从复位后的应答看,设备是可以正常回应的,而且这个设备替换过,应该不是设备问题,为啥这个回复的信息都是高电平,是哪里接错了致使18B20不能接低,还是延时问题时序不对?求指点
...全文
相关推荐
stm32f407对ds18b20温度传感器数据的采集
已经完全测试过了,通过了407单片机的完美测试,可拿来直接使用
DS18B20 驱动编写
嵌入式开发平台:mini2440 DS18B20 所用GPIO:S3C2410_GPF(3) 一、DS18B20 时序分析 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括:初始化时序、写时序、读时序。 1、初始化时序 主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在
DS18B20驱动流程图
采用windows visio画图工具详细介绍了,DS18B20传感器复位函数,写字节函数,读字节函数,读取温度函数的流程图
用DS18B20精确到小数点后一位的温度测量实现
用DS18B20精确到小数点后一位的温度测量实现,C语言。
DS18B20读写程序段及操作流程
为帮助大家更好的学习DS18B20本人截取了四段图片,包括,获取温度DS18B20读写程序段及操作流程,其中的delay函数为while(i--);希望对大家有所帮助,三段程序经本人测试完全正确!


单片机/工控
