با سلام.
من یه پروژه دارم که در اون 2 تا LM35 دارم و باید دمای اونها رو هر 1 ثانیه بخونم اما موقع خوندن دما پرش خیلی زیاده . با اینکه سنسورها کنار هم هستن اختلاف دما 2-3 درجه دارن و هر بار دما 2-3 درجه با دفعه قبلی تفاوت داره و گاهی در مدت یک دقیقه تا 10 درجه دما را بالا پایین نشون می ده . تا جایی که می تونستم با انواع فیلترها ولتاژ میکرو و تغذیه آنالوگ و تغذیه سنسورها را صاف کردم اما مشکل حل نشد . اخرین راه استفاده از گزینه noise canceling میکرو به نظرم رسید.
مطابق ویزارد کدویژن از این تابع استفاده کردم :
و بعد برای خوندن مقدار از دستور زیر استفاده کردم :
اما با اولین فعال شدن این دستور میکرو هنگ می کنه و خروجی نمی ده . کسی می دونه اشکال کارم کجاست؟ این مساله خیلی برای من حیاتی و مهمه .
کد کامل پروژم هم اینجاست :
http://aks98.com/images/jzy11oneznzjvd09sv17.zip
من یه پروژه دارم که در اون 2 تا LM35 دارم و باید دمای اونها رو هر 1 ثانیه بخونم اما موقع خوندن دما پرش خیلی زیاده . با اینکه سنسورها کنار هم هستن اختلاف دما 2-3 درجه دارن و هر بار دما 2-3 درجه با دفعه قبلی تفاوت داره و گاهی در مدت یک دقیقه تا 10 درجه دما را بالا پایین نشون می ده . تا جایی که می تونستم با انواع فیلترها ولتاژ میکرو و تغذیه آنالوگ و تغذیه سنسورها را صاف کردم اما مشکل حل نشد . اخرین راه استفاده از گزینه noise canceling میکرو به نظرم رسید.
مطابق ویزارد کدویژن از این تابع استفاده کردم :
کد:
// Read the AD conversion result // with noise canceling unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); #asm in r30,mcucr cbr r30,__sm_mask sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30 sleep cbr r30,__se_bit out mcucr,r30 #endasm return adc_data; }
و بعد برای خوندن مقدار از دستور زیر استفاده کردم :
کد:
[left] Temp1=read_adc(1);[/left]
کد کامل پروژم هم اینجاست :
http://aks98.com/images/jzy11oneznzjvd09sv17.zip
دیدگاه