FPGA(14) 实验综合9 DS18B20温度传感
程序员文章站
2022-03-13 17:24:48
...
DS18B20简介
一种数字温度传感器,输出数字信号表示温度,体积小,抗干扰能力强,精度高
测量温度范围从负五十五到正一百二十五。精度正负五度,最大转换时间750ms
其命令分为ROM型和RAM型
ROM型指对其内部自带的64位ROM进行操作:包括读取、匹配、跳过、搜索、报警搜索。其内部ROM主要存储,DS18B20的ID号,便于同时操作多个DS18B20.。
ROM完后就是RAM,其内部结构如下图
如果使用寄生电源,总线控制器必须在发出温度转换后立即启动强上拉,并保持500ms
数据格式
最高位为符号位,默认十一位温度值(BYTE0中八位,BYTE1中四位),最低四位是小数位
低11位取补码再从二进制转换为十进制后再乘以0.0625得到所测实际温度,BYTE1前5位同时变化且均为1时,温度为负数
初始化序列
每次写操作至少60us,在两次写操作之间需要至少1us恢复时间,写操作起始于主机拉低数据总线。
在拉低期间进行采集数据
读操作同样需要60us,读操作之间至少需要1us的恢复时间:读操作由主机发起,至少拉低总线1us。
主机发起读操作后,由从机确定单总线上高低电平。
与写操作的区别在于 :读操作时会在拉低总线的15us内读取数据,因此主机需要在15us内采样
部分代码
符号位判断
always @(posedge clk_1us or negedge rst_n) begin
if(!rst_n) begin
sign <= 1'b0;
data1 <= 11'b0;
end
else if(org_data[15] == 1'b0) begin
sign <= 1'b0;
data1 <= org_data[10:0];
end
else if(org_data[15] == 1'b1) begin
sign <= 1'b1;
data1 <= ~org_data[10:0] + 1'b1;
end
end
温度转换与输出
assign data2 = (data1 * 11'd625)/ 7'd100;
always @(posedge clk_1us or negedge rst_n) begin
if(!rst_n)
temp_data <= 20'b0;
else
temp_data <= data2;
end
上一篇: ARM的栈与栈指令
下一篇: 【S5P6818】流水灯驱动程序