DS18B20 ایک ڈیجیٹل درجہ حرارت سینسر ہے جو میزبان کے ساتھ بات چیت کرنے کے لئے ایک واحد بس کا وقت استعمال کرتا ہے. صرف 1 درجہ حرارت کے اعداد و شمار کو پڑھنے کو مکمل کرنے کے لئے تار کی ضرورت ہے;
DS18B20 میں آسانی سے شناخت کے لئے بلٹ میں 64 بٹ پروڈکٹ سیریل نمبر ہے. متعدد DS18B20 سینسر سے منسلک کیا جاسکتا ہے 1 تار, اور 64 بٹ شناخت کی توثیق کے ذریعے, مختلف سینسروں سے جمع کردہ درجہ حرارت کی معلومات کو الگ سے پڑھا جاسکتا ہے.
DS18B20 کا تعارف
2.1 DS18B20 کی اہم خصوصیات
1. مکمل طور پر ڈیجیٹل درجہ حرارت کی تبدیلی اور آؤٹ پٹ.
2. ایڈوانسڈ سنگل بس ڈیٹا مواصلات.
3. 12 بٹ ریزولوشن تک, ± 0.5 ڈگری سینٹی گریڈ تک کی درستگی کے ساتھ.
4. 12 بٹ ریزولوشن میں زیادہ سے زیادہ ورکنگ سائیکل ہے 750 ملی سیکنڈ.
5. پرجیوی ورکنگ موڈ کو منتخب کیا جاسکتا ہے.
6. پتہ لگانے کے درجہ حرارت کی حد –55 ° C ~+125 ° C ہے (–67 ° F ~+257 ° F).
7. بلٹ میں EEPROM, درجہ حرارت کی حد الارم فنکشن.
8. 64-بٹ فوٹو گرافی روم, بلٹ میں پروڈکٹ سیریل نمبر, ملٹی مشین کنکشن کے لئے آسان ہے.
9. پیکیجنگ کے مختلف فارم, مختلف ہارڈ ویئر سسٹم کے مطابق ڈھال لیں.
2.2 DS18B20 پن فنکشن
GND وولٹیج گراؤنڈ;
ڈی کیو سنگل ڈیٹا بس;
VDD بجلی کی فراہمی وولٹیج;
این سی خالی پن;
2.3 DS18B20 ورکنگ اصول اور درخواست
DS18B20 درجہ حرارت کا پتہ لگانے اور ڈیجیٹل ڈیٹا آؤٹ پٹ ایک چپ پر مکمل طور پر مربوط ہیں, لہذا اس میں اینٹی مداخلت کی مضبوط صلاحیت ہے. اس کے ایک کام کے چکر کو دو حصوں میں تقسیم کیا جاسکتا ہے, یعنی درجہ حرارت کا پتہ لگانے اور ڈیٹا پروسیسنگ.
18B20 میں میموری کے وسائل کی تین شکلیں ہیں. وہ ہیں: ROM صرف پڑھنے کی یادداشت, DS18B20ID کوڈ کو اسٹور کرنے کے لئے استعمال کیا جاتا ہے; پہلا 8 بٹس سنگل لائن سیریز کوڈ ہیں (DS18B20 کوڈ 19H ہے), مندرجہ ذیل 48 بٹس چپ کا انوکھا سیریل نمبر ہیں; آخری 8 بٹس سی آر سی کوڈ ہیں (فالتو پن چیک) مذکورہ بالا 56 بٹس. ڈیٹا پروڈکشن پر سیٹ کیا گیا ہے اور صارف کے ذریعہ اسے تبدیل نہیں کیا جاسکتا ہے. DS18B20 کی کل ہے 64 روم کے بٹس.
رام ڈیٹا رجسٹر, داخلی حساب اور ڈیٹا تک رسائی کے لئے استعمال کیا جاتا ہے, بجلی کی ناکامی کے بعد ڈیٹا کھو گیا ہے, DS18B20 کی کل ہے 9 رام کے بائٹس, ہر بائٹ ہے 8 بٹس. درجہ حرارت میں تبدیلی کے بعد پہلی اور دوسری بائٹس ڈیٹا ویلیو کی معلومات ہیں; تیسرا اور چوتھا بائٹس صارف کے EEPROM کی آئینے کی تصویر ہے (درجہ حرارت کے الارم ویلیو اسٹوریج کے لئے عام طور پر استعمال کیا جاتا ہے). جب بجلی کو دوبارہ ترتیب دیا جائے گا تو اس کی قیمت تازہ ہوجائے گی. پانچواں بائٹ صارف کے تیسرے EEPROM کی آئینے کی تصویر ہے. 6 ویں, 7ویں, اور آٹھویں بائٹس کاؤنٹ رجسٹر ہیں, جو صارفین کو درجہ حرارت کی اعلی قرارداد حاصل کرنے کی اجازت دینے کے لئے بنائے گئے ہیں. وہ اندرونی درجہ حرارت کے تبادلوں اور حساب کتاب کے لئے عارضی اسٹوریج یونٹ بھی ہیں. 9 واں بائٹ پہلے کا CRC کوڈ ہے 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 CHIP ROM انسٹرکشن ٹیبل
1. روم پڑھیں [33h] (ہیکساڈیسیمل کمانڈ کا لفظ مربع بریکٹ میں ہے).
یہ کمانڈ بس کنٹرولر کو DS18B20 کے 64 بٹ روم کو پڑھنے کی اجازت دیتا ہے. اس ہدایت کا استعمال تب ہی کیا جاسکتا ہے جب بس میں صرف ایک DS18B20 ہو. اگر ایک سے زیادہ جڑے ہوئے ہیں, مواصلات کے دوران ڈیٹا تنازعات پائے جائیں گے.
2. اٹچ روم [55h]
اس ہدایت کے بعد کنٹرولر کے ذریعہ جاری کردہ ایک 64 بٹ سیریل نمبر ہے. جب بس میں ایک سے زیادہ DS18B20s موجود ہیں, کنٹرولر کے ذریعہ جاری کردہ ایک ہی سیریل نمبر کے ساتھ صرف چپ جواب دے سکتا ہے, اور دوسرے چپس اگلے دوبارہ ترتیب دینے کا انتظار کریں گے. یہ ہدایت سنگل چپ اور ملٹی چپ کنکشن کے لئے موزوں ہے.
3. جہاز کا کمرہ [سی سی ایچ]
اس ہدایت سے چپ کو ROM کوڈ کا جواب نہیں ملتا ہے. ایک بس کی صورت میں, اس ہدایت کو وقت کی بچت کے لئے استعمال کیا جاسکتا ہے. اگر یہ ہدایت استعمال کی جاتی ہے جب ایک سے زیادہ چپس منسلک ہوجاتی ہیں, ڈیٹا تنازعات واقع ہوں گے, غلطیوں کے نتیجے میں.
4. ROM تلاش کریں [F0H]
چپ شروع ہونے کے بعد, تلاش کی ہدایت تمام آلات کے 64 بٹ ROM کو خاتمے کے ذریعہ شناخت کرنے کی اجازت دیتی ہے جب ایک سے زیادہ چپس بس سے منسلک ہوجاتی ہیں۔.
5. الارم کی تلاش [ہر ایک]
متعدد چپس کی صورت میں, الارم چپ تلاش کی ہدایت صرف ان چپس کا جواب دیتی ہے جو TH سے زیادہ یا TL سے کم درجہ حرارت کی الارم کی حالت کو پورا کرتے ہیں. جب تک کہ چپ طاقت سے دور نہیں ہے, الارم کی حالت کو برقرار رکھا جائے گا جب تک کہ درجہ حرارت کو دوبارہ پیمائش نہ کی جائے اور الارم کی حالت تک نہ پہنچ جائے.
6. سکریچ پیڈ لکھیں [4آہ]
یہ رام کو ڈیٹا لکھنے کی ہدایت ہے. اس کے بعد لکھے گئے ڈیٹا کے دو بائٹس ایڈریس پر محفوظ ہوں گے 2 (الارم رام کا ویں) اور پتہ 3 (الارم رام کا TL). تحریری عمل کو ری سیٹ سگنل کے ذریعہ ختم کیا جاسکتا ہے.
7. سکریچ پیڈ پڑھیں (رام سے ڈیٹا پڑھیں) [beh]
یہ ہدایت رام سے ڈیٹا پڑھے گی, ایڈریس سے شروع ہو رہا ہے 0 اور خطاب کرنے کے لئے 9, پورے رام ڈیٹا کو پڑھنے کو مکمل کرنا. چپ ری سیٹ سگنل کو پڑھنے کے عمل کو ختم کرنے کی اجازت دیتی ہے, وہ ہے, پڑھنے کے وقت کو کم کرنے کے لئے بعد میں غیر ضروری بائٹس کو نظرانداز کیا جاسکتا ہے.
8. سکریچ پیڈ کاپی کریں (رام ڈیٹا کو EEPROM میں کاپی کریں) [48h]
یہ ہدایات ڈیٹا کو رام میں EEPROM میں محفوظ کرتی ہے تاکہ بجلی بند ہونے پر ڈیٹا ضائع نہ ہو. چونکہ چپ EEPROM اسٹوریج پروسیسنگ میں مصروف ہے, جب کنٹرولر پڑھنے کا وقت سلاٹ بھیجتا ہے, بس کے نتائج “0”, اور جب اسٹوریج کا کام مکمل ہوجاتا ہے, بس آؤٹ پٹ کرے گی “1”.
پرجیوی ورکنگ موڈ میں, اس ہدایت کو جاری کرنے اور کم سے کم 10 ایم ایس کے لئے چپ آپریشن کو برقرار رکھنے کے لئے ایک مضبوط پل اپ استعمال کرنا ضروری ہے.
9. ٹی کو تبدیل کریں (درجہ حرارت کی تبدیلی) [44h]
یہ ہدایت موصول ہونے کے بعد, چپ درجہ حرارت کی تبدیلی انجام دے گی اور درجہ حرارت کی قیمت کو رام کے یکم اور دوسرا پتے میں ذخیرہ کرے گی. چونکہ چپ درجہ حرارت کے تبادلوں کی پروسیسنگ میں مصروف ہے, جب کنٹرولر پڑھنے کا وقت سلاٹ بھیجتا ہے, بس کے نتائج “0”, اور جب اسٹوریج کا کام مکمل ہوجاتا ہے, بس آؤٹ پٹ کرے گی “1”. پرجیوی ورکنگ موڈ میں, اس ہدایت کو جاری کرنے اور کم سے کم 500ms کے لئے چپ آپریشن کو برقرار رکھنے کے لئے ایک مضبوط پل اپ استعمال کرنا ضروری ہے.
10. EEPROM کو یاد کریں (EEPROM میں الارم کی قیمت کو رام میں کاپی کریں) [B8H]
یہ ہدایت EEPROM میں الارم کی قیمت کو رام میں تیسری اور چوتھی بائٹس کی کاپی کرتی ہے. چونکہ چپ پروسیسنگ کاپی کرنے میں مصروف ہے, جب کنٹرولر پڑھنے کا وقت سلاٹ بھیجتا ہے, بس کے نتائج “0”, اور جب اسٹوریج کا کام مکمل ہوجاتا ہے, بس کے نتائج “1”. اس کے علاوہ, اس ہدایت کو خود بخود عمل میں لایا جائے گا جب چپ پر چلنے اور اسے دوبارہ ترتیب دیا جائے گا. اس طرح سے, رام میں دو الارم بائٹ بٹس ہمیشہ EEPROM میں موجود ڈیٹا کی آئینے کی تصویر رہیں گے.
11. بجلی کی فراہمی پڑھیں (ورکنگ موڈ سوئچ) [B4H]
اس ہدایت کے جاری ہونے کے بعد, پڑھنے کا وقت کا فرق جاری کیا جاتا ہے, اور چپ اپنی طاقت کی حیثیت کا لفظ واپس کردے گی. “0” پرجیوی پاور اسٹیٹ ہے اور “1” بیرونی طاقت کی ریاست ہے.
2.5 DS18B20 ٹائمنگ ڈایاگرام
2.5.1 DS18B20 ری سیٹ اور رسپانس ریلیشنش ڈایاگرام
ہر مواصلات سے پہلے ری سیٹ کرنا ضروری ہے. دوبارہ ترتیب دینے کا وقت, انتظار کا وقت, اور جواب کے وقت کو وقت کے مطابق سختی سے پروگرام کیا جانا چاہئے.
DS18B20 پڑھیں اور لکھیں وقت کا فرق: DS18B20 ڈیٹا پڑھنے اور لکھنے کی تصدیق ٹائم گیپ پروسیسنگ بٹ اور کمانڈ ورڈ کے ذریعہ کی گئی ہے تاکہ معلومات کا تبادلہ کریں.
2.5.2 ڈیٹا لکھیں 0 اور ڈیٹا 1 DS18B20 کو
لکھنے کے اعداد و شمار کے پہلے 15 یو ایس میں, بس کو کنٹرولر کے ذریعہ کم کھینچنے کی ضرورت ہے, اور پھر بس کے اعداد و شمار کے لئے یہ چپ نمونے لینے کا وقت ہوگا. نمونے لینے کا وقت 15 ~ 60 یو ایس ہے. اگر کنٹرولر نمونے لینے کے وقت بس کو اونچی کھینچتا ہے, اس کا مطلب لکھنا ہے “1”, اور اگر کنٹرولر بس کو کم کھینچتا ہے, اس کا مطلب لکھنا ہے “0”.
ہر ٹرانسمیشن میں کم از کم 15 یو ایس کا کم سطح کا آغاز ہونا چاہئے, اور اس کے بعد کا ڈیٹا “0” یا “1” 45US کے اندر مکمل ہونا چاہئے.
پورے بٹ کے ٹرانسمیشن ٹائم کو 60 ~ 120US پر رکھنا چاہئے, بصورت دیگر عام مواصلات کی ضمانت نہیں دی جاسکتی ہے.
نوٹ: DS18B20 کم بٹ سے ڈیٹا پڑھتا ہے اور لکھتا ہے.
2.5.3 ڈیٹا پڑھنا 0 اور ڈیٹا 1 DS18B20 سے
پڑھنے کے وقت کے گیپ کے دوران کنٹرول کا نمونے لینے کا وقت زیادہ درست ہونا چاہئے. پڑھنے کے وقت کے فرق کے دوران, پڑھنے کے وقت کے آغاز کی نشاندہی کرنے کے لئے میزبان کو بھی کم از کم 1US کی نچلی سطح پیدا کرنا ہوگی. پھر, بس جاری ہونے کے بعد 15 یو ایس میں, DS18B20 داخلی ڈیٹا بٹ بھیجے گا. اس وقت, اگر کنٹرول کو معلوم ہوتا ہے کہ بس زیادہ ہے, اس کا مطلب ہے پڑھنا “1”, اور اگر بس کم ہے, اس کا مطلب ہے ڈیٹا پڑھنا “0”. ہر تھوڑا سا پڑھنے سے پہلے, کنٹرولر ایک اسٹارٹ سگنل شامل کرتا ہے.
نوٹ: صحیح مواصلات کو یقینی بنانے کے لئے ریڈ گیپ کے آغاز کے 15 یو ایس کے اندر ڈیٹا بٹ کو پڑھنا ضروری ہے.
مواصلات کے دوران, 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 ابتدا
ہارڈ ویئر کنکشن: PB15
*/
باطل DS18B20_INIT(باطل)
{
rcc->apb2enr|= 1<<3; //پی بی
gpiob->CRH&= 0x0fffffff;
gpiob->CRH|= 0x30000000;
gpiob->odr|= 1<<15; //پل اپ
}
/*
تقریب: چیک کریں کہ آیا DS18B20 آلہ موجود ہے یا نہیں
واپسی کی قیمت: 1 اس کا مطلب ہے کہ آلہ موجود نہیں ہے 0 اس کا مطلب ہے کہ آلہ عام ہے
*/
U8 DS18B20_CHECKDEVICE(باطل) //ری سیٹ پلس پر مشتمل ہے, پتہ لگانے والی نبض
{
DS18B20_OUTPUT_MODE();//آؤٹ پٹ موڈ میں شروع کریں
DS18B20_OUT = 0; //ری سیٹ پلس پیدا کریں
تاخیر(750); //750us کم سطح پیدا کریں
DS18B20_OUT = 1; //ریلیز بس
تاخیر(15); //DS18B20 جواب کا انتظار کریں
اگر(DS18B20_CLECKACK())//وجود کی نبض کا پتہ لگائیں
{
واپس 1;
}
واپس 0;
}
/*
تقریب: DS18B20 ڈیوائس کے وجود کی نبض کا پتہ لگائیں
واپسی کی قیمت: 1 غلطی کی نشاندہی کرتا ہے 0 معمول کی نشاندہی کرتا ہے
*/
U8 DS18B20_CLECKECK(باطل)
{
u8 cnt = 0;
DS18B20_INPUT_MODE();//ان پٹ موڈ میں شروع کریں
جبکہ(DS18B20_IN&&cnt<200) //DS18B20 کے جوابی نبض کا انتظار کریں
{
تاخیر(1);
CNT ++;
}
اگر(cnt>= 200)واپس 1; //غلطی
cnt = 0;
جبکہ((!DS18B20_IN)&&cnt<240) //بس کو جاری کرنے کے لئے DS18B20 کا انتظار کریں
{
تاخیر(1);
CNT ++;
}
اگر(cnt>= 240)واپس 1; //غلطی
واپس 0;
}
/*
تقریب: ایک بائٹ لکھیں
پہلے تھوڑا سا لکھنے کا طریقہ سیکھیں.
*/
باطل DS18B20_WRITEBYTE(U8 CMD)
{
u8 i;
DS18B20_OUTPUT_MODE(); //آؤٹ پٹ موڈ میں شروع کریں
کے لئے(i = 0;میں<8;i ++)
{
DS18B20_OUT = 0; //لکھنے کا وقت کا فرق پیدا کریں (شروع لکھیں)
تاخیر(2);
DS18B20_OUT = CMD&0x01; //اصل ڈیٹا بٹ بھیجیں
تاخیر(60); //لکھنے کی تکمیل کا انتظار کریں
DS18B20_OUT = 1; //بس کو جاری کریں اور اگلی ٹرانسمیشن کی تیاری کریں
سی ایم ڈی>>= 1; //ڈیٹا کا اگلا تھوڑا سا بھیجنا جاری رکھیں
}
}
/*
تقریب: ایک بائٹ پڑھیں
پہلے تھوڑا سا پڑھنے کا طریقہ سیکھیں.
*/
U8 DS18B20_READBYTE(باطل)
{
u8 i,ڈیٹا = 0;
کے لئے(i = 0;میں<8;i ++)
{
DS18B20_OUTPUT_MODE(); //آؤٹ پٹ موڈ میں شروع کریں
DS18B20_OUT = 0; //پڑھنے کا وقت کا فرق پیدا کریں (پڑھیں شروع کریں)
تاخیر(2);
DS18B20_OUT = 1; //ریلیز بس
DS18B20_INPUT_MODE(); //ان پٹ موڈ میں شروع کریں
تاخیر(8); //DS18B20 ڈیٹا آؤٹ پٹ کا انتظار کریں
ڈیٹا>>= 1; //کے ساتھ اونچائی کو بھریں 0, پہلے سے طے شدہ ہے 0
اگر(DS18B20_IN) ڈیٹا|= 0x80;
تاخیر(60);
DS18B20_OUT = 1; //ریلیز بس, اگلے تھوڑا سا ڈیٹا پڑھنے کا انتظار کریں
}
ڈیٹا لوٹائیں;
}
/*
تقریب: ایک بار DS18B20 کے درجہ حرارت کا ڈیٹا پڑھیں
واپسی کی قیمت: درجہ حرارت کا ڈیٹا پڑھا
سمجھا ہوا صورتحال: بس سے صرف ایک DS18B20 منسلک ہے
*/
U16 DS18B20_READTEMP(باطل)
{
U16 عارضی = 0;
U8 temp_h,temp_l;
DS18B20_CHECKDEVICE(); //ری سیٹ پلس بھیجیں, نبض کا پتہ لگائیں
DS18B20_WRITEBYTE(0xcc); //ROM تسلسل کا پتہ لگانے کو چھوڑیں
DS18B20_WRITEBYTE(0x44); //درجہ حرارت کی تبدیلی شروع کریں
//درجہ حرارت کے تبادلوں کے مکمل ہونے کا انتظار کریں
جبکہ(DS18B20_READBYTE()!= 0xff){}
DS18B20_CHECKDEVICE(); //ری سیٹ پلس بھیجیں, نبض کا پتہ لگائیں
DS18B20_WRITEBYTE(0xcc); //ROM تسلسل کا پتہ لگانے کو چھوڑیں
DS18B20_WRITEBYTE(0xbe); //درجہ حرارت پڑھیں
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 کی وضاحت کریں() {gpiob->CRH&= 0x0fffffff;gpiob->CRH|= 0x80000000;}
//DS18B20 کو آؤٹ پٹ موڈ میں شروع کریں
#DS18B20_OUTPUT_MODE کی وضاحت کریں(){gpiob->CRH&= 0x0fffffff;gpiob->CRH|= 0x30000000;}
//DS18B20 IO پورٹ آؤٹ پٹ
#DS18B20_OUT PBOUT کی وضاحت کریں(15)
//DS18B20 IO پورٹ ان پٹ
#DS18B20_IN PBIN کی وضاحت کریں(15)
//فنکشن اعلامیہ
U8 DS18B20_CLECKECK(باطل);
U8 DS18B20_CHECKDEVICE(باطل);
باطل DS18B20_INIT(باطل);
U16 DS18B20_READTEMP(باطل);
U8 DS18B20_READBYTE(باطل);
باطل DS18B20_WRITEBYTE(U8 CMD);
#اینڈیف
Poybagdydxcawkkmaaaak8rns4s030.png
3.3 تاخیر کی تقریب
/*
تقریب: ہم میں تاخیر
*/
باطل تاخیر(ہمارے پاس)
{
#ifdef _ systick_irq_
int i,جے;
کے لئے(i = 0;ival = 0; //CNT کاؤنٹر ویلیو
systick->لوڈ = 9*ہم; //9 مطلب 1US
systick->ctrl|= 1<<0; //ٹائمر شروع کریں
کرو
{
tmp = systick->ctrl; //حیثیت پڑھیں
}جبکہ((!(ٹی ایم پی&1<<16))&&(ٹی ایم پی&1<<0));
systick->ویل = 0; //CNT کاؤنٹر ویلیو
systick->ctrl&= ~(1<<0); //ٹائمر کو بند کردیں
#اینڈیف
};i ++)>
3.4 درجہ حرارت کو پڑھنے اور سیریل پورٹ پر پرنٹ کرنے کے لئے main.c DS18B20 پر کال کریں
#شامل کریں “stm32f10x.h”
#شامل کریں “DS18B20.H”
U8 DS18B20_ROM[8]; //DS18B20 کا 64 بٹ ROM کوڈ اسٹور کریں
int مین(باطل)
{
U16 ٹیمپ;
USARTX_HEAT(USART1،72،115200);//سیریل پورٹ کی ابتدا 1
DS18B20_HEAT(); //DS18B20 ابتدا
/*1. DS18B20 کا 64 بٹ ROM کوڈ پڑھیں*/
//ری سیٹ پلس بھیجیں, وجود کی نبض کا پتہ لگائیں
جبکہ(DS18B20_CHECKDEVICE())
{
پرنٹف(“DS18B20 ڈیوائس موجود نہیں ہے!\n”);
تاخیر(500);
}
//64 بٹ ROM کوڈ پڑھنے کے لئے کمانڈ بھیجیں
DS18B20_WRITEBYTE(0x33);
//لوپ 64 بٹ روم کوڈ پڑھیں
کے لئے(i = 0;میں<8;i ++)
{
DS18B20_ROM[میں]= DS18B20_READBYTE();
پرنٹف(“DS18B20_ROM[%ڈی]= 0x ٪ x n”,میں,DS18B20_ROM[میں]);
}
جبکہ(1)
{
/*2. درجہ حرارت کو تبدیل کرنا شروع کرنے کے لئے بیک میں بیک وقت تمام DS18B20 کو چلائیں*/
DS18B20_CHECKDEVICE(); //ری سیٹ پلس بھیجیں, نبض کا پتہ لگائیں
DS18B20_WRITEBYTE(0xcc); //ROM تسلسل کا پتہ لگانے کو چھوڑیں
DS18B20_WRITEBYTE(0x44); //درجہ حرارت کی تبدیلی شروع کریں (بس میں موجود تمام DS18B20 درجہ حرارت کو تبدیل کرنے دیں)
تاخیر(500); //مکمل ہونے کے لئے لائن پر تمام DS18B20 درجہ حرارت کے تبادلوں کا انتظار کریں
/*3. ہر DS18B20*/ کے درجہ حرارت کی واحد ھدف شدہ پڑھنا
DS18B20_CHECKDEVICE(); //ری سیٹ پلس بھیجیں, نبض کا پتہ لگائیں
DS18B20_WRITEBYTE(0x55); //ROM میچ کرنے کے لئے کمانڈ بھیجیں
کے لئے(i = 0;میں<8;i ++) //64 بٹ کوڈ بھیجیں
{
DS18B20_WRITEBYTE(DS18B20_ROM[میں]);
}
DS18B20_WRITEBYTE(0xbe); //درجہ حرارت پڑھیں
عارضی = DS18B20_READBYTE(); //کم آرڈر کے درجہ حرارت کا ڈیٹا پڑھیں
عارضی|= DS18B20_READBYTE()<<8; //ہائی آرڈر کے درجہ حرارت کا ڈیٹا پڑھیں
پرنٹف(“TEMP1 = ٪ d. ٪ d n”,عارضی>>4,عارضی&0XF);
پرنٹف(“TEMP2 = ٪ f n”,عارضی*0.0625);
تاخیر(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







