本應用筆記介紹了基于MAXQ2000微控制器、MAX31875高分辨率本地溫度傳感器和MAX7219八位LED顯示驅動器的帶LED顯示屏的溫度監測系統。
介紹
MAX31875為精度為±2°C的本地溫度傳感器,具有I2C/SMBus 接口。該器件采用4焊球晶圓級封裝,平均電源電流<10μA,工作溫度范圍為-20°C至+150°C。 MAX31875具有纖巧的封裝、低功耗和出色的精度,可用于各種溫度測量應用,如便攜式設備、手持電子設備和工業設備。本應用筆記提出了溫度監測系統的想法。系統基于MAXQ2000微控制器、MAX31875高分辨率本地溫度傳感器和MAX7219 8位LED顯示驅動器。MAXQ2000通過I讀取溫度2MAX31875的C接口和LED顯示屏通過串行外設接口(SPI)使用MAX7219 LED驅動器實現。
概述
溫度監測系統使用MAXQ2000作為控制器。它用作溫度傳感器和LED顯示屏之間的接口。MAXQ2000通過I接收溫度信息2MAX31875的C接口,為MAX7219產生一個SPI,驅動LED顯示屏。我2MAXQ2000提供的C接口工作頻率為400kHz或100kHz,SPI命令的發送頻率可達8MHz。MAXQ2000通過I持續檢查環境溫度2MAX31875的C接口。一個八位LED以攝氏度為單位顯示MAX31875的本地溫度。MAX7219為緊湊的串行輸入/輸出共陰極顯示驅動器。只需將其連接到八位七段數字LED顯示屏,然后通過SPI從微控制器發送溫度信息。
硬件設置
測試程序在Maxim命令模塊(CMAXQUSB)上運行。它用作從PC接收命令的接口,并創建SPI或SMBus/I2C兼容接口,用于向MAX31875和MAX7219發送命令。板載電平轉換器將MAXQ2000 2.5V邏輯信號轉換為外部VDD邏輯電平。VDD邏輯電平可通過跳線選擇2.5V、3.3V或5V,由板載超低噪聲LDO MAX8511提供。MAX3373為雙向電平轉換器,專為I級設計。2C總線。板載提供可選的用戶可切換 SCL/SDA 上拉電阻。MAX31875評估板帶有VDD、GND、SCL和SDA測試點接頭,連接至CMAXQUSB上的P7連接器。MAX7219用于驅動8位、7段LED顯示屏。MAX7219的SPI連接到CMAXQUSB上的連接器P8。固件通過連接器P5加載到MAXQ2000中。硬件配置如圖 1 所示。實際設置如圖 2 所示。
圖1.溫度監控系統。
圖2.溫度監控設置。
軟件功能
溫度監測程序包括三個主要功能:從MAX31875到I獲取溫度讀數2C接口,向MAX7219發送SPI命令,并將結果輸出到LED顯示屏上。
CMAXQUSB模塊提供了一個“位撞擊”I2C 使用MAXQ2000的GPIO引腳。MAXQ系列微控制器具有高速、靈活的GPIO模塊和獨立的I/O電源電壓,非常適合此類位敲擊應用。
選擇兩個 GPIO 引腳用作 SCL 和 SDA。包括MAXQ2000 I2項目目錄中的 C 庫文件(maxq2000_i2c.h 和 maxq2000_i2c.c),并為 I 配置所需的 I/O2C 接口。
為 SCL 和 SDA 信號選擇 GPIO 引腳的代碼如下:
#define SCL_ENABLE PD6 |= 0x01;
#define SCL_DISABLE PD6 &= 0xFE;
#define SDA_ENABLE PD6 |= 0x02;
#define SDA_DISABLE PD6 &= 0xFD;
#define SCL_HIGHPO6 |= 0x01;
#define SCL_LOWPO6 &= 0xFE;
#define SDA_HIGHPO6 |= 0x02;
#define SDA_LOWPO6 &= 0xFD;
要從MAX31875讀取溫度,請向IC地址0x90發送讀取命令,并0x00溫度寄存器地址。MAX31875的溫度寄存器以二進制補碼格式顯示;MSB 是符號位。
獲取溫度的代碼如下所示。maxq2000_i2c.c文件中的TxByte用于傳輸I上的8位字節2C總線,和我2C_RxByte用于從從接收8位字節。要從浮點型 GetTEMP() 讀取溫度:
{
int temp;
float number=0;
int temp_reg;
// first set the address
I2C_Start();
I2C_TxByte(0x90);
if (!checkForValidAck()) return -1;
I2C_TxByte(0x00);
if (!checkForValidAck()) return -1;
I2C_Stop();
// now read the data
I2C_Start();
I2C_TxByte(0x91);
if (!checkForValidAck()) return -1;
temp=I2C_RxByte();
I2C_TxBit(0);
temp=temp<<8;
temp|=I2C_RxByte();
I2C_TxBit(1);
I2C_Stop();
temp_reg=temp&0X7FFF;//get unsigned bit
temp=temp>>15;//get sign
if(temp)
sign=1;
else
sign=0;
number=(temp_reg-sign*32768)*0.0625/8 ;
return number;
}
從MAX31875接收的溫度讀數通過SPI和MAX7219的寄存器發送到MAX7219。spi_transmit() 執行如下所示的 SPI 傳輸。
unsigned int spi_transmit(const unsigned int ch)
{
unsigned int spib;
while(SPICN_bit.STBY);/* Wait until the character can be sent. */
SPICN_bit.SPIC = 0; /* In case it is already set, clear the */
/* transfer complete flag. */
SPIB = ch; /* Send the data. */
while(!SPICN_bit.SPIC); /* Wait for the transfer to complete. */
spib = SPIB; /* Get the data received. */
SPICN_bit.SPIC = 0; /* Clear the tansfer complete flag. */
return spib;
}
MAX7219驅動8位、7段LED顯示屏。MAX7219提供BCD碼B解碼器。但是,為了顯示攝氏符號,我們使用無解碼模式。MAX7219的寄存器數據被分配一個數字模式,因此,每個LED可以顯示相應的數字。
char digit_pattern[] =
{ 0x7E, // 0
0x30, // 1
0x6D, // 2
0x79, // 3
0x33, // 4
0x5b, // 5
0x5F, // 6
0x70, // 7
0x7F, // 8
0x7B, // 9
0x77, // A
0x1F, // b
0x4E, // C
0x3d, // d
0x4f, // E
0x47 // F
};
max7219_writeregister(MAX7219REG_Degree,digit_pattern[12],LENGTH_16);// Display Celsius sign
測試結果
將此溫度監測器放入福祿克?油浴校準器內,收集 -20°C 至 +150°C 的溫度讀數。 監視器在整個溫度范圍內的精度(圖3)低于1°C。
圖3.精度與溫度的關系。
結論
MAX31875為精確的本地溫度傳感器。使用MAXQ2000的SPI和I2C接口,該溫度監測系統可通過MAX7219顯示實時溫度,作為低成本溫度監測器工作。
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
連接器
+關注
關注
98文章
14476瀏覽量
136430 -
接口
+關注
關注
33文章
8575瀏覽量
151021
發布評論請先 登錄
相關推薦
評論