RE: استفاده دقیق از سنسور SMT160
سلام به دوستان عزیز و البته اقای ha_60 من مشکلی برام پیش اومده اونم اینه که برای اندازه گیری دما با سنسور smt160 تو عمل مقدار واقعی رو نشون نمیده در اصل چیزی نزدیک به 10 درجه اختلاف داره و تو دمای کاملا ثابت (دستگاه جوجه کشی) نوسان 2 الی 3 درجه ای داره.در صورتیکه می بایست دقت 0.1 رو حداقل می داشت (مقاومت 4.7k بین portd.0 و زمین رو هم گذاشتم)برنامه ای هم که تو میکرو ریختم اینه لطفا راهنماییم کنید با تشکر فراوان
$regfile = "m32def.dat"
$crystal = 4000000
'-------------------------------lcd---------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7
'--------------------------------dim-------------------------------------------
Dim Yazdkit_reset As Word
Dim Yazdkit_set As Word
Dim Temp As Single
Dim Duty As Single
Dim X As Integer
'-------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 1
Enable Timer1
'--------------------------------main------------------------------------------
Config Pind.0 = Input
'------------------------------------------------------------------------------
Cursor Off
Cls
Locate 1 , 5
Lcd "Hello"
Locate 2 , 1
Lcd "WWW.YAZDKIT.COM"
Wait 2
Cls
Smt160:
Do
Gosub Read_data_sm160
Locate 1 , 1
Lcd "T= " ; Temp ; "c ";
Wait 1
Loop
'-------------------------------------------------------------------------------
Read_data_sm160:
Bitwait Pind.0 , Set
Bitwait Pind.0 , Reset
Bitwait Pind.0 , Set
Bitwait Pind.0 , Reset
Bitwait Pind.0 , Set
Bitwait Pind.0 , Reset
Stop Timer1
Bitwait Pind.0 , Set
Timer1 = 0
Start Timer1
Bitwait Pind.0 , Reset
'Xl = Timer1
Yazdkit_set = Timer1
Timer1 = 0
Start Timer1
Bitwait Pind.0 , Set
'Xf = Timer1
Yazdkit_reset = Timer1
X = Yazdkit_set + Yazdkit_reset
Duty = Yazdkit_set / X
Duty = Duty - 0.32
Waitms 1
Temp = Duty / 0.0047
Waitms 1
Locate 1 , 1
Temp = Round(temp)
Stop Timer1
Return
پورت رو هم تو برنامه عوض کردم نشد
'--------------------------------main-------------------------------------------
$regfile = "m32def.dat"
$crystal = 1000000
'-------------------------------lcd---------------------------------------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7
'--------------------------------dim-------------------------------------------
Dim Rs As Word
Dim Sets As Word
Dim Temp As Single
Dim Duty As Single
Dim X As Integer
Config Single = Scientific , Digits = 3
'-------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 1
Enable Timer1
'--------------------------------main------------------------------------------
Config Pind.4 = Input
'------------------------------------------------------------------------------
Cursor Off
Cls
Locate 1 , 5
Lcd "Hello"
Locate 2 , 1
Lcd " RAMIN "
Wait 2
Cls
Smt160:
Do
Gosub Read_data_sm160
Locate 1 , 1
Lcd "T= " ; Temp ; "c ";
Wait 1
Loop
'-------------------------------------------------------------------------------
Read_data_sm160:
Bitwait Pind.4 , Set
Bitwait Pind.4 , Reset
Bitwait Pind.4 , Set
Bitwait Pind.4 , Reset
Bitwait Pind.4 , Set
Bitwait Pind.4 , Reset
Stop Timer1
Bitwait Pind.4 , Set
Timer1 = 0
Start Timer1
Bitwait Pind.4 , Reset
'Xl = Timer1
Sets = Timer1
'Bitwait Pind.0 , Reset 'ramin
Timer1 = 0
Start Timer1
Bitwait Pind.4 , Set
'Xf = Timer1
Rs = Timer1
X = Sets + Rs
Duty = Sets / X
Duty = Duty - 0.32
Waitms 1
Temp = Duty / 0.0047
Waitms 1
'Locate 1 , 1
'Temp = Round(temp)
Stop Timer1
Return
(آخرین ویرایش در این ارسال: ۱۷-مرداد-۱۳۹۰, ۰۶:۴۵:۴۵، توسط raminrayat.)
|