تحية طيبة :
بعد انتهاء الجزء النظري من مشروع تخرجي .. فقد جاء الجزء العملي ..
الحالة :
أقوم باستخدام المجس lm335z مع البك 16F877 لقياس درجة الحرارة .. ولهذا الغرض فقد قمت بوصل ذلك المجس على البن AN0 في البك.
المشكلة:
على افتراض ان درجة الحرارة هي 25 سيلسيوس فإن المجس يُعطي على مدخل البن AN0 الفولتية 2.9 فولت (لهون تمام) .. غير ان ما اقرأه من فولتية على الهايبر تيرمينال تكون غير ثابتة وحتى غير دقيقة .. فهي تُعطي مثلا 2.9305 .. 2.3012 .. 2.8625 .. وهكذا الى ماشاء الله . .. أي لا يوجد ثبات او دقة!!! .. وطبعا الدقة مهمة في المعادلة الرياضية التي ستحول من فولتيج الى درجة حرارة .. ولا ننسى بأن ذلك المجس يتغير بمقدار 10mv/degree .
الكود المستخدم :
لقد تم استخدام البك سي كلغة برمجة واستخدام ال برنامج ال PCW ككمبايلر ...
#include "C:\Documents and Settings\khaled\Desktop\Project Program\Picc Project Program"
void main()
{
float val =0;float val1 =0;
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
// TODO: USER CODE!!
while (true){
restart_wdt();
set_adc_channel(0);
val = read_adc();
val1 = (val /1024)*5;
printf("1:%1.4f\n",val1);
delay_ms(5000);
}
}- في الحقيقة .. لقد بحثت كثيرا وحاولت كثيرا دون اي جدوى ودون ان اجد شيئا يتكلم عن الموضوع .. وكأن هذه المشكلة ظهرت لأول مرة على مستوى العالم معي !!! .. لكن استطيع القول بعد كل ذلك .. انني اعتقد ان المشكلة موجودة بالكود .. فكأن الADC عندما يأخذ القيمة المرسلة لا يأخذها في الوقت الصحيح .. فإن كانت هي المشكلة فكي احلّها؟.
انا اكتب هذه المشلة راجيا منكم المساعدة .. فلا تبخلوا علي بها.
دمتم بخير.