تبلیغات
میکروکده - راه اندازی سنسور ds1820 سنسور دمای دیجیتال
تاریخ : چهارشنبه 27 آذر 1392 | 07:26 ب.ظ | نویسنده : saeed firooz
به ام خدا
سلام دوستان
شاید برای شما هم پیش اومده که تو راه اندازی سنسور دمای دیجیتال ds1820  که سنسور مناسبی برای اندازه گیری دماست به مشکل برخورده باشید.
این سنسور از پروتکول تک سیم(1wire) برای انتقال اطلاعات استفاده میکنه و کل سنسور در بسته بندی PR35 PACKAGE و 16–PIN SSOP ساخته شده است. در بسته بندی نوع اول سنسور ظاهری همانند ترانزیستور داشته پس دارای سه پایه است. در بسته بندی16–PIN SSOP سنسور دارای 16 پایه بوده و از این 16 پایه فقط 3 تای آنها مورد استفاده قرار میگیرد و ما بقی nc هستند پس با سنسور پیچیده ای سروکار نداریم. به طوری که اگه 5 دقیقه روی دیتا شیتش وقت بذارید میتونید خیلی راحت براش برنامه بنویسید. خب حالا بریم سراغ الگوریتم برنامه:
برای خوندن دما از سنسور باید ابتدا دو عدد hcc و h44 را بدون تاخیر در سنسور نوشته و 100 میلی ثانیه صبر کنید و سپس دو عدد hcc و hbe رو تو سنسور مینویسید با ای کار سنسور دما رو برای شما میفرسته. برای نوشتن در سنسور از دستور1wwrite و برای خوندن اطلاعاتی که سنسور براتون می فرسته از دستور 1wread استفاده می کنیم. برای اطلاع بیشتر از سینتکس این دستور ها از help بسکام استفاده کنید.
سورس کامل برنامه :
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Config Lcdpin = Pin , Db7 = Portc.5 , Db6 = Portc.4 , Db5 = Portc.3 , Db4 _
      = Portc.2 , E = Portc.1 , Rs = Portc.0

Config 1wire = Portb.0
Declare Sub Temp_start(byval A As Byte , Byval B As Byte )
Dim Ar(8) As Byte , A As Byte , I As Byte , Temperature As Single
Dim Half As Byte , E As Single , Aa As Byte , Aa2 As Byte , R As Single , S As String * 8 , S2 As String * 8
Cls
Cursor Off
Home

Do
  Waitms 300
  Call Temp_start(&Hcc , &H44)
  Waitms 100
  Call Temp_start(&Hcc , &HBE)

   For I = 1 To 8
     Ar(i) = 1wread(1)
   Next I

     Lowerline
  Lcd Ar(2) ; "  " ; Ar(1) ; "  "
  Half = Ar(1) And 1
  Home

   Shift , Ar(1) , Right
    R = Ar(8) - Ar(7)
   R = R / Ar(8)

   Temperature = Ar(1) - 0.25
   Temperature = Temperature + R


   If Ar(2) > 0 Then
   Temperature = Temperature - 127.75
   End If

  Lcd Temperature ; "  "






Loop

End
در این برنامه از مد تمام رزولیشن سنور استفاده شده استکه دما رو با دقت دهم درجه نشون میده اگه از رزولیشن بالا استفاده نکنیم دقت سنسور نیم درجه خواهد شد.هر بار که ما دما رو از سنسور میخونیم سنسور دو بایت رو به ما میده که بایت اول دماست و بایت دوم مثبت یا منفی بودن دما رو مشخص میکنه. از بایت اول باید بیت کم ارزش رو برای تعیین دقت نیم درجه در نظر بگیریم.یعنی 7 بیت پر ارزش قسمت صحیح دماست . بیت کم ارزش در صورت یک بودن به این معنی است که باید به دمایی که با 7 بیت قبلی به دست اومده نیم درجه اضافه کنیم و در صورت صفر بودن هیچی اضافه نمیکنیم. بایت دوم در صورت مثبت بودن دما، تماما 0 خواهد بود و در صورت منفی بودن دما تماما 1 میشود(255). در برنامه بالا چون از رزولیشن بالای سنسور استفاده شده 8 بایت رو از سنسور میگیریم و تو فرمولی که تو دیتا شیت اومده قرار میدیم و دما با دقت یک دهم بدست میاد. تو این فرمول از بایت های اول و هفتم و هشتم استفاده شده است که  با 8 بار خوندن از سنسور توسط یک حلقه بدست میاد. بقیه اطلاعات رو میتونید از دیتا شیت بخونید امیدوارم به دردتون خورده باشه.
اگه سوالی داشتید پیام بذارید. حتما دیتا شیت رو دانلود کنید. نمیخوام پروژه رو بذارم چون اگه خودتون ور برید حتما یاد میگیرید بخدا آسونه. موفق باشی مهندس
دانلود دیتا شیت سنسور ds1820


  • سامان | اخبار | خرید اینترنتی