2018年1月9日 星期二

DS18B20-讀取暫存器資料

Yeh,有溫度值了!




小卒過河,過了第一階段,也獲得了溫度值,下一階段的目標是透過CRC驗證碼來確認所獲取的資料是正確無誤的,此階段只有兩個步驟,第一步驟就是獲取暫存器之資料值,第二步驟是計算暫存器資料並驗證CRC碼。

第一步驟簡單,就是將資料依序讀出,再依序放入資料陣列中既可。第二步驟就有點煩,但不難,且容後再詳述。

此篇就針對暫存器讀取的部份作說明。

暫存器上架程式架構

下圖就是圖示:讀取DS18B20暫存器內的資料,並上架(Shelve)到Arduino的流程及程式,依序將9筆資料(byte)讀入,並放入暫存器陣列中,以待其他副程式使用。

獲取溫度及列印暫存器資料程式架構


 下圖是讀取暫存器資料,將資料放入暫存器陣列中,再透過溫度值計算獲得溫度值,再列印出暫存器資料的程式架構。

程式碼及其輸出

 此處只列出新增的輸出程式碼的部份,完整的程式碼,會於下一篇的CRC驗證是詳列,此篇的重點是各位可以印證實際測量之值與Datasheet中的資料是否相符合。

程式碼

const uint8_t  g_dq_pin =7;             //Arduino數位腳位7接到DS18B20
uint8_t scratchpad[9];

#define Skip_ROM   0xcc //用於1對1時,省略每次作ROM序號確認程序
#define Convert_T  0x44 //啟動溫度轉換
#define Read_Scratchpad  0xbe //讀取暫存器值,有9個字元

void setup() {
 Serial.begin(9600);
 Serial.println("<>");
}

void loop() {
 Serial.print("DS18b20's Temperature ->");
 Serial.println(getTempC());
 PrintScratchpad();
 delay(3000);
}

void ShelveData() {
 for(int i = 0; i < 9; ++i)
 {
  scratchpad[i]=ReadByte();
 }

}void PrintScratchpad() {
 Serial.println("");
 Serial.println("DS18b20's scratchpad Data ->");

 Serial.print("LSB -> 0x");
 Serial.print(scratchpad[0],HEX);
 Serial.println("");

 Serial.print("MSB -> 0x");
 Serial.print(scratchpad[1],HEX);
 Serial.println("");

 Serial.print("TH REGISTER -> 0x");
 Serial.print(scratchpad[2],HEX);
 Serial.println("");

 Serial.print("TL REGISTER -> 0x");
 Serial.print(scratchpad[3],HEX);
 Serial.println("");

 Serial.print("Configuration Register -> 0x");
 Serial.print(scratchpad[4],HEX);
 Serial.println("");

 for(int i = 5; i < 8; ++i)
 {
  Serial.print("RESERVED ");
  Serial.print(i-4);
  Serial.print(" -> 0x");
  Serial.print(scratchpad[i],HEX);
  Serial.println("");
 }

 Serial.print("CRC -> 0x");
 Serial.print(scratchpad[8],HEX);
 Serial.println("");
 Serial.println("");
}

輸出結果



輸出解析-精密度

在Datasheet中關於解析度的資料是存放於暫存器的第四位元,由R1(bit 6)及R0(bit 5)兩個位元值來顯示,bit 7值應為"0",若為"1"就代表為測試模式,一般出廠時其位元值是設定為"0"。其他低五位(bit0~bit4)通常為1,可以不用去理它。


我們讀取到暫存器中的第四個位元值(byte)為0x3F(二進位為"00111111"),R1="0",R0="1"代表著此顆DS18B20目前設置的精確度為10位元。

結語

讀取暫存器的資料算是簡單的步驟,但卻是不可或缺,同時可以提供你對於掌握手中DS18B20的特性及處理有一精確的掌握。

有了暫存器資料,下一步,我們就可以來作CRC檢驗了!

沒有留言:

張貼留言