اطلاعیه

Collapse
No announcement yet.

مشکل در دماسنج دیجیتال

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

    مشکل در دماسنج دیجیتال

    سلام اول از همه چیز منو به خلطر این که این همه سوال میپرسم ببخشید.

    من یه دماسنج ساختم با مگا 8 و ال ام 35 ولی دما رو نشون نمیده و یا عدد های الکی مینویسه مثل 511 درجه و تو این حدود و چه ال ام 35 رو مدار باشه چه نباشه همینه و فرقی نداره !


    این شماتیک و برنامه هست لطفا دوستان من رو راهنمایی کنن تا بتونم این مشکل رو حل کنم !




    در ضمن تو شماتیک به پایه های 7 و 8 مگا چیزی وصل نمیشد ولی من رو برد برد وصل کردم روشن نشد و از رو تجربه ای که از مقالات بدست اوردم VCC , GND رو خودم وصل کردم و روشن شد .

    در ضمن میخواستم بدونم کجای برنامه مشخص میکنه ال ام 35 از طریق پورت سی شماره 5 یا همون پایه 28 خودمون باید مقدارش رو به میکرو بده ؟
    من مثبت ال ام رو به + 5 مدار و منفی رو به زمین وصل کردم این درسته ؟

    من که گیج شدم




    کد:
    ' This file downlod from www.yazdkit.com
    $regfile = "m8def.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 Int0 = Falling
    Config Int1 = Falling
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Tempup
    On Int1 Tempdown
    '------------------------------------------
    Deflcdchar 0 , 32 , 32 , 2 , 2 , 2 , 28 , 32 , 8      ' È
    Deflcdchar 1 , 16 , 20 , 16 , 17 , 17 , 15 , 32 , 32    ' äÇ
    Deflcdchar 2 , 32 , 7 , 5 , 7 , 8 , 8 , 8 , 8       ' ã
    Deflcdchar 3 , 2 , 32 , 6 , 9 , 1 , 31 , 32 , 32      ' Î
    Deflcdchar 4 , 16 , 16 , 22 , 17 , 17 , 23 , 32 , 32    ' ÏÇ
    Deflcdchar 5 , 32 , 32 , 6 , 1 , 1 , 6 , 32 , 32      'Ï
    Deflcdchar 6 , 16 , 16 , 16 , 16 , 31 , 5 , 7 , 32     ' ãÇ
    Deflcdchar 7 , 32 , 32 , 32 , 21 , 21 , 31 , 32 , 32    'Ó
    Config Debounce = 35
    '------------------------------------------
    Config Pind.0 = Output
    Config Pind.1 = Output
    Config Pind.4 = Output
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.7 = Output
    Config Pind.2 = Input
    Config Pind.3 = Input
    '------------------------------------------
    Reset Portd.5
    Reset Portd.6
    Reset Portd.7
    Reset Portd.1
    Reset Portd.4
    Reset Portd.0
    Set Portd.3
    Set Portd.2
    Dim Temp As Byte
    Dim Aa As Word , B As Word , C As Word , D As Word
    Dim E As Byte , F As Word , G As Byte , H As Byte , I As Byte
    '------------------------------------------------------------------
    Aa = 0
    B = 0
    C = 0
    G = 0
    E = 0
    H = 0
    I = 0
    Cls
    Cursor Off
    Locate 1 , 10
    Lcd Chr(0)
    Locate 1 , 9
    Lcd Chr(1)
    Locate 1 , 8
    Lcd Chr(2)
    Locate 1 , 7
    Lcd Chr(3)
    Locate 1 , 6
    Lcd Chr(4)
    Lowerline
    Lcd "www.yazdkit.com"
    Wait 4
    Cls
    Locate 1 , 3
    Lcd "Thermometer"
    Locate 2 , 9
    Lcd Chr(5)
    Locate 2 , 8
    Lcd Chr(6)
    Locate 2 , 7
    Lcd Chr(7)
    Deflcdchar 0 , 32 , 1 , 8 , 21 , 5 , 31 , 16 , 29     ' äÌ
    Locate 2 , 6
    Lcd Chr(0)
    Wait 4
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Shiftlcd Left
    Waitms 300
    Cls
    Readeeprom Temp , 0
    If Temp = 255 Then Temp = 25
    Waitms 8
    
    Cls
    Cursor Off
    Aa = 0
    B = 0
    C = 0
    D = 0
    
    '-----------------------------------------------
    Main:
    
    If E > 3 Then E = 1
    Select Case E
    Case 1:
    Set Portd.5
    Aa = 0
    Aa = Getadc(5)
    Aa = Aa / 2
    Case 2:
    Set Portd.6
    B = 0
    B = Getadc(5)
    B = B / 2
    Case 3:
    Set Portd.7
    C = 0
    C = Getadc(5)
    C = C / 2
    If D > Temp Then
    Reset Portd.4
    Reset Portd.1
    Set Portd.0
    End If
    If D = Temp Then
    Reset Portd.1
    Set Portd.4
    Reset Portd.0
    End If
    If D < Temp Then
    Set Portd.1
    Reset Portd.4
    Reset Portd.0
    End If
    End Select
    Home
    D = Aa + B
    D = D + C
    D = D / 3
    Stop Adc
    Do
    Lcd "(" ; Aa ; "+" ; B ; "+" ; C ; ")/3=" ; D
    Lowerline
    Lcd "s=" ; F ; "  " ; "TEMP=" ; Temp ; " "
    Incr F
    Wait 1
    Loop Until F = 20
    F = 0
    If E = 3 Then
    Reset Portd.5
    Reset Portd.6
    Reset Portd.7
    Else
    End If
    Incr E
    Start Adc
    Waitms 1
    Cls
    Goto Main
    '================================================
    Tempup:
    Temp = Temp + 1
    Writeeeprom Temp , 0
    Waitms 8
    Cls
    Return
    '=================================================
    Tempdown:
    Decr Temp
    If Temp < 0 Then Temp = 0
    Writeeeprom Temp , 0
    Waitms 8
    Cls
    Return
    '================================================
    
    End

    #2
    پاسخ : مشکل در دماسنج دیجیتال

    سلام.

    چنیدن تغییر تو برنامه بده ببین درست میشه یا نه؟

    پیکر بندی رو به این صورت تغییر بده.

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    و پایه vs از lm35 رو به پایه avcc وصل کن. (پایه 20 رو دیگه به vcc وصل نکن.)
    پایه 3 از lm35 که همون gnd باشه رو به پایه 22 از ic مگا 8 وصل کن.(البته اگه به زمین مدارت هم وصل کنی مشکلی پیش نمی آد.)

    بین پایه 7و8 یه خازن 104 مولتی لایر بذار.(تجربه به من اینو ثابت کرده این خازنو بذاری پرش دمات کمتره)

    در ضمن پایه های 7و8 از ic پایه های تغزیه هستن. باید ic رو تغذیه کنی دیگه(7 رو به 5 ولت و 8 رو به زمین)

    اینم جواب سوالتون:

    شما وقتی دستور Aa = Getadc(5) به کار میبرید ic از پایه adc5 که همون پایه 28 باشه دیتا رو میخونه.

    اگه این کار هارو کردی مشکلت حل نشد خروجی lm35 رو به پایه 27 بذار و برنامه رو یکمی تغییر بده(Aa = Getadc(4))


    به نظر من اگه از این چند خط برنامه استفاده کنی بهتره.

    W = Getadc(0)
    Volt = W * 5
    Volt_d = Volt Mod 10
    Volt = Volt / 10

    W = Getadc(0)

    این دستور پایه adc 0 را خوانده وآن را به دیجیتال تبدیل کرده وسپس در w ریخته.

    Volt = W * 5
    این کد از کدهای ریاضی بیسیک میباشد که w را در 5 ضرب کرده و در volt میریزد.

    Volt_d = Volt Mod 10
    این دستور volt رو بر 10 تقسیم کرده و باقیمانده رو در volt_d میریزه.
    این طوری عدد دقیق تری داری.برای مثال دما = 29.4 درجه هم میشه نشون داد.


    Volt = Volt / 10
    اینهم متغییر volt را تقسیم بر 10 کرده و درون خودش میریزد.



    برای تعیین مقدار های مختلف از دستورای زیر استفاده کنی بهتره :

    Select Case Volt
    Case Is < 10 : Gosub Cold
    Case 10 To 30 : Gosub Normal
    Case Is > 30 : Gosub Hot
    End Select

    برای مثال در برچسب cold خروجی مورد نظرتو 0 یا 1 کنی.

    این طوری برنامه یکمی سرو سامون میگیره.
    www.icesi.ir

    دیدگاه


      #3
      پاسخ : مشکل در دماسنج دیجیتال

      سلام میلاد جان

      مرسی که کمکم کردی . فکر نمیکردم کسی جواب بده !

      امروز تقیرات رو اعمال میکنم به اطلاع دوستان و شما میرسونم .

      دیدگاه


        #4
        پاسخ : مشکل در دماسنج دیجیتال

        خواهش میکنم . این حرفا چیه
        اگه این کارا رو کردید و دیدید جواب نگرفتید حتما دوباره بپرسید.

        نا امید نشید :applause:
        www.icesi.ir

        دیدگاه


          #5
          پاسخ : مشکل در دماسنج دیجیتال

          سلام

          میلاد جان خیلی ممنون . همون کاری رو که گفته بودی انجام دادم و مدار راه افتاد (خیلی کارت درسته )

          البته هنوز یه مشکل دارم . خیلی دیر اپدیت میکنه دما رو ! مثلا من دستم رو میزارم رو سسنسور بعد از 40 ثانیه دما میره رو 37 و وقتی دستم رو بر میدارم حدود 45 ثانیه تا چند دقیقه طول میکشه تا دما دوباره برگرده رو 23 درجه اتاق !


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

          کد:
          W = Getadc(0)
           Volt = W * 5
           Volt_d = Volt Mod 10
           Volt = Volt / 10
          احتمال داره این کد ها بهتر کنن سرعت اپدیت رو ؟ در ضمن تو 5 دقیقه اول با دماسنج واقعی 1 تا 2 درجه اختلاف دما داره که اگه دستگاه 5 دقیقه روشن باشه خودش دما رو درست نشون میده !


          میشه کاری کرد تا سریع تر و دقیق تر دما رو محاسبه کنه ؟یکی از بچه ها فقط گفت کالیبره نیست در این مورد چی ؟



          دیدگاه


            #6
            پاسخ : مشکل در دماسنج دیجیتال

            سلام.
            نوروز رو بهت شاد باش میگم.

            عزیز جان من برنامه رو نخوندم .

            ولی این مشکلت حل میشه. چند را بهت میگم انجام بده ببینیم چی میشه.

            1- سرعت خواندن ADC رو ببر بالا.(منظورم اینه که تو برنامه هر 50 میلی ثانیه یا کمتر یه بار دما رو چک کن).

            2- اگه داری با سرعت بالا ADC رو میخونی (اگه میخوای از مورد 1 استفاده کنی.) بهتره که چندی بار دما رو چک کنی و مقدار ها رو با هم جمع کنی. و در آخر معدل بگیری.(این طوری پرش کمتر روی دمات داری)

            3- در ضمن شما میتونی دما سنجت رو کالیبره کنی.باید یه دما سنج خیلی دقیق داشته باشی و دما رو با اون بسنجی و ببینی چقدر فرق داره.
            www.icesi.ir

            دیدگاه


              #7
              پاسخ : مشکل در دماسنج دیجیتال

              سلام
              من هم دارم روی دماسنج دیجیتال با lm 35 وبه پورت پارالل کامپیوتر وصل میشه کار میکنه شما میتونید من رو راهنمایی کنید.
              ممنون میشم.
              har_sa2000@yahoo.com

              دیدگاه


                #8
                پاسخ : مشکل در دماسنج دیجیتال

                یه مشکل الان دارم اینه که : دماهای مخاتلف رو هر لحظه پشت سرهم نشون میده
                [img width=65 height=100]http://s1.picofile.com/file/7243484622/untitled.bmp[/img]

                دیدگاه

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