اطلاعیه

Collapse
No announcement yet.

مشکل با برنامه دماسنج DS18B20

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل با برنامه دماسنج DS18B20

    سلام دوستان خوب هستید؟

    دوستان من یه برنامه برای دماسنج و رطوبت سنج نوشتم که سنسور مربوطه DS18B20 هست .مدار دارای 3 شاسی هست که منو و UP و DOWN داره .توسط این 3 کلید مقدار SETPOINT رو تنظیم میکنم ولی زمانیکه دما از SETPOINT کمو زیاد میشه خروجی مربوطه فعال نمیشه .تمام این مشکل ها هم برمیگرده به متغییرهای معرفی شده در اول برنامه چون زمانیکه تمام متغیر ها رو از جنس BYTE تعریف میکننم مشکلی نداره و خروجی رو فعال و غیر فعال میکنه ولی تا متغییر ها رو تغییر میدم به STRING یا SINGLE برنامه خطا میده یا خروجی فعال میشه ولی دیگه غیر فعال نمیشه . دلیل اینکه از متغییر BYTE نمیتونم استفاده کنم اینکه چون دقت سنسور DS18B20 دهم هست .متغییر BYTE دهم رو حساب نمیکنه .
    برنامه و فایل شبیه سازی رو قرار میدم ممنون میشم در این زمینه یه راهنمایی بفرمایدند.ضمنا اینکه در پرتئوس سنسور اول دماسنج هست و 2 سنسور دیگر حکم رطوبت سنج رو داره و با کمو زیاد کردن یکی از این سنسورها مقدار رطوبت کمو زیاد میشه .(برنامه با یسکام هست)
    http://s5.picofile.com/file/8104873768/temp111.rar.html
    یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

    #2
    پاسخ : مشکل با برنامه دماسنج DS18B20

    سلام
    ظاهرا توی بسکام امکان مقایسه یه متغییر single با سایر انواع داده (byte - long -word ...) وجود نداره برای رفع این مشکل میتونید یه متغییر موقت تو برنامه بزارید و مقدار متغییر مورد نظر رو توی اون قرار بدین

    کد:
    Dim S As Single
    Dim S_temp As Single
    
    Dim D As Byte
    
    S_temp = D
    
    If S > S_temp Then Print "max"

    دیدگاه


      #3
      پاسخ : مشکل با برنامه دماسنج DS18B20

      نوشته اصلی توسط mahdi421
      سلام
      ظاهرا توی بسکام امکان مقایسه یه متغییر single با سایر انواع داده (byte - long -word ...) وجود نداره برای رفع این مشکل میتونید یه متغییر موقت تو برنامه بزارید و مقدار متغییر مورد نظر رو توی اون قرار بدین

      کد:
      Dim S As Single
      Dim S_temp As Single
      
      Dim D As Byte
      
      S_temp = D
      
      If S > S_temp Then Print "max"
      سلام مهندس چطوری شما خوب هستید ؟؟

      اقا ممنونم .سنسور ds18b20 دقت 0.1 داره و منم همین دقت رو میخام زمانی که من ( T(12 رو از جنس BYTE تعریف میکنم هیچ مشکلی ندارم هم خروجی قعال و غیر فعال میشه و هر برنامه جواب میده ولی مشکلی که داره اینکه دما رو رند نشون میده مثلا 25 . من میخام دقت دهم رو هم نشون بده مثلا 25.1 .برای گرفتن مقدار دهم که عدد اعشاری هست باید یا SINGLE بذاری یا string .ولی تا single میذارم برنامه خطا میده و جواب نمیده .
      byte که میذارم مشکلی نداره ولی باید single یا string بذارم که دقت 0.1 رو بگیرم .

      برنامه الان با byte داره جواب میده .ولی عدد رند هست

      برنامه رو ویرایش کردم و دوبازه اپلود کردم .بنابراین دوباره برنامه رو دانلود کنید
      یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

      دیدگاه


        #4
        پاسخ : مشکل با برنامه دماسنج DS18B20

        سلام
        توی محاسبات باید با توجه به نتیجه ای که میخواین بگیرین نوع متغییر رو تعریف کنید. اگر متغییر شما از نوع بایت باشه و با اون متغییر تقسیم 10 بر 4 رو حساب کنید خروجی شما به جای 2.5 عدد 2 خواهد شد

        من تو کد زیر به جای متغییر (T(1 یه متغییر Single تعریف کردام و نتیجه روی LCD با یه رقم اعشار نشون داده میشه
        کد:
        Dim J As Single 
        
        1wreset Pinb , 0
        
        If Err = 1 Then
        
          Locate 1 , 1
          Lcd "NO SENSOR 1 "
        
        Else
        
          1wwrite &HCC , 1 , Pinb , 0
          1wwrite &H44 , 1 , Pinb , 0
          Waitms 100
          1wreset Pinb , 0
          1wwrite &HCC , 1 , Pinb , 0
          1wwrite &HBE , 1 , Pinb , 0
          Ar(1) = 1wread(1 , Pinb , 0)
          Ar(2) = 1wread(1 , Pinb , 0)
          J = Ar(1) / 16
          T(2) = Ar(2) * 16
          J = J + T(2)
          Locate 1 , 1
          Lcd "T1:" ; J ; Chr(223) ; "C   "
        
        End If
        Waitms 100

        دیدگاه


          #5
          پاسخ : مشکل با برنامه دماسنج DS18B20

          ممنونم
          مشکل همین جاست.
          ما الان نمایش دما رو توسط متغییر J داریم نشون میدم که این متغییر از نوع SINGLE هست .تا اینجا OK?
          من باید خروجی رو فعال یا غیر فعال کنم توسط این دستور

          کد:
          If [color=red]J[/color] => [color=red]K[/color] Then Set Portd.6
          If[color=red] J[/color] <=[color=red] G[/color] Then Reset Portd.6
          J که از نوع SINGLE هست .ولی من K و G رو از نوع BYTE تعریف کردم ولی خطا میده .اگر هم K وG رو از نوع SINGLE معرفی کنم خروجی فعال و غیر فعال نمیشه .
          این قسمت رو خودتون ببینید

          کد:
          Dim Ar(9) As Byte , A As Byte ,[color=red] K As Byte , G As Byte[/color] , E As Byte , O As Byte
          Dim Modeselect As Byte
          Dim W1 As String * 10
          Dim Q As Single , T(12) As Byte , Th As Word , Tl As Single
          Dim H As Single , M As Single
          [color=red]Dim J As Single[/color]
          کد:
          If J => K Then Set Portd.6
          If J <= G Then Reset Portd.6
          کد:
          1wreset Pinb , 0
          
          If Err = 1 Then
          
            Locate 1 , 1
            Lcd "NO SENSOR 1 "
          
          Else
          
            1wwrite &HCC , 1 , Pinb , 0
            1wwrite &H44 , 1 , Pinb , 0
            Waitms 100
            1wreset Pinb , 0
            1wwrite &HCC , 1 , Pinb , 0
            1wwrite &HBE , 1 , Pinb , 0
            Ar(1) = 1wread(1 , Pinb , 0)
            Ar(2) = 1wread(1 , Pinb , 0)
            J = Ar(1) / 16
            T(2) = Ar(2) * 16
            J = J + T(2)
            Locate 1 , 1
            Lcd "T1:" ; J ; Chr(223) ; "C   "
          
          End If
          Waitms 100
          این قسمت برنامه بخاطر متغییر ها خطا میده

          کد:
          If J => K Then Set Portd.6
          If J <= G Then Reset Portd.6
          یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

          دیدگاه


            #6
            پاسخ : مشکل با برنامه دماسنج DS18B20

            مقایسه متغییر single فقط با متغییر single امکان داره بنابراین اول شما متغییر k رو توی یک متغییر از نوع single قرار بدین و بعد اونو با j مقایسه کنید

            دیدگاه


              #7
              پاسخ : مشکل با برنامه دماسنج DS18B20

              نوشته اصلی توسط mahdi421
              مقایسه متغییر single فقط با متغییر single امکان داره بنابراین اول شما متغییر k رو توی یک متغییر از نوع single قرار بدین و بعد اونو با j مقایسه کنید
              واقعا ممنونم .اقایی کردی. :applause: مشکل برطرف شد .
              یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

              دیدگاه


                #8
                پاسخ : مشکل با برنامه دماسنج DS18B20

                دوست عزیز اقای دکتر شما با این سنسور که کار کردین دقتش 0.1 بوده ؟ با چه رزولیشنی 0.1 بوده ؟ رزولیشن 11 بیتی ؟
                آیا با تغییر رزولیشن دقتش تغییر می کنه ؟ تو رزولیشن 12 بیت دقتش چه قدره ؟
                ممنون
                خداوند بی نهایت است اما به قدر نیاز تو فرود می آید ، به قدر آرزوی تو گسترده می شود و به قدر ایمان تو کارگشاست.
                [hr]

                دیدگاه


                  #9
                  پاسخ : مشکل با برنامه دماسنج DS18B20

                  دوستان منم مداری شبیه مدار اقای دکتر بستم منتها کار نمیکنه فایل پروتل و پروتئوس هم برنامه رو میزارم خواهشن کمک کنید خیلی نیاز دارم یه عکس هم میزارم
                  http://www.uplooder.net/cgi-bin/dl.c...6754254bc3fde7

                  سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                  دیدگاه


                    #10
                    پاسخ : مشکل با برنامه دماسنج DS18B20

                    راستی vcc ها و gnd ها به غیر از رگلاتو ورله بهم هم وصل میشن وبعد به رگلاتور وصل میشن
                    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                    دیدگاه

                    لطفا صبر کنید...
                    X