ZHCAFX9 August 2025 HDC1010 , HDC1080 , HDC2010 , HDC2021 , HDC2022 , HDC2080 , HDC3020 , HDC3020-Q1 , HDC3021 , HDC3021-Q1 , HDC3022 , HDC3022-Q1 , HDC3120
TI 的第一代 HDC1x 器件都共享同一個寄存器映射(如 表 2-1 中所示)。因此,以下說明適用于 HDC1x 系列。
| 指針 | 名稱 | 復(fù)位值 | 說明 |
|---|---|---|---|
| 0x00 | 溫度 | 0x0000 | 溫度測量輸出 |
| 0x01 | 濕度 | 0x0000 | 相對濕度測量輸出 |
| 0x02 | 配置 | 0x1000 | HDC1080 配置和狀態(tài) |
| 0xFB | 串行 ID | 視器件而定 | 器件串行 ID 的前 2 個字節(jié) |
| 0xFC | 串行 ID | 視器件而定 | 器件串行 ID 的中間 2 個字節(jié) |
| 0xFD | 串行 ID | 視器件而定 | 器件串行 ID 的最后一個字節(jié)位 |
| 0xFE | 制造商 ID | 0x5449 | 德州儀器 (TI) 的 ID |
| 0xFF | 器件 ID | 0x1050 | 器件的 ID |
首先,用戶必須向 表 2-2 (0x02) 中的寄存器寫入一個 16 位值,以便按順序定義測量序列——溫度和/或濕度。
| 名稱 | 位 | 說明 | ||
|---|---|---|---|---|
| RST | [15] | 軟件復(fù)位位 | 0 | 正常運行,該位會自行清除 |
| 1 | 軟件復(fù)位 | |||
| 保留 | [14] | 保留 | 0 | 保留,必須為 0 |
| 加熱 | [13] | 加熱器 | 0 | 加熱器已禁用 |
| 1 | 加熱器已使能 | |||
| 模式 | [12] | 采集模式 | 0 | 采集溫度或濕度。 |
| 1 | 按順序獲取溫度和濕度,先獲取溫度。 | |||
| BTST | [11] | 電池狀態(tài) | 0 | 電池電壓 > 2.8V(只讀) |
| 1 | 電池電壓 < 2.8V(只讀) | |||
| TRES | [10] | 溫度測量分辨率 | 0 | 14 位 |
| 1 | 11 位 | |||
| HRES | [9:8] | 濕度測量分辨率 | 00 | 14 位 |
| 01 | 11 位 | |||
| 10 | 8 位 | |||
| 保留 | [7:0] | 保留 | 0 | 保留,必須為 0 |
在以下示例中,HDC1x 配置為通過將 0x10 (MSB) 和 0x00 (LSB) 寫入寄存器來按順序測量溫度和濕度。圖 2-2 顯示了設(shè)置的寄存器位。
當(dāng) HDC1x 設(shè)置為按順序輸出溫度和濕度時,用戶必須開始從溫度寄存器 (0x00) 的 4 個字節(jié)讀取。
用于設(shè)置配置的代碼如下:
Wire.beginTransmission(0x40); // initiate communication with HDC1x
Wire.write(0x02); // point to configuration register
Wire.write(0x10); // write 8-bit configuration to config register (MSB)
Wire.write(0x00); // write 8 0s to Reserved bits (LSB)
Wire.endTransmission();接下來,通過寫入器件地址 (0x40) 來觸發(fā)測量過程。
Wire.beginTransmission(0x40); // initiate communication with HDC1x
Wire.write(0x00); // start measurements
Wire.endTransmission();
delay(20); // wait 20ms for conversion to complete.由于按順序測量溫度和濕度,因此需要從寄存器 0x00 的 4 個字節(jié)讀取。前兩個字節(jié)對應(yīng)溫度,之后的兩個字節(jié)對應(yīng)濕度數(shù)據(jù)。
Wire.requestFrom(0x40, 4); // requesting 4 bytes from device
// once 4 bytes are received, store this in appropriate variables
if (Wire.available() == 4) {
// stores raw temperature and humidity data
// reads/stores first byte (MSB), then reads/stores second byte
// combines each pair of bytes into a 16-bit integer
uint16_t tempBytes = (Wire.read() << 8) | Wire.read();
uint16_t humBytes = (Wire.read() << 8) | Wire.read();
}最后,應(yīng)用 HDC1x 數(shù)據(jù)表中的標準轉(zhuǎn)換公式:
// equation for converting temperature output in Celsius
temp = (tempBytes / 65536.0) * 165.0 - 40.0;
// equation for converting humidity output
hum = (humBytes / 65536.0) * 100.0;此 Arduino 示例演示了在按順序采集測量值時如何從 HDC1x 傳感器讀取和存儲溫度和濕度數(shù)據(jù)。存儲原始數(shù)據(jù)后,可以使用 HDC1x 數(shù)據(jù)表中提供的公式將其轉(zhuǎn)換為實際溫度和濕度值。
此處的 TI GitHub 環(huán)境傳感器存儲庫上提供了的完整工作例子。