-
有条件就继续读,以后发展相对还是会比较好的
-
看看答案
-
虚短是要负反馈下成立,虚断都适用
-
2式写错。。。U1/R2=(U3-U1)/R1+I1...②
-
U2A射随,U3=IL*RL...①;
U1/R2=(U3-U2)/R1+I1...②;
U5=U1;
U4=U5*(R3+R4)/R4...③;
IL=U4/(RS+RL)...④;
1,2,3代入4:(R1*R4)*(R1+R2)*(RS+RL)*IL=(R1*I1+RL*IL)*(R1*R2)*(R3+R4)
R1*R4=R2*R3;
(R1*R2)*(R3+R4)=R1*R2*R3+R1*R2*R4=R1*R1*R4+R1*R2*R4=(R1*R4)*(R1+R2)
(RS+RL)*IL=R1*I1+RL*IL
IL=I1*R1/RS
-
reset(); //18B20复位
write_byte(0xcc); //跳过ROM
write_byte(0x44); //启动温度转换
reset();
write_byte(0x55); //写ROM匹配命令
for(j=0;j
-
看看
-
1、复位18b20;2、写0xCC选择所有器件;3、写0x44启动温度转换;4、复位18b20;5写0x55ROM匹配命令;
6、写64位序列号;7、写0xbe读取数值命令;8、读取16位温度数值
-
顺序是这样:1初始化18B20;2写序列号检测指令;3读序列号;4显示
有问题的话就1个个查过,先看你液晶显示是否正常,这个最容易;然后看18B20各个驱动函数里面的时间对不对,比如初始化的时候拉低的时间,因为你可能是用其他人的驱动,芯片时钟频率上不一致,导致时间不对,这个要算一下;然后再看各个驱动里面的动作对不对,这个可以对着DATASHEET看
-
写0x33之前没有初始化18B20
-
首先要得到挂在同一总线的ds18b20的ROM序列号
读取序列号命令是0x33
在初始化18b20后向18b20写0x33(在测序列号的时候总线上只能挂一只18B20)
然后18b20会返回64个比特的序列号;
每一个18b20的序列号不一样;
得到所有的18B20的序列号后将这些序列号事先存入程序;
之后要识别的话向总线写ROM匹配命令即0x55
然后向总线写你要找的18B20序列号;
之后就只有这个18B20会响应单片机的指令;
另外:在启动温度转换的时候先向18B20写0xcc(跳过ROM匹配)这样所有在总线上的18B20都收的到命令
然后写启动温度转换命令0X44;
事实上18B20启动温度转换命令或者读取温度数据命令之前必须要有0xcc(跳过ROM匹配)或是0x55(ROM匹配);这其实就是在发送命令前先指定接收者,可以是全部的18B20或者是其中一个。
至于18B20序列号自动检测。。。相当难搞。。检测命令以及检测方法在DATASHEET上有,不过建议还是直接事先测好序列号然后存入程序来识别比较简单。