ايران ويج

نسخه‌ی کامل: کد برنامه smt160
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
کد استفاده از smt 160 :
از اونجایی که برای نوشتن کد بدست آوردن دما به وسیله smt160 خیلی به دردسر افتادم اونو در اختیار کسانی قرار میدم که قصد استفاده از اون رو دارن.
البته نوشتن این برنامه با استفاده از وقفه های میکرو خیلی ساده تره . من فقط با استفاده از یک پین ورودی و تایمر0 این کارو کردم.
آرزوی آرامش و آسایش برای همتون

کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pinb.2 , Db5 = Pinb.3 _
, Db6 = Pinb.4 , Db7 = Pinb.5 , Rs = Pinb.0 , E = Pinb.1
Config Timer0 = Timer , Prescale = 8
Enable Timer0
Dim T1 As Long
Dim T2 As Long
Dim T3 As Long
Dim Dc As Single
Dim Endt As Single
Do
T1 = 0 : T2 = 0 : Dc = 0 : Endt = 0
Start Timer1
Bitwait Pinb.7 , Reset
Timer1 = 0
Bitwait Pinb.7 , Set
T2 = Timer1
Timer1 = 0
Bitwait Pinb.7 , Reset
T1 = Timer1
Timer1 = 0
Bitwait Pinb.7 , Set
T2 = Timer1
T3 = T2 + T1
Dc = T1 / T3
Endt = Dc - 0.32
Endt = Endt / 0.0047
cls
Lcd endt
Stop Timer1
Loop
End

سلا مهندس

ممنون از برنامه


من تا حالا با smt160 كار نكردم ولي فكر مي كنم بعضي از خط هاي شما انگار اضافه اند .

فكر كنم بشه برنامه رو به فرم زير خلاصه كرد .

کد:
$regfile = "m32def.dat" : $crystal = 1000000
Config Lcdpin = Pin , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5 , Rs = Pinb.0 , E = Pinb.1
Config Lcd = 16 * 2 : Cursor Off
Config Timer1 = Timer , Prescale = 8
Dim T1 As Word , T2 As Long , Dc As Single
Do
    T1 = 0 : T2 = 0 : Dc = 0
    Timer1 = 0
    Bitwait Pinb.7 , Reset
    Start Timer1
    Bitwait Pinb.7 , Set
    T2 = Timer1 : Timer1 = 0
    Bitwait Pinb.7 , Reset
    T1 = Timer1: Stop timer1:T2 = T2 + T1
    Dc = T1 / T2 : Dc = Dc - 0.32 : Dc = Dc / 0.0047
    Cls : Lcd Dc :Waitms 100
Loop


اين خط شما انگار اضافه است . اخه دارين وقفه تايمر صفر رو فعال مي كنيد .
کد:
Enable Timer0


نمي دونم چرا شما تايمر صفر رو برنامه ريزي كرديد ولي از تايمر يك استفاده كرديد .
کد:
Config Timer0 = Timer , Prescale = 8
کد:
Start Timer1


متغيرهاي Endt و T3 رو هم فكر كنم بشه برداشت .

براي بدست آوردن T1 و T2 هم انگار دوبار پشت سر هم انجام داديد كه يكبارش اضافه هستش .

نكته : نقشه شماتيك رو هم مي ذاشتين عالي مي شد .
ممنون از اصلاحاتی که دادی.
اما چند تا نکته
1-تو بیس کام نمیشه چند تا متغیر رو پشت سرهم تعریف کرد.
2-آنچه که باعث به درد سر افتادن زیاد من شد، این بود که بار اول مقدار t1 درست محاسبه نمیشه
وحتما باید اونو دوبار محاسبه کرد و مقدار دوم مقدار درسته.
3-در مورد شماره تایمر شما درست میگید.
4- در مورد استفاده از متغیرهای t3 , endt بازم شما درست میگید ولی ممکنه خوانایی برنامه از بین بره.
5- تا زمانی که از دستور Enable Timer0 استفاده نکنید تایمر به کار نمی افته.
6-شماتیک برنامه هیچ چیز قابل توجهی رو دربر نداره. smt160 یک ماژول 3پایه است(زمین،دیتا،مثبت) فقط باید پایه دیتا به pinb.7 یا هر پایه که خودتون تعیین می کنید ، وصل بشه.همین
ممنون از اصلاحاتی که دادی.
اما چند تا نکته
1-تو بیس کام نمیشه چند تا متغیر رو پشت سرهم تعریف کرد.
2-آنچه که باعث به درد سر افتادن زیاد من شد، این بود که بار اول مقدار t1 درست محاسبه نمیشه
وحتما باید اونو دوبار محاسبه کرد و مقدار دوم مقدار درسته.
3-در مورد شماره تایمر شما درست میگید.
4- در مورد استفاده از متغیرهای t3 , endt بازم شما درست میگید ولی ممکنه خوانایی برنامه از بین بره.
5- تا زمانی که از دستور Enable Timer0 استفاده نکنید تایمر به کار نمی افته.
6-شماتیک برنامه هیچ چیز قابل توجهی رو دربر نداره. smt160 یک ماژول 3پایه است(زمین،دیتا،مثبت) فقط باید پایه دیتا به pinb.7 یا هر پایه که خودتون تعیین می کنید ، وصل بشه. همین
چشمهاي من پست شما رو تا به تا مي بينه ؟
فكر مي كنم توهمه چون دو تا مي بينم


edifier نوشته است:تو بیس کام نمیشه چند تا متغیر رو پشت سرهم تعریف کرد.
ها !!!!!!! ( با لهجه قوچاني بخونيد )
يه چيزي مي گي .
اگه بينشون ويرگول "," بذاري مي شه همه رو تو يه خط نوشت مثل زير :
کد:
Dim T1 As Word , T2 As Long , Dc As Single

تازه مي شه چند تا دستور هم تو يه خط نوشت . بايد بينشون دو نقطه ":" بذاري .مثل زير :
کد:
Cls : Lcd Dc :Waitms 100

همينطور مي شه چند تا متغير رو هم با هم ارسال يا نشون داد . بايد بينشون نقطه ويرگول ";" بذاري . مثل زير :
کد:
Print  Dc ; T1 ; "  " ; T2
Lcd  Dc ; "  " ; T1 ; "  " ; T2


edifier نوشته است:آنچه که باعث به درد سر افتادن زیاد من شد، این بود که بار اول مقدار t1 درست محاسبه نمیشه وحتما باید اونو دوبار محاسبه کرد و مقدار دوم مقدار درسته.
منطقي نيست .
البته برنامه شما چنين مشكلي داره .
دوباره نگاش كن ، علتشو مي فهمي .
تو برنامه من نبايد چنين مشكلي وجود داشته باشه .
مقايسه كن . علت رو مي فهمي .


edifier نوشته است:تا زمانی که از دستور Enable Timer0 استفاده نکنید تایمر به کار نمی افته.
وقفه تايمر كار نمي كنه نه خود تايمر .
شما هم كه از وقفه استفاده نكردي .
بدون اون هم امتحان كن ، بايد كار كنه .
نكته : تايمر يك رو ميگي ديگه . آخه تايمر صفر رو نوشتي .


نكته : من از بسكام 1.11.9.0 استفاده مي كنم .

حالا اين smt160 چي هستش ؟
سنسور چيه ؟
( الان با خودتون مي گين كه من نمي دونم smt160 چيه ، ولي الكي دارم رو برنامه هاش بحث مي كنم . )
آیا دقت این برنامه 0.01 است؟