بسم الله الرحمن الرحيم وصلى الله على محمد وال بيته الطيبين الطاهرين
في هذه مكتبه (( وهي قابله للتعديل )) تؤدي عده مهام
1- نحتاج الى التهيئه حساس في بدايه البرنامج
مثال
كود:
ds18x20_init(&porte,2,9);
حيث تلاحظون تحتاج الى البورت ورقم بن الي تم ربط فيه حساس لانه يعمل ببروتوكول one_wire
اذن حسب مثال تم ربط حساس في بورت E ورقم البن هو 2
اما 9 هو معامل دقه ويعتمد على حساس مثلا حساس ds18s20 معامل دقه =9
لاحظو الصوره
http://img02.arabsh.com/uploads/imag...444264fb0c.png
تلاحظون وجود بت مكتوب بداخله 2^-1 يعني = 0.5
كود:
static void ds18x20_init( char *port_ds18x20_ , char pin_ds18x20_ , unsigned short TEMP_RESOLUTION_ds18x20 )
{
// Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
// 18S20: 9 (default setting; can be 9,10,11,or 12)
// 18B20: 12
RES_SHIFT_ds18x20 = TEMP_RESOLUTION_ds18x20 - 8;
port_ds18x20= port_ds18x20_;
pin_ds18x20 =pin_ds18x20_;
}
وبتالي اخبرناه ان لدينا فارزه واحده لهذا الحساس عندها أصبحRES_SHIFT_ds18x20=1 وبتالي هذا يستخدم لعزل هذا الرقم عشري عن الرقم الصيحيح وايضا يستخدم في حساب الرقم العشري لكي يتم أضافتها الرقم صحيح
اما حساس ds18B20
http://img03.arabsh.com/uploads/imag...444264fa06.png
تلاحظون وجود اربعه مرتبات عشريه وعليه resulation=12 وعندها يصبح RES_SHIFT_ds18x20=4 وبتالي سنتعامل مع هذه فوارز العشريه
===============================================
2- داله قياس درجه الحراره
كود:
meausring_Temperature_ds18x20();
هذه الداله نحصل منها على
1- رقم صحيح لدرجه حراره من خىل متغير اسمه temp_ds18x20
2- تعطي لنا flag هل درجه حراره سالبه ام موجبه من خلال هذا متغير
s_ds18x20 قيمته =-1 اذا كانت درجه حراره temp_ds18x20 سالبه ويصبح قيمته =1 اذا كان درجه الحراره موجبه
يجب أخذ بنظر الاعتبار هذا s_ds18x20 لان في جميع الاحوال تكون temp_ds18x20 موجبه ولكي نعرف انها قيمه سالبه تختبر s_ds18x20 هل =-1 او 1
مثلا temp_ds18x20=10 فأذا كان s_ds18x20=-1 فان temp_ds18x20=-10
واذا كان flag=1 فان قيمه حراره تبقى موجبه
=========================================
3- اما بالنسبه للكسر فمتغير temp_fraction_ds18x20
ولكن يجب تقسيم temp_fraction_ds18x20 على 10000 وبعد ذلك يمكن أضافتها الى قيمه صحيحهtemp_ds18x20
يعتي بأختصار داله قياس ترجع ثلاث متغيرات
temp_ds18x20 يمثل عدد صحيح من نوع int ولكن قيمه موجبه
وكذلك temp_fraction_ds18x20 ويمثل الرقم عشري ولكن للحصول على رقم عشري يجب تقسيمه على 10000
وكذلك s_ds18x20 هو علم لمعرف هل قيمه درجه حراره موجبه ام سالبه
============================================
اخير داله خزن او قراءه درجه حراره الصغرى او العظمى
كود:
alarm_store_ds18x20(high_temp,low_temp,1);
هذه داله تستخدم لخزن درجه الحراره الصغرى والعظمى او لقراءتهما من ذاكره ايبروم للحساس
فأذا وضعنا 1 بداله فأنه سوف يتم قراءه درجه حراره الصغرى والعظمى ويتم خزنها في متغيرات
حيث يتم خزن الحراره العظمى في high_temp , وكذلك الحراره الصغرى في low_temp
الترتيب متغيرات مهم
لو تم مراجعه منول خاص بحساس صفحه 4 لوجدنا ان ريجيستر خاص TH,TL
يتكون من 8 بت (( من bit0 -bit7)) حيث bit7 هو flag لمعرفه هل قيمه مخزونه في ريجيستر هي موجبه ام سالبه
http://img04.arabsh.com/uploads/imag...444266f001.png
وعليه تم أستخدام هذين متغيرين لخزن القيم الموجبه او سالبه في ريجيستر
flag_high_nagative هذا علم للحراره العظمى اذا كان =1 يعني قيمه موجبه واذا كان =-1 يعني قيمه سالبه
flag_low_nagative هذا علم للحراره الصغرى اذا كان =1 يعني قيمه موجبه واذا كان =-1 يعني قيمه سالبه