तापमान सेंसर तकनीक

STM32 के लिए DS18B20 डिजिटल तापमान सेंसर का डिज़ाइन

DS18B20 Temperature Sensing Wire Stainless Steel Probe Kit

DS18B20 is a digital temperature sensor that uses a single bus timing to communicate with the host. Only 1 Wire is needed to complete the temperature data reading;

DS18B20 has a built-in 64-bit product serial number for easy identification. Multiple DS18B20 sensors can be connected to 1 तार, and through 64-bit identity authentication, the temperature information collected from different sensors can be read separately.

DS18B20 Temperature Sensing Wire Stainless Steel Probe Kit

DS18B20 Temperature Sensing Wire Stainless Steel Probe Kit

DS18B20 temperature sensor probe TPE Overmolding kit

DS18B20 temperature sensor probe TPE Overmolding kit

1 wire DS18B20 temperature sensor

1 wire DS18B20 temperature sensor

Introduction to DS18B20
2.1 Main features of DS18B20
1. Fully digital temperature conversion and output.
2. Advanced single bus data communication.
3. Up to 12-bit resolution, with an accuracy of up to ±0.5 degrees Celsius.
4. The maximum working cycle at 12-bit resolution is 750 मिलीसेकंड.
5. परजीवी कार्य मोड का चयन किया जा सकता है.
6. पता लगाने का तापमान रेंज -55° C ~+125° C है (-67° फ़ारेनहाइट ~+257° फ़ारेनहाइट).
7. अंतर्निहित ईईपीरोम, तापमान सीमा अलार्म फ़ंक्शन.
8. 64-बिट फोटोलिथोग्राफी ROM, अंतर्निहित उत्पाद क्रमांक, मल्टी-मशीन कनेक्शन के लिए सुविधाजनक.
9. विभिन्न पैकेजिंग फॉर्म, विभिन्न हार्डवेयर प्रणालियों के अनुकूल बनें.

DS18B20 चिप पैकेज संरचना

DS18B20 चिप पैकेज संरचना

2.2 DS18B20 पिन फ़ंक्शन
जीएनडी वोल्टेज ग्राउंड;
DQ सिंगल डेटा बस;
वीडीडी बिजली आपूर्ति वोल्टेज;
एनसी खाली पिन;

DS18B20 चिप रैम और EEPROM संरचना आरेख

DS18B20 चिप रैम और EEPROM संरचना आरेख

2.3 DS18B20 कार्य सिद्धांत और अनुप्रयोग
DS18B20 तापमान का पता लगाने और डिजिटल डेटा आउटपुट पूरी तरह से एक चिप पर एकीकृत है, इसलिए इसमें हस्तक्षेप-विरोधी क्षमता मजबूत है. इसके एक कार्य चक्र को दो भागों में बाँटा जा सकता है, अर्थात् तापमान का पता लगाना और डेटा प्रोसेसिंग.

18B20 में मेमोरी संसाधनों के तीन रूप हैं. वे हैं: ROM केवल पढ़ने योग्य मेमोरी, DS18B20ID कोड को संग्रहीत करने के लिए उपयोग किया जाता है; पहला 8 बिट्स एकल-पंक्ति श्रृंखला कोड हैं (DS18B20 कोड 19H है), निम्नलिखित 48 बिट्स चिप का अद्वितीय सीरियल नंबर है; आखिरी 8 बिट्स सीआरसी कोड हैं (अतिरेक जांच) उपरोक्त में से 56 बिट्स. डेटा उत्पादन के समय सेट किया गया है और उपयोगकर्ता द्वारा इसे बदला नहीं जा सकता है. DS18B20 का कुल योग है 64 ROM के टुकड़े.

रैम डेटा रजिस्टर, आंतरिक गणना और डेटा एक्सेस के लिए उपयोग किया जाता है, बिजली गुल होने के बाद डेटा नष्ट हो जाता है, DS18B20 का कुल योग है 9 रैम के बाइट्स, प्रत्येक बाइट है 8 बिट्स. पहला और दूसरा बाइट्स तापमान रूपांतरण के बाद डेटा मूल्य की जानकारी है; तीसरा और चौथा बाइट्स उपयोगकर्ता के EEPROM की दर्पण छवि है (आमतौर पर तापमान अलार्म मूल्य भंडारण के लिए उपयोग किया जाता है). पावर रीसेट होने पर इसका मान ताज़ा हो जाएगा. पाँचवाँ बाइट उपयोगकर्ता के तीसरे EEPROM की दर्पण छवि है. छठा, 7वां, और 8वीं बाइट्स गिनती रजिस्टर हैं, जो उपयोगकर्ताओं को उच्च तापमान रिज़ॉल्यूशन प्राप्त करने की अनुमति देने के लिए डिज़ाइन किए गए हैं. वे आंतरिक तापमान रूपांतरण और गणना के लिए अस्थायी भंडारण इकाइयाँ भी हैं. 9वां बाइट पहले का सीआरसी कोड है 8 बाइट्स. EEPROM एक गैर-वाष्पशील मेमोरी है जिसका उपयोग डेटा को लंबे समय तक सहेजने के लिए किया जाता है, ऊपरी और निचले तापमान अलार्म मान, और सत्यापन डेटा. DS18B20 का कुल योग है 3 EEPROM के बिट्स, और उपयोगकर्ता के संचालन को सुविधाजनक बनाने के लिए रैम में दर्पण छवियां हैं.

DS18B20 डिफ़ॉल्ट रूप से 12-बिट रिज़ॉल्यूशन मोड में काम करता है. रूपांतरण के बाद प्राप्त 12-बिट डेटा DS18B20 के दो 8-बिट रैम में संग्रहीत किया जाता है (पहले दो बाइट्स). पहला 5 बाइनरी में बिट्स साइन बिट्स हैं. यदि मापा गया तापमान इससे अधिक है 0, इन 5 बिट्स हैं 0. बस मापे गए मान को इससे गुणा करें 0.0625 वास्तविक तापमान प्राप्त करने के लिए. यदि तापमान इससे कम है 0, इन 5 बिट्स हैं 1. मापे गए मान को उलटा करने की आवश्यकता है, द्वारा जोड़ा गया 1, और फिर से गुणा किया गया 0.0625 वास्तविक तापमान प्राप्त करने के लिए. या तापमान निकालने के लिए बिट ऑपरेशन का उपयोग करें: दशमलव स्थान निचले स्थान पर हैं 4 बिट्स, और ऊपरी बिट्स पूर्णांक बिट्स हैं (ऋणात्मक संख्याओं पर विचार नहीं किया जाता).

2.4 DS18B20 चिप ROM निर्देश तालिका
1. रॉम पढ़ें [33एच] (हेक्साडेसिमल कमांड शब्द वर्गाकार कोष्ठक में है).
यह कमांड बस नियंत्रक को DS18B20 के 64-बिट ROM को पढ़ने की अनुमति देता है. इस निर्देश का उपयोग केवल तभी किया जा सकता है जब बस में केवल एक DS18B20 हो. यदि एक से अधिक जुड़े हुए हैं, संचार के दौरान डेटा टकराव होगा.

2. ROM संलग्न करें [55एच]
इस निर्देश का पालन नियंत्रक द्वारा जारी 64-बिट सीरियल नंबर द्वारा किया जाता है. जब बस में कई DS18B20 हों, केवल नियंत्रक द्वारा जारी किए गए समान सीरियल नंबर वाली चिप ही प्रतिक्रिया दे सकती है, और अन्य चिप्स अगले रीसेट की प्रतीक्षा करेंगे. यह निर्देश सिंगल-चिप और मल्टी-चिप कनेक्शन के लिए उपयुक्त है.

3. ROM छोड़ें [सीसीएच]
यह निर्देश चिप को ROM कोड पर प्रतिक्रिया नहीं देता है. एकल बस के मामले में, इस निर्देश का उपयोग समय बचाने के लिए किया जा सकता है. यदि एकाधिक चिप्स कनेक्ट होने पर इस निर्देश का उपयोग किया जाता है, डेटा टकराव होगा, जिसके परिणामस्वरूप त्रुटियाँ हुईं.

4. रोम खोजें [एफ0एच]
चिप आरंभ होने के बाद, खोज निर्देश सभी उपकरणों के 64-बिट ROM को उन्मूलन द्वारा पहचानने की अनुमति देता है जब एकाधिक चिप्स बस से जुड़े होते हैं.

5. अलार्म खोज [प्रत्येक]
एकाधिक चिप्स के मामले में, अलार्म चिप खोज निर्देश केवल उन चिप्स पर प्रतिक्रिया करता है जो टीएच से अधिक या टीएल से कम तापमान की अलार्म स्थिति को पूरा करते हैं. जब तक चिप बंद न हो जाए, अलार्म स्थिति तब तक बनी रहेगी जब तक कि तापमान दोबारा मापा न जाए और अलार्म स्थिति तक न पहुंच जाए.

6. स्क्रैचपैड लिखें [4एह]
यह RAM में डेटा लिखने का निर्देश है. बाद में लिखे गए डेटा के दो बाइट्स पते पर संग्रहीत किए जाएंगे 2 (अलार्म रैम का TH) और पता 3 (अलार्म रैम का टीएल). लिखने की प्रक्रिया को रीसेट सिग्नल द्वारा समाप्त किया जा सकता है.

7. स्क्रैचपैड पढ़ें (RAM से डेटा पढ़ें) [बीईएच]
यह निर्देश RAM से डेटा पढ़ेगा, पते से शुरू 0 और पते तक 9, संपूर्ण RAM डेटा की रीडिंग पूरी करना. चिप रीसेट सिग्नल को पढ़ने की प्रक्रिया को समाप्त करने की अनुमति देता है, वह है, पढ़ने के समय को कम करने के लिए बाद के अनावश्यक बाइट्स को अनदेखा किया जा सकता है.

8. स्क्रैचपैड कॉपी करें (RAM डेटा को EEPROM में कॉपी करें) [48एच]
यह निर्देश RAM में डेटा को EEPROM में संग्रहीत करता है ताकि बिजली बंद होने पर डेटा नष्ट न हो. चूंकि चिप EEPROM स्टोरेज प्रोसेसिंग में व्यस्त है, जब नियंत्रक रीड टाइम स्लॉट भेजता है, बस आउटपुट “0”, और जब भंडारण का काम पूरा हो जाता है, बस आउटपुट देगी “1”.
परजीवी कार्य मोड में, इस निर्देश के जारी होने के तुरंत बाद एक मजबूत पुल-अप का उपयोग किया जाना चाहिए और चिप संचालन को बनाए रखने के लिए इसे कम से कम 10MS तक बनाए रखा जाना चाहिए.

9. टी कनवर्ट करें (तापमान रूपांतरण) [44एच]
यह निर्देश मिलने के बाद, चिप तापमान रूपांतरण करेगी और परिवर्तित तापमान मान को रैम के पहले और दूसरे पते में संग्रहीत करेगी. चूंकि चिप तापमान रूपांतरण प्रसंस्करण में व्यस्त है, जब नियंत्रक रीड टाइम स्लॉट भेजता है, बस आउटपुट “0”, और जब भंडारण का काम पूरा हो जाता है, बस आउटपुट देगी “1”. परजीवी कार्य मोड में, इस निर्देश के जारी होने के तुरंत बाद एक मजबूत पुल-अप का उपयोग किया जाना चाहिए और चिप संचालन को बनाए रखने के लिए इसे कम से कम 500MS तक बनाए रखा जाना चाहिए.

10. EEPROM को याद करें (EEPROM में अलार्म मान को RAM में कॉपी करें) [बी8एच]
यह निर्देश EEPROM में अलार्म मान को RAM में तीसरे और चौथे बाइट्स में कॉपी करता है. चूँकि चिप कॉपी प्रोसेसिंग में व्यस्त है, जब नियंत्रक रीड टाइम स्लॉट भेजता है, बस आउटपुट “0”, और जब भंडारण का काम पूरा हो जाता है, बस आउटपुट “1”. इसके अलावा, चिप चालू होने और रीसेट होने पर यह निर्देश स्वचालित रूप से निष्पादित हो जाएगा. इस प्रकार से, RAM में दो अलार्म बाइट बिट हमेशा EEPROM में डेटा की दर्पण छवि होंगे.

11. बिजली आपूर्ति पढ़ें (कार्य मोड स्विच) [बी4एच]
इसके बाद यह निर्देश जारी किया गया है, एक पढ़ने का समय अंतराल जारी किया जाता है, और चिप अपना पावर स्टेटस वर्ड लौटा देगी. “0” परजीवी शक्ति अवस्था है और “1” बाह्य शक्ति अवस्था है.

2.5 DS18B20 समय आरेख
2.5.1 DS18B20 रीसेट और प्रतिक्रिया संबंध आरेख
प्रत्येक संचार से पहले एक रीसेट किया जाना चाहिए. रीसेट समय, इंतज़ार का समय, और प्रतिक्रिया समय को समय के अनुसार सख्ती से प्रोग्राम किया जाना चाहिए.
DS18B20 पढ़ने और लिखने का समय अंतराल: DS18B20 डेटा पढ़ने और लिखने की पुष्टि सूचना के आदान-प्रदान के लिए टाइम गैप प्रोसेसिंग बिट और कमांड वर्ड द्वारा की जाती है.

DS18B20 रीसेट और प्रतिक्रिया संबंध आरेख

DS18B20 रीसेट और प्रतिक्रिया संबंध आरेख

2.5.2 डेटा लिखें 0 और डेटा 1 DS18B20 तक
डेटा लिखने के पहले 15uS में समय अंतराल, नियंत्रक द्वारा बस को नीचे खींचा जाना चाहिए, और फिर यह बस डेटा के लिए चिप सैंपलिंग का समय होगा. नमूना लेने का समय 15~60uS है. यदि सैंपलिंग के समय नियंत्रक बस को ऊंचा खींचता है, इसका मतलब है लिखना “1”, और यदि नियंत्रक बस को नीचे खींचता है, इसका मतलब है लिखना “0”.
ट्रांसमिशन के प्रत्येक बिट में कम से कम 15uS का निम्न-स्तरीय स्टार्ट बिट होना चाहिए, और उसके बाद का डेटा “0” या “1” 45uS के भीतर पूरा किया जाना चाहिए.
संपूर्ण बिट का ट्रांसमिशन समय 60~120uS पर रखा जाना चाहिए, अन्यथा सामान्य संचार की गारंटी नहीं दी जा सकती.
टिप्पणी: DS18B20 निम्न बिट से डेटा पढ़ता और लिखता है.

डेटा लिखें 0 और डेटा 1 DS18B20 तक

डेटा लिखें 0 और डेटा 1 DS18B20 तक

2.5.3 डेटा पढ़ना 0 और डेटा 1 DS18B20 से
रीड टाइम गैप के दौरान नियंत्रण का नमूनाकरण समय अधिक सटीक होना चाहिए. पढ़ने के समय अंतराल के दौरान, पढ़ने के समय की शुरुआत को इंगित करने के लिए होस्ट को कम से कम 1uS का निम्न स्तर भी उत्पन्न करना होगा. तब, बस छूटने के बाद 15uS में, DS18B20 आंतरिक डेटा बिट भेजेगा. इस समय, यदि कंट्रोल को पता चलता है कि बस ऊंची है, इसका मतलब है पढ़ना “1”, और अगर बस कम है, इसका मतलब है डेटा पढ़ना “0”. प्रत्येक बिट को पढ़ने से पहले, नियंत्रक एक प्रारंभ संकेत जोड़ता है.

डेटा पढ़ें 0 और डेटा 1 DS18B20 से

डेटा पढ़ें 0 और डेटा 1 DS18B20 से

टिप्पणी: सही संचार सुनिश्चित करने के लिए डेटा बिट को रीड गैप की शुरुआत के 15uS के भीतर पढ़ा जाना चाहिए.

संचार के दौरान, 8 का “0” या “1” बाइट के रूप में उपयोग किया जाता है, और बाइट को पढ़ना या लिखना निम्न बिट से शुरू होता है.

2.5.4 एक बार तापमान पढ़ने का क्रम (बस में केवल एक DS18B20 है)

1. रीसेट सिग्नल भेजें
2. प्रतिक्रिया संकेत का पता लगाएं
3. 0xCC भेजें
4. 0x44 भेजें
5. रीसेट सिग्नल भेजें
6. प्रतिक्रिया संकेत का पता लगाएं
7. 0xcc लिखें
8. 0xbe लिखें
9. कुंडली 8 तापमान की निम्न बाइट पढ़ने का समय
10. कुंडली 8 तापमान की उच्च बाइट को पढ़ने का समय
11. 16-बिट तापमान डेटा और प्रक्रिया को संश्लेषित करें

3. ड्राइवर कोड

3.1 DS18B20.c
#शामिल करना “ds18b20.h”
/*
समारोह: DS18B20 आरंभीकरण
हार्डवेयर कनेक्शन: पीबी15
*/
शून्य DS18B20_Init(खालीपन)
{
आरसीसी->APB2ENR|=1<<3; //पंजाब
जीपीआईओबी->सीआरएच&=0x0FFFFFFFF;
जीपीआईओबी->सीआरएच|=0x30000000;
जीपीआईओबी->ओडीआर|=1<<15; //अपने आप को रोकना
}

/*
समारोह: जांचें कि क्या DS18B20 डिवाइस मौजूद है
वापसी मूल्य: 1 इसका मतलब है कि डिवाइस मौजूद नहीं है 0 इसका मतलब है कि डिवाइस सामान्य है
*/
u8 DS18B20_चेकडिवाइस(खालीपन) //रीसेट पल्स शामिल है, पता लगाने की नाड़ी
{
DS18B20_OUTPUT_MODE();//आउटपुट मोड को प्रारंभ करें
DS18B20_OUT=0; //रीसेट पल्स उत्पन्न करें
DelayUs(750); //750us निम्न स्तर उत्पन्न करें
DS18B20_OUT=1; //बस जारी करो
DelayUs(15); //DS18B20 प्रतिक्रिया की प्रतीक्षा करें
अगर(DS18B20_CleckAck())//अस्तित्व नाड़ी का पता लगाएं
{
वापस करना 1;
}
वापस करना 0;
}

/*
समारोह: DS18B20 डिवाइस के अस्तित्व पल्स का पता लगाएं
वापसी मूल्य: 1 त्रुटि दर्शाता है 0 सामान्य इंगित करता है
*/
u8 DS18B20_CleckAck(खालीपन)
{
यू8 सीएनटी=0;
DS18B20_INPUT_MODE();//इनपुट मोड प्रारंभ करें
जबकि(DS18B20_IN&&सी.एन.टी<200) //DS18B20 प्रतिक्रिया अस्तित्व पल्स की प्रतीक्षा करें
{
DelayUs(1);
सीएनटी++;
}
अगर(सी.एन.टी>=200)वापस करना 1; //गलती

सीएनटी=0;
जबकि((!DS18B20_IN)&&सी.एन.टी<240) //बस के निकलने के लिए DS18B20 की प्रतीक्षा करें
{
DelayUs(1);
सीएनटी++;
}
अगर(सी.एन.टी>=240)वापस करना 1; //गलती
वापस करना 0;
}

/*
समारोह: एक बाइट लिखें
पहले थोड़ा लिखना सीखो.
*/
शून्य DS18B20_WriteByte(u8 सीएमडी)
{
u8 मैं;
DS18B20_OUTPUT_MODE(); //आउटपुट मोड को प्रारंभ करें
के लिए(मैं=0;मैं<8;मैं++)
{
DS18B20_OUT=0; //लिखने का समय अंतराल उत्पन्न करें (प्रारंभ लिखें)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //वास्तविक डेटा बिट भेजें
DelayUs(60); //लेखन पूरा होने की प्रतीक्षा करें
DS18B20_OUT=1; //बस को छोड़ें और अगले प्रसारण के लिए तैयार रहें
अध्यक्ष एवं प्रबंध निदेशक>>=1; //डेटा का अगला भाग भेजना जारी रखें
}
}

/*
समारोह: एक बाइट पढ़ें
पहले थोड़ा पढ़ना सीखो.
*/
यू8 डीएस18बी20_रीडबाइट(खालीपन)
{
u8 मैं,डेटा=0;
के लिए(मैं=0;मैं<8;मैं++)
{
DS18B20_OUTPUT_MODE(); //आउटपुट मोड को प्रारंभ करें
DS18B20_OUT=0; //पढ़ने का समय अंतराल उत्पन्न करें (प्रारंभ पढ़ें)
DelayUs(2);
DS18B20_OUT=1; //बस जारी करो
DS18B20_INPUT_MODE(); //इनपुट मोड प्रारंभ करें
DelayUs(8); //DS18B20 डेटा आउटपुट की प्रतीक्षा करें
डेटा>>=1; //हाई बिट भरें 0, डिफ़ॉल्ट है 0
अगर(DS18B20_IN) डेटा|=0x80;
DelayUs(60);
DS18B20_OUT=1; //बस जारी करो, डेटा का अगला भाग पढ़ने के लिए प्रतीक्षा करें
}
डेटा वापस करें;
}

/*
समारोह: DS18B20 का तापमान डेटा एक बार पढ़ें
वापसी मूल्य: तापमान डेटा पढ़ा
स्थिति पर विचार किया: बस से केवल एक DS18B20 जुड़ा है
*/
u16 DS18B20_ReadTemp(खालीपन)
{
u16 तापमान=0;
u8 temp_H,temp_L;
DS18B20_चेकडिवाइस(); //रीसेट पल्स भेजें, नाड़ी का पता लगाएं
DS18B20_WriteByte(0xCC); //ROM अनुक्रम का पता लगाना छोड़ें
DS18B20_WriteByte(0x44); //तापमान रूपांतरण प्रारंभ करें

//तापमान रूपांतरण पूरा होने तक प्रतीक्षा करें
जबकि(DS18B20_रीडबाइट()!=0xFF){}

DS18B20_चेकडिवाइस(); //रीसेट पल्स भेजें, नाड़ी का पता लगाएं
DS18B20_WriteByte(0xCC); //ROM अनुक्रम का पता लगाना छोड़ें
DS18B20_WriteByte(0एक्सबीई); //तापमान पढ़ें

temp_L=DS18B20_ReadByte(); //निम्न तापमान डेटा पढ़ें
temp_H=DS18B20_ReadByte(); //उच्च तापमान डेटा पढ़ें
अस्थायी=temp_L|(temp_H<<8); //संश्लेषित तापमान
वापसी तापमान;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#DS18B20_H को परिभाषित करें
#शामिल करना “stm32f10x.h”
#शामिल करना “sys.h”
#शामिल करना “देरी.एच”
#शामिल करना “ds18b20.h”
#शामिल करना “usart.h”

/*पैकेज इंटरफ़ेस*/

//DS18B20 को इनपुट मोड में आरंभ करें
#DS18B20_INPUT_MODE को परिभाषित करें() {जीपीआईओबी->सीआरएच&=0x0FFFFFFFF;जीपीआईओबी->सीआरएच|=0x80000000;}

//DS18B20 को आउटपुट मोड में आरंभ करें
#DS18B20_OUTPUT_MODE को परिभाषित करें(){जीपीआईओबी->सीआरएच&=0x0FFFFFFFF;जीपीआईओबी->सीआरएच|=0x30000000;}

//DS18B20 IO पोर्ट आउटपुट
#DS18B20_OUT PBout को परिभाषित करें(15)

//DS18B20 IO पोर्ट इनपुट
#DS18B20_IN PBin को परिभाषित करें(15)

//कार्य घोषणा
u8 DS18B20_CleckAck(खालीपन);
u8 DS18B20_चेकडिवाइस(खालीपन);
शून्य DS18B20_Init(खालीपन);
u16 DS18B20_ReadTemp(खालीपन);
यू8 डीएस18बी20_रीडबाइट(खालीपन);
शून्य DS18B20_WriteByte(u8 सीएमडी);
#अंत

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 विलंब समारोह

/*
समारोह: हममें देरी
*/
शून्य विलंबUs(हमें बताएं)
{
#ifdef _SYSTICK_IRQ_
पूर्णांक मैं,जे;
के लिए(मैं=0;iVAL=0; //सीएनटी काउंटर वैल्यू
SysTick->लोड=9*हमें; //9 मतलब 1us
SysTick->CTRL|=1<<0; //टाइमर प्रारंभ करें
करना
{
tmp=SysTick->CTRL; //स्थिति पढ़ें
}जबकि((!(टीएमपी&1<<16))&&(टीएमपी&1<<0));
SysTick->वैल=0; //सीएनटी काउंटर वैल्यू
SysTick->CTRL&=~(1<<0); //टाइमर बंद करें
#अंत
};मैं++)>

3.4 main.c तापमान पढ़ने और इसे सीरियल पोर्ट पर प्रिंट करने के लिए DS18B20 पर कॉल करें

#शामिल करना “stm32f10x.h”

#शामिल करना “ds18b20.h”

u8 DS18B20_ROM[8]; //DS18B20 का 64-बिट ROM कोड संग्रहीत करें

मुख्य प्रवेश बिंदु(खालीपन)
{
यू16 तापमान;
USARTx_हीट(यूएसएआरटी1,72,115200);//सीरियल पोर्ट का आरंभीकरण 1
DS18B20_हीट(); //DS18B20 आरंभीकरण

/*1. DS18B20*/ का 64-बिट ROM कोड पढ़ें
//रीसेट पल्स भेजें, अस्तित्व नाड़ी का पता लगाएं
जबकि(DS18B20_चेकडिवाइस())
{
printf(“DS18B20 डिवाइस मौजूद नहीं है!\एन”);
विलंबएम.एस(500);
}
//64-बिट ROM कोड को पढ़ने के लिए कमांड भेजें
DS18B20_WriteByte(0x33);

//लूप 64-बिट ROM कोड पढ़ता है
के लिए(मैं=0;मैं<8;मैं++)
{
DS18B20_ROM[मैं]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%डी]=0x%X\n”,मैं,DS18B20_ROM[मैं]);
}

जबकि(1)
{
/*2. तापमान परिवर्तित करना शुरू करने के लिए बस में सभी DS18B20 को एक साथ संचालित करें*/
DS18B20_चेकडिवाइस(); //रीसेट पल्स भेजें, नाड़ी का पता लगाएं
DS18B20_WriteByte(0xCC); //ROM अनुक्रम का पता लगाना छोड़ें
DS18B20_WriteByte(0x44); //तापमान रूपांतरण प्रारंभ करें (बस के सभी DS18B20 को तापमान परिवर्तित करने दें)
विलंबएम.एस(500); //लाइन पर सभी DS18B20 तापमान रूपांतरण पूरा होने तक प्रतीक्षा करें

/*3. प्रत्येक DS18B20*/ के तापमान की एकल लक्षित रीडिंग
DS18B20_चेकडिवाइस(); //रीसेट पल्स भेजें, नाड़ी का पता लगाएं
DS18B20_WriteByte(0x55); //ROM से मिलान करने के लिए कमांड भेजें
के लिए(मैं=0;मैं<8;मैं++) //64-बिट कोड भेजें
{
DS18B20_WriteByte(DS18B20_ROM[मैं]);
}
DS18B20_WriteByte(0एक्सबीई); //तापमान पढ़ें
अस्थायी=DS18B20_ReadByte(); //निम्न-क्रम तापमान डेटा पढ़ें
अस्थायी|=DS18B20_रीडबाइट()<<8; //उच्च-क्रम तापमान डेटा पढ़ें
printf(“temp1=%d.%d\n”,अस्थायी>>4,अस्थायी&0एक्सएफ);
printf(“temp2=%f\n”,तापमान*0.0625);

विलंबएम.एस(500);
}
}