核心驅動 ds1621¶
支援的晶片
Dallas Semiconductor / Maxim Integrated DS1621
字首: ‘ds1621’
掃描地址: 無
資料手冊: 可從 www.maximintegrated.com 公開獲取
Dallas Semiconductor DS1625
字首: ‘ds1625’
掃描地址: 無
資料手冊: 可從 www.datasheetarchive.com 公開獲取
Maxim Integrated DS1631
字首: ‘ds1631’
掃描地址: 無
資料手冊: 可從 www.maximintegrated.com 公開獲取
Maxim Integrated DS1721
字首: ‘ds1721’
掃描地址: 無
資料手冊: 可從 www.maximintegrated.com 公開獲取
Maxim Integrated DS1731
字首: ‘ds1731’
掃描地址: 無
資料手冊: 可從 www.maximintegrated.com 公開獲取
- 作者
Christian W. Zuckschwerdt <zany@triq.net>
Jan M. Sendler <sendler@sendler.de> 提供了寶貴貢獻
Aurelien Jarno <aurelien@aurel32.net> 在 Jean Delvare <jdelvare@suse.de> 的幫助下移植到 2.6 版本
模組引數¶
polarity int 輸出極性
0 = 高電平有效,
1 = 低電平有效
描述¶
DS1621 是一種(一個例項)數字溫度計和恆溫器。它具有高低溫限制,可由使用者定義(即程式設計到片上非易失性暫存器中)。溫度範圍為 -55 攝氏度到 +125 攝氏度,增量為 0.5 攝氏度。您可以將其轉換為華氏溫度範圍 -67 到 +257 華氏度,步長為 0.9 華氏度。如果未提供極性引數,則使用原始值。
至於恆溫器,其行為也可以透過極性切換進行程式設計。一方面(“加熱器”),當達到或低於低溫限制時,晶片的恆溫器輸出 Tout 將觸發並保持高電平,直到達到或超過高溫限制。另一方面(“冷卻器”),則相反。這樣,“加熱器”等同於“低電平有效”,而“冷卻器”等同於“高電平有效”。請注意,DS1621 資料手冊在這一點上有些誤導,因為設定極性位並不會簡單地反轉 Tout。
其次,在大量測試中,即使與精確的溫度讀數相比,Tout 也顯示出高達 +/- 0.5 度的容差。不過,請務必設定至少 1.0 攝氏度的高溫與低溫限制差值,以避免 Tout“跳動”!
當達到或超過高限或低限時,警報位會被設定;一旦離開相應的溫度範圍,模組就會重置它們。
報警暫存器絕不適合用來了解 Tout 的實際狀態。它們只會告訴你它的歷史,即自上次上電或復位以來,是否有任何限值曾被達到或超過。請注意:在測試時,發現 Tout 的狀態可以在沒有任何警報設定的情況下發生變化。
由於沒有版本或供應商識別暫存器,因此這些裝置沒有唯一的標識。因此,需要顯式裝置例項化才能正確識別和實現裝置功能(此地址範圍內的每個地址一個裝置:0x48..0x4f)。
DS1625 與 DS1621 引腳相容且功能等效,但 DS1621 旨在取代它。DS1631、DS1721 和 DS1731 也與 DS1621 引腳相容,並提供多解析度支援。
此外,DS1721 資料手冊稱溫度標誌(THF 和 TLF)在內部使用,然而,當實際溫度超過最小或最大設定(預設分別設定為 75 和 80 度)時,這些標誌確實會被設定和清除。
溫度轉換¶
DS1621 - 750ms(舊裝置可能需要長達 1000ms)
DS1625 - 500ms
DS1631 - 解析度為 9..12 位時分別為 93ms..750ms。
DS1721 - 解析度為 9..12 位時分別為 93ms..750ms。
DS1731 - 解析度為 9..12 位時分別為 93ms..750ms。
注意: 對於 DS1621,內部訪問非易失性暫存器可能持續 10ms 或更短(其他裝置未經證實)。
溫度精度¶
DS1621: +/- 0.5 攝氏度 (從 0 到 +70 攝氏度)
DS1625: +/- 0.5 攝氏度 (從 0 到 +70 攝氏度)
DS1631: +/- 0.5 攝氏度 (從 0 到 +70 攝氏度)
DS1721: +/- 1.0 攝氏度 (從 -10 到 +85 攝氏度)
DS1731: +/- 1.0 攝氏度 (從 -10 到 +85 攝氏度)
注意
其他溫度下的精度請參考裝置資料手冊。
溫度解析度:¶
如上所述,DS1631、DS1721 和 DS1731 提供多解析度支援,這是透過 R0 和 R1 配置暫存器位實現的,其中
R0..R1¶
R0 |
R1 |
|
|---|---|---|
0 |
0 |
9 位,0.5 攝氏度 |
1 |
0 |
10 位,0.25 攝氏度 |
0 |
1 |
11 位,0.125 攝氏度 |
1 |
1 |
12 位,0.0625 攝氏度 |
注意
裝置首次上電時,預設解析度設定為 12 位。
DS1631、DS1721 或 DS1731 的解析度模式可以透過使用者空間,透過裝置“update_interval”sysfs 屬性進行更改。此屬性會將輸入值的範圍標準化到資料手冊中定義的裝置最大解析度值,如下所示
解析度 |
轉換時間 |
輸入範圍 |
|---|---|---|
(C/LSB) |
(毫秒) |
(毫秒) |
0.5 |
93.75 |
0....94 |
0.25 |
187.5 |
95...187 |
0.125 |
375 |
188..375 |
0.0625 |
750 |
376..無限 |
以下示例展示瞭如何使用“update_interval”屬性更改轉換時間
$ cat update_interval
750
$ cat temp1_input
22062
$
$ echo 300 > update_interval
$ cat update_interval
375
$ cat temp1_input
22125
$
$ echo 150 > update_interval
$ cat update_interval
188
$ cat temp1_input
22250
$
$ echo 1 > update_interval
$ cat update_interval
94
$ cat temp1_input
22000
$
$ echo 1000 > update_interval
$ cat update_interval
750
$ cat temp1_input
22062
$
如圖所示,ds1621 驅動程式透過步進函式自動調整“update_interval”使用者輸入。寫入操作後讀回“update_interval”值可提供裝置使用的轉換時間。
在數學上,解析度可以透過以下函式從轉換時間中匯出
g(x) = 0.5 * [minimum_conversion_time/x]
其中
‘x’ = ‘update_interval’的輸出
‘g(x)’ = 每 LSB 的攝氏度解析度。
93.75ms = 最小轉換時間