ايران ويج

نسخه‌ی کامل: برنامه دما با lm35 کتاب اقای کاهه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
من پروژه زیر رو انجام دادم

کد php:
$regfile "m16def.dat"
'We use internal osc 4000000 for atmega16
$crystal = 4000000
Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = _
Portc.4 , E = Portd.2 , Rs = Portd.3
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto, [size=medium][b]Reference = Internal[/b][/size]
Start Adc
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
On Timer0 Temp_sample
Start Timer0
Dim Sample As Word
Dim Temp As Word
Dim Temp_final As Integer
Dim Sum As Integer
Deflcdchar 0 , 24 , 24 , 32 , 32 , 32 , 32 , 32 , 32 '' sign -> ('
)
Cursor Off
Cls
Do

Loop
end 
'end program

Temp_sample:
Incr Sample '
incr sampling counter
Temp 
Getadc(0'read adc(0) every 65ms
Sum = Sum + Temp '
sum the sample data
If Sample 15 Then '20 samples
 Sample = 0 '
reset sample counter
 Stop Timer0 
'stop timer to calculation
 Sum = Sum / 15 '
mean calculation
 Sum 
Sum 558 'decrementing offset
 Temp_final = Sum / 2 '
every 10mv is almost 2 step of adc (adc step=5/1023=4.88mv)
 
Select Case Temp_final
 
Case Is =< 10 'compare temperature
 Home L
 Lcd " Low "
 Case 11 To 34 : '
compare temperature
 Home L
 Lcd 
" Normal "
 
Case Is >= 35 'compare temperature
 Home L
 Lcd " High "
 End Select

 Home
 Lcd Temp_final ; Chr(0) ; "C " '
show temperature
 Start Timer0
 Sum 
0
End 
If
Return 

ولی وقتی گزینه refrence رو که تو برنامه نیست تو میکرو میریزم دما رو 232 و زمانی که ولتاژ داخیشو برای میکرو مینویسم دما خیلی تغیر میکنه مثلا از 2 میره به 40 و...
البته من از غیلتر استفاده نکردم میتونه از اون هم باشه؟ ( تو دماسنج با ntc بدون فیلتر هم کار میکرد)
اگه کسی با این سنسور کار کرده یه ندایی هم به ما بده
مهندس من تو همه كارهام يه جوري اين سنسوره بوده و هميشه هم راحت جواب مي داده !

مشكلت احتمالا بايد از جاي ديگه اي باشه !

کد php:
Sum Sum 15 'mean calculation
 Sum = Sum - 558 '
decrementing offset 

اين دوخط برام بي معنيه !


اين برنامه رو يه تست كن ببين اصلا دما رو درست نشون مي ده !

کد php:
$regfile "m16def.dat" $crystal 4000000

Config Lcdpin 
Pin Db4 Portc.1 Db5 Portc.2 Db6 Portc.3 Db7 Portc.4 Portd.2 Rs Portd.3
Config Lcd 
16 Cursor Off Cls
Deflcdchar 0 
24 24 32 32 32 32 32 32 '' sign -> (')

Config Adc = Single , Prescaler = Auto , Reference = Internal

Config Timer0 = Timer , Prescale = 1024
Enable Interrupts : Enable Timer0 : On Timer0 Ant

Dim W As Word

Start Adc : Start Timer0

Do

Loop


Ant:

   W = Getadc(0)
   W = W / 4 :
   Home : Lcd W ; " " ; Chr(0) ; "     "

Return 
علی جون فکر کنم w باید تقسیم بر 2 بشه.

به دیتاشیت یه نگاه بنداز.
ممنون از توجهت !

مهندس وقتي از رفرنس داخلي استفاده مي كني بايد تقسيم بر 4 بشه !

اون وقتي كه رفرنس 5 ولت مي ذاري بايد تقسيم بر دو كني ! ( الان رفرنس 2.56 ولته )
نقل قول: اين دوخط برام بي معنيه !
تو558 مقدار دما برابر صفر در نظر گرفته شده
و 15 بار در ثانیه هم نمونه گیری شده بعد میانگین گرفته

راستی سنسور 335 هستش نه lm35
به نظرتون مشکل از کجا میتونه باشه؟
طبق رابطه ای که بر LM35 حاکم است v=0.01*T است یعنی اگر دما 1 درجه باشد 100 میلی ولت ولتاژ تولید میشود خوب وقتی LM35 رو زدیم به adc و یک عددی میدهد:
با شرط رفرنس 5 ولت:
a=getadc0
v=0.0049*a
t=100*v
این میشود مقدار دما
حالا من موندم چرا شما میگویید باید a تقسیم بر 2 یا 4 شود!
مهندس هاشمی نوشته است:یعنی اگر دما 1 درجه باشد 100 میلی ولت ولتاژ تولید میشود
تو یه درجه 10 میلی ولت خروجی می ده !!!!

تو 25 درجه 250 میلی ولت خروجی می ده !
اگه ولتاژ رفرنس میکرو 5 ولت باشه یعنی بین 0 تا 5 ولت 1024 قسمت شده باشه با ورودی 250 میلی ولت میکرو عدد 51 رو بر میگردونه که با تقسیم بر چهار می شه تقریبا 25 که همون میزان دماست !!!!!

حالا اگه رفرنس داخلی استفاده کنیم یعنی 2.56 ولت , میکرو عدد 102 رو بر میگردونه که خوب باید تقسیم بر 4 بشه تا میزان دما بدست بیاد !!!!
تو درجات زير صفر (منفي) چطور محاسبه ميشه ؟؟؟
به این صورت باید سنسور رو وصل کنی!!! با پروتئوس برات کشیدم
اونوقت هر دو ولتاژ رو بگیری و از هم کم کنی و جواب رو بر 4 تقسیم کنی...
همین!!!!
متشكرم
ميشه نحوه كار رو يكم توضيح بدين ؟
كار ديود ها و مقاومت اونجا چيه ؟
سوال دوم : اگه بخوايم سه تا lm35 استفاده كنيم بايد 6 پايه adc استفاده شه ؟
سلام..
شما که سوالت رو مطرح کردی من رفتم تو دیتا شیت این سنسور و دیدم برای دمای منفی به این صورت متصل کرده!!! و چون 2 تا ولتاژه تقسیم بر 4 باید بکنیم..
خوب من فک کنم برای شیفت ولتاژه صفره ای سیه!!!
اگه خودت نمیتونی برنامش رو بنویسی بگو تا برات بنویسیم!!!
فک کنم بشه چند تا سنسور رو وصل کرد و فقط یه پایه رو از منفی گرفت!!!
باید تست بشه!!!
ولی اگه میخوای چند تا سنسور دما رو اطلاعاتشون رو دریافت کنی من سنسور ds1820 رو معرفی میکنم که میتونی خیلی از این سنسور رو با یه سیم به میکرو وصل کنی و اطلاعات هر کدومشو مجزا بخونی!!! من هنوز دارم روش کار میکنم!!!!
صفحه‌ها: 1 2