如題,如果觸發了報警,18B20會不會在在資料線上有什么電平來表示報警。
還有在進行哪些操作之前要進行初始化
uj5u.com熱心網友回復:
請高手指點,感激不進!uj5u.com熱心網友回復:
不會,要自己去讀取暫存器.uj5u.com熱心網友回復:
DS18B20只是一個測溫元件,所謂的報警功能要通程序式由單片機來實作。 DS18B20溫度傳感器的內部存盤器包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8位元組的存盤器,頭2個位元組包含測得的溫度資訊,第3和第4位元組TH(報警溫度上限)和TL(報警溫度下限)的拷貝。第5個位元組,為配置暫存器,它的內容用于確定溫度值的數字轉換解析度。第6、7、8位元組保留未用。 要實作報警,完成溫度轉換后,就把測得的溫度值與RAM中的TH、TL位元組內容作比較(當然要自己編程式)。若T>TH或T<TL,則將報警標志位置位,然后單片機通過一埠連接一個LED或者蜂鳴器來實作報警uj5u.com熱心網友回復:
模塊(Digital Temperature Sensor)是基于DS18B20的單總線的數字型溫度傳感器模塊。因單總線介面可使多個DS18B20掛接于同一根總線上,且板載便于多點測溫的介面,利用多個數字溫度傳感器模塊可實作一根信號線測量一大片區域的多點溫度。板載上拉電阻,可直接與大多數單片機連接,測量的溫度范圍為-55~+125℃,其中在-10~+85℃范圍內的精度為±0.5℃,廣泛應用于建筑物、儀器、機器、溫室大棚等溫度的檢測與控制。該設備采用的是單線總線通訊模式,理論上在一對線上可以有8個模塊作業,我采用的是Arduino MINI模塊對他進行采集的,代碼如下:
#include <OneWire.h>
int DeviceAdd = 5 ;
int TempLine = 10 ;
OneWire ds(TempLine); // on pin 2 (a 4.7K resistor is necessary)
void ReportTemp()
{
byte data[12];
float celsius;
ds.reset();
ds.skip();
ds.write(0x44, 0); // start conversion
delay(1000); // maybe 750ms is enough, maybe not
ds.reset();
ds.skip();
ds.write(0xBE); // Read Scratchpad
for (unsigned char i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
//Serial.print(data[i], HEX);
//Serial.print(" ");
}
//Serial.print(" CRC=");
//Get CRC
data[9] = OneWire::crc8(data, 8) ;
//Serial.println();
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
celsius = (float)raw / 16.0;
Serial.print("@");
Serial.print(DeviceAdd);
Serial.print("=");
Serial.print(celsius);
Serial.println("");
delay(500) ;
digitalWrite(2,HIGH) ;
}
void setup()
{
Serial.begin(9600);
pinMode(2,OUTPUT);
digitalWrite(2,LOW) ;
}
void loop()
{
if ( Serial.available() <= 0) return ;
String ComStr = "" ;
char c ;
// Read all serial data
while(Serial.available()>0) {
c=Serial.read(); // Must cover byte type to char first
ComStr+=c;
delay(2); // Must wait the next char
}
String sTemp = "?";
sTemp = sTemp + DeviceAdd ;
c=13;
if (ComStr.length()<=0) return ;
if (ComStr==sTemp||ComStr[0]=='!'||ComStr==(sTemp+"\r\n")) ReportTemp();
else {
digitalWrite(2,HIGH) ;
}
}
需要使用的OneWire.h你在網上搜下可以找到,找不到留言我
uj5u.com熱心網友回復:
看來樓主不太在乎啊,我的代碼很清楚,如果采用arduino的話,直接使用我的代碼就可以用,在reporttemp函式里celsius變數就是溫度值。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/118581.html
標籤:茶館
