再論TI TMP102
雖然TMP102只是一個温度感測器, 但因為它使用I2C溝通界面, 讓我們可以學習I2C的用法, 而且架構簡單, 用起來不難, 但又有許多功能可以設定, 玩起來很有意思, 最主要的是其温度感測算是很準, 所以我一直很喜歡這顆。加上網路上也有很多人在用, 討論的文章和驅動程式都很容易找到, 所以這裡我想再談一下這顆的一些用法。 1. 驅動程式的寫法: 其實可以不用自己寫驅動程式, 如果你使用Arduino, 那Sparkfun已經幫大家寫好了: SparkFun_TMP102_Arduino_Library 請直接拿去用就好了! 如果你使用MicroPython, 那khoulihan也寫好一個: khoulihan/micropython-tmp102 , 他其實已經寫得很好。 但是我還是自己用MicroPython再寫了一次, 原因是khoulihan的驅動太完整了, TMP102所有的功能都實作了! 可惜的是我想用的一個開發板的Flash空間太小, 放了這個驅動後, 剩下的空間就太小了, 要寫其他的程式就很受限! 另外, 在自己改寫的過程中, 我發現自己又學到一些東西。雖然多花了幾天時間在嘗試, 還是收穫不少! 其實2017年在玩PyMata的時候, 就已經寫過TMP102的驅動, 參見 python code for pymata tmp102 , 但這個是架在PyMata之上的, 基本上是在PC上面執行, 稱之為驅動, 似乎有些奇怪。但程式邏輯和想法基本上相同。 操作TMP102的方法, 很簡單, 就是設定其暫存器的值就可以了, 如下圖 (取自TMP102的datasheet), TMP102主要有4個暫存器, (還有一個指位暫存器Pointer Register), 要取得温度值, 就讀取Temperature Register的內容值, 再做一些格式轉換即可。要讓TMP102進入省電的Shutdown模式, 就只要將Configuration Register內的某一個位元設成1就可以了。問題是如何指定要存取那個暫存器呢? 那就要在指位暫存器先指定就可以了, 例如, 將指位暫存器設成0x01, 就可以存取Configuration Register。 不過, 在讀或寫暫存器值時, 指...