با سلام.
من یه پروژه دارم که در اون 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






دیدگاه