• 方案介紹
    • 1實驗簡介
    • 2實驗原理
    • 3程序設(shè)計
    • 4實驗現(xiàn)象
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LM75溫度傳感器數(shù)碼管顯示溫度verilog代碼

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1-231030224622533.docx

共1個文件

名稱:LM75溫度傳感器數(shù)碼管顯示溫度(代碼在文末付費下載)

軟件:VIVADO

語言:Verilog

代碼功能:

使用verilog編寫代碼,讀取IICI2C)接口的LM75溫度傳感器數(shù)據(jù),并在數(shù)碼管顯示,代碼兼容LM75A,LM75BD,tmp1075

本代碼已在開發(fā)板驗證,開發(fā)板資料:

FPGA代碼Verilog/VHDL代碼資源下載網(wǎng):www.hdlcode.com

部分代碼展示

//?*************************************************************/
`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)

設(shè)計文檔:

1實驗簡介

本教程介紹使用溫度傳感器 LM75 來進行溫度測試,例程中主要介紹溫度傳感器的 ?FPGA 驅(qū)動和數(shù)碼管顯示。

2實驗原理

2.1 LM75原理介紹

LM75BD 是一個高速 I2C 接口的溫度傳感器,可以在-55℃~+125℃的溫度范圍內(nèi)將溫度直接轉(zhuǎn)換為數(shù)字信號,并可實現(xiàn) 0.125℃的精度。

控制器可以通過 I2C 總線直接讀取其內(nèi)部寄存器中的數(shù)據(jù),并可通過 I2C 對 4 個數(shù)據(jù)寄存器進行操作,以設(shè)置成不同的工作式。

LM75BD有 3 個可選的邏輯地址管腳,使得同一總線上可同時連接 8 個器件而不發(fā)生地址沖突。

LM75BD 可配置成不同的工作模式。它可設(shè)置成在正常工作方式下周期性地對環(huán)境溫度進行監(jiān)控,或進入關(guān)斷模式來將器 件功耗降至最低。

OS 輸出有 2 種可選的工作模式:OS 比較器模式和 OS 中斷方式,OS 輸出可選擇高電平或低電平有效。

正常工作模式下,當(dāng)器件上電時,OS 工作在比較器模式,溫度閾值為80℃,滯后閾值為 75℃。

低功耗設(shè)計,工作電流典型值為 250uA,掉電模式為 3.5uA;寬工作電壓范圍:2.8V~5.5V。

LM75BD 管腳說明如下圖:

引腳名稱

引腳序號

說明

SDA

1

I2C串行雙向數(shù)據(jù)線,開漏口

SCL

2

I2C串行時鐘輸入,開漏口

OS

3

過熱關(guān)斷輸出,開漏輸出

GND

4

地,連接到系統(tǒng)地

A2

5

用戶定義的地址2

A1

6

用戶定義的地址1

A0

7

用戶定義的地址0

VCC

8

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

溫度寄存器是一個只讀寄存器,包含?2?個?8?位的數(shù)據(jù)字節(jié),由一個高數(shù)據(jù)字節(jié)(MS)和一個低數(shù)據(jù)字節(jié)(LS)組成。這兩個字節(jié)中只有?11?位用來存放分辨率為?0.125℃的?Temp?數(shù)據(jù)(以二進制補碼數(shù)據(jù)的形式),如下表所示。對于?8?位的?I2C?總線來說,只要從?LM75BD?的“00地址”連續(xù)讀兩個字節(jié)即可(溫度的高?8?位在前)。

下表給出了一些 Temp 數(shù)據(jù)和溫度值的例子。

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

配置寄存器為 8 位可讀寫寄存器,其位功能分配如下表所示。

B7-B5: 保留,默認(rèn)為 0。

B4-B3: 用來編程 OS 故障隊列。00 到 11 代表的值為 1、2、4、6,默認(rèn)值為 0。

B2: 用來選擇 OS 極性。B2=0,OS 低電平有效(默認(rèn));B2=1,OS 高電平有效。

B1: 選擇 OS 工作模式。B1=0,配置成比較器模式,直接控制外圍電路;B1=1,OS 控制輸出功能配置成中斷模式,以通知 MCU 進行相應(yīng)處理。

B0: 選擇器件工作模式。B0=0,LM75A 處于正常工作模式(默認(rèn));B0=1,LM75A 進入關(guān)斷模式。

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

滯后寄存器是讀/寫寄存器,也稱為設(shè)定點 ? ?存器,提供了溫度控制范圍的下限溫度。每次轉(zhuǎn)換結(jié)束后,Temp 數(shù)據(jù)(取其高 9 位)將會與存放在該寄存器中的數(shù)據(jù)相比較,當(dāng)環(huán)境溫度低于此溫度的時候,LM75BD 將根據(jù)當(dāng)前模式(比較、中斷)控制 ?OS ?引腳作出相應(yīng)反應(yīng)。該寄存器都包含 2 個 8 位的數(shù)據(jù)字節(jié),但 2 個字節(jié)中,只有 9 位用來存儲設(shè)定點數(shù)據(jù)(分辨率為 0.5℃的二進制補碼),其數(shù)據(jù)格式如下表所示,默認(rèn)為 75℃。

d)超過溫關(guān)斷閾值寄存器 Tos(0x03)

超溫關(guān)斷寄存器提供了溫度控制范圍的上限溫度。每次轉(zhuǎn)換結(jié)束后,Temp 數(shù)據(jù)(取其高 9 位)將會與存放在該寄存器中的數(shù)據(jù)相比較,當(dāng)環(huán)境溫度高于此溫度的時候,LM75BD將根據(jù)當(dāng)前模式(比較、中斷)控制 OS 引腳作出相應(yīng)反應(yīng)。其數(shù)據(jù)格式如表 4 所示,默認(rèn)為 80℃。

e)OS 輸出

OS ?輸出為開漏輸出口。為了觀察到這個輸出的狀態(tài),需要接一個外部上拉電阻,其阻值應(yīng)當(dāng)足夠大(高達 200kΩ),以減少溫度讀取誤差。OS 輸出可通過編程配置寄存器的 B2 位設(shè)置為高或低有效。如下圖所示,為 LM75BD在不同模式下 OS 引腳對溫度作出的響應(yīng)。OS 設(shè)為低有效。

可以看出,當(dāng) LM75BD工作在比較器模式時,當(dāng)溫度高于 Tos 時,OS 輸出低電平。此時采取了降溫措施,啟動降溫設(shè)備(如風(fēng)扇),直到溫度再降 ? ?Thyst,則停止降溫,因此在這 ? ?式下,LM75BD可以直接控制外部電路來保持環(huán)境溫度;而在中斷模式,則在溫度高于 Tos 或低于Thyst 時產(chǎn)生中斷。注意:在中斷式下,只有當(dāng) MCU 對 LM75BD進行讀操作后,其中斷信號才會消失(圖中 OS 變?yōu)楦唠娖剑?/p>

f)I2C 串行接口

在主控器的控制下,LM75BD可以通過 SCL 和 SDA 作為從器件連接到 I2C 總線上。主控器必須提供 SCL 時鐘信號,可以通過 SDA 讀出器件數(shù)據(jù)或?qū)?shù)據(jù)寫入到器件中。LM75BD從地址(7 位地址)的低 3 位可由地址引腳 A2、A1 和 A0 的邏輯電平來決定。地址的高 4 位預(yù)先設(shè)置為‘1001’。

2.2 ? ?硬件原理圖

如下為開發(fā)板的溫度傳感器 LM75BD 部分原理圖

LM75 部分原理圖

3程序設(shè)計

程序設(shè)計比較簡單,功能是 FPGA 驅(qū)動 LM75 溫度傳感器不斷地讀取溫度值并送到數(shù)碼管進行顯示。

代碼說明:

temp_test.v 是頂層模塊,包含了 i2c_read_lm75,hextobcd 和 smg_interface 模塊;

i2c_read_lm75.v 是 LM75 的溫度讀取模塊,實時讀取溫度值;

hextobcd.v 為十六進制轉(zhuǎn) BCD 模塊;

smg_interface.v 為數(shù)碼管顯示模塊,在數(shù)碼管上顯示 LM75 的溫度。

信號名

方向

管腳

BANK

端口說明

TEM_SCL

output

N2

BANK34

IIC時鐘信號線

TEM_SDA

inout

M3

BANK34

IIC雙向數(shù)據(jù)線

TEM_OS

input

P2

BANK34

超溫輸出

4實驗現(xiàn)象

將工程目錄下的bit文件下載至開發(fā)板,8位數(shù)碼管顯示實際采集到板卡溫度,如下圖所示:

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=223

  • 1-231030224622533.docx
    下載

相關(guān)推薦