ايران ويج

نسخه‌ی کامل: lm35
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
با سلام
من مدار lm35 رو با mega32 بستم و با زبان بیسیک برنامشو نوشتم
یه نکته ای که هست اینه که الان رو lcd به من دمای 120 درجه رو نشون میده و تو دیتاشیتشو دیدم و بر حسب سانتیگراد هست
حالا سوال من اینه که دمای محیط 18 درجه هست چرا 120 نشون میده
باید 120 رو مثلا منهای 102 کنم تا 18 رونشون بده؟ (یعنی دستی کالیبرش کنم)
این روش درسته؟ یا اینکه باید از همون اول دقیق 18 رو نشون بده؟
میانگین هم گرفتم همین 120 رو داد تقریبا

در ضمن از Aref رو از ولتاژ داخلی گرفتم
اگر ولتاژ رفرنس 5 ولت باشه و ای دی سی در مد 10 بیت باشه، هر عددی را که از ای دی سی دریافت می کنید را تقسیم بر 2 کنید.

البته یه مقدار خطای کوچولو داره که اونم با نصب یه مولتی ترن بر سر پایه VS از LM35 مشکل حل میشه.

با مولتی ترن کالیبره کنید.
'Config Adc = Single , Prescaler = 128 , Reference = Internal
Enable Adcc
If Ss = 1 Then
Start Adc
Temp = Getadc(0)
Shift Temp , Right , 2

Stop Adc
Ts = Str(temp)
Ts = Format(ts , " ")

Locate 1 , 7
Lcd Ts
End If
خوب چون من میخواستم هر یک دقیقه یکبار دمای روی ال سی دی رفرش بشه به این شکل استفاده کردم اما با دستور شیفت که دیدی ما دقت عدد رو به 8 بیت کاهش میدیم تا دما رو با دقت تا دمای صحیح نمایش داده بشه. بهر حال پیکربندی و دستکاری بیتهای بدست آمده امیدوارم به منظورت برسی.
خوب حالا پایه خروجی اون سنسورت رو به یکی از پایه های میکرو مه تو دیتاشیت نوشته ADC وصل کن و از اون یک مقاومت 10 کیلو به زمین وصل کن. کار تموم شد عزیز ازش لذت ببر
مهندس reeza برنامه و نقشتو بذار !

اینطوری نمی شه نظر داد !

برنامه saeidjan رو می شه ساده تر کرد !

کد php:
$regfile "m32def.dat" $crystal 8000000

Config Lcdpin 
Pin Db4 Pinc.3 Db5 Pinc.2 Db6 Pinc.1 Db7 Pinc.0 Pinc.4 Rs Pinc.5
Config Lcd 
16 Cursor Off Cls

Dim W 
As Word As Single

Config Adc 
Single Prescaler Auto Reference Internal

Do
    
Getadc(0) : 4
    Home L 
Lcd "Temp = " " C   "
Loop 
با دقت 0.25 درجه !
مدار رو هم میگذاری؟
اینم مدار


[attachment=4416]
خیلی ممنون دوستان

یعنی با مولتی ترن یا پتانسیومتر دستی مدار رو تنظیم کنم درسته؟

از نظر برنامه نویسی فکر نکنم مشکل داشته باشه من برنامه ای رو که نوشتم در زیر هست:

کد:
$regfile = "M32def.dat"
$crystal = 8000000


Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2

Config Adc = Single , Prescaler = Auto
Ddrd.7 = 1


Dim A As Word
Dim Sum As Integer
Dim I As Integer
Dim Temp As Double

Start Adc

Cls
Lcd "salam"
Wait 1

Portd.7 = 1

Do
For I = 0 To 24
Cls

A = Getadc(0)
Sum = Sum
Lcd I
Waitms 1
Next

Temp = Sum / 25
Temp=Temp/2
Cls
Lcd Temp

Wait 2

Loop
End

[تصویر:  1262960082.bmp]


وقتی رفرنس رو اینترنال در نظر میگیریم آیا بازم باشد vref رو به جایی وصل کرد؟
مهندس برنامه ات یه چن جا ایراد داره !!!

دوباره نگاش کن !
نفهمیدی بگو بهت بگم !



نه نمی خواد جایی وصل بشه !


اینم یه تایپیک مزتبط : http://forum.iranled.com/showthread.php?tid=13539
(۱۷-دى-۱۳۸۸, ۱۹:۵۶:۳۷)t3r!p3000 نوشته است: [ -> ]مهندس برنامه ات یه چن جا ایراد داره !!!

دوباره نگاش کن !
نفهمیدی بگو بهت بگم !



نه نمی خواد جایی وصل بشه !


اینم یه تایپیک مزتبط : http://forum.iranled.com/showthread.php?tid=13539


دیدم این تاپیک رو
پس پایه vref رو به جایی وصل نکردم
طبق اوصاف من باید adc رو تقسیم بر 4 کنم چون از vref داخلی استفاده کردم درسته؟
میانگین که درسته باید باشه
مابقیه ایرادات رو متوجه نشدم اگر چیزی باشه
لطفا راهنمایی بفرمایید
کد:
Config Adc = Single , Prescaler = Auto
الان که رفرنس خارجیه !
گفتین داخلی می خواین !


کد:
Sum = Sum
که باید بعلاوه مقداری که از آنالوگ می خونین بشه که انگار فراموش شده !


کد:
Lcd I
خوب اینکه متغیرر حلقه فور هستش و چی لزومی داره نشون داده بشه !
اونم با این سرعت که اصلا دیده نمی شه !


کد:
Dim Temp As Double
مغیر نوع ورد کارتون رو راه می اندازه به لانگ هم نیازی نیست دیگه چی برسه دابل !!!!
البته شاید سنگل بذارین قشنگ تره باشه !
اینطوری با چن رقم اعشار نشون می ده !!!


کد:
Dim Sum As Integer
نوع ورد بهتره !


کد:
Dim I As Integer
بهتره نوع بایت بذارین !
اینم اصلاح شده برنامه شما :

کد php:
$regfile "M32def.dat" $crystal 8000000

Config Lcdpin 
Pin Db4 Portb.4 Db5 Portb.5 Db6 Portb.6 Db7 Portb.7 Portb.1 Rs Portb.0
Config Lcd 
16 Cursor Off Cls

Config Adc 
Single Prescaler Auto Reference Internal
Ddrd.7 
1

Dim A 
As Word Sum As Word As Byte Temp As Single

Start Adc

Cls 
Lcd "salam" Wait 1

Do

   For 
0 To 24
      A 
Getadc(0) : Sum Sum Waitms 1
   Next

   Temp 
Sum 100 Lcd Fusing(temp "#.##") ; "     "
   
Wait 1 Toggle Portd.7

Loop 
صفحه‌ها: 1 2