DS18B20溫度傳感器 一、簡介:
1.png (22.48 KB, 下載次數(shù): 60)
下載附件
2020-3-30 14:12 上傳
圖示有字的一面,注意GND 和VCC不要接反。工作電壓3.0v~5.5V,采集溫度-55度到正125度,可編程溫度9-12位,精度分別是0.5度,0.25度,0.125度0.0625度,默認都是12位,12位轉(zhuǎn)換時間是750ms,9位是93.75ms,電壓負壓特性(不會因電源接反發(fā)熱燒壞)。 二、電路連接:
2.png (37.48 KB, 下載次數(shù): 79)
下載附件
2020-3-30 14:12 上傳
接一個上拉電阻。 三、通信方式: 單總線通信: 單總線是一種具有一個總線主機和一個或若干個從機的系統(tǒng)。嚴格按照器件的時間要求進行復位,寫命令,讀寫數(shù)據(jù)等。整個過程在一條線上進行。 四、DS18B20的內(nèi)部結構:
3.png (247.47 KB, 下載次數(shù): 67)
下載附件
2020-3-30 14:12 上傳
64位光刻ROM,溫度傳感器,非易失性的溫度報警觸發(fā)器TH和TL,配置寄存器。出廠前ROM的排列是:開始8位產(chǎn)品類型標號(28H),接著48位是DS18B20全球唯一序列號,最后8位是前面56位的循環(huán)冗余校驗碼。 DS18B20存儲器:
4.png (350.65 KB, 下載次數(shù): 62)
下載附件
2020-3-30 14:12 上傳
Byte0和Byte1分別存儲溫度寄存器的低字節(jié)和高字節(jié),這兩個字節(jié)是只讀的。我們一般只操作這兩個字節(jié)。
5.png (256.61 KB, 下載次數(shù): 58)
下載附件
2020-3-30 14:12 上傳
五、DS18B20的指令: 命令有兩種,一種ROM的指令,一種暫存器的指令。
6.png (788.7 KB, 下載次數(shù): 57)
下載附件
2020-3-30 14:12 上傳
六、操作時序: 分為4個步驟: 1. 復位:單片機發(fā)一個低電平給DS18B20,DS18B20返回一個低電平給單片機,完成喚醒握手。 2. 發(fā)送ROM命令 3. 發(fā)送暫存器指令 4. 發(fā)送數(shù)據(jù)或接受數(shù)據(jù) 單個溫度測試代碼: 多點測試:(兩個) 步驟: 1. 先讀出每個傳感器的唯一ROM序列; - /*********************************
- * @函數(shù)名:DS18B20_Read_64Rom
- * @描 述:讀64位的ROM 唯一標識
- * @說 明:
- * @參 數(shù):*buffer 讀出的8個字節(jié)的數(shù)據(jù)
- * @返回值:無
- *********************************/
- void DS18B20_Read_64Rom(uchar *buffer)
- {
- uchar i;
- DS18B20_Reset();//復位
- DS18B20_Write_Com(0x33);//讀64位ROM
- for(i=0;i<8;i++) //讀取64個字節(jié)
- buffer[i]=DS18B20_Read_Data();
- }
復制代碼
7.png (40.36 KB, 下載次數(shù): 62)
下載附件
2020-3-30 14:12 上傳
2. 用兩個數(shù)組存讀出來的序列號:
8.png (88.7 KB, 下載次數(shù): 70)
下載附件
2020-3-30 14:12 上傳
3.寫入ROm序列號,并啟動轉(zhuǎn)換溫度: - /*********************************
- * @函數(shù)名:DS18B20_Write_Rom
- * @描 述:寫64ROM
- * @說 明:發(fā)送匹配ROM命令 0x55再寫入8字節(jié)的ROM
- * @參 數(shù):*buffer 要發(fā)送的存放ROM的數(shù)組
- * @返回值:無
- *********************************/
- void DS18B20_Write_Rom(uchar *buffer)
- {
- uchar i;
- DS18B20_Write_Com(0x55); //ROM匹配
- for(i = 0;i < 8;i++)
- DS18B20_Write_Com(buffer[i]); //寫入8個字節(jié)的ROM
- }
- /*********************************
- * @函數(shù)名:DS18B20_Handle
- * @描 述:溫度處理
- * @說 明:1. 復位 2.發(fā)送ROM命令 3.發(fā)送暫存器指令 讀RAM 4.數(shù)據(jù)
- * @參 數(shù):無
- * @返回值:無
- *********************************/
- void DS18B20_Handle(uchar *buffer)
- {
- uchar xdata value_High,value_Low;
- float num;//保存小數(shù)
- DS18B20_Reset();//復位
- //DS18B20_Write_Com(0xcc);//發(fā)送指令CCH,跳過ROM操作
- //DS18B20_Write_Com(0x33);//讀64位ROM
- DS18B20_Write_Rom(buffer); //匹配ROM 并寫入64ROM
- DS18B20_Write_Com(0x44);//發(fā)送指令44H,啟動溫度轉(zhuǎn)換
- Delay10us();
- DS18B20_Reset();//復位
- DS18B20_Write_Rom(buffer); //匹配ROM 并寫入64ROM
- DS18B20_Write_Com(0xbe);//發(fā)送指令BEH,讀取9字節(jié)RAM數(shù)據(jù)的前兩個數(shù)據(jù)
- Delay10us();
- value_Low=DS18B20_Read_Data();//先讀低字節(jié)Byte0
- value_High=DS18B20_Read_Data();//高字節(jié)Byte1
- value_High<<=4;//整數(shù)的高3位
- value_High+=(value_Low&0xf0)>>4;//整數(shù)的低4位
- DS18B20_Buffer[0]=value_High;//整數(shù)
- num=(value_Low&0x0f)*0.0625;//小數(shù)
- DS18B20_Buffer[1]=(uchar)(num*100);//小數(shù)
- }
復制代碼其他的都和單個測試是一樣的。 測試結果:
9.png (12.09 KB, 下載次數(shù): 71)
下載附件
2020-3-30 14:12 上傳
另外附上主函數(shù): - /*********************************
- * @函數(shù)名:main
- * @描 述:main函數(shù),程序入口
- * @說 明:
- * @參 數(shù):無
- * @返回值:無
- *********************************/
- void main()
- {
- //uchar a[8];//存放讀出來的ROM
- Uart1_Init();//串口初始化
- Send_String("多點溫度測試:\n");
- while(1)
- {
- DS18B20_Handle(DS18B20_Rom1);
- printf("溫度1:%bd.%bd",DS18B20_Buffer[0],DS18B20_Buffer[1]);//串口打印溫度
- putchar_End();//換行
- // DS18B20_Read_64Rom(a);
- // Send_String(a);
- Delay1000ms();
- DS18B20_Handle(DS18B20_Rom2);
- printf("溫度2:%bd.%bd",DS18B20_Buffer[0],DS18B20_Buffer[1]);//串口打印溫度
- Delay1000ms();
- putchar_End();//換行
- }
- }
-
復制代碼DS18B20程序和資料:
DS18B20.zip
(4.21 MB, 下載次數(shù): 113)
2020-3-30 14:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|