با سلام
دوستان با توجه به فایلی که قرار دادم 8 تا سنسور رو میتونه بخونه اما من از تابع w1_serch چیزی دستگیرم نشد یعنی محتویات این تابع نشون داده نشده و نمیدونم چطور واسه جندتا سنسور تو برنامه خودم این کارو بکنم
http://s4.picofile.com/file/8164332250/DS1820.zip.html اضافه شده در تاریخ :
نوشته اصلی توسط freedom_truth
به نظر شما چکار باید بکنید؟
به نظر من باید یه تابع serchبنویسم که اولین و device بعدی رو پیدا کنه بعد تو یه حلقه نشون بده اما این کارو کردم نشد اضافه شده در تاریخ :
دوستان اگه میشه یه نگاهی ام به این لینک بندازید http://www.picprojects.net/ds1820/
درسته. توی دیتاشیت و در قست ROM Commands و ذیل دستور Search ROM گفته که باید با این دستور تمام سنسور ها رو از روی کد Rom شون شناسایی کنید. برای اطلاعات بیشتر هم به یک سند دیگه ارجاع داده.
در این تاپیک یک نمونه کد برای راه اندازی چند سنسور ارائه شده. ممکنه مجبور باشید کمی تغییرش بدید و ایرادهاش رو بگیرید.
http://www.ccsinfo.com/forum/viewtopic.php?t=44853
منظورتون از Rom serial number اون جدول است؟میشه در مورد اینکه چطور اون اعداد بدست میاد راهنمایی کنید من تو دیتاشیت خوندم که crc برای درستی عملکرد و xor کدهاست .من برناامه قبلیمو رو بردهم تست کردم واسه شبکه شدن جواب نداد این برنامه جدید رو هنوز رو برد تست نگرفتم اما تو پرتئوس هم حواب نمیده.اینجا اومده دونه دونه اضافه میکنه rom snumbero چطور میشه که rom serial ها یکی شدن؟ اضافه شده در تاریخ :
من فکر میکنم شماره سریال ها درسته و مشکل در پروتئوس هست در تغذیه PARAZITکه در کد و دیتاشیت هم اشاره شده اضافه شده در تاریخ :
و اینکه تو این برنامه TEMP حتی برای یک DEVICE هم درست نشون نمیده
نه منظورم مشخصات قطعه تو پروتیوسه.
روی قطعه کلیک راست کنید و Edit properties بزنید. Rom serial number رو رقم آخرشو عوض کنید. برای هر سنسور این کار رو انجام بدید.
من برای یک DEVICE هم تست میگیرم دما رو درست نشون نمیده اضافه شده در تاریخ :
الان برای سه تا سنسور هم دمارو اشتباه نشون میده.سوال دیگه ای که داشتم هر DS1820 چقدر جریان میکشه؟
در مورد جریان مصرفی چیزی تو DATASHEET نگفته و اینکه من چک کردم همه جیز درسته چرا دما رو درست نشون نمیده؟تا اونجایی که میدونم سنسور چه S باشه چه B باید درست نشون بده فقط B دقتش بیشتر
بله همونطور که فرمودید این کد برای DS18B20 هست وچطور میتونم برای DS18S20 تغییر بدم؟ اضافه شده در تاریخ :
دوست عزیز من کد رو تغییر دادم [code=c]temperature = (temperature)/2; [/code]
برای DS18S20 کار میکنه اما اولی رو اشتباه نشون میده اضافه شده در تاریخ :
شرط رو برداشتم درست شد. واقعا یک دنیا ممنون از همکاریتون اضافه شده در تاریخ :
با سلام
دوست عزیز
من اطلاعات دمایی که سنسورها نشون میدن رو طبق یک پروتکل خاصی میخوام به pc انتقال بدم اما به مشکل بر خوردم
اول اینکه دمای اندازه گیری شده float هست و من برای قرار دادن تو پروتکلم باینری میخوام اطلاعات دمارو و حالا این پروتکل چی هست
تو این پروتکل که تو شکل بیشر معلومه چی هست هر سنسور اطلاعات دماش مثلا 8بیت میشه که این پروتکل 4بایتی هست و در بایت اول id که 6بیت بایت اول هست رو میفرسته ودر بایت دوم d0 تا d5 و در بایت سوم d6 تا d7 ودر بایت اخر cheksum که شامل xor اطلاعات هر بیت میباشد.
و اینکه cheksume شامل xor 3 بایت بالا میباشد و برای هر سنسور این مراحل تکرار میشوند و شماره id اضافه میشود. اضافه شده در تاریخ :
که این هم عکس پروتکل و قسمتی از کد که خودم نوشتم اما تکمیل نیست http://s4.picofile.com/file/81650415...TOCOL.zip.html
به جای float میتونید از int16 استفاده کنید. البته باید کد نمایش دما رو کمی تغییر بدید.
برای پروتکل هم میتونید از modbus استفاده کنید که کتابخونه و مثالش هست. تست کردم جواب میده.
دیدگاه