分類: Arduino

AHT10 Sensor

No Comments

使用上相對單純。整理出基本用法。得以若寫程式時可參考。

  • IIC Address:0x38
  • Soft Reset:takes < 20ms。used when needed。0xBA
  • Initialize:0xE1。used before first access,initialize once。command sequence:
    0xE1 -> 0x08 ->0x00。
  • 初始化之後,必須先取得狀態碼 BIT3 為 1(calibrated),則表示 AHT10 初始化完成,則之後的溫溼度數據才有意義。但問題是狀態碼的取得,與數據,在 datasheet 內是包在一起的指令。故實作時當嘗試部份讀取或全讀取,哪種是 OK 的。
  • 萬一 BIT3 為零,則需 soft reset 並且重新 initialize 地重覆以上步驟直至成功。
  • 接著每要讀取一筆數據,便需發一次觸發量測的命令。IIC WRITE -> 0xAC -> 0x33 -> 0x00。因此,照這樣看來,或許也需有發此命令,才能取得最新的狀態碼。
  • 命令後的延遲時間是 75ms 使得可以取得完成的有效數據。
  • 以上成功之後便可做數據的讀取如下:IIC READ -> 狀態碼(1-byte)-> 溼度(1-byte)-> 溼度(1-byte)-> 溼溫度(4-bit 溼度 4-bit 溫度) -> 溫度(1-byte)-> 溫度(1-byte)。
  • 其中,狀態碼 BIT7 代表 AHT10 是否正在取樣。若其值 1,則表示數據數值無效(busy)。這也表示了,是否只要部份讀取是可行的,當數據無效時。
  • 最後我們看到,數據有 20 bits。但根據算式,可知用上 20 bits 意義不大。因此我們可以改寫算式,基於 10 bits 的精細度是 1/1024 = 0.000976562 定為 RdRateH,RdRateT= 1/2048 = 0.000488281。故,
  • 溼度:(MSB 10-bit H-data) x RdRateH x 100%。
  • 溫度:因計算上溫度還有進一步放大 200 倍(則 raw data 該更細),offset 50。因 10-bit 是千分之一的精確度,11-bit 便足以應付此放大。故,(MSB 11-bit T-data) x RdRateT x 200 – 50。則溫度便可精確到小數點下第一位,應是適切。
  • 以上,有中斷傳輸的可能,恰之前寫的 FunctionalIIC 可應付。

Categories: Arduino Arduino Brick

Tags:

PHP Code Snippets Powered By : XYZScripts.com