TMP100 - Digital Temperature Sensor with I2C Interface

Posted by: 邱小新 at 上午11:38 in

TMP100 是一顆用來量測溫度的 IC,具有 I2C 接口可以讀取溫度數值。

Slave Address

ADDR1ADDR0address
000x90(1001000)
0float0x92(1001001)
010x94(1001010)
100x98(1001100)
1float0x9A(1001101)
110x9C(1001110)
float00x96(1001011)
float10x9E(1001111)

TMP100 的值只有四組,address 則由 Point Register 控制,其實說穿了根本就跟一般的存取動作一樣;也就是 slave address, point register, slave address, data 的方式做存取動作。

Point
Register
R/WDescription
0RTemperature Register
1R/WConfiguration Register
2R/WT/LOW Register
3R/WT/HIGH Register

Temperature Register

Temperature Register 只能讀取,其值是現在溫度,有正負數值。一次要讀二個 byte,第一個 byte 表示整數值的溫度,第二個 byte 的 bit(7~4) 表示小數值,bit(3~0) 沒用到。所以一般只讀一個 byte 即可,不用讀第二個 byte。

Temerature (°C)byte 1byte 2
1280111111111110000
127.93750111111111110000
1000110010000000000
250001100100000000
0.250000000001000000
00000000000000000
-0.251111111111000000
-251110011100000000
-1281000000000000000

Configuration Register

bitsignDescription
7SDShutdown Mode
6TMThermostat Mode
5POLPolarity
4F0FAULT QUEUE
3F1
2R0Converter Resolution
1R1
0OSOS/ALERT

WT61P9 的 Device_RW_Register_Routine

Posted by: 邱小新 at 上午11:05 in

Device_RW_Register_Routine 是同事設計用來做一些額外的工作。

  • (12)CMD_INDEX: command register,指令變數。
  • (13)CMD_REG: command parameter,給 shock command 用。
  • (14)CMD_DATA: command data,回傳或寫入資料。

CMD_INDEX

  • bit 7: new command,在 main loop 會判斷此值才進入 routine,該值會馬上被清空,以防止重覆執行。
  • bit 6: read。
  • bit 5: write。
  • bit 5&6: reset,重置所有 LED 警示燈號。
  • bit 4: slave done,指令做完會設成 1,當 busy flag 用。
  • bit 3: read profile parameter。
  • bit 2: write profile parameter。
  • bit 1: shock。
  • bit 0: TMP10x。

C preprocessor

Posted by: 邱小新 at 下午4:07

標準指令

  • #include
  • #define
  • #if
  • #ifdef
  • #ifndef
  • #else
  • #elif
  • #endif

特殊指令

  • #pragma
  • #error
  • #warning

巨集指令

  • __STDC__
  • __STDC_VERSION__
  • __cplusplus(C++)
  • __DATE__
  • __TIME__
  • __func__(C99)

Paradigm debug

Posted by: 邱小新 at 下午3:51 in

每次拿到別人或是原廠的 code,總是包含一堆 #ifdef,有的還是巢狀 #if #else,看到最後都快暈倒了。最後為了看是否此段原始碼到底有沒有被 compile,總是要耗費不少時間,有時還會看錯咧。

#pragma message "test"

今天讓我發現一個好用的巨集指令,也就是 #pragma message。只要在程式碼的上一行加入 #pragma message "test",然後再經過編譯,看一下編譯結果有沒有一個 warning 叫 "test" 就知道此段程式碼有被編譯,而不用幸苦的對程式碼。