LM75温度传感器数码管显示温度verilog,代码设计方案

名称:LM75温度传感器数码管显示温度

软件:VIVADO

语言:Verilog

代码功能:

    使用verilog编写代码,读取IIC(I2C)接口的LM75温度传感器数据,并在数码管显示,代码兼容LM75A,LM75BD,tmp1075

    本代码已在开发板验证,开发板资料:

F1 ARTIX 7 FPGA开发板硬件手册.docx

FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com

代码下载:

LM75温度传感器数码管显示温度软件:VIVADO语言:Verilog代码功能: 使用verilog编写代码,读取IIC(I2C)接口的LM75温度传感器数据,并在数码管显示兼容LM75A,LM75BD,tmp1075名称:LM75温度传感器数码管显示温度(代码在文末付费下载)软件:VIVADO语言:Verilog代码功能: 使用verilog编写代码,读取IIC(I2C)接口的LM75温度传感器数据,并在数码管显示,代码兼容LM75A,LM75BD,tmp1075 本代码已在开发板验证,开发板资料:F1 ARTIX 7 FPGA开发板硬件手册.docxFPGA代码Verilog/VHDL代码资源下icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=223

部分代码展示

// *************************************************************/
`define     SCL_POS          (cnt==3'd0)      
`define     SCL_HIG          (cnt==3'd1)
`define     SCL_NEG          (cnt==3'd2)     
`define     SCL_LOW          (cnt==3'd3)  
`define    DEVICE_READ        8'b1001_0001    //read device addr
//************************************************************/
module i2c_read_lm75
(
 input              sys_clk,
 input              rst_n,
 output             scl, 
 inout              sda,      
 output reg[16:0]       data
  );                       
//--------------------------------------------       
reg[2:0] cnt;  
reg[7:0] cnt_delay;    
reg scl_r;      
always @ (posedge sys_clk or negedge rst_n)
    if(!rst_n) cnt_delay <= 8'd0;
    else if(cnt_delay == 8'd199) cnt_delay <= 8'd0;   
    else cnt_delay <= cnt_delay+1'b1;
always @ (posedge sys_clk or negedge rst_n) 
begin
    if(!rst_n) cnt <= 3'd5;
    else begin
        case (cnt_delay)
            9'd49:     cnt <= 3'd1;
            9'd99:     cnt <= 3'd2; 
            9'd149:    cnt <= 3'd3;  
            9'd199:    cnt <= 3'd0; 
            default:   cnt <= 3'd5;
            endcase
        end
end
 
always @ (posedge sys_clk or negedge rst_n)
    if(!rst_n) scl_r <= 1'b0;
    else if(cnt==3'd0) scl_r <= 1'b1;
       else if(cnt==3'd2) scl_r <= 1'b0;
assign scl = scl_r;   
//---------------------------------------------               
reg[7:0] db_r;    
(*mark_debug="TRUE"*) reg[15:0] read_data;  
//---------------------------------------------
parameter     IDLE      = 4'd0;
parameter     START     = 4'd1;
parameter     ADDR      = 4'd2;
parameter     ACK1      = 4'd3;
parameter     DATA1     = 4'd4;
parameter     ACK2      = 4'd5;
parameter     DATA2     = 4'd6;
parameter     NACK      = 4'd7;
parameter     STOP      = 4'd8;
(*mark_debug="TRUE"*)reg[3:0] cstate;    
reg sda_r; 
reg sda_link;         
reg[3:0] num;  
reg[25:0] tim;
always @ (posedge sys_clk or negedge rst_n) 
    if(!rst_n) tim<=26'd0;
    else tim<=tim+1'b1;
always @ (posedge sys_clk or negedge rst_n) begin
    if(!rst_n) begin
            cstate <= IDLE;
            sda_r <= 1'b1;
            sda_link <= 1'b0;
            num <= 4'd0;
            read_data <= 16'd0;
        end
    else       
        case (cstate)

设计文档:

14.温度测试例程.docx

1实验简介

本教程介绍使用温度传感器 LM75 来进行温度测试,例程中主要介绍温度传感器的  FPGA 驱动和数码管显示。

2实验原理

2.1 LM75原理介绍

LM75BD 是一个高速 I2C 接口的温度传感器,可以在-55℃~+125℃的温度范围内将温度直接转换为数字信号,并可实现 0.125℃的精度。控制器可以通过 I2C 总线直接读取其内部寄存器中的数据,并可通过 I2C 对 4 个数据寄存器进行操作,以设置成不同的工作式。LM75BD有 3 个可选的逻辑地址管脚,使得同一总线上可同时连接 8 个器件而不发生地址冲突。LM75BD 可配置成不同的工作模式。它可设置成在正常工作    式下周期性地对环境温度进行监控,或进入关断模式来将器  件功耗降至最低。OS 输出有 2 种可选的工作模式:OS 比较器模式和 OS 中断    式,OS 输出可选择高电平或低电平有效。正常工作模式下,当器件上电时,OS 工作在比较器模式,温度阈值为80℃,滞后阈值为 75℃。低功耗设计,工作电流典型值为 250uA,掉电模式为 3.5uA;宽工作电压范围:2.8V~5.5V。LM75BD 管脚说明如下图:

引脚名称

引脚序号

说明

SDA

1

I2C串行双向数据线,开漏口

SCL

2

I2C串行时钟输入,开漏口

OS

3

过热关断输出,开漏输出

GND

4

地,连接到系统地

A2

5

用户定义的地址2

A1

6

用户定义的地址1

A0

7

用户定义的地址0

VCC

8

电源

a)温度寄存器Temp(地址0x00)

温度寄存器是一个只读寄存器,包含 2 个 8 位的数据字节,由一个高数据字节(MS)和一个低数据字节(LS)组成。这两个字节中只有 11 位用来存放分辨率为 0.125℃的 Temp 数据(以二进制补码数据的形式),如下表所示。对于 8 位的 I2C 总线来说,只要从 LM75BD 的“00地址”连续读两个字节即可(温度的高 8 位在前)。

下表给出了一些 Temp 数据和温度值的例子。

b)配置寄存器(地址 0x01)

配置寄存器为 8 位可读写寄存器,其位功能分配如下表所示。

B7-B5: 保留,默认为 0。

B4-B3: 用来编程 OS 故障队列。00 到 11 代表的值为 1、2、4、6,默认值为 0。

B2: 用来选择 OS 极性。B2=0,OS 低电平有效(默认);B2=1,OS 高电平有效。

B1: 选择 OS 工作模式。B1=0,配置成比较器模式,直接控制外围电路;B1=1,OS 控制输出功能配置成中断模式,以通知 MCU 进行相应处理。

B0: 选择器件工作模式。B0=0,LM75A 处于正常工作模式(默认);B0=1,LM75A 进入关断模式。

c)滞后寄存器 Thyst(0x02)

滞后寄存器是读/写寄存器,也称为设定点    存器,提供了温度控制范围的下限温度。每次转换结束后,Temp 数据(取其高 9 位)将会与存放在该寄存器中的数据相比较,当环境温度低于此温度的时候,LM75BD 将根据当前模式(比较、中断)控制  OS  引脚作出相应反应。该寄存器都包含 2 个 8 位的数据字节,但 2 个字节中,只有 9 位用来存储设定点数据(分辨率为 0.5℃的二进制补码),其数据格式如下表所示,默认为 75℃。

d)超过温关断阈值寄存器 Tos(0x03)

超温关断寄存器提供了温度控制范围的上限温度。每次转换结束后,Temp 数据(取其高 9 位)将会与存放在该寄存器中的数据相比较,当环境温度高于此温度的时候,LM75BD将根据当前模式(比较、中断)控制 OS 引脚作出相应反应。其数据格式如表 4 所示,默认为 80℃。

e)OS 输出

OS  输出为开漏输出口。为了观察到这个输出的状态,需要接一个外部上拉电阻,其阻值应当足够大(高达 200kΩ),以减少温度读取误差。OS 输出可通过编程配置寄存器的 B2 位设置为高或低有效。如下图所示,为 LM75BD在不同模式下 OS 引脚对温度作出的响应。OS 设为低有效。

可以看出,当 LM75BD工作在比较器模式时,当温度高于 Tos 时,OS 输出低电平。此时采取了降温措施,启动降温设备(如风扇),直到温度再降    Thyst,则停止降温,因此在这    式下,LM75BD可以直接控制外部电路来保持环境温度;而在中断模式,则在温度高于 Tos 或低于Thyst 时产生中断。注意:在中断式下,只有当 MCU 对 LM75BD进行读操作后,其中断信号才会消失(图中 OS 变为高电平)。

f)I2C 串行接口

在主控器的控制下,LM75BD可以通过 SCL 和 SDA 作为从器件连接到 I2C 总线上。主控器必须提供 SCL 时钟信号,可以通过 SDA 读出器件数据或将数据写入到器件中。LM75BD从地址(7 位地址)的低 3 位可由地址引脚 A2、A1 和 A0 的逻辑电平来决定。地址的高 4 位预先设置为‘1001’。

2.2    硬件原理图

如下为开发板的温度传感器 LM75BD 部分原理图:

LM75 部分原理图

3程序设计

程序设计比较简单,功能是 FPGA 驱动 LM75 温度传感器不断地读取温度值并送到数码管进行显示。

代码说明:

temp_test.v 是顶层模块,包含了 i2c_read_lm75,hextobcd 和 smg_interface 模块;

i2c_read_lm75.v 是 LM75 的温度读取模块,实时读取温度值;

hextobcd.v 为十六进制转 BCD 模块;

smg_interface.v 为数码管显示模块,在数码管上显示 LM75 的温度。

信号名

方向

管脚

BANK

端口说明

TEM_SCL

output

N2

BANK34

IIC时钟信号线

TEM_SDA

inout

M3

BANK34

IIC双向数据线

TEM_OS

input

P2

BANK34

超温输出

4实验现象

    将工程目录下的bit文件下载至开发板,8位数码管显示实际采集到板卡温度,如下图所示:

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值